¿Por qué es importante tener objetivos de renderizado con el mismo tamaño de bit?

10

Actualmente estoy pensando qué tipo de GBuffer necesitaré para el sombreado diferido, por lo tanto, traté de documentarme en línea sobre los más comunes y su formato.

La mayoría de los GBuffer que he visto usaban el mismo tamaño de bit para cada objetivo de renderizado, lo que a menudo también conducía a canales no utilizados. Sin embargo, como primera suposición para mi GBuffer, en papel, necesito dos objetivos de 24 bits y dos de 32 unos o tres de 24 y uno de 32.

Entiendo que tener el mismo "tamaño" de cada archivo adjunto se puede alinear mejor, pero en términos prácticos, ¿es mejor desperdiciar canales (o reservarlos para uso futuro) y tener todos los RT del mismo tamaño o debería usar exactamente lo que necesito? En el primer caso, ¿por qué es tal ventaja, los de 24 bits se rellenarán a 32 de todos modos?

cifz
fuente

Respuestas:

9

Entiendo que tener el mismo "tamaño" de cada archivo adjunto se puede alinear mejor, pero en términos prácticos, ¿es mejor desperdiciar canales (o reservarlos para uso futuro) y tener todos los RT del mismo tamaño o debería usar exactamente lo que necesito?

Tener mejores objetivos de renderizado alineados de 32 bits es mejor, incluso si eso significa "desperdiciar" algo de memoria. Esto será mucho más rápido que tener una memoria no alineada de 32 bits. Además, no tendrá la molestia de admitir múltiples tipos de buffers, copiar y combinar buffers será más fácil ya que no tendrá que convertir entre múltiples tipos.

32 bits es el nativo para GPU y CPU, por lo tanto, reducirá la cantidad de ciclos necesarios para leer la memoria. Las GPU naturalmente intentarán leer 32 bits, si está tratando de leer una dirección de memoria no alineada, como 24 bits alineados, las GPU leerán 32 bits y luego cambiarán los bytes no deseados.

Aquí hay un artículo detallado de por qué es importante la alineación de la memoria (aunque habla de CPU y no de GPU, el concepto de alto nivel todavía se aplica).

¿Los de 24 bits se rellenarán a 32 de todos modos?

Algunas GPU lo rellenarán, pero no se puede garantizar, por lo que se encuentra en el área de implementación del controlador / GPU. Entonces tienes que hacer un perfil y verificar los resultados.

PD: 32 bits o 64 bits dependiendo de la arquitectura.

concepto3d
fuente
55
y si son todos del mismo tamaño poco se puede blit sobre ellos sin necesidad de convertir
monstruo de trinquete