¿Cómo funciona Texture Cache en la GPU de renderizado basado en mosaico?

9

¿Cómo funciona la memoria caché con el renderizado basado en mosaicos?

¿Hay algún consejo sobre cómo mejorar la proporción de aciertos de caché? (por ejemplo, si los mosaicos se procesan horizontalmente y tengo segmentos verticales de triángulos con la misma textura, ¿funciona peor para el caché que si tuviera un diseño de triángulos horizontalmente?)

Felipe Lira
fuente
1
¿Qué quieres decir con diseño vertical versus horizontal de triángulos?
Mokosha
@Mokosha lo siento, esto de alguna manera me pasó desapercibido. Lo acabo de ver ahora. Esta es una pregunta más teórica que práctica y ni siquiera sé si esto tiene sentido ahora. De todos modos, lo que quise decir fue, digamos, un triángulo que intersecta las fichas (x, y) y (x + 1, y) y que estas dos fichas se procesan una tras otra. ¿Sería mejor para el caché de texturas que si tuviera un triángulo que se cruza (x, y) y (x, y + 1)? (Debido a que los píxeles del borde y el diseño de los triángulos no están en la misma dirección que el procesamiento de los mosaicos)
Felipe Lira

Respuestas:

19

Si se trata de una GPU basada en mosaico o no, no afecta realmente la arquitectura de caché de textura. El diseño de memoria de la textura se verá como el sabor del orden de Morton o la curva de Hilbert en todas las GPU.

Como resultado, es más eficiente renderizar triángulos que están cerca de triángulos equiláteros porque el sistema de memoria de la GPU obtiene líneas de caché de texels.

Entonces, obviamente, en los bordes de mosaico, puede suceder que tenga que buscar texels dos veces. Esto tiene un pequeño costo ya que los bordes de los mosaicos son solo "pocos" píxeles.

Podría decirse que las GPU de escritorio se comportan de manera idéntica a las GPU basadas en mosaicos, como lo demuestran los siguientes experimentos: http://www.g-truc.net/post-0597.html

El tamaño de los mosaicos difiere, pero ambas arquitecturas procesan fragmentos en una jerarquía de mosaicos de diferentes tamaños.

Al codificar GPU basadas en mosaicos, mi recomendación es tener siempre en cuenta:

  1. No cambie los objetos framebuffer a menos que realmente lo necesite.
  2. Al vincular un nuevo objeto framebuffer, si no necesita guardar el contenido del framebuffer actual, deséchelo. Si no desea cargar el contenido del nuevo framebuffer, entonces debe borrar el framebuffer.
Christophe
fuente
Actualicé el segundo elemento ya que la edición no era lo que quería decir. De lo contrario, ¡se ve genial!
Christophe
Hola Christophe, ¿te referías a triángulos "equiláteros" en lugar de "isósceles"? En lugar de "Hilbert", habría dicho "Morton", ya que el direccionamiento es mucho más fácil en el hardware.
Simon F
@ Christophe gracias! Esto es realmente útil. Entonces, para los píxeles del borde, ¿no importa el caché de textura? Eso fue algo de lo que me preguntaba. Entonces, si tengo un triángulo que interseca los mosaicos (x, y) y (x + 1, y) y la GPU solo mosaico rasterizado (x, y). Suponiendo que el mosaico (x + 1, y) sea el siguiente, incluso si lo procesan unidades de ejecución diferentes, ¿no me beneficiaré del caché de texturas al muestrear texels para este triángulo?
Felipe Lira
Además, me dio curiosidad el patrón de Hilbert. Siempre supuse que esto era cierto para las texturas comprimidas en bloque. ¿Es esto cierto para todas las texturas? PD: tampoco seguí el último párrafo.
Felipe Lira
PVRTC codifica bloques de textura en un orden Morton
ashleysmithgpu