Nos sombreadores de vértice OpenGL, a única entrada integrada considerada dinamicamente uniforme é gl_DrawID
. Posso adivinhar que a decisão de não uniformizar gl_InstanceID
dinamicamente foi tomada para permitir que as implementações agrupem vértices de instâncias diferentes em um único warp de sombreador de vértice (/wavefront/qualquer). No entanto, é bem sabido que desenhos instanciados com um pequeno número de vértices por instância são ruins para o desempenho, já que nenhum grande fornecedor de GPU para desktop agrupa múltiplas instâncias em um único warp (o que resulta em baixa ocupação de warp com muitas instâncias com poucos vértices cada ). Isto parece implicar que, na prática, gl_InstanceID
poderia muito bem ser dinamicamente uniforme. Qual foi a razão para não fazer gl_InstanceID
(e também gl_BaseInstance
egl_BaseVertex
) uma expressão dinamicamente uniforme? Existe alguma GPU que possa realmente agrupar várias instâncias por frente de onda ou existia no momento em que a especificação estava sendo escrita?
Início
/
user-4395213