我有一个程序首先渲染纹理,然后将纹理传递给计算着色器进行处理,然后通过纹理全屏四边形将输出结果渲染到屏幕上。GPU上下文切换
我读过nVidia的计算着色器编程指南,每次调度计算着色器时,它都会启动一个GPU设备上下文切换,这种切换不应该经常进行。
我现在很困惑。我看到它的方式,在我的渲染管线中,GPU切换两次上下文。对?在第一次发送呼叫期间,下一次正常显示我的全屏四倍频时。
如果这是正确的,那么我可以通过重组我的代码来避免一个开关。首先,渲染一个纹理。其次,在计算着色器上进行处理。然后,在下一帧,渲染结果,然后(仍然在下一帧)渲染纹理的所有更新,在计算着色器上进行处理...因此,基本上每一帧的起始都会渲染最后一帧的结果(第一帧将是一个例外)。那么只会有一个上下文切换,对吧?
但是,GPU仍然需要在帧之间进行上下文切换,对吧?所以我的渲染管道的两个版本都有两个上下文切换。性能没有差别。我对么?
任何帮助,将不胜感激。
谢谢。这清除了我对表现的担忧。然而,我的代码的两个版本呢,它们是一样的吗? – l3utterfly
性能方面他们几乎是一样的,你仍然需要切换,它会让你的管道更加复杂以获得最小的收益imo(还记得设备上下文调用是非阻塞的,所以你的命令很可能是当你调用当前的方法时执行,而不是当你调用dispatch或draw时) – catflier