41 lines
1.3 KiB
Markdown
41 lines
1.3 KiB
Markdown
|
|
# D3D12DescriptorHeap::Initialize
|
||
|
|
|
||
|
|
```cpp
|
||
|
|
bool Initialize(ID3D12Device* device, DescriptorHeapType type, uint32_t numDescriptors, bool shaderVisible = false);
|
||
|
|
```
|
||
|
|
|
||
|
|
直接使用 D3D12 设备创描述符堆。这是主要初始化方法,会创建底层的 `ID3D12DescriptorHeap` COM 对象。
|
||
|
|
|
||
|
|
**参数:**
|
||
|
|
- `device` - D3D12 设备指针,不得为 `nullptr`
|
||
|
|
- `type` - 描述符堆类型,决定堆中存储的描述符种类
|
||
|
|
- `numDescriptors` - 描述符数量,必须大于 0
|
||
|
|
- `shaderVisible` - 是否创建为 shader visible 模式。shader visible 的堆可绑定到命令列表供 shader 访问,但会增加 GPU 访问开销
|
||
|
|
|
||
|
|
**返回:** 是否初始化成功。失败时返回 `false`,可能原因包括:
|
||
|
|
- 设备指针无效
|
||
|
|
- 描述符数量为 0
|
||
|
|
- D3D12 API 创建堆失败
|
||
|
|
|
||
|
|
**复杂度:** O(1)
|
||
|
|
|
||
|
|
## 示例
|
||
|
|
|
||
|
|
```cpp
|
||
|
|
ID3D12Device* device = ...;
|
||
|
|
|
||
|
|
// 创建不可见的 CPU 描述符堆
|
||
|
|
D3D12DescriptorHeap cpuHeap;
|
||
|
|
cpuHeap.Initialize(device, DescriptorHeapType::CBV_SRV_UAV, 64, false);
|
||
|
|
|
||
|
|
// 创建 GPU 可见的描述符堆
|
||
|
|
D3D12DescriptorHeap gpuHeap;
|
||
|
|
gpuHeap.Initialize(device, DescriptorHeapType::CBV_SRV_UAV, 256, true);
|
||
|
|
```
|
||
|
|
|
||
|
|
## 相关文档
|
||
|
|
|
||
|
|
- [D3D12DescriptorHeap 总览](descriptor-heap.md) - 返回类总览
|
||
|
|
- [Initialize(const DescriptorPoolDesc&)](initialize-from-desc.md) - 描述符重载
|
||
|
|
- [CreateDesc](create-desc.md) - 创建描述符结构体
|