imm_atomic_cmp_exch (sm5 - asm)
立即比較和交換記憶體。
imm_atomic_cmp_exch dst0[.single_component_mask], dst1, dstAddress[.swizzle], src0[.select_component], src1[.select_component] |
---|
項目 | 描述 |
---|---|
dst0 |
[out]在寫入之前包含 dst1 。 |
dst1 |
[in]UAV) (u#) (未排序的存取檢視。 在計算著色器中,這也可以是執行緒群組共用記憶體 (g#) 。 |
dstAddress |
[in]目的地記憶體。 |
src0 |
[in]要與 dst1比較的值。 |
src1 |
[in]如果比較的值相同,則寫入目的地記憶體的值。 |
此指令會執行單一元件 32 位值,比較運算元src0與每個元件位址dstAddress32 位的 dst1。
如果 dst1 是 u#,則可能已宣告為原始、具型別或結構化。 如果輸入,則必須將它宣告為 UINT/SINT,且系結的資源格式為 R32_UINT/_SINT。
如果 dst1 是 g#,它必須宣告為原始或結構化。
如果比較的值相同, src1 中的單一元件 32 位值會寫入目的地記憶體。 否則,目的地記憶體不會變更。
目的地記憶體中的原始 32 位值一律會寫入 dst0。
整個作業會以不可部分完成的方式執行。
如果著色器調用處于非作用中狀態,例如,如果稍早在執行中捨棄圖元,或圖元/樣本調用只存在做為衍生專案實際圖元/樣本的協助程式,則此指令完全不會改變 dst1 記憶體,而且傳回的值並未定義。
u# 上的界限外定址會導致不寫入記憶體,除非 u# 已結構化,而位元組位移至位址 (第二個元件的結構,) 造成界限外存取,UAV 的整個內容就會變成未定義。
u# 或 g# 上的界限外,會導致未定義的結果傳回 dst0中的著色器。
本指示適用于下列著色器階段:
頂點 | 船體 | 網域 | 幾何形狀 | 像素 | 計算 |
---|---|---|---|---|---|
X | X |
由於 Direct3D 11.1 的所有著色器階段都提供 UAV,因此本指示適用于 Direct3D 11.1 執行時間的所有著色器階段,從 Windows 8 開始提供。
頂點 | 船體 | 網域 | 幾何形狀 | 像素 | 計算 |
---|---|---|---|---|---|
X | X | X | X | X | X |
最小著色器模型
下列著色器模型支援此指示:
著色器模型 | 支援 |
---|---|
著色器模型 5 | 是 |
著色器模型 4.1 | 否 |
著色器模型 4 | 否 |
著色器模型 3 (DirectX HLSL) | 否 |
著色器模型 2 (DirectX HLSL) | 否 |
著色器模型 1 (DirectX HLSL) | 否 |