msad4
Vergleicht einen 4-Byte-Verweiswert und einen 8-Byte-Quellwert und sammelt einen Vektor von 4 Summen. Jede Summe entspricht der maskierten Summe der absoluten Unterschiede einer anderen Byteausrichtung zwischen dem Verweiswert und dem Quellwert.
| uint4 result = msad4(uint reference, uint2 source, uint4 accum); |
|---|
Parameter
-
Verweis
-
[in ] Das Verweisarray von 4 Bytes in einem uint-Wert.
-
Quelle
-
[in ] Das Quellarray von 8 Bytes in zwei uint2-Werten.
-
Accum
-
[in ] Ein Vektor von 4 Werten. msad4 fügt diesen Vektor der maskierten Summe der absoluten Unterschiede der verschiedenen Byteausrichtungen zwischen dem Verweiswert und dem Quellwert hinzu.
Rückgabewert
Ein Vektor von 4 Summen. Jede Summe entspricht der maskierten Summe von absoluten Differenzen von verschiedenen Byteausrichtungen zwischen Verweiswert und Quellwert. msad4 enthält keinen Unterschied in der Summe, wenn diese Differenz maskiert ist (d. b. das Verweis-Byte ist 0).
Hinweise
Um die systeminterne msad4-Funktion in Ihrem Shadercode zu verwenden, rufen Sie die ID3D11Device::CheckFeatureSupport-Methode mit D3D11 _ FEATURE _ D3D11 _ OPTIONS auf, um zu überprüfen, ob das Direct3D-Gerät die Featureoption SAD4ShaderInstructions unterstützt. Die systeminterne msad4-Datei erfordert einen WDDM 1.2-Anzeigetreiber, und alle WDDM 1.2-Anzeigetreiber müssen msad4 unterstützen. Wenn Ihre App ein Renderinggerät mit der Featureebene 11.0 oder 11.1 erstellt und das Kompilierungsziel das Shadermodell 5 oder höher ist, kann der HLSL-Quellcode die systeminterne Msad4-Funktion verwenden.
Rückgabewerte sind nur bis zu 65535 genau. Wenn Sie die systeminterne msad4-Datei mit Eingaben aufrufen, die zu Rückgabewerten größer als 65535 führen können, erzeugt msad4 nicht definierte Ergebnisse.
Shader-Mindestmodell
Diese Funktion wird in den folgenden Shadermodellen unterstützt.
| Shadermodell | Unterstützt |
|---|---|
| Shadermodell 5 oder höher | ja |
Beispiele
Hier sehen Sie eine Beispielergebnisberechnung für 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}
Hier ist ein Beispiel dafür, wie Sie msad4 verwenden können, um nach einem Verweismuster innerhalb eines Puffers zu suchen:
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;
Anforderungen
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
[Windows 8 |Desktop-Apps UWP-Apps] |
| Unterstützte Mindestversion (Server) |
[Windows Server 2012 |Desktop-Apps UWP-Apps] |