En général, la ramification dans les shaders n'est pas une bonne idée. Mais maintenant, j'ai un shader avec une condition constante par rapport à l'appel de tirage complet. La branche exécutée est donc toujours la même pour un appel de tirage.
Ce type de branchement est-il encore plus coûteux que d'avoir plusieurs shaders sans ces branches et de basculer entre elles?
performance
shader
nikitablack
la source
la source
Réponses:
Sur le matériel moderne, si toutes les invocations d'un groupe suivent le même chemin, le chemin inutilisé n'est pas évalué.
en pseudo code:
devient
Où
anyInvocationARB
sera vrai si une invocation du shader aura la valeur true ascond
(à partir de l'extension opengl ARB_shader_group_vote ).Si cond peut être dérivé des uniformes seuls, le pilote peut optimiser et évaluer la condition avant de démarrer le rendu et remplacer le if par un goto dans la bonne branche. OpenGL a une fonctionnalité appelée sous-programmes uniformes qui la rend explicite.
la source