在性能方面,创建两个着色器(一个分支的每一个,或者在像素着色器代码中放置一个分支)是否更好?例如,如果我有一个高斯模糊着色器,它决定执行水平或垂直传递,我会更好地将它分成两个单独的着色器,绑定一个然后另一个,或保持分支在着色器内代码本身,意味着我不必为第二次传递切换着色器?
void main(void)
{
...
if (uniform_Orientation == 0)
{
// Horizontal blur
}
else
{
// Vertical blur
}
}
我的直觉告诉我应该将它拆分成两个单独的着色器,但后来我不确定切换着色器的性能影响。
有人对此有任何想法吗?
答案 0 :(得分:2)
着色器中有两种类型的分支:
您的问题属于静态分支。静态分支当然比动态更好,更快。
问题的答案: 如果静态分支比着色器的实际切换更快,则不是那么明显。这当然取决于。但在您的示例中,您可能看不到任何性能差异。
查看有关具有大量静态分支的'超级着色器'的更多信息,以便将着色器切换到最小。 http://wiki.gametheorylabs.com/groups/judgementengine/wiki/4c55c/Uber_Shader.html