imm_atomic_cmp_exch (sm5 - asm)
Sofortiger Vergleich und Austausch mit Arbeitsspeicher.
imm_atomic_cmp_exch dst0[.single_component_mask], dst1, dstAddress[.swizzle], src0[.select_component], src1[.select_component] |
---|
Element | BESCHREIBUNG |
---|---|
dst0 |
[out] Enthält dst1 vor dem Schreiben. |
dst1 |
[in] Eine ungeordnete Zugriffsansicht (UAV) (u#). Im Compute-Shader kann dies auch freigegebener Threadgruppenspeicher (g#) sein. |
dstAddress |
[in] Der Zielspeicher. |
src0 |
[in] Der wert, der mit dst1 verglichen werden soll. |
src1 |
[in] Der Wert, der in den Zielspeicher geschrieben wird, wenn die verglichenen Werte identisch sind. |
Mit dieser Anweisung wird ein einzelner Komponenten-32-Bit-Wert von operand src0 mit dst1 bei 32-Bit pro Komponentenadresse dstAddress verglichen.
Wenn dst1 ein u# ist, wurde es möglicherweise als roh, typisiert oder strukturiert deklariert. Bei der Eingabe muss sie als UINT/SINT deklariert werden, wobei das gebundene Ressourcenformat R32_UINT/_SINT ist.
Wenn dst1 g# ist, muss es als roh oder strukturiert deklariert werden.
Wenn die verglichenen Werte identisch sind, wird der Einzelkomponenten-32-Bit-Wert in src1 in den Zielspeicher geschrieben. Andernfalls wird der Zielspeicher nicht geändert.
Der ursprüngliche 32-Bit-Wert im Zielspeicher wird immer in dst0 geschrieben.
Der gesamte Vorgang wird atomar ausgeführt.
Wenn der Shaderaufruf inaktiv ist, z. B. wenn das Pixel zuvor in seiner Ausführung verworfen wurde oder ein Pixel-/Sample-Aufruf nur vorhanden ist, um als Hilfsprogramm für ein echtes Pixel/Sample für Ableitungen zu dienen, ändert diese Anweisung den dst1-Speicher überhaupt nicht, und der zurückgegebene Wert ist nicht definiert.
Die Adressierung von Out-of-Grenzen für u# bewirkt, dass nichts in den Arbeitsspeicher geschrieben wird, außer wenn der u# strukturiert ist und der Byteoffset in die Struktur (zweite Komponente der Adresse) den Zugriff außerhalb der Grenzen verursacht, wird der gesamte Inhalt des UAV undefiniert.
Die Adressierung von Out-of-Bounds für u# oder g# bewirkt, dass ein nicht definiertes Ergebnis in dst0 an den Shader zurückgegeben wird.
Diese Anweisung gilt für die folgenden Shaderphasen:
Scheitelpunkt | Hull | Domain | Geometrie | Pixel | Compute |
---|---|---|---|---|---|
X | X |
Da UAVs in allen Shaderphasen für Direct3D 11.1 verfügbar sind, gilt diese Anweisung für alle Shaderstufen für die Direct3D 11.1-Runtime, die ab Windows 8 verfügbar ist.
Scheitelpunkt | Hull | Domain | Geometrie | Pixel | Compute |
---|---|---|---|---|---|
X | X | X | X | X | X |
Minimales Shadermodell
Diese Anweisung wird in den folgenden Shadermodellen unterstützt:
Shadermodell | Unterstützt |
---|---|
Shadermodell 5 | ja |
Shadermodell 4.1 | Nein |
Shadermodell 4 | Nein |
Shadermodell 3 (DirectX HLSL) | Nein |
Shadermodell 2 (DirectX HLSL) | Nein |
Shadermodell 1 (DirectX HLSL) | Nein |