mad 函数

对三个值执行算术乘法/加运算。

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 不同,也可能不相同。 但是,无论结果是什么,结果都必须一致,以便同一作在多个着色器或着色器的不同部分发生。

另请参阅

内部函数

着色器模型 5