imm_atomic_alloc (sm5 - asm)
Count または Append unordered access view (UAV) と共に格納されている非表示の 32 ビット カウンターをアトミックにインクリメントし、元の値を返します。
imm_atomic_alloc dest[.single_component_mask], dstUAV |
---|
Item | 説明 |
---|---|
Dest |
[入力]返されたカウンター値を格納します。 |
dstUAV |
[入力]Count フラグまたは Append フラグを持つ構造化バッファー UAV。 |
注釈
各 Count ビューまたは Append Buffer ビューに関連付けられた非表示の符号なし 32 ビット整数カウンター値があります。これは、ビューがパイプラインにバインドされるときに初期化されます。これには、前の値を保持するオプションも含まれます。
この命令はカウンター値のアトミックインクリメントを行い、元の を dest に返します。
Append UAV の場合、戻り値はシェーダー呼び出しの期間中のみ有効です。 その後、実装はメモリ レイアウトを再配置できます。 返された値に基づくメモリ アドレス指定は、シェーダー呼び出しに制限する必要があります。
Append UAV の場合、シェーダー呼び出し内で、HLSL コンパイラは、構造化バッファーへのアクセスに使用する構造体インデックスとして戻り値を使用できます。 呼び出しによって返された場所以外の構造体インデックスにアクセスして 、imm_atomic_alloc または _consume にアクセスすると、未定義の結果が生成されます。その結果、UAV 内のどのメモリ位置にアクセスしているかがランダムになり、シェーダー呼び出しの有効期間中のみ固定されます。
Count UAV の場合、返された値は、シェーダー呼び出しが終了した後に意味のある UAV 内の固定された場所への参照としてアプリケーションによって保存できます。 Count UAV 内の任意の場所には、カウント値とは無関係に常にアクセスできます。
カウントのクランプがないため、オーバーフロー時にラップされます。
同じシェーダーは、同じ UAV でimm_atomic_alloc と imm_atomic_consume の両方を試行できません。 さらに、GPU では、同じ UAV で複数のシェーダー呼び出しで imm_atomic_alloc と imm_atomic_consume を混在させることはできません。
この命令は、次のシェーダー ステージに適用されます。
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 |