我有一个程序,它首先渲染纹理,然后将纹理传递给计算着色器进行处理,然后通过带纹理的全屏四边形将输出结果渲染到屏幕上。
我在nVidia的计算着色器编程指南中读到,每次调度计算着色器时,它都会启动GPU设备上下文切换,这不应该经常进行。
我现在很困惑。在我看来,在我的渲染管道中,GPU会切换两次上下文。对吗?一次是在第一次调度调用期间,下一次是在我正常渲染全屏四元组时。
如果这是正确的,那么我可以通过像这样重新组织我的代码来避免一次切换。首先,渲染到纹理。其次,在计算着色器上执行处理。然后,在下一帧中,渲染结果,然后(仍在下一帧中)渲染所有纹理更新,在计算着色器上进行处理…所以基本上每一帧的开始我都会渲染最后一帧的结果(第一帧将是一个例外)。那么只会有一次上下文切换,对吧?
但是GPU仍然需要在帧之间进行上下文切换,对吧?所以我的渲染管道的两个版本都有两个上下文切换。在性能上不会有区别。我说的对吗?
任何帮助都将不胜感激。
发布于 2012-11-04 03:46:06
上下文切换引入了一个小的命中,但在您的情况下,它是相当可以忽略的,所以您可以在同一帧中在计算和渲染管道之间安全地切换几次,而不必担心它。
在许多现代游戏中,同一管道中有两个以上的开关(渲染的图形管道,灯光的计算着色器,fxaa的像素着色器...)它们仍然运行得很好。
https://stackoverflow.com/questions/12759365
复制相似问题