imm_atomic_cmp_exch (sm5 - asm)
Confronto immediato e scambio con la memoria.
imm_atomic_cmp_exch dst0[.single_component_mask], dst1, dstAddress[.swizzle], src0[.select_component], src1[.select_component] |
---|
Elemento | Descrizione |
---|---|
dst0 |
[out] Contiene dst1 prima della scrittura. |
dst1 |
[in] Visualizzazione di accesso non ordinato (UAV) (u#). Nello shader di calcolo questo può anche essere la memoria condivisa del gruppo di thread (g#). |
dstAddress |
[in] Memoria di destinazione. |
src0 |
[in] Valore da confrontare con dst1. |
src1 |
[in] Valore scritto nella memoria di destinazione se i valori confrontati sono identici. |
Questa istruzione esegue un confronto di un singolo valore a 32 bit dell'operando src0 con dst1 a 32 bit per ogni indirizzo del componente dstAddress.
Se dst1 è un u#, può essere stato 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 dst1 è g#, deve essere dichiarato come non elaborato o strutturato.
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 memoria di destinazione non viene modificata.
Il valore originale a 32 bit nella memoria di destinazione viene sempre scritto in dst0.
L'intera operazione viene eseguita in modo atomico.
Se la chiamata dello shader è inattiva, ad esempio se il pixel è stato rimosso in precedenza nell'esecuzione oppure esiste solo una chiamata pixel/campione solo per fungere da helper per un pixel/campione reale per derivati, questa istruzione non modifica affatto la memoria dst1 e il valore restituito non è definito.
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 fuori dai limiti in u# o g# causa la restituzione di un risultato non definito allo shader in dst0.
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 | sì |
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 |