D3D12¶
Early Z-Test¶
由图形驱动控制,不能用 D3D API 控制。如果像素着色器会修改深度(SV_Depth),就不能应用 Early Z-Test。参考 DX12 龙书第 400 页。
Shader 中越界访问¶
D3D11 中,Shader 越界读写没有问题,越界读会返回 0。1 但在 D3D12 中,如果资源使用的是 Root Descriptor,由于只提供了 D3D12_GPU_VIRTUAL_ADDRESS 而没有 Size,GPU 无法做越界检查,越界读写可能崩溃。如果是在 Descriptor Table 中的 Descriptor,由于创建对应 View 时在 Desc 中指定了 Size,所以越界读写行为和 D3D11 一致。2
RHI 封装¶
ring buffer¶
root signature hash¶
FNV-1a hash
- DirectX-Graphics-Samples/MiniEngine/Core/Hash.h at master · microsoft/DirectX-Graphics-Samples (github.com)
- Collision handling of PSO hash value · Issue #82 · microsoft/DirectX-Graphics-Samples (github.com)
- cpp-algorithms/src/algo/hash.cpp at master · SRombauts/cpp-algorithms (github.com)
- performance - Fast hash function with collision possibility near SHA-1 - Stack Overflow
- security - Which hashing algorithm is best for uniqueness and speed? - Software Engineering Stack Exchange
dxil 签名¶
需要把 WindowsSDK 的 dxil.dll 放到 exe 执行目录,ShaderCompiler 需要加载它然后对 dxil 签名。
cbuffer packing¶
资源管理¶
- DX12封装杂记:Descriptor及DescriptorHeap - 知乎 (zhihu.com)
- buddy allocator
- linear allocator
- directx - DX12 Descriptor Heaps management - Stack Overflow
- 尽量少切换 DescriptorHeap
- ID3D12GraphicsCommandList::SetDescriptorHeaps (d3d12.h) - Win32 apps | Microsoft Learn
- call SetDescriptorHeaps for secondary viewport in UserCallback · Issue #7336 · ocornut/imgui (github.com)
- Descriptor Heaps Overview - Win32 apps | Microsoft Learn
debug message¶
- D3D12 ID3D12InfoQueue1 APIs | DirectX-Specs (microsoft.github.io)
- D3D12 Debug Layer Message Callback - DirectX Developer Blog (microsoft.com)
windows 上 resize 窗口不会绘制的问题¶
- c++ - Window message WM_SIZING sending incessantly when window resizing - Stack Overflow
- direct3d12 - Why are the D3D12 samples using WM_PAINT? - Stack Overflow
- WM_PAINT message (Winuser.h) - Win32 apps | Microsoft Learn
- Resizing windows on Windows 10 shows jumpy behaviour · Issue #1231 · glfw/glfw (github.com)
- Win32 API: PeekMessage blocks main loop on window resize : r/C_Programming (reddit.com)
- WM_SIZE 消息 (Winuser.h) - Win32 apps | Microsoft Learn