mad 函数
对三个值执行算术乘法/加法运算。
numeric mad(
in numeric mvalue,
in numeric avalue,
in numeric bvalue
);
-
mvalue [in]
-
类型: numeric
乘法值。
-
avalue [in]
-
类型: numeric
第一个加法值。
-
bvalue [in]
-
类型: numeric
第二个加法值。
类型: numeric
mvalue * avalue + bvalue 的结果。
以下着色器模型中支持此函数。
着色器模型 | 支持 |
---|---|
着色器型号 5 和更高级别的着色器模型 | 是 |
以下类型的着色器支持此函数:
顶点 | 外壳 | 域 | Geometry | 像素 | 计算 |
---|---|---|---|---|---|
x | x | x | x | x | x |
着色器作者可以使用 mad instrinsic 在编译的着色器输出中显式定位疯狂硬件指令,这对于使用精确关键字 (keyword) 标记结果的着色器特别有用。 疯狂指令可以在硬件中作为“融合”实现,这比实现 mul 指令后跟添加指令或作为 mul + 添加指令的精度更高。
如果着色器作者使用 mad instrinsic 来计算着色器标记为精确的结果,则只要该实现在该硬件上的任何着色器中使用该疯狂内部函数的所有用法的一致,他们就会向硬件指示使用疯狂指令的任何有效实现 (融合或不) 。 然后,着色器可以利用潜在的性能改进,方法是使用本机疯狂指令 (而不是在 + 一些硬件上添加) 。 执行本机 疯狂 硬件指令的结果可能与执行 mul 后跟 添加不同,也可能不一样。 但是,无论结果是什么,结果都必须一致,这样同一操作才能在着色器的多个着色器或不同部分发生。