4.7 KiB
4.7 KiB
D3D12
命名空间: XCEngine::RHI
类型: submodule
描述: XCEngine 的 Direct3D 12 后端入口,负责把抽象 RHI 设备、命令、描述符、资源和交换链映射到 DXGI 与 D3D12 原生对象。
概览
D3D12 子模块可以理解成引擎图形后端里更接近商业引擎 GfxDevice / Render Backend 的那一层,而不是脚本层会直接操作的高层渲染 API。
当前目录下的类型大体分成四组:
- 设备与提交基础设施:
D3D12Device、D3D12CommandQueue、D3D12CommandAllocator、D3D12CommandList - 资源与视图:
D3D12Buffer、D3D12Texture、D3D12ResourceView - 管线与绑定:
D3D12PipelineLayout、D3D12PipelineState、D3D12RootSignature、D3D12DescriptorHeap、D3D12DescriptorSet - 呈现与同步:
D3D12SwapChain、D3D12RenderPass、D3D12Framebuffer、D3D12Fence
设计要点
- 这套后端明显偏向“显式控制、轻量工厂、调用方自行管理生命周期”的风格,而不是 Unity 那种高度托管对象模型。
- RHI 层暴露了“descriptor set / pipeline layout”这一套跨后端抽象,但在 D3D12 中真正落地的是 root signature、descriptor heap 和 root parameter 映射。
- 代码把“先打通统一语义”放在更高优先级,因此部分实现是简化版。例如队列空闲等待、常量缓冲上传、资源状态跟踪都先覆盖主路径,再逐步补足更成熟的工程策略。
当前实现边界
- 平台路径是 Windows + DXGI + D3D12。
- 设备初始化会从
adapterIndex开始枚举适配器,跳过软件适配器,选择第一个能创建D3D_FEATURE_LEVEL_11_0设备的硬件适配器。 D3D12CommandQueue、D3D12CommandList、D3D12DescriptorSet已经形成了可跑通的核心路径,但仍存在一些明显的占位或简化实现。- 若你熟悉 Unity,可以把这里理解成“比 SRP backend 更低一层”的运行时封装;它强调可组合性和后端细节可见性,而不是隐藏 D3D12 的显式同步和绑定成本。
推荐阅读顺序
与测试的对应关系
tests/RHI/D3D12/unit/直接验证 D3D12 后端实现细节。tests/RHI/unit/test_device.cpp、tests/RHI/unit/test_descriptor_set.cpp、tests/RHI/unit/test_pipeline_layout.cpp会通过抽象层接口回归统一语义。tests/RHI/D3D12/integration/与tests/Rendering/integration/*负责覆盖真正的提交、呈现与截图链路。
头文件索引
- D3D12Buffer
- D3D12CommandAllocator
- D3D12CommandList
- D3D12CommandQueue
- D3D12Common
- D3D12DescriptorHeap
- D3D12DescriptorSet
- D3D12Device
- D3D12Enums
- D3D12Fence
- D3D12Framebuffer
- D3D12PipelineLayout
- D3D12PipelineState
- D3D12QueryHeap
- D3D12RenderPass
- D3D12ResourceView
- D3D12RootSignature
- D3D12Sampler
- D3D12Screenshot
- D3D12Shader
- D3D12SwapChain
- D3D12Texture
- D3D12Types