Estructuras de datos para renderizado basado en mosaico (diferido)


18

La representación en mosaico se utiliza en las arquitecturas modernas de GPU móviles para aumentar la coherencia del acceso a la memoria subdividiendo el espacio de la imagen en una cuadrícula regular de mosaicos pequeños (por ejemplo, 32x32 píxeles). La información sobre los tipos de estructuras de datos utilizadas para rastrear las primitivas que están asociadas con cada mosaico es escasa, considerando que arbitrariamente muchas primitivas pueden superponerse a cualquier mosaico dado.

Desde la perspectiva de un desarrollador de controladores, ¿qué estructuras de datos se usan comúnmente para representar los conjuntos primitivos que pertenecen a un mosaico, y son tales estructuras asignadas / redimensionadas dinámicamente de acuerdo con la geometría que se superpone a un mosaico en particular?


3
Pregunta realmente interesante, y aunque sospecho que la mayoría de los detalles esenciales son una salsa secreta, este podría ser un buen punto de partida para cualquiera que quiera investigar y escribir un resumen: blog.imgtec.com/powervr/…
John Calsbeek

Respuestas:


11

Esa publicación de blog que menciona John es un buen comienzo (¡si lo digo yo mismo!), Pero hay algunos detalles adicionales que podrían ser útiles.

Para la arquitectura de PowerVR, la estructura de datos intermedios, denominada de manera diversa lista primitiva o búfer de parámetros (PB), que almacena los datos por mosaico, después de que se completa todo el sombreado de vértices y el proceso de mosaico, en realidad se genera y administra principalmente El hardware, en lugar del controlador.

Las estructuras en memoria del PB se dividen físicamente en dos. Primero, bloques de datos de vértices transformados, incluidos los atributos de vértices. Los bloques están comprimidos y, como puede imaginar, en su mayor parte son solo datos comprimidos y comprimidos de coma flotante. La segunda estructura en memoria son los datos de mosaico, que es efectivamente una lista de listas.

La lista de nivel superior en esa estructura de datos se denomina región, y puede codificar un conjunto de mosaicos en lugar de un mosaico individual a la vez, para un bloque primitivo dado. Por lo tanto, una región es un conjunto de ubicaciones de mosaicos de pantalla, estados de mosaico y luego una lista de los bloques comprimidos que contienen geometría en esa región. En las regiones funciona el rasterizador, y puede imaginar que los mosaicos vacíos se omiten automáticamente, aunque hay una buena razón en algunos casos para que el rasterizador visite regiones vacías.

La memoria que usa la GPU para el PB se asigna dinámicamente en todas las implementaciones modernas de PowerVR. El controlador proporciona un puntero a esa memoria, y el controlador, con la ayuda de la GPU, lo dimensionará según sea necesario. Ese mecanismo es una compensación entre tener que reasignar con frecuencia y minimizar la cantidad de espacio PB asignado.

Las GPU modernas intentan realmente minimizar la indirección de la memoria, pero caminar por el PB para alimentar la etapa de rasterización es uno de esos casos en los que es realmente difícil y no hay otra opción. Afortunadamente, el puntero que persigue envuelve grandes bloques que se almacenan bien y se transmiten al núcleo.

Otras arquitecturas no funcionan exactamente igual que PowerVR, porque parte de la razón por la cual el PB es como es en nuestra arquitectura es para ayudar al concepto de sombreado de píxeles totalmente diferido que implementamos, pero el concepto general se aplica a todos los demás mosaicos en el espacio móvil que conozco.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.