imm_atomic_cmp_exch (sm5 – asm)
Comparação imediata e troca com memória.
imm_atomic_cmp_exch dst0[.single_component_mask], dst1, dstAddress[.swizzle], src0[.select_component], src1[.select_component] |
---|
Item | Descrição |
---|---|
dst0 |
[out] Contém dst1 antes da gravação. |
dst1 |
[in] Uma exibição de acesso não ordenada (UAV) (u#). No sombreador de computação, isso também pode ser memória compartilhada do grupo de threads (g#). |
dstAddress |
[in] A memória de destino. |
src0 |
[in] O valor a ser comparado com dst1. |
src1 |
[in] O valor gravado na memória de destino se os valores comparados forem idênticos. |
Esta instrução executa uma comparação de valor de 32 bits de componente único do operando src0 com dst1 a 32 bits por endereço de componente dstAddress.
Se dst1 for um u#, ele poderá ter sido declarado como bruto, digitado ou estruturado. Se digitado, ele deverá ser declarado como UINT/SINT com o formato de recurso associado sendo R32_UINT/_SINT.
Se dst1 for g#, ele deverá ser declarado como bruto ou estruturado.
Se os valores comparados forem idênticos, o valor de 32 bits de componente único em src1 será gravado na memória de destino. Caso contrário, a memória de destino não será alterada.
O valor original de 32 bits na memória de destino é sempre gravado em dst0.
Toda a operação é executada atomicamente.
Se a invocação do sombreador estiver inativa, por exemplo, se o pixel tiver sido descartado anteriormente em sua execução ou uma invocação de pixel/exemplo existir apenas para servir como um auxiliar para um pixel/amostra real para derivados, essa instrução não alterará a memória dst1 e o valor retornado será indefinido.
O endereçamento fora dos limites em u# não faz com que nada seja gravado na memória, exceto se o u# estiver estruturado e o deslocamento de bytes para o struct (segundo componente do endereço) estiver causando o acesso fora dos limites e, em seguida, todo o conteúdo do UAV ficar indefinido.
O endereçamento fora dos limites em u# ou g# faz com que um resultado indefinido seja retornado ao sombreador em dst0.
Esta instrução se aplica aos seguintes estágios de sombreador:
Vértice | Casco | Domínio | Geometry | Pixel | Computação |
---|---|---|---|---|---|
X | X |
Como os UAVs estão disponíveis em todos os estágios de sombreador para Direct3D 11.1, essa instrução se aplica a todos os estágios de sombreador para o runtime do Direct3D 11.1, que está disponível a partir do Windows 8.
Vértice | Casco | Domínio | Geometry | Pixel | Computação |
---|---|---|---|---|---|
X | X | X | X | X | X |
Modelo de sombreador mínimo
Esta instrução tem suporte nos seguintes modelos de sombreador:
Modelo de Sombreador | Com suporte |
---|---|
Modelo de sombreador 5 | sim |
Modelo de sombreador 4.1 | não |
Modelo de sombreador 4 | não |
Modelo de Sombreador 3 (DirectX HLSL) | não |
Modelo de Sombreador 2 (DirectX HLSL) | não |
Modelo de Sombreador 1 (DirectX HLSL) | não |