imm_atomic_cmp_exch (sm5 - asm)
Comparación y intercambio inmediatos con la memoria.
imm_atomic_cmp_exch dst0[.single_component_mask], dst1, dstAddress[.swizzle], src0[.select_component], src1[.select_component] |
---|
Elemento | Descripción |
---|---|
dst0 |
[out] Contiene dst1 antes de la escritura. |
dst1 |
[in] Una vista de acceso desordenada (UAV) (u#). En el sombreador de proceso, también puede ser memoria compartida del grupo de subprocesos (g#). |
dstAddress |
[in] Memoria de destino. |
src0 |
[in] Valor que se va a comparar con dst1. |
src1 |
[in] Valor escrito en la memoria de destino si los valores comparados son idénticos. |
Esta instrucción realiza una comparación de valores de 32 bits de un solo componente de src0 con dst1 a 32 bits por dirección de componente dstAddress.
Si dst1 es u#, es posible que se haya declarado como sin formato, con tipo o estructurado. Si se escribe, se debe declarar como UINT/SINT con el formato de recurso enlazado que se R32_UINT/_SINT.
Si dst1 es g#, debe declararse como sin formato o estructurado.
Si los valores comparados son idénticos, el valor de 32 bits de un solo componente en src1 se escribe en la memoria de destino. De lo contrario, no se cambia la memoria de destino.
El valor original de 32 bits en la memoria de destino siempre se escribe en dst0.
Toda la operación se realiza de forma atómica.
Si la invocación del sombreador está inactiva, por ejemplo, si el píxel se ha descartado anteriormente en su ejecución, o solo existe una invocación de píxeles o muestras para servir como asistente para un píxel o muestra real para derivados, esta instrucción no modifica la memoria dst1 en absoluto y el valor devuelto no está definido.
El direccionamiento fuera de los límites en u# hace que no se escriba nada en la memoria, excepto si el u# está estructurado y el desplazamiento de bytes en la estructura (segundo componente de la dirección) está causando el acceso fuera de los límites, entonces todo el contenido de la UAV se vuelve indefinido.
El direccionamiento fuera de los límites en u# o g# hace que se devuelva un resultado indefinido al sombreador en dst0.
Esta instrucción se aplica a las siguientes fases del sombreador:
Vértice | Casco | Dominio | Geometría | Píxel | Compute |
---|---|---|---|---|---|
X | x |
Dado que las UAV están disponibles en todas las fases del sombreador para Direct3D 11.1, esta instrucción se aplica a todas las fases del sombreador para el entorno de ejecución de Direct3D 11.1, que está disponible a partir de Windows 8.
Vértice | Casco | Dominio | Geometría | Píxel | Compute |
---|---|---|---|---|---|
x | X | x | x | X | x |
Modelo de sombreador mínimo
Esta instrucción se admite en los siguientes modelos de sombreador:
Modelo de sombreador | Compatible |
---|---|
Modelo de sombreador 5 | sí |
Modelo de sombreador 4.1 | No |
Modelo de sombreador 4 | No |
Modelo de sombreador 3 (DirectX HLSL) | No |
Modelo de sombreador 2 (DirectX HLSL) | No |
Modelo de sombreador 1 (DirectX HLSL) | No |