1
我有很多着色器用ShaderModel vs_1_1和ps_2_0编译(使用DirectX9)。如果我知道硬件支持更高的着色器模型(可能大部分支持3.0),我应该使用更高的着色器模型版本进行编译吗?性能更高吗?或者更小的模型版本更有效?即使着色器可以使用较低版本进行编译,我是否应该支持较高的ShaderModel?
我有很多着色器用ShaderModel vs_1_1和ps_2_0编译(使用DirectX9)。如果我知道硬件支持更高的着色器模型(可能大部分支持3.0),我应该使用更高的着色器模型版本进行编译吗?性能更高吗?或者更小的模型版本更有效?即使着色器可以使用较低版本进行编译,我是否应该支持较高的ShaderModel?
最简单的检查方法是在不同的配置文件中使用fxc并检查指令数量,在较高版本中可以使用新的内部函数来减少总指令数量。
我记得努力适应ps_2_0的64限制,而在ps_3_0编译给了我63条指令。
我会(个人认为这里),使用着色器模型3 tho,甚至电话支持现今的功能集。
根据性能指标,当然您有不同的考虑因素,因为您需要在算术/纹理获取/填充率之间进行平衡。
当然,一般来说,越低越好,但如果您绘制了呼叫限制,则算法不会让您的系统更快。
对于性能分析,如果您尚未使用此功能,我强烈建议您实施Queries,在您的情况下,TimeStamp是最有用的一个。它允许您测量着色器执行时间。测量在正向传递(填充率)中的透支也是非常有用的。
该指令是最终性能指标吗?较低的指令数=更快的执行? “fxc”是“NVidia FX Composer”(不幸的是这款有用的软件从Windows 8.1开始就拒绝使用)? –
更新了着色器创作的答案,您可以查看http://vvvv.org/,它有一个带有动态编译(dx9和dx11)的实时着色器编辑器。关于fxc,请看这个链接http://blogs.msdn.com/b/chuckw/archive/2012/05/07/hlsl-fxc-and-d3dcompile.aspx – catflier