1

我有一个程序,它首先渲染到纹理,然后将纹理传递给计算着色器进行处理,然后通过带纹理的全屏四边形将输出结果渲染到屏幕上。

我在 nVidia 的计算着色器编程指南中读到,每次调度计算着色器时,它都会启动 GPU 设备上下文切换,这不应该经常进行。

我现在很困惑。在我看来,在我的渲染管道中,GPU 两次切换上下文。对?在第一次调度呼叫期间,下一次我正常渲染全屏四边形时。

如果这是正确的,那么我可以通过像这样重新组织我的代码来避免一次切换。首先,渲染到纹理。其次,在计算着色器上进行处理。然后,在下一帧中,渲染结果,然后(仍然在下一帧)渲染纹理的所有更新,在计算着色器上进行处理......所以基本上每一帧的开始我都会渲染最后一帧的结果(第一帧将是一个例外)。那么只会有一个上下文切换,对吧?

但是GPU仍然需要在帧之间进行上下文切换,对吗?所以我的渲染管道的两个版本都有两个上下文切换。性能上不会有任何差异。我对么?

任何帮助,将不胜感激。

4

1 回答 1

1

上下文切换会带来很小的影响,但在您的情况下它可以忽略不计,因此您可以在同一帧中安全地在计算和渲染管道之间切换多次,而不必担心它。

在许多现代游戏中,同一管道中有超过 2 个开关(用于渲染的图形管道、用于光照的计算着色器、用于 fxaa 的像素着色器......)并且它们仍然运行良好。

于 2012-11-03T19:46:05.733 回答