为什么可编程管线(GLSL)比固定管线更快?


27

因此,我正在自学GLSL,并试图弄清为什么它比固定功能管道更快。

我遇到问题的原因是,据我了解,您创建的着色器正在替换之前存在的管道部分。那么,如何简单地提供自己的版本来加快速度呢?

我唯一能想到的是,如果您以前尝试提供自己的照明方程式,则必须在CPU上进行计算,但是现在您可以在GPU上进行计算,这会更快。

我理解正确吗?


您是在问创建自己的现有功能版本是否更快,或者卸载在CPU上计算的功能是否更快?
MichaelHouse

我在gamedev.net上找到了可以回答我问题的帖子。
乔伊·格林

2
我懂了。您应该在此处发布有关此问题的答案,以便其他人可以从中受益。也许可以在此过程中澄清您的问题。
MichaelHouse

@ joey-green,请在这里链接gamedev.net。我将对那些偶然发现此问题的人有所帮助。
Quazi Irfan

1
更令人困惑的是,在我的测试中,至少在简单的情况下,固定管道实际上可能比着色器更快。参见sol.gfxile.net/instancing.html
Jari Komppa,

Answers:


27

您创建的着色器将不再是您自己的固定功能管线(FFP)版本,而是自定义的顶点和像素操纵操作,以实现复杂而又酷的效果。

您通过可编程管线(PP)进行的许多操作将比其可能的FFP实施更快,因为PP减少了在FFP中呈现这些假设的事物所需的通过次数或组合器和立方体贴图的魔力。

想象一下实现如此常见的事情,例如在FFP中仅使用插值的顶点数据和手中的采样纹理在FFP中实现每像素照明。甚至不可能“诚实”地做到这一点,只有针对特殊情况的黑客程序才取决于忠实的预先计算的立方体贴图和一些严重的融合。使用PP成为在光方向和顶点法线之间着色点积的问题。

总而言之,PP将缓慢而不可能的事情变成快速而可能的事情。但是,如果您决定编写一个着色器以实现FFP中使用的相同算法,则会发现FFP会稍快一些,因为它是非常硬件优化的。


1
好答案... +1。
阿米尔·扎德

@Green不确定。以某种方式错过了重点。Kylotan的答案更适合实际问题。
克里斯说莫妮卡(Monica)

14

从理论上讲,可编程管线比固定功能管线慢。通用处理器无法与特殊情况的处理器竞争。最初的固定功能流水线只不过是一条线上的逻辑门,这在理论上是最快的。

但是,如今,可编程管线已成为常态。因此,硬件面向可编程管线。已经失去了为一个特定数据流专门创建电路的初始效率,它必须适应最常见的情况,即基于着色器的方法。但是,对于向后兼容选项,仍然可以使用固定功能管道-但是这样做的代价是必须将旧的固定功能转换为着色器,这很可能会产生成本。这可以解释性能差异。


1

我能想到的主要原因是固定管道中的一个阶段,您的程序不需要它。例如,在所有灯光都是静态的游戏中制作图像,您可以轻松实现甚至不尝试计算动态灯光的着色器。在这种情况下,着色器的运行速度比检查动态光的某些方程式的通用编译器(通用着色器)要快。也有其他示例,您可以轻松想到固定管道应考虑的许多方面,但可以忽略在自己的GLSL代码中的实现。


1

就是这样,您的着色器正在替换管道的一部分。但是,您的着色器通常专门针对您要实现的特定效果,并且无法处理可能会激活的所有可能的特殊功能,因此比模拟完整的固定功能管线的着色器更简单。固定功能路径必须考虑到很多事情和OpenGL功能,您可能只是不想使用(甚至根本没有听说过)。

在特殊硬件(与完全可编程的硬件相反)上完成固定功能的日子已经过去,当您使用固定功能管线时,可能会发生的情况是,驱动程序仅加载自己的特殊着色器,以实现固定功能路径。但是,要提供固定功能管道提供的每个功能,这些功能可能非常复杂。


“使用固定功能管道时可能发生的情况是,驱动程序只是加载了自己的专用着色器,这些着色器实现了固定功能路径。” ..你确定吗?您能提供任何可靠的资源吗?谢谢。
Quazi Irfan 2011年

@iamcreasy我没有可靠的消息来源(因此可能),我不得不承认。但是我强烈怀疑,当今的图形卡(只是许多小型处理器的一堆),仍然具有用于计算照明或雾计算的专用硬件。取而代之的是,他们更有可能将为此目的预先编译的程序加载到特定的着色器阶段(无论这些是来自驱动程序还是某些ROM存储,我都不知道)。
克里斯说,请

根据nouveau Wiki nouveau.freedesktop.org/wiki/CodeNames的 @iamcreasy ,在GeForce 6xxx中删除了固定的管道。
DirtY iCE 2013年

“使用固定功能管道时可能发生的情况是,驱动程序只是加载了自己的专用着色器,这些着色器实现了固定功能路径。” 真正。“但是,要提供固定功能管道提供的每项功能,这些可能会非常复杂。” 一个好的驱动程序将仅为您启用的功能生成着色器。
克里斯,
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.