次の方法で共有


imm_atomic_cmp_exch (sm5 - asm)

メモリとの即時比較と交換。

imm_atomic_cmp_exch dst0[.single_component_mask], dst1, dstAddress[.swizzle], src0[.select_component], src1[.select_component]
Item 説明
dst0
[out]書き込み前の dst1 が含まれます。
dst1
[入力]順序指定されていないアクセス ビュー (UAV) (u#)。 コンピューティング シェーダーでは、スレッド グループ共有メモリ (g#) を指定することもできます。
dstAddress
[入力]宛先メモリ。
src0
[入力] dst1 と比較する値。
src1
[入力]比較された値が同じ場合に宛先メモリに書き込まれる値。

この命令では、オペランド src0dst1 の 1 つのコンポーネント 32 ビット値の比較が、コンポーネント アドレス dstAddress ごとに 32 ビットで実行されます。

dst1 が u# の場合、未加工、型指定、または構造化として宣言されている可能性があります。 型指定した場合は、バインドされたリソース形式をR32_UINT/_SINTする UINT/SINT として宣言する必要があります。

dst1 が g# の場合は、生または構造化として宣言する必要があります。

比較値が同一の場合、 src1 の単一コンポーネントの 32 ビット値が宛先メモリに書き込まれます。 それ以外の場合、宛先メモリは変更されません。

宛先メモリの元の 32 ビット値は、常に dst0 に書き込まれます。

操作全体がアトミックに実行されます。

シェーダー呼び出しが非アクティブな場合 (たとえば、ピクセルが実行の早い段階で破棄された場合、またはピクセル/サンプル呼び出しが、派生物の実際のピクセル/サンプルへのヘルパーとしてのみ存在する場合)、この命令は dst1 メモリをまったく変更せず、返される値は未定義です。

u# でアドレス指定する範囲外では、u# が構造化されていて、構造体 (アドレスの 2 番目のコンポーネント) へのバイト オフセットによって境界外アクセスが発生する場合を除き、メモリに何も書き込まれず、UAV の内容全体が未定義になります。

u# または g# でアドレス指定する範囲外では、 dst0 のシェーダーに未定義の結果が返されます。

この命令は、次のシェーダー ステージに適用されます。

Vertex Hull Domain ジオメトリ ピクセル Compute
X X

UAV は Direct3D 11.1 のすべてのシェーダー ステージで使用できるため、この命令は Direct3D 11.1 ランタイムのすべてのシェーダー ステージに適用されます。これは、Windows 8 以降で使用できます。

Vertex Hull Domain ジオメトリ ピクセル Compute
X X X X X X

最小シェーダー モデル

この命令は、次のシェーダー モデルでサポートされています。

シェーダー モデル サポートされています
シェーダー モデル 5 はい
シェーダー モデル 4.1
シェーダー モデル 4
シェーダー モデル 3 (DirectX HLSL)
シェーダー モデル 2 (DirectX HLSL)
シェーダー モデル 1 (DirectX HLSL)

シェーダー モデル 5 アセンブリ (DirectX HLSL)