atomic_cmp_store (sm5 - asm)
Atomic vergleicht und schreibt in den Arbeitsspeicher.
atomic_cmp_store dest, dstAddress[.swizzle], src0[.select_component], src1[.select_component] |
---|
Element | BESCHREIBUNG |
---|---|
Dest |
[in] Die Komponenten, die mit src0 verglichen werden sollen. Dieser Wert muss eine ungeordnete Zugriffssicht (UAV) (u#) sein. Im Compute-Shader kann es sich auch um freigegebenen Threadgruppenspeicher (g#) handeln. |
dstAddress |
[in] Die Speicheradresse. |
src0 |
[in] Der mit dest zu vergleichende 32-Bit-Wert. |
src1 |
[in] Der Wert, der in den Arbeitsspeicher geschrieben werden soll, wenn die verglichenen Werte identisch sind. |
Hinweise
Mit dieser Anweisung wird ein einzelner Komponenten-32-Bit-Wert von operand src0 mit dest bei 32-Bit pro Komponentenadresse dstAddress verglichen.
Wenn die verglichenen Werte identisch sind, wird der Einzelkomponenten-32-Bit-Wert in src1 in den Zielspeicher geschrieben. Andernfalls wird das Ziel nicht geändert.
Der gesamte Vergleichs- und Schreibvorgang wird atomar ausgeführt.
Wenn dest ein u# ist, kann es als unformatiert, typisiert oder strukturiert deklariert werden. Bei der Eingabe muss sie als UINT/SINT deklariert werden, wobei das gebundene Ressourcenformat R32_UINT/_SINT ist.
Wenn dest g# ist, muss es als roh oder strukturiert deklariert werden.
Die Anzahl der Komponenten, die aus der Adresse entnommen werden, wird durch die Dimensionalität von dest u# oder g# bestimmt.
Es wird nichts an den Shader zurückgegeben.
Wenn der Shaderaufruf inaktiv ist, z. B. wenn das Pixel zuvor in seiner Ausführung verworfen wurde, oder wenn eine Pixel-/Beispielanweisung den Dest-Speicher überhaupt nicht (unbeaufsichtigt) ändert.
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.
Bei der Adressierung von Außerhalb der Grenzen für g# (die Grenzen dieses bestimmten g#, im Gegensatz zum gesamten freigegebenen Speicher) wird der gesamte Inhalt des gesamten freigegebenen Arbeitsspeichers nicht definiert.
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 |