msad4

Confronta un valore di riferimento a 4 byte e un valore di origine a 8 byte e accumula un vettore di 4 somme. Ogni somma corrisponde alla somma mascherata delle differenze assolute di un allineamento di byte diverso tra il valore di riferimento e il valore di origine.

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

Parametri

Riferimento

[in] Matrice di riferimento di 4 byte in un valore uint .

fonte

[in] Matrice di origine di 8 byte in due valori uint2 .

accum

[in] Vettore di 4 valori. msad4 aggiunge questo vettore alla somma mascherata di differenze assolute dei diversi allineamenti di byte tra il valore di riferimento e il valore di origine.

Valore restituito

Vettore di 4 somme. Ogni somma corrisponde alla somma mascherata di differenze assolute di allineamenti di byte diversi tra il valore di riferimento e il valore di origine. msad4 non include una differenza nella somma se tale differenza viene mascherata ,ovvero il byte di riferimento è 0.

Commenti

Per usare l'intrinseco msad4 nel codice dello shader, chiamare il metodo ID3D11Device::CheckFeatureSupport con D3D11_FEATURE_D3D11_OPTIONS per verificare che il dispositivo Direct3D supporti l'opzione di funzionalità SAD4ShaderInstructions . L'intrinseco msad4 richiede un driver di visualizzazione WDDM 1.2 e tutti i driver di visualizzazione WDDM 1.2 devono supportare msad4. Se l'app crea un dispositivo di rendering con livello di funzionalità 11.0 o 11.1 e la destinazione di compilazione è il modello shader 5 o versione successiva, il codice sorgente HLSL può usare l'intrinseco msad4 .

I valori restituiti sono accurati solo fino a 65535. Se si chiama l'intrinseco msad4 con input che potrebbero comportare valori restituiti maggiori di 65535, msad4 produce risultati non definiti.

Modello minimo shader

Questa funzione è supportata nei modelli di shader seguenti.

Modello di shader Supportato
Modello shader 5 o versione successiva

Esempio

Di seguito è riportato un esempio di calcolo dei risultati per 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}

Di seguito è riportato un esempio di come è possibile usare msad4 per cercare un modello di riferimento all'interno di un 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;

Requisiti

Requisito Valore
Client minimo supportato
Windows 8 [app desktop | App UWP]
Server minimo supportato
Windows Server 2012 [app desktop | App UWP]

Vedi anche

Funzioni intrinseche