就性能而言,创建两个着色器,一个用于分支的每一侧,还是将一个分支放入像素着色器代码中是否更好?例如,如果我有一个高斯模糊着色器,它决定执行水平还是垂直传递,对我来说,将它分成两个单独的着色器,绑定一个然后另一个,或将分支保留在着色器中会更好代码本身,这意味着我不必为第二遍切换着色器?着色器开关v有条件的内部着色器
void main(void)
{
...
if (uniform_Orientation == 0)
{
// Horizontal blur
}
else
{
// Vertical blur
}
}
我的直觉告诉我,我应该出来把它分成两个独立的着色器,但后来我不知道什么对性能的影响是切换着色器。
任何人有任何想法呢?基于例如均匀的变量使用如果与条件时:
IMO,你应该使用2个独立的文件,但你应该首先在目标硬件上进行配置文件。应该注意的是,分支惩罚会减少更多像素(在相同的warp组/线程集群中)采用相同的分支。 – Necrolis
因此,考虑到所有经线中的所有像素都将采用相同的路径,惩罚将为零,或者更少? – Robinson