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]

Confira também

Funções intrínsecas