新しいリソースの種類
Direct3D 11 には、いくつかの新しいリソースの種類が追加されました。
- 読み取り/書き込みバッファーとテクスチャ
- 構造化バッファー
- バイト アドレス バッファーの
- 順序なしアクセス バッファーまたはテクスチャ を する
- バッファー の追加と使用の
- 関連トピック
読み取り/書き込みバッファーとテクスチャ
シェーダー モデル 4 のリソースは読み取り専用です。 シェーダー モデル 5 は、対応する新しい読み取り/書き込みリソースのセットを実装します。
- RWBuffer を する
- RWTexture1D、RWTexture1DArray
- RWTexture2D、RWTexture2DArray
- RWTexture3D を する
これらのリソースには、メモリに直接アクセスする方法がないため、(インデックスを使用して) メモリにアクセスするためにリソース変数が必要です。 リソース変数は、数式の左側と右側で使用できます。右側で使用する場合、テンプレート型は 1 つのコンポーネント (float、int、または uint) である必要があります。
構造化バッファー
構造化バッファーは、等しいサイズの要素を含むバッファーです。 1 つ以上のメンバー型を持つ構造体を使用して、要素を定義します。 3 つのメンバーを持つ構造を次に示します。
struct MyStruct
{
float4 Color;
float4 Normal;
bool isAwesome;
};
この構造体を使用して、次のような構造化バッファーを宣言します。
StructuredBuffer<MyStruct> mySB;
構造化バッファーでは、インデックス作成に加えて、次のような 1 つのメンバーへのアクセスがサポートされています。
float4 myColor = mySb[27].Color;
構造化バッファーにアクセスするには、次のオブジェクト型を使用します。
- StructuredBuffer は、読み取り専用の構造化バッファーです。
- RWStructuredBuffer は、読み取り/書き込みの構造化バッファーです。
の RWStructuredBuffer 内の int 要素と uint 要素に対して、インターロック操作を実装するアトミック関数 を使用できます。
バイト アドレス バッファー
バイト アドレス バッファーは、内容がバイト オフセットによってアドレス指定可能なバッファーです。 通常、バッファー の内容は、各要素 (S) のストライドと、S*N によって指定された要素番号 (N) を使用して、要素ごとにインデックスが作成されます。 バイト アドレス バッファーは、生バッファーとも呼ばれ、バッファーの先頭からのバイト値オフセットを使用してデータにアクセスします。 DWORD がアラインされるように、バイト値は 4 の倍数である必要があります。 その他の値が指定されている場合、動作は未定義です。
シェーダー モデル 5 には、読み取り専用バイト アドレス バッファー にアクセスするためのオブジェクトと、読み取り/書き込みバイト アドレス バッファーが導入されています。 バイト アドレス バッファーの内容は、32 ビット符号なし整数に設計されています。バッファー内の値が実際には符号なし整数でない場合は、asfloat などの関数を使用して読み取ります。
順序指定されていないアクセス バッファーまたはテクスチャ
順序付けされていないアクセス リソース (バッファー、テクスチャ、テクスチャ配列を含む - マルチサンプリングなし) では、複数のスレッドから一時的に順序指定されていない読み取り/書き込みアクセスが可能になります。 つまり、このリソースの種類は、Atomic Functionsを使用してメモリ競合を生成することなく、複数のスレッドで同時に読み取り/書き込みを行うことができます。
ID3D11Device::CreateBuffer や ID3D11Device::CreateTexture2D などの関数を呼び出し、D3D11_BIND_FLAG 列挙体から D3D11_BIND_UNORDERED_ACCESS フラグを渡すことによって、順序指定されていないアクセス バッファーまたはテクスチャを作成します。
順序なしアクセス リソースは、ピクセル シェーダーとコンピューティング シェーダーにのみバインドできます。 実行中、並列で実行されるピクセル シェーダーまたはコンピューティング シェーダーには、同じ順序なしのアクセス リソースがバインドされます。
バッファーの追加と使用
追加バッファーと消費バッファーは、スタックの動作と同様に、バッファーの末尾からの値の追加と削除をサポートする、順序付けられていないリソースの特殊な種類です。
追加バッファーと消費バッファーは、構造化バッファーである必要があります。
これらのリソースはメソッドを使用して使用します。これらのリソースはリソース変数を使用しません。
関連トピック