# D3D12DescriptorHeap **命名空间**: `XCEngine::RHI` **继承自**: [`RHIDescriptorPool`](../../descriptor-pool/descriptor-pool.md) **描述**: DirectX 12 描述符堆的 D3D12 实现,继承自 `RHIDescriptorPool`。描述符堆是 D3D12 中用于存储描述符(CBV/SRV/UAV/Sampler)的内存块,支持 CPU 可访问和 GPU 可访问两种模式。 **概述**: `D3D12DescriptorHeap` 封装了 D3D12 的描述符堆资源,提供描述符的分配、句柄计算和资源管理功能。描述符堆类型包括: - `CBV_SRV_UAV` - 常量缓冲区、Shader资源和无序访问视图 - `SAMPLER` - 采样器 描述符堆可以标记为 `shaderVisible`,使其可被 GPU shader 访问。仅当需要绑定到命令列表时才应使用 shader visible 堆。 ## 公共方法 | 方法 | 描述 | |------|------| | [`D3D12DescriptorHeap`](constructor.md) | 构造函数 | | [`Initialize`](initialize-from-desc.md) | 从描述符初始化 | | [`Initialize(ID3D12Device*,...)`](initialize-device.md) | 直接初始化 | | [`Shutdown`](shutdown.md) | 关闭描述符堆 | | [`GetDescriptorHeap`](get-descriptor-heap.md) | 获取 D3D12 描述符堆 | | [`GetCPUDescriptorHandle`](get-cpu-descriptor-handle.md) | 获取 CPU 描述符句柄 | | [`GetGPUDescriptorHandle`](get-gpu-descriptor-handle.md) | 获取 GPU 描述符句柄 | | [`GetDescriptorCount`](get-descriptor-count.md) | 获取描述符数量 | | [`GetType`](get-type.md) | 获取描述符类型 | | [`GetDescriptorSize`](get-descriptor-size.md) | 获取描述符大小 | | [`GetCPUDescriptorHandleForHeapStart`](get-cpu-descriptor-handle-for-heap-start.md) | 获取堆起始 CPU 句柄 | | [`GetGPUDescriptorHandleForHeapStart`](get-gpu-descriptor-handle-for-heap-start.md) | 获取堆起始 GPU 句柄 | | [`GetNativeHandle`](get-native-handle.md) | 获取原生句柄 | | [`CreateDesc`](create-desc.md) | 创建描述符(静态) | ## 使用示例 ```cpp #include "XCEngine/RHI/D3D12/D3D12DescriptorHeap.h" using namespace XCEngine::RHI; // 创建设备 ID3D12Device* device = ...; // 创建 CBV/SRV/UAV 描述符堆 D3D12DescriptorHeap heap; heap.Initialize(device, DescriptorHeapType::CBV_SRV_UAV, 256, true); // 获取描述符句柄 CPUDescriptorHandle cpuHandle = heap.GetCPUDescriptorHandle(0); GPUDescriptorHandle gpuHandle = heap.GetGPUDescriptorHandle(0); // 关闭 heap.Shutdown(); ``` ## 相关文档 - [D3D12 后端总览](../d3d12.md) - [RHIDescriptorPool](../../descriptor-pool/descriptor-pool.md) - 抽象描述符池接口 - [D3D12Enum](d3d12-enum.md) - D3D12 类型枚举映射