2015-09-27 25 views
1

我将一个小型的OpenGL框架从3.3移植到4.3。我使用软件实现了着色器混合/匹配(即:在发出绘制调用时,着色器被单独绑定并且程序懒洋洋地链接)。OpenGL可分离的着色器程序和现代硬件上的Pipline性能

OpenGL 4.1在可分离的程序中添加了此功能&流水线然而,封装所有着色器阶段的程序的目的是能够将它们作为一个整体进行优化(并且只有一次)。

所以我想知道如果使用SPO比Direct3D 11硬件上的标准着色器程序慢。特别是:当前的实现是否允许每个着色器有一个程序(因此具有2-5个独立程序的管道),而没有显着的性能损失?

回答

2

有趣的是,您应该提及D3D11硬件的名称。

如果你谈论D3D,你应该知道它一直以这种方式工作。着色器程序不是不可变的对象,每个阶段在D3D中都像在OpenGL中一样链接在一起。 D3D使用语义和其他好吃的东西,让你随时换出连接到每个阶段的着色器。硬件一直以D3D的方式工作,而OpenGL现在更好地揭示了这一点。

无论您是否会看到可分离着色器的性能变化,都不是硬件问题。任何性能增益或损失将取决于驱动程序的实施。然而,它不可能是实质性的,或者D3D很早以前就会采用OpenGL的链接程序模型 - API不断重新发明自己以降低开销。

+0

非常感谢!我从来没有与D3D合作过,我不知道它有分离的阶段。 –