GLSL:哪个更优化?使用CPU上的循环或片段着色器中的循环进行Ping-ponging?

时间:2011-05-02 16:52:31

标签: loops glsl fragment-shader

我有一个片段着色器,它使用作为一个统一的int变量传入的传递次数进行for循环。

uniform int numPasses;
void main(void) {
   for (int i=0; i<numPasses; i=i+1) {
      //do something
   }
}

我看到随着循环次数的增加,性能急剧下降。那么这是在片段着色器中执行循环计算的正确方法,还是应该只使用两个帧缓冲附件之间的乒乓来执行CPU上的循环?

我正在尝试乒乓球,但我只是想知道可能早些时候遇到这种情况的人的观点。

1 个答案:

答案 0 :(得分:0)

鉴于您不需要来自相邻线程的数据,看起来更快不打扰多个渲染过程并避免绘制调用,同步和光栅化。

也就是说,如果你的循环很大,总计算量会有很大的变化,或者你没有足够的片段着色器来保持GPU的繁忙,这可能会影响性能。

GPU非常复杂,很容易出错。正如你已经做的那样,测试两者可能是最好的。当你改变传球和碎片的数量时,看到差异会很有趣。