atomic_cmp_store (sm5 - asm)

Confronto atomico e scrittura in memoria.

atomic_cmp_store dest, dstAddress[.swizzle], src0[.select_component], src1[.select_component]
Elemento Descrizione
Dest
[in] Componenti da confrontare con src0. Questo valore deve essere una visualizzazione di accesso non ordinata (UAV) (u#). Nello shader di calcolo può anche essere la memoria condivisa del gruppo di thread (g#).
dstAddress
[in] Indirizzo di memoria.
src0
[in] Valore a 32 bit da confrontare con dest.
src1
[in] Valore da scrivere in memoria se i valori confrontati sono identici.

Commenti

Questa istruzione esegue un confronto di un singolo valore a 32 bit dell'operando src0 con dest a 32 bit per ogni indirizzo del componente dstAddress.

Se i valori confrontati sono identici, il valore a 32 bit a componente singolo in src1 viene scritto nella memoria di destinazione. In caso contrario, la destinazione non viene modificata.

L'intera operazione di confronto e scrittura viene eseguita in modo atomico.

Se dest è un u#, può essere dichiarato come non elaborato, tipizzato o strutturato. Se tipizzato, deve essere dichiarato come UINT/SINT con il formato di risorsa associato R32_UINT/_SINT.

Se dest è g#, deve essere dichiarato come non elaborato o strutturato.

Il numero di componenti acquisiti dall'indirizzo è determinato dalla dimensionalità di dest u# o g#.

Non viene restituito alcun elemento allo shader.

Se la chiamata dello shader è inattiva, ad esempio se il pixel è stato rimosso in precedenza nell'esecuzione o un'istruzione pixel/campione non modifica la memoria minima (invisibile all'utente).

L'indirizzamento out-of-bounds in u# causa la scrittura in memoria, tranne se u# è strutturato e l'offset di byte nello struct (secondo componente dell'indirizzo) causa l'accesso all'esterno dei limiti, quindi l'intero contenuto dell'UAV diventa indefinito.

L'indirizzamento out of bounds in g# (i limiti di quel particolare g#, invece di tutta la memoria condivisa) fa sì che l'intero contenuto di tutta la memoria condivisa diventi indefinito.

Questa istruzione si applica alle fasi dello shader seguenti:

Vertice Scafo Dominio Geometria Pixel Calcolo
X X

Poiché gli UAV sono disponibili in tutte le fasi dello shader per Direct3D 11.1, questa istruzione si applica a tutte le fasi dello shader per il runtime direct3D 11.1, disponibile a partire da Windows 8.

Vertice Scafo Dominio Geometria Pixel Calcolo
X X X X X X

Modello minimo shader

Questa istruzione è supportata nei modelli di shader seguenti:

Modello di shader Supportato
Modello shader 5
Modello shader 4.1 no
Modello shader 4 no
Modello shader 3 (DirectX HLSL) no
Modello shader 2 (DirectX HLSL) no
Modello shader 1 (DirectX HLSL) no

Assembly modello shader 5 (DirectX HLSL)