store_structured (sm5 - asm)
構造化バッファーの順序なしのアクセス ビュー (UAV) への 1 から 4 個の 32 ビット コンポーネントのランダム アクセス書き込み。
store_structured dest[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle] |
---|
Item | 説明 |
---|---|
Dest |
[入力]操作の結果のアドレス。 |
dstAddress |
[入力]書き込むアドレス。 |
dstByteOffset |
[入力]書き込む構造体のインデックス。 |
src0 |
[入力]書き込むコンポーネント。 |
注釈
この命令は、 src0 から dest に書き込まれた 1 から 4 個のコンポーネント *32 ビット コンポーネントを dstAddress および dstByteOffset のアドレスで実行します。 形式変換なし。
dest は UAV (u#) である必要があります。 コンピューティング シェーダーでは、スレッド グループ共有メモリ (g#) にすることもできます。
dstAddress は、書き込む構造体のインデックスを指定します。
書き込まれるデータの場所は、オフセット、アドレス、バッファーコンテンツへのポインター、ソースのストライド、および線形に格納されたデータを示す次の擬似コードと同じです。
BYTE *BufferContents; // from dest
UINT BufferStride; // from dest
UINT dstAddress, dstByteOffset; // source registers
BYTE *WriteLocation; // value to calculate
// calculate writing location
WriteLocation = BufferContents
+ BufferStride * dstAddress
+ dstByteOffset;
// calculate the number of components to write
switch (dstWriteMask)
{
x: WriteComponents = 1; break;
xy: WriteComponents = 2; break;
xyz: WriteComponents = 3; break;
xyzw: WriteComponents = 4; break;
default: // only these masks are valid
}
// copy the data from the source register with
// the swizzle applied
memcpy(WriteLocation, swizzle(src0, src0.swizzle),
WriteComponents * sizeof(INT32));
この擬似コードは、操作がどのように機能するかを示しますが、実際のデータを線形的に格納する必要はありません。 データが線形的に格納されていない場合、命令の実際の操作は、上記の操作の動作と一致する必要があります。
dest には、次のいずれかの書き込みマスクのみを指定できます: .x、.xy、.xyz、.xyzw。 書き込みマスクは、ギャップなしで書き込む 32 ビット コンポーネントの数を決定します。
dstAddress によって引き起こされた u# での範囲外アドレス指定は、範囲外のメモリに何も書き込まれなかったことを意味します。
dstWriteMask を含む dstByteOffset が you# への範囲外のアクセスの原因である場合、UAV の内容全体が未定義になります。
指定された 32 ビット コンポーネントに対する g# での範囲外アドレス指定 (すべての共有メモリではなく、その特定の g# の境界) により、すべての共有メモリのコンテンツ全体が未定義になります。
dstByteOffset は、一般的にリテラルであるため 、dstAddress とは別の引数です。 このパラメーターの分離は、構造化メモリ上のアトミックに対しては行われていません。
cs_4_0とcs_4_1は、UAV と TGSM のこの命令をサポートします。
この命令は、次のシェーダー ステージに適用されます。
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 |