imm_atomic_umax (sm5 - asm)
メモリに対する即時アトミックな unsigned max。 最大操作の前のメモリ内の値を返します。
imm_atomic_umax dst0[.single_component_mask], dst1, dstAddress[.swizzle], src0[.select_component] |
---|
項目 | 説明 |
---|---|
dst0 |
[入力]この命令の前の dst1 の値を格納します。 |
dst1 |
[入力]順序なしアクセス ビュー (UAV) (u#)。 コンピューティング シェーダーでは、スレッド グループ共有メモリ (g#) を指定することもできます。 |
dstAddress |
[入力]メモリ アドレス。 |
src0 |
[入力]dstAddress で dst1 と比較する値。 |
解説
この命令では、コンポーネント アドレス dstAddress あたり 32 ビットの dst1 を使用して、オペランド src0 の 1 つのコンポーネント 32 ビット符号なし最大値を実行します。
dst1 が u# の場合は、生、型指定、または構造化として宣言されている可能性があります。 型指定する場合は、バインドされたリソース形式がR32_UINT/_SINTされる UINT/SINT として宣言する必要があります。
dst1 が g# の場合は、生または構造化として宣言する必要があります。
max より前の dst1 メモリの値が dst0 に返されます。
アドレスから取得されたコンポーネントの数は、 dst1 の次元によって決まります。
操作全体がアトミックに実行されます。
シェーダー呼び出しが非アクティブな場合 (たとえば、ピクセルが実行の早い段階で破棄された場合、またはピクセル/サンプル呼び出しが、派生関数の実際のピクセル/サンプルのヘルパーとしてのみ存在する場合)、この命令は 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 | no |
シェーダー モデル 4 | no |
シェーダー モデル 3 (DirectX HLSL) | no |
シェーダー モデル 2 (DirectX HLSL) | no |
シェーダー モデル 1 (DirectX HLSL) | no |