store_structured (sm5 - asm)

構造化バッファーの順序なしアクセス ビュー (UAV) への 1 ~ 4 個の 32 ビット コンポーネントのランダム アクセス書き込み。

store_structured dst0[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle]
Item 説明
dst0
[in]操作の結果のアドレス。
dstAddress
[in]書き込むアドレス。
dstByteOffset
[in]書き込む構造体のインデックス。
src0
[in]書き込むコンポーネント。

注釈

この命令は、 src0 から dst0 に書き込まれた 1 から 4 個のコンポーネント *32 ビット コンポーネントを 、dstAddress および dstByteOffset のアドレスで実行します。 形式変換なし。

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 が 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 のすべてのシェーダー ステージで使用できるため、この命令は、Windows 8 以降で使用できる Direct3D 11.1 ランタイムのすべてのシェーダー ステージに適用されます。

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)