¿Las llamadas de extracción se ejecutan en paralelo o secuencialmente o en ambas?

8

Este es un seguimiento de una pregunta que respondí en GameDev SE. La pregunta era simplemente ¿GlDrawArraysInstanced en OpenGL es paralelo al dibujar esas instancias?

Mi respuesta estaba en las líneas de "la GPU podría ejecutar múltiples llamadas de extracción en paralelo dependiendo de varias cosas, por ejemplo, si dos llamadas de extracción usan los mismos sombreadores de vértices". Aquí está la respuesta completa .

En los comentarios que mencionó el OP, "Creo que debería ser secuencial. Después de todo, algunos modos de fusión dependen de la secuencia".

Ahora estoy un poco confundido. ¿Mi respuesta será paralela cuando pueda ser válida? ¿Alguien puede aclarar esto?

concepto3d
fuente

Respuestas:

9

El resultado debería ser como si se ejecutara secuencialmente un triángulo a la vez. Esto es importante para que cada cuadro sea determinista. Si no fuera así, dibujar el mismo marco varias veces podría crear resultados diferentes y crear una imagen parpadeante en la pantalla.

Sin embargo, eso no significa que la paralelización sea imposible . Los vértices se pueden calcular en paralelo. Sus resultados serán ordenados y alimentados al rasterizador que alimentará la etapa de sombreado de fragmentos.

Lo mismo sucede con los píxeles. Por lo general, un grupo de píxeles de un triángulo puede calcularse en paralelo y combinarse. Un triángulo no superpuesto también puede llenarse al mismo tiempo, sin embargo, si el triángulo se superpone a uno actualmente ocupado, el resultado del sombreador de fragmentos debe almacenarse hasta que se completen los píxeles correspondientes del triángulo anterior, de modo que la fusión pueda ocurrir en el orden correcto.

monstruo de trinquete
fuente
Es completamente posible ejecutar el sombreador de píxeles para triángulos superpuestos al mismo tiempo. Lo único que importa es que la mezcla se produce secuencialmente. Los sombreadores de píxeles pueden iniciar mucho trabajo en la unidad de mezcla en cualquier orden, lo que puede reordenar todas esas operaciones de mezcla dependiendo del triángulo del que proviene.
John Calsbeek
He visto situaciones donde el parpadeo ocurre debido a múltiples triángulos que se encuentran en el mismo plano, pero no recuerdo si eso sucedió mientras la cámara / mundo / etc. las transformaciones eran estáticas o si requerían movimiento y recálculo. Sin embargo, ese es un caso extremo.
JAB
@JAB Parece que te refieres a z-fighting . Esto generalmente ocurre debido al hecho de que incluso si dos primitivas son analíticamente coplanares, la cuantización en el interpolador produce un patrón donde son visibles algunos píxeles de ambas primitivas. El patrón cambiará, causando parpadeo, solo si se mueven los vértices (o la cámara), de lo contrario, el patrón de interferencia debe ser consistente entre los cuadros.
MooseBoys
@ MooBoys Eso es exactamente, sí. Han pasado algunos años desde que hice mucho con gráficos en 3D.
JAB
Además de ejecutar múltiples vértices y píxeles en paralelo, también es posible que varias llamadas de extracción estén en vuelo al mismo tiempo, si hay suficientes recursos de GPU disponibles y no hay dependencia entre las llamadas de extracción.
Nathan Reed