msad4

Compara un valor de referencia de 4 bytes y un valor de origen de 8 bytes y acumula un vector de 4 sumas. Cada suma corresponde a la suma enmascarada de diferencias absolutas de una alineación de bytes diferente entre el valor de referencia y el valor de origen.

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

Parámetros

Referencia

[in] Matriz de referencia de 4 bytes en un valor uint .

Fuente

[in] Matriz de origen de 8 bytes en dos valores uint2 .

Accum

[in] Vector de 4 valores. msad4 agrega este vector a la suma enmascarada de diferencias absolutas de las diferentes alineaciones de bytes entre el valor de referencia y el valor de origen.

Valor devuelto

Vector de 4 sumas. Cada suma corresponde a la suma enmascarada de diferencias absolutas de diferentes alineaciones de bytes entre el valor de referencia y el valor de origen. msad4 no incluye una diferencia en la suma si esa diferencia está enmascarada (es decir, el byte de referencia es 0).

Comentarios

Para usar el intrínseco msad4 en el código del sombreador, llame al método ID3D11Device::CheckFeatureSupport con D3D11_FEATURE_D3D11_OPTIONS para comprobar que el dispositivo Direct3D admite la opción de característica SAD4ShaderInstructions . El intrínseco msad4 requiere un controlador de pantalla WDDM 1.2 y todos los controladores de pantalla WDDM 1.2 deben admitir msad4. Si la aplicación crea un dispositivo de representación con el nivel de característica 11.0 o 11.1 y el destino de compilación es el modelo de sombreador 5 o posterior, el código fuente HLSL puede usar el intrínseco msad4 .

Los valores devueltos solo son precisos hasta 65535. Si llama al intrínseco msad4 con entradas que podrían dar lugar a valores devueltos mayores que 65535, msad4 genera resultados no definidos.

Modelo de sombreador mínimo

Esta función se admite en los siguientes modelos de sombreador.

Modelo de sombreador Compatible
Modelo de sombreador 5 o posterior

Ejemplos

Este es un ejemplo de cálculo de resultados para 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}

Este es un ejemplo de cómo puede usar msad4 para buscar un patrón de referencia dentro de un búfer:

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;

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 8 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible
Windows Server 2012 [aplicaciones de escritorio | Aplicaciones para UWP]

Consulte también

Funciones intrínsecas