🔍

Direct3D12世代のXXXViewってなに

2022/06/09に公開

D3D12ではディスクリプタと呼ばれることもあり、(SRV/CBV/UAV…) ディスクリプタヒープとはディスクリプタをまとめて確保しておく領域(ヒープ)のことである。 1つのディスクリプタヒープには同じ種類のディスクリプタしか格納できない。

SOのこの質問の答が結構わかりやすかった。

https://stackoverflow.com/questions/56821782/what-is-the-difference-between-a-resource-and-a-resource-view

要点

リソースを作る際にD3D12_RESOURCE_DESCでFlagsの指定をするが、おそらくこれ(そのたFORMATなどの情報も含め)に基づいてメモリの置き場所を決めているのだろう。そしてそのフラグと一致しているビュー(ディスクリプタ)とはバインドできる(CBVにもなり得るしUAVにもなり得る)

(以下DeepL翻訳)

DirectXでは、リソースとはレンダリングに使用するデータのことです。例えば、テクスチャやバッファ(頂点バッファのようなもの)などです。そして、Vulkanと同様に、これらのリソースをどのように解釈するかをグラフィックドライバに知らせなければなりません。例えば、4 バイトのチャンクをバッファに格納し、そこからあたかも浮動小数点値のバッファであるかのように読み出すことができます。これが「ビュー」の出番です。ビュー(DX12ではディスクリプタとも呼ばれています)とは、ポインタのようなもので、指し示すリソースがパイプラインにバインドされる方法を記述したものです。頂点バッファとインデックスバッファ(場合によっては定数バッファも)を除いて、ほとんどの場合、ビュー(記述子)を使ってリソースをバインドしなければなりません。この処理をリソースバインディングと呼びます。 - 同じリソースを異なるビューでバインド(記述)することができることを知っておくことは重要です。例えば、テクスチャに SRV を定義し、その Mipmaps の一つに別の SRV を定義し、コンピュートシェーダに書き込むために同じテクスチャに UAV を定義することができます。 - リソースバインディングは、D3D11/12でリソースを使用/管理するための主な処理です。これを理解するのはそれほど難しいことではありませんが、ここでは長くなりすぎて全体を説明できません。詳しくはMSのドキュメント([Resource Binding - Win32 apps | Microsoft Docs https://docs.microsoft.com/en-us/windows/win32/direct3d12/resource-binding])を参照してください。

Discussion