Dx12世代のXXXViewってなに
ビューはデータをどう解釈するかというもの。リソースとは違う。
D3D12ではディスクリプタと呼ばれることもあり、(SRV/CBV/UAV...) ディスクリプタヒープとはディスクリプタをまとめて確保しておく領域(ヒープ)のことである。
1つのディスクリプタヒープには同じ種類のディスクリプタしか格納できない。
SOのこの質問の答が結構わかりやすかった。
要点
リソースとリソースビューは別物
ビューはドライバにそのリソースをどう解釈するかを伝える
レンダリングパイプラインにどのようにバインド(記述)されるか
同じリソースでも異なるビューでバインドできる
リソースを作る際にD3D12_RESOURCE_DESCでFlagsの指定をするが、おそらくこれ(そのたFORMATなどの情報も含め)に基づいてメモリの置き場所を決めているのだろう。そしてそのフラグと一致しているビュー(ディスクリプタ)とはバインドできる(CBVにもなり得るしUAVにもなり得る)
(以下DeepL翻訳)
DirectXでは、リソースとはレンダリングに使用するデータのことです。例えば、テクスチャやバッファ(頂点バッファのようなもの)などです。そして、Vulkanと同様に、これらのリソースをどのように解釈するかをグラフィックドライバに知らせなければなりません。例えば、4 バイトのチャンクをバッファに格納し、そこからあたかも浮動小数点値のバッファであるかのように読み出すことができます。これが「ビュー」の出番です。ビュー(DX12ではディスクリプタとも呼ばれています)とは、ポインタのようなもので、指し示すリソースがパイプラインにバインドされる方法を記述したものです。頂点バッファとインデックスバッファ(場合によっては定数バッファも)を除いて、ほとんどの場合、ビュー(記述子)を使ってリソースをバインドしなければなりません。この処理をリソースバインディングと呼びます。
-
同じリソースを異なるビューでバインド(記述)することができることを知っておくことは重要です。例えば、テクスチャに SRV を定義し、その Mipmaps の一つに別の SRV を定義し、コンピュートシェーダに書き込むために同じテクスチャに UAV を定義することができます。
-