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