作者:手机用户2502873825 | 来源:互联网 | 2023-05-17 17:58
在现代(GL3.3 +)GPU上使用GLSL时,在制服上分支的可能成本是多少?
在我的引擎中,我已经到了我有很多着色器的地步.我有很多不同的质量预设.就目前而言,我在着色器中使用带if()的制服来选择不同质量的预设.然而,我担心通过重新编译着色器并使用#ifdef可以获得更好的性能.问题是当我重新编译着色器时需要担心跟踪和重置其他制服.
基本上我想知道的是我的恐惧是否毫无根据.在现代GPU上以均匀便宜的方式分支?我自己做了一些测试,发现两种方式差别不大,但我只测试了nVidia 680.
1> Dolda2000..:
我承认我不是专家,但也许我的猜测总比没有好.
我认为制服上的分支确实相当便宜.它与纹理或属性数据上的分支明显不同,因为SIMD中的所有ALU将遵循着色器的相同代码路径,因此它是"真正的"分支而不是执行掩码.我不太确定着色器处理器如何在其管道中受到分支气泡的影响,但是管道肯定比通用CPU更浅(特别是考虑到它们通常运行的时钟速度要低得多).
我希望我能提供更多帮助,如果其他人可以更权威地回答,我也很感激.但是,我不会过分担心制服上的分支问题.但与往常一样,如果您有可能,请对着色器进行分析,看看它是否有明显区别.