如何分别描述顶点着色器和片段着色器的速度?


11

我想知道如何检查顶点或片段着色器是渲染管道中的瓶颈。

我已经读过glQueryCounterGL_TIMESTAMP目标一起使用以获取OpenGL命令之间的时钟检查点的信息,但是这些不能区分不同类型的着色器。

例如,如果GPU上的一帧需要8毫秒的渲染时间,我是否可以说顶点着色器需要7毫秒,片段着色器需要1毫秒?

Answers:


12

顶点和片段着色器同时运行,而不是顺序运行,并且GPU自动在它们之间进行负载平衡,因此不可能有意义地分配特定的时间,例如一个为7 ms,另一个为1 ms。

但是,您可以做一个简单的实验来衡量瓶颈所在:将所有绘制调用的视图投影矩阵设置为全零。这将使所有顶点的位置输出为零,并使所有三角形退化。因此,它会缩短所有光栅化和片段着色的时间,同时保持所有顶点着色器的工作(着色器编译器无法优化任何内容,因为它不知道矩阵在运行时将设置为零)。

在将矩阵清零的情况下衡量性能时,您将看到仅运行顶点着色器而无需在GPU中进行任何并发光栅化或片段着色的时间。然后,您可以将其与每次通过普通渲染所需的时间进行比较。如果两次相似,则传递可能与顶点高度相关;如果零矩阵渲染的速度明显更快,则可能是像素绑定的。也有可能获得中间结果,表明工作在两者之间平均分配。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.