Je m'enseigne donc GLSL et j'essaie de comprendre pourquoi il est censé être plus rapide que le pipeline de fonctions fixes.
La raison pour laquelle j'ai un problème est que, d'après ma compréhension, les shaders que vous créez remplacent des sections du pipeline qui étaient là auparavant. Alors, comment fournir simplement votre propre version pour accélérer les choses?
La seule chose que je peux penser, c'est que si vous essayez de fournir votre propre équation d'éclairage auparavant, vous devrez faire le calcul sur le CPU, mais maintenant vous pouvez faire les calculs sur le GPU, ce qui sera plus rapide.
Suis-je bien comprendre?
Réponses:
Les shaders que vous créez ne seront pas votre propre version du pipeline à fonction fixe (FFP), mais une opération de manipulation de vertex et de pixel personnalisée pour réaliser quelque chose de cool et de complexe.
Beaucoup de choses que vous faites via un pipeline programmable (PP) fonctionneront plus rapidement que leurs implémentations FFP possibles, car PP réduit le nombre de passes ou la quantité de magie de combinateur et de cubemap nécessaires pour rendre ces choses hypothétiques dans FFP.
Imaginez mettre en œuvre une chose aussi courante que l'éclairage par pixel dans FFP avec uniquement des données de sommet interpolées et un échantillon de texture entre vos mains. Il n'est même pas possible de le faire "honnêtement", seulement des hacks pour des cas spéciaux en fonction de cubemaps précalculés fidèles et de certains mélanges sérieux. Avec PP, il s'agit de coloriser un produit scalaire entre la direction de la lumière et la normale au sommet.
Dans l'ensemble, le PP devient lent et impossible en rapide et possible. Mais si vous décidez d'écrire un shader pour implémenter les mêmes algorithmes utilisés dans FFP, vous découvrirez que FFP sera légèrement plus rapide car il est très optimisé pour le matériel.
la source
En termes théoriques, le pipeline programmable est plus lent que le pipeline de fonctions fixes. Aucun processeur à usage général ne peut rivaliser avec un processeur à boîtier spécial. Le pipeline de fonctions fixes d'origine n'était guère plus qu'un tas de portes logiques dans une ligne aussi rapide que théoriquement possible.
Cependant, de nos jours, le pipeline programmable est la norme. Le matériel est donc plutôt orienté vers le pipeline programmable. Ayant perdu l'efficacité initiale d'avoir un circuit spécialement créé pour un certain flux de données, il doit s'adapter au cas le plus courant, qui est l'approche basée sur les shaders. Cependant, pour les options de compatibilité descendante, le pipeline de fonctions fixes est toujours disponible - mais le coût est que les anciennes fonctions fixes doivent être transposées dans des shaders, ce qui pourrait bien entraîner un coût. Cela expliquerait la différence de performances.
la source
La principale raison pour laquelle je pourrais penser est une phase de pipeline fixe, que votre programme n'en a pas besoin. par exemple, imaginez un jeu où toutes les lumières sont statiques, vous pouvez facilement implémenter un shader qui n'essaie même pas de calculer la lumière dynamique. dans ce cas, votre shader s'exécute plus rapidement qu'un shader précompilé qui vérifie la lumière dynamique de certaines équations (un shader à usage général). il existe également d'autres exemples, vous pouvez facilement penser à de nombreux aspects qui devraient être pris en compte pour un pipeline fixe, mais vous pouvez ignorer l'implémentation dans vos propres codes GLSL.
la source
Voilà, vos shaders remplacent des parties du pipeline. Mais souvent, vos shaders sont spécialisés vers un effet spécifique que vous souhaitez obtenir et ne gèrent pas toutes les fonctionnalités spéciales possibles qui pourraient être activées, donc plus simples qu'un shader qui émule le pipeline de fonctions fixes complet. Alors que le chemin d'accès aux fonctions fixes doit prendre en compte de nombreuses choses et fonctionnalités OpenGL que vous pourriez ne pas vouloir utiliser (ou dont vous n'avez même pas entendu parler).
Et les jours où vous avez effectué la fonction fixe dans du matériel spécial (contrairement à un matériel entièrement programmable) sont révolus, ce qui se produit probablement lorsque vous utilisez le pipeline à fonction fixe est que votre pilote charge simplement ses propres shaders spéciaux qui implémentent le chemins à fonction fixe. Mais ceux-ci peuvent être très complexes, pour fournir toutes les fonctionnalités offertes par le pipeline à fonction fixe.
la source