新しいリソースの種類

Direct3D 11 には、いくつかの新しいリソースの種類が追加されました。

読み取り/書き込みバッファーとテクスチャ

シェーダー モデル 4 のリソースは読み取り専用です。 シェーダー モデル 5 では、対応する新しい読み取り/書き込みリソースのセットが実装されます。

これらのリソースには、メモリに直接アクセスする方法がなから、(インデックス作成を介して) メモリにアクセスするためにリソース変数が必要です。 リソース変数は、式の左側と右側で使用できます。右側で使用する場合、テンプレート型は単一コンポーネント (float、int、または uint) である必要があります。

構造化バッファー

構造化バッファーは、同じサイズの要素を含むバッファーです。 要素を定義するには、1 つ以上のメンバー型を持つ 構造体を使用します。 3 つのメンバーを持つ 構造体を次に示します。

struct MyStruct
{
    float4 Color;
    float4 Normal;
    bool isAwesome;
};

この構造体を使用して、次のような構造化バッファーを宣言します。

StructuredBuffer<MyStruct> mySB;

構造化バッファーは、インデックス作成に加えて、次のような 1 つのメンバーへのアクセスをサポートします。

float4 myColor = mySb[27].Color;

構造化バッファーにアクセスするには、次のオブジェクトの種類を使用します。

インターロック された操作を実装するアトミック関数は 、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 フラグを渡して、順序指定されていないアクセス バッファーまたはテクスチャを作成します。

順序指定されていないアクセス リソースは、ピクセル シェーダーと計算シェーダーにのみバインドできます。 実行中、並列で実行されているピクセル シェーダーまたは計算シェーダーには、順序指定されていないアクセス リソースが同じバインドされます。

バッファーの追加と使用

追加バッファーと使用バッファーは、スタックの動作と同様に、バッファーの末尾からの値の追加と削除をサポートする、順序付けられていないリソースの特殊な種類です。

追加バッファーと使用バッファーは、構造化バッファーである必要があります。

これらのリソースはメソッドを通じて使用します。これらのリソースはリソース変数を使用します。

計算シェーダーの概要