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