atomic_cmp_store (sm5 - asm)
アトミックな比較とメモリへの書き込み。
atomic_cmp_store dest, dstAddress[.swizzle], src0[.select_component], src1[.select_component] |
---|
Item | 説明 |
---|---|
Dest |
[入力] src0 と比較するコンポーネント。 この値は、順序指定されていないアクセス ビュー (UAV) (u#) である必要があります。 コンピューティング シェーダーでは、スレッド グループ共有メモリ (g#) にすることもできます。 |
dstAddress |
[入力]メモリ アドレス。 |
src0 |
[入力] dest と比較する 32 ビット値。 |
src1 |
[入力]比較された値が同じ場合にメモリに書き込む値。 |
注釈
この命令では、オペランド src0 と dest の 1 つのコンポーネント 32 ビット値の比較を、コンポーネント アドレス dstAddress ごとに 32 ビットで実行します。
比較値が同一の場合、 src1 の単一コンポーネントの 32 ビット値が宛先メモリに書き込まれます。 それ以外の場合、変換先は変更されません。
比較操作と書き込み操作全体がアトミックに実行されます。
dest が u# の場合は、生、型指定、または構造化として宣言できます。 型指定した場合は、バインドされたリソース形式をR32_UINT/_SINTする UINT/SINT として宣言する必要があります。
dest が g# の場合は、生または構造化として宣言する必要があります。
アドレスから取得されたコンポーネントの数は、dest u# または g# の次元によって決まります。
シェーダーには何も返されません。
シェーダーの呼び出しが非アクティブな場合 (たとえば、ピクセルが実行の早い段階で破棄された場合や、ピクセル/サンプル命令で dest メモリがまったく変更されない場合 (サイレント) などです。
u# でアドレス指定する範囲外では、u# が構造化されていて、構造体 (アドレスの 2 番目のコンポーネント) へのバイト オフセットによって境界外アクセスが発生する場合を除き、メモリに何も書き込まれず、UAV の内容全体が未定義になります。
g# での範囲外のアドレス指定 (すべての共有メモリではなく、その特定の g# の境界) により、すべての共有メモリの内容全体が未定義になります。
この命令は、次のシェーダー ステージに適用されます。
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 | X |
シェーダー モデル 4 | X |
シェーダー モデル 3 (DirectX HLSL) | X |
シェーダー モデル 2 (DirectX HLSL) | X |
シェーダー モデル 1 (DirectX HLSL) | X |