2

我有一个片段着色器,它正在执行一个 for 循环,其中传递的次数作为一个统一的 int 变量传入。

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

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

我正在尝试乒乓球,但我只是想知道之前可能遇到过这件事的人的看法。

4

1 回答 1

0

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

也就是说,如果你的循环很大,总的计算时间变化很大,或者你没有足够的片段着色器运行来保持 GPU 忙碌,这可能会损害性能。

GPU 很复杂,很容易做出错误的假设。正如您已经在做的那样,测试两者可能是最好的。当您改变通道和片段的数量时,看到差异会很有趣。

于 2013-08-16T13:06:58.970 回答