Freigeben über


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]

Siehe auch

Systeminterne Funktionen