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 Referenzarray von 4 Bytes in einem uint-Wert .
-
Quelle
-
[in] Das Quellarray mit 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 (das Verweisbyte ist also 0).
Bemerkungen
Um das systeminterne msad4 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 Option SAD4ShaderInstructions unterstützt. Das systeminterne msad4 erfordert einen WDDM 1.2-Anzeigetreiber, und alle WDDM 1.2-Anzeigetreiber müssen msad4 unterstützen. Wenn Ihre App ein Renderinggerät mit Featureebene 11.0 oder 11.1 erstellt und das Kompilierungsziel Shadermodell 5 oder höher ist, kann der HLSL-Quellcode das systeminterne msad4 verwenden.
Rückgabewerte sind nur bis zu 65535 genau. Wenn Sie das systeminterne msad4-System mit Eingaben aufrufen, die zu Rückgabewerten größer als 65535 führen können, erzeugt msad4 nicht definierte Ergebnisse.
Minimales Shadermodell
Diese Funktion wird in den folgenden Shadermodellen unterstützt.
Shadermodell | Unterstützt |
---|---|
Shadermodell 5 oder höher | Ja |
Beispiele
Hier sehen Sie eine Beispiel-Ergebnisberechnung 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 sehen Sie ein Beispiel dafür, wie Sie msad4 verwenden können, um in einem Puffer nach einem Verweismuster 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] |