シェーダーが認識できない記述子ヒープ

一部の記述子ヒープをシェーダーは記述子テーブルを通じて参照できませんが、これらの記述子ヒープが存在するのは、コマンド リストを記録する前にアプリが記述子をステージングできるよう支援するため、またはシェーダーが認識できないヒープが必要であるためです。

認識できないビュー

前述したシェーダーがアクセスできる記述子ヒープを含むすべてのヒープは、アプリケーションが記述子ヒープに対して選択するメモリ プールおよび CPU アクセスのプロパティに基づき、CPU、コマンド リスト、またはこれらの両方で操作できます。

シェーダーが認識できる記述子ヒープの場合、これらの記述子ヒープへのシェーダー アクセスを拒否する明白な理由は、それらのヒープがステージング中であることです。 その後、これらのヒープをシェーダーは認識できるようになり、コマンド リストの実行時に記述子テーブルを介してこれらのヒープにアクセスします。 ただし、シェーダーが認識できるヒープをステージングする必要はありません。これらのヒープは直接設定できます。

その他の記述子は、記述子の内容をコマンド リストに直接記録することでパイプラインにバインドされます。 これらの記述子は、コマンド リストの記録時にビューのパラメーターの変換のみに使用されます。 これらのヒープをシェーダーは常に認識できません。これらのヒープには以下が含まれます。

  • レンダー ターゲット ビュー (RTV)
  • 深度ステンシル ビュー (DSV)

インデックス バッファー ビュー (IBV)、頂点バッファー ビュー (VBV)、およびストリーム出力ビュー (SOV) は API メソッドに直接渡されます。特定のヒープの種類はありません。

(たとえば、OMSetRenderTargets などの呼び出しを使用して) コマンド リストに記録を行った後、この呼び出しの記述子を保持するために使用されたメモリは、呼び出し後にすぐに再使用できるようになります。

(実行時にテーブル ポインターを逆参照するのではなく) コマンド リストの記録時にテーブルの内容を記録することを選択する実装をアプリで許可できるオプションが記述子テーブルにもあります。

まとめ

シェーダーが表示され、CPU 書き込み専用 シェーダーが表示されない、CPU の読み取り/書き込み
CBV、SRV、UAV はい はい
サンプラー はい はい
RTV no はい
DSV no はい

 

記述子ヒープ