Direct3D12 Descriptor

Descriptor

Descriptor は D3D12 でリソースをシェーダーにバインドする(シェーダーからアクセスするためにリソースを設定する)単位。必ずしも一対一になる訳では無いが、CBV や SRV などの1リソースが 1Descriptor になる。

Descriptor Heap の作成

まずは、Descriptor のメモリー領域となる Descriptor Heap を作成する。専用の構造体に、これから作成する Descriptor Heap の個数とどのようなタイプ(CBV, SRV, UAV や Sampler) として使うのかを指定して、Device::CreateDescriptorHeap() に渡してヒープを作成する。

RTV や CBV など、Type によって Heap は分けて作成する。

Descriptor Handle の作成

作った Descriptor Heap から Descriptor Handle を得る。これは Heap::GetCPUDescriptorHandleForHeapStart() を呼び出して取得する。一つの Descriptor Handle から複数の Descriptor を作成できるが、その際は、 Device::GetDescriptorHandleIncrementSize() を使って、次の Descriptor Handle へのポインタ位置を計算して取得する。

D3D11 の時は View を作成するときは専用の ShaderResourceView などを渡していたが、D3D12 では Descriptor Handle を渡す。CreateConstantBufferView() や CreateRenderTargetView() の引数には、この Descriptor Handle を設定する。

RenderTargetView

  • CommandList->OMSetRenderTargets()
  • CommandList->ClearRenderTargetView()

などを呼び出すときは、View を作成した Descriptor Heap を渡す。

SetDescriptorHeaps

サンプルの中で、CommandList->SetDescriptorHeaps() を呼び出している箇所があった。しかし CBV Heap を設定していたが、RTV heap は設定していなかった。SetDescriptorHeaps() は いつ何を設定する必要があるんだ…?

DirectX Raytracing 学習リソース

DirectX Raytracing – The life of a ray tracing kernel.
https://cedil.cesa.or.jp/cedil_sessions/view/1825

microsoft/DirectX-Graphics-Samples
https://github.com/microsoft/DirectX-Graphics-Samples

NVIDIAGameWorks/DxrTutorials
https://github.com/NVIDIAGameWorks/DxrTutorials

確率密度関数からモンテカルロ積分まで
https://qiita.com/Ushio/items/0040b3c74a480c46c80c

Introduction to DirectX RayTracing
http://intro-to-dxr.cwyman.org/

Ray Tracing Resources Page
http://www.realtimerendering.com/raytracing.html

DirectX12 のブックマーク

Direct3D 12 graphics
https://docs.microsoft.com/en-us/windows/desktop/direct3d12/direct3d-12-graphics

Direct3D 12 特集
https://www.isus.jp/games/directx-12/

Learning DirectX 12 – Lesson 1 – Initialize DirectX 12
https://www.3dgep.com/learning-directx12-1/
Lesson 1~3 まであり、分かりやすいです

Microsoft DirectX 12 and Graphics Education
https://www.youtube.com/channel/UCiaX2B8XiXR70jaN7NK-FpA/videos

HelloD3D12 DirectX 12 Sample
https://gpuopen.com/gaming-product/hellod3d12-directx-12-sdk-sample/

DirectX Raytracing

A Gentle Introduction To DirectX Raytracing
http://cwyman.org/code/dxrTutors/dxr_tutors.md.html

DX12 Ray Tracing Tutorials
https://news.developer.nvidia.com/dx12-raytracing-tutorials/

DX12 Raytracing tutorial – Part 1
https://developer.nvidia.com/rtx/raytracing/dxr/DX12-Raytracing-tutorial-Part-1

DX12 Raytracing tutorial – Part 2
https://developer.nvidia.com/rtx/raytracing/dxr/DX12-Raytracing-tutorial-Part-2