我正在将一个小的OpenGL框架从3.3移植到4.3。我在软件中实现了着色器混合/匹配(即:当发出抽签请求时,着色器被单独绑定,程序被懒散地链接。)
OpenGL 4.1通过可分离的程序和管道添加了这个特性,然而,让程序封装所有着色阶段的意义在于能够将它们作为一个整体进行优化(而且只有一次)。
所以我想知道使用So是否比Direct3D 11硬件上的标准着色器程序慢。特别是:当前的实现是否允许每个着色器有一个程序(因此,一个有2-5个独立程序的管道),而不会造成显着的性能损失?
发布于 2015-09-28 00:55:43
有趣的是,您应该提到D3D11硬件的名称。
如果您谈到D3D,您应该知道它一直都是这样工作的。着色程序不是不可变的对象,每个阶段都在D3D中链接在一起,就像它们在OpenGL中一样。D3D使用语义和其他好东西来让你随时更换附加到每个阶段的着色器。硬件一直以D3D的方式工作,而OpenGL现在更好地公开了这一点。
你是否会看到性能的变化,从可分离的着色器,不是一个问题的硬件。任何性能的增加或损失都将取决于驱动程序的实现。但是,它不可能是实质性的,否则D3D很久以前就会采用OpenGL的链接程序模型-- API不断地重新发明自己以降低开销。
https://stackoverflow.com/questions/32809881
复制相似问题