使用MAD进行HLSL着色器优化(m,a,d)

时间:2015-04-02 16:36:27

标签: directx-11 hlsl

我理解表达式x = m*a+d最有效地写为x = mad(m,a,d),因为在汇编级别只需要一条指令而不是乘法并单独添加。我的问题是最佳地写出这个表达式:x += m*a这应该写成x = mad(m,a,x)还是x += m*a这种差异太过于微妙,但我不知道是否有人能够在汇编级别看到差异。 (我不知道如何查看汇编代码。)

1 个答案:

答案 0 :(得分:1)

使用'fxc'编译着色器并查看打印出来的已编译DXBC。

在这种情况下,编译器可以确定x + = m * a;与x = mad(m,a,x)相同;因此生成的代码将是相同的。

对于这两个表达式,生成的字节码为:

mad o0.x,v0.x,v0.y,v0.z

即使写为x = m * a + d;编译器可以自由地(并且确实)在DirectX字节码中使用疯狂指令。以您描述的三种方式中的任何一种方式编写它都没有性能损失。