msad4

比较 4 字节的引用值和 8 字节的源值并累加 4 个和的向量。 每个总和对应于引用值和源值之间不同字节对齐方式的掩码绝对差之和。

uint4 result = msad4 (uint reference, uint2 source, uint4 accum) ;

参数

参考

[in]一个 uint 值中包含 4 个字节的引用数组。

[in]两个 uint2 值中的 8 个字节的源数组。

accum

[in]4 个值的向量。 msad4 将此向量添加到引用值和源值之间不同字节对齐方式的掩码差之和。

返回值

4 和的向量。 每个和对应于引用值与源值之间不同字节对齐的绝对差异的掩码总和。 如果 (,引用字节为 0) ,则 msad4 不会在总和中包含差异。

备注

若要在着色器代码中使用 msad4 内部函数,请使用 D3D11_FEATURE_D3D11_OPTIONS 调用 ID3D11Device::CheckFeatureSupport 方法,以验证 Direct3D 设备是否支持 SAD4ShaderInstructions 功能选项。 msad4 内部函数需要 WDDM 1.2 显示驱动程序,并且所有 WDDM 1.2 显示驱动程序都必须支持 msad4。 如果应用创建 功能级别 为 11.0 或 11.1 的呈现设备,并且编译目标是着色器模型 5 或更高版本,则 HLSL 源代码可以使用 msad4 内部函数。

返回值仅精确到 65535。 如果使用可能导致返回值大于 65535 的输入调用 msad4 内部函数, 则 msad4 将生成未定义的结果。

最小着色器模型

以下着色器模型中支持此函数。

着色器模型 支持
着色器型号 5 或更高版本

示例

下面是 msad4 的示例结果计算:

reference = 0xA100B2C3;
source.x = 0xD7B0C372
source.y = 0x4F57C2A3
accum = {1,2,3,4}
result.x alignment source: 0xD7B0C372
result.x = accum.x + |0xD7   0xA1| + 0 (masked) + |0xC3   0xB2| + |0x72   0xC3| = 1 + 54 + 0 + 17 + 81 = 153
result.y alignment source: 0xA3D7B0C3
result.y = accum.y + |0xA3   0xA1| + 0 (masked) + |0xB0   0xB2| + |0xC3   0xC3| = 2 + 2 + 0 + 2 + 0 = 6
result.z alignment source: 0xC2A3D7B0
result.z = accum.z + |0xC2   0xA1| + 0 (masked) + |0xD7   0xB2| + |0xB0   0xC3| = 3 + 33 + 0 + 37 + 19 = 92
result.w alignment source: 0x57C2A3D7
result.w = accum.w + |0x57   0xA1| + 0 (masked) + |0xA3   0xB2| + |0xD7   0xC3| = 4 + 74 + 0 + 15 + 20 = 113
result = {153,6,92,113}

下面是如何使用 msad4 在缓冲区中搜索引用模式的示例:

uint4 accum = {0,0,0,0};
for(uint i=0;i<REF_SIZE;i++)
    accum = msad4(
        buf_ref[i], 
        uint2(buf_src[DTid.x+i], buf_src[DTid.x+i+1]), 
        accum);
buf_accum[DTid.x] = accum;

要求

要求
最低受支持的客户端
Windows 8 [桌面应用 |UWP 应用]
最低受支持的服务器
Windows Server 2012 [桌面应用 |UWP 应用]

另请参阅

内部函数