OpenGL vous permet de partager le même shader entre plusieurs programmes. En plus d'économiser de petites quantités de mémoire et une poignée de shader, y a-t-il des avantages en termes de performances côté GPU?
OpenGL vous permet de partager le même shader entre plusieurs programmes. En plus d'économiser de petites quantités de mémoire et une poignée de shader, y a-t-il des avantages en termes de performances côté GPU?
Réponses:
Je doute qu'il y ait un avantage en termes de performances côté GPU.
Lorsque vous liez un shader générique à un programme par exemple, une implémentation efficace devrait pouvoir supprimer les attributs inutilisés entre ce shader et les autres shaders de ce programme et éventuellement même simplifier la logique du shader. Bien sûr, cela ne présente aucun avantage réel par rapport à une combinaison de shaders ajustée à la main, mais cela aide à gérer la complexité / combinatoire et, éventuellement, à réduire le nombre de compilations que le pilote doit effectuer.
Cependant, cela peut présenter des inconvénients en ce qui concerne les implémentations de pilotes-compilateurs inefficaces. Et il y en a là-bas, consultez: http://aras-p.info/blog/2010/09/29/glsl-optimizer/ pour quelques choses simples que certaines implémentations peuvent se tromper.