O OpenGL permite compartilhar o mesmo sombreador entre vários programas. Além de economizar pequenas quantidades de memória e um identificador de sombreador, existem benefícios de desempenho no lado da GPU para fazer isso?
O OpenGL permite compartilhar o mesmo sombreador entre vários programas. Além de economizar pequenas quantidades de memória e um identificador de sombreador, existem benefícios de desempenho no lado da GPU para fazer isso?
Duvido que haja um benefício no desempenho da GPU.
Quando você vincula um sombreador genérico a um programa, por exemplo, uma implementação eficiente deve poder remover atributos não utilizados entre esse sombreador e os outros sombreadores desse programa e, possivelmente, até simplificar a lógica do sombreador. Obviamente, isso não é um benefício real em relação a uma combinação de shader ajustado manualmente, mas ajuda a gerenciar a complexidade / combinatória e, possivelmente, reduz o número de compilações que o driver precisa fazer.
No entanto, pode haver desvantagens em fazer isso em termos de atingir implementações ineficientes de driver-compilador. E existem alguns por aí, verifique: http://aras-p.info/blog/2010/09/29/glsl-optimizer/ para ver algumas coisas simples que algumas implementações podem dar errado.