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 | sí |
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] |