imm _ atomic _ cmp _ exch (sm5 - asm)
Sofortiger Vergleich und Austausch mit dem 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 Schreibvorgang. |
| dst1 |
[in ] Einer ungeordneten Zugriffsansicht (UAV) (u # ). Im Compute-Shader kann es sich auch um freigegebenen Threadgruppenspeicher # (g) handelt. |
| dstAddress |
[in ] Der Zielspeicher. |
| src0 |
[in ] Der Wert, der mit dst1 verglichen werden soll. |
| scr1 |
[in ] Der Wert, der in den Zielspeicher geschrieben wird, wenn die verglichenen Werte identisch sind. |
Diese Anweisung führt einen 32-Bit-Wertvergleich der einzelnen Komponente des Operanden src0 mit dst1 bei 32-Bit pro Komponentenadresse dstAddress durch.
Wenn dst1 ein u # ist, wurde er möglicherweise als roh, typisiert oder strukturiert deklariert. Wenn sie typisiert ist, 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 32-Bit-Einzelkomponentenwert 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 bei der Ausführung verworfen wurde, oder ein Pixel-/Beispielaufruf nur als Hilfselement für ein echtes Pixel/Sample für Ableitungen vorhanden ist, ändert diese Anweisung den dst1-Speicher überhaupt nicht, und der zurückgegebene Wert ist nicht definiert.
Die Adressierung außerhalb der Grenzen für u bewirkt, dass nichts in # den Arbeitsspeicher geschrieben wird, außer wenn das u strukturiert ist und der # Byteoffset in die Struktur (zweite Komponente der Adresse) den Zugriff außerhalb der Grenzen verursacht, dann wird der gesamte Inhalt des UAV nicht definiert.
Die Adressierung außerhalb der Grenzen für u # oder g # bewirkt, dass ein nicht definiertes Ergebnis an den Shader in dst0 zurückgegeben wird.
Diese Anweisung gilt für die folgenden Shaderstufen:
| Scheitelpunkt | Rumpf | Domain | Geometrie | Pixel | Compute |
|---|---|---|---|---|---|
| X | X |
Da UAVs in allen Shaderstufen 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 | Rumpf | Domain | Geometrie | Pixel | Compute |
|---|---|---|---|---|---|
| X | X | X | X | X | X |
Shader-Mindestmodell
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 |