store _ structured (sm5 - asm)

1 から 4 の 32 ビット コンポーネントを、順序付けされていない構造化バッファー アクセス ビュー (UAV) にランダム アクセスで書き込みます。

store _ structured dst0 [ .write _ mask , ] dstAddress [ .select コンポーネント , _ ] dstByteOffset [ .select コンポーネント , _ ] src0 [ .swizzle]
項目 [説明]
dst0
[in ] 操作の結果のアドレス。
dstAddress
[の ] 書き込み先のアドレス。
dstByteOffset
[in ] 書き込む構造体のインデックス。
src0
[の ] 書き込むコンポーネント。

解説

この命令では、src0 から dst0 に書き込まれた 1 から 4 のコンポーネント * 32ビット コンポーネントを 、dstAddressdstByteOffset のアドレスで実行します。 形式変換はありません。

dst0 は UAV (u ) である必要があります # 。 コンピューティング シェーダーでは、スレッド グループ共有メモリ (g) に設定できます # 。

dstAddress は 、書き込む構造体のインデックスを指定します。

書き込まれたデータの場所は、オフセット、アドレス、バッファーの内容へのポインター、ソースのストライド、および線形的に格納されたデータを示す次の擬似コードと同じです。

                    BYTE *BufferContents;             // from dst0
                    UINT BufferStride;                // from dst0
                    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));

この擬似コードは、操作がどのように機能するのか示しますが、実際のデータを線形的に格納する必要はない。 データが直線的に格納されていない場合、命令の実際の操作は上記の操作の動作と一致する必要があります。

dst0 には、.x、.xy、.xyz、.xyzw のいずれかの書き込みマスクのみを指定できます。 書き込みマスクは、ギャップなしで書き込む 32 ビット コンポーネントの数を決定します。

dstAddress によって処理される u の境界外のアドレス指定は、境界外メモリに何も書 # き込めなかった場合を意味します。

dstWriteMask を含む dstByteOffset が、ユーザーに対する境界外アクセスの原因である場合、UAV の内容全体が # 未定義になります。

特定の # 32 ビット コンポーネントに対する g (すべての共有メモリとは対照的に、その特定の g の境界) でアドレス指定すると、すべての共有メモリの内容全体が未定義になります。 #

dstByteOffset は、通常はリテラルなので 、dstAddress とは別の引数です。 このパラメーターの分離は、構造化メモリ上のアトミックに対して行われたのではありません。

cs _ 4 _ 0 および cs _ 4 _ 1 は、UAV と TGSM に対してこの命令をサポートします。

この命令は、次のシェーダー ステージに適用されます。

Vertex 船体 Domain ジオメトリ ピクセル Compute
X X

UAV は Direct3D 11.1 のすべてのシェーダー ステージで使用できます。このため、この手順は Direct3D 11.1 ランタイムのすべてのシェーダー ステージに適用されます。これは Windows 8 から使用できます。

Vertex 船体 Domain ジオメトリ ピクセル Compute
X X X X X X

最小シェーダー モデル

この命令は、次のシェーダー モデルでサポートされています。

シェーダー モデル サポート
シェーダー モデル 5 はい
シェーダー モデル 4.1
シェーダー モデル 4
シェーダー モデル 3 (DirectX HLSL)
シェーダー モデル 2 (DirectX HLSL)
シェーダー モデル 1 (DirectX HLSL)

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