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
シェーダー モデル 4
シェーダー モデル 3 (DirectX HLSL)
シェーダー モデル 2 (DirectX HLSL)
シェーダー モデル 1 (DirectX HLSL)

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