msad4
Compara um valor de referência de 4 bytes e um valor de origem de 8 bytes e acumula um vetor de 4 somas. Cada soma corresponde à soma mascarada de diferenças absolutas de um alinhamento de bytes diferente entre o valor de referência e o valor de origem.
uint4 result = msad4(uint reference, uint2 source, uint4 accum); |
---|
Parâmetros
-
Referência
-
[in] A matriz de referência de 4 bytes em um valor uint .
-
Fonte
-
[in] A matriz de origem de 8 bytes em dois valores uint2 .
-
accum
-
[in] Um vetor de 4 valores. msad4 adiciona esse vetor à soma mascarada de diferenças absolutas dos diferentes alinhamentos de bytes entre o valor de referência e o valor de origem.
Valor Retornado
Um vetor de 4 somas. Cada soma corresponde à soma mascarada de diferenças absolutas de alinhamentos de bytes diferentes entre o valor de referência e o valor de origem. msad4 não inclui uma diferença na soma se essa diferença for mascarada (ou seja, o byte de referência é 0).
Comentários
Para usar o intrínseco msad4 no código do sombreador, chame o método ID3D11Device::CheckFeatureSupport com D3D11_FEATURE_D3D11_OPTIONS para verificar se o dispositivo Direct3D dá suporte à opção de recurso SAD4ShaderInstructions . O intrínseco msad4 requer um driver de vídeo WDDM 1.2 e todos os drivers de vídeo WDDM 1.2 devem dar suporte a msad4. Se o aplicativo criar um dispositivo de renderização com o nível de recurso 11.0 ou 11.1 e o destino de compilação for o modelo de sombreador 5 ou posterior, o código-fonte HLSL poderá usar o intrínseco msad4 .
Os valores retornados são precisos apenas até 65535. Se você chamar o intrínseco msad4 com entradas que podem resultar em valores retornados maiores que 65535, msad4 produzirá resultados indefinidos.
Modelo de sombreador mínimo
Essa função tem suporte nos modelos de sombreador a seguir.
Modelo de Sombreador | Com suporte |
---|---|
Modelo de sombreador 5 ou posterior | sim |
Exemplos
Aqui está um exemplo de cálculo de resultado 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}
Aqui está um exemplo de como você pode usar msad4 para pesquisar um padrão de referência dentro de um buffer:
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 | Valor |
---|---|
Cliente mínimo com suporte |
Windows 8 [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte |
Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP] |