docs: 重构 API 文档结构并修正源码准确性

- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
  - math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
  - containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
  - core: 修复 types 链接错误
  - debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
  - memory: 修复头文件路径, malloc vs operator new, 新增方法文档
  - resources: 修复 Shader/Texture 链接错误
  - threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
This commit is contained in:
2026-03-19 00:22:30 +08:00
parent d0e16962c8
commit dc850d7739
1012 changed files with 26673 additions and 9222 deletions

View File

@@ -0,0 +1,36 @@
# D3D12 后端组件
D3D12 后端已创建以下组件文件夹和文档:
- `device/` - D3D12Device
- `buffer/` - D3D12Buffer
- `texture/` - D3D12Texture
- `command-list/` - D3D12CommandList
- `command-queue/` - D3D12CommandQueue
- `swap-chain/` - D3D12SwapChain
- `fence/` - D3D12Fence
- `shader/` - D3D12Shader
- `pipeline-state/` - D3D12PipelineState
- `sampler/` - D3D12Sampler
- `root-signature/` - D3D12RootSignature
- `descriptor-heap/` - D3D12DescriptorHeap
- `render-target-view/` - D3D12RenderTargetView
- `depth-stencil-view/` - D3D12DepthStencilView
- `shader-resource-view/` - D3D12ShaderResourceView
- `unordered-access-view/` - D3D12UnorderedAccessView
- `constant-buffer-view/` - D3D12ConstantBufferView
- `command-allocator/` - D3D12CommandAllocator
- `query-heap/` - D3D12QueryHeap
- `screenshot/` - D3D12Screenshot
- `types/` - D3D12 类型转换
- `enums/` - D3D12 枚举转换
- `common/` - D3D12 公共工具
每个组件文件夹包含:
- `{component}.md` - 类总览
- `methods.md` - 方法详细文档
## 相关文档
- [D3D12 后端总览](overview.md)
- [RHI 抽象层](overview.md)

View File

@@ -0,0 +1,33 @@
# D3D12Buffer
**命名空间**: `XCEngine::RHI`
**描述**: DirectX 12 缓冲区的 D3D12 实现,继承自 `RHIBuffer`
## 方法列表
| 方法 | 文档 |
|------|------|
| `Initialize` | [详细文档](initialize.md) |
| `InitializeFromExisting` | [详细文档](initialize-from-existing.md) |
| `InitializeWithData` | [详细文档](initialize-with-data.md) |
| `Shutdown` | [详细文档](shutdown.md) |
| `UpdateData` | [详细文档](update-data.md) |
| `Map` | [详细文档](map.md) |
| `Unmap` | [详细文档](unmap.md) |
| `SetData` | [详细文档](set-data.md) |
| `GetResource` | [详细文档](get-resource.md) |
| `GetDesc` | [详细文档](get-desc.md) |
| `GetGPUVirtualAddress` | [详细文档](get-gpu-virtual-address.md) |
| `GetGPUAddress` | [详细文档](get-gpu-address.md) |
| `GetSize` | [详细文档](get-size.md) |
| `GetState` / `SetState` | [详细文档](get-state.md) |
| `GetName` / `SetName` | [详细文档](get-name.md) |
| `GetStride` / `SetStride` | [详细文档](get-stride.md) |
| `GetBufferType` / `SetBufferType` | [详细文档](get-buffer-type.md) |
| `GetNativeHandle` | [详细文档](get-native-handle.md) |
## 相关文档
- [D3D12 后端总览](../overview.md)
- [RHIBuffer](../../buffer/buffer.md) - 抽象缓冲区接口

View File

@@ -0,0 +1,16 @@
# D3D12Buffer::GetBufferType / SetBufferType
## 函数签名
```cpp
BufferType GetBufferType() const override
void SetBufferType(BufferType type) override
```
## 中文描述
获取和设置缓冲区类型Vertex / Index / Constant 等)。
## 复杂度
O(1)

View File

@@ -0,0 +1,19 @@
# D3D12Buffer::GetDesc
## 函数签名
```cpp
D3D12_RESOURCE_DESC GetDesc() const
```
## 中文描述
获取 D3D12 资源描述结构。
## 返回值
`D3D12_RESOURCE_DESC` - 资源描述
## 复杂度
O(1)

View File

@@ -0,0 +1,19 @@
# D3D12Buffer::GetGPUAddress
## 函数签名
```cpp
uint64_t GetGPUAddress() const
```
## 中文描述
获取 GPU 地址(等同于 `GetGPUVirtualAddress`)。
## 返回值
`uint64_t` - GPU 地址
## 复杂度
O(1)

View File

@@ -0,0 +1,19 @@
# D3D12Buffer::GetGPUVirtualAddress
## 函数签名
```cpp
D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress() const
```
## 中文描述
获取 GPU 虚拟地址,用于根签名绑定。
## 返回值
`D3D12_GPU_VIRTUAL_ADDRESS` - GPU 虚拟地址
## 复杂度
O(1)

View File

@@ -0,0 +1,16 @@
# D3D12Buffer::GetName / SetName
## 函数签名
```cpp
const std::string& GetName() const override
void SetName(const std::string& name) override
```
## 中文描述
获取和设置对象名称(用于调试)。
## 复杂度
O(1)

View File

@@ -0,0 +1,19 @@
# D3D12Buffer::GetNativeHandle
## 函数签名
```cpp
void* GetNativeHandle() override
```
## 中文描述
返回原生句柄,即 `ID3D12Resource*`
## 返回值
`void*` - 原生句柄
## 复杂度
O(1)

View File

@@ -0,0 +1,19 @@
# D3D12Buffer::GetResource
## 函数签名
```cpp
ID3D12Resource* GetResource() const
```
## 中文描述
获取底层 `ID3D12Resource` 指针。
## 返回值
`ID3D12Resource*` - D3D12 资源指针
## 复杂度
O(1)

View File

@@ -0,0 +1,19 @@
# D3D12Buffer::GetSize
## 函数签名
```cpp
uint64_t GetSize() const override
```
## 中文描述
获取缓冲区大小(字节)。
## 返回值
`uint64_t` - 缓冲区大小
## 复杂度
O(1)

View File

@@ -0,0 +1,16 @@
# D3D12Buffer::GetState / SetState
## 函数签名
```cpp
ResourceStates GetState() const
void SetState(ResourceStates state)
```
## 中文描述
获取和设置当前资源状态。用于状态跟踪和屏障生成。
## 复杂度
O(1)

View File

@@ -0,0 +1,16 @@
# D3D12Buffer::GetStride / SetStride
## 函数签名
```cpp
uint32_t GetStride() const override
void SetStride(uint32_t stride) override
```
## 中文描述
获取和设置顶点缓冲区步长(字节)。
## 复杂度
O(1)

View File

@@ -0,0 +1,35 @@
# D3D12Buffer::InitializeFromExisting
## 函数签名
```cpp
bool InitializeFromExisting(ID3D12Resource* resource)
```
## 中文描述
从已存在的 D3D12 资源对象初始化缓冲区包装类,不分配新资源。
## 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `resource` | `ID3D12Resource*` | 已存在的 D3D12 资源指针 |
## 返回值
`bool` - 初始化是否成功
## 复杂度
O(1)
## 示例
```cpp
ComPtr<ID3D12Resource> existingResource;
device->CreateReservedResource(&desc, state, nullptr, IID_PPV_ARGS(&existingResource));
D3D12Buffer buffer;
buffer.InitializeFromExisting(existingResource.Get());
```

View File

@@ -0,0 +1,42 @@
# D3D12Buffer::InitializeWithData
## 函数签名
```cpp
bool InitializeWithData(ID3D12Device* device, ID3D12GraphicsCommandList* commandList, const void* data, uint64_t size, D3D12_RESOURCE_STATES finalState)
```
## 中文描述
创建缓冲区并通过命令列表从内存数据初始化内容。内部会自动创建上传堆、复制数据、转换状态。
## 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `device` | `ID3D12Device*` | D3D12 设备指针 |
| `commandList` | `ID3D12GraphicsCommandList*` | 命令列表(用于复制操作) |
| `data` | `const void*` | 初始数据指针 |
| `size` | `uint64_t` | 数据大小(字节) |
| `finalState` | `D3D12_RESOURCE_STATES` | 数据复制完成后的目标状态 |
## 返回值
`bool` - 初始化是否成功
## 复杂度
O(n) - 取决于数据大小,内部创建临时上传堆
## 示例
```cpp
uint16_t indices[] = { 0, 1, 2, 1, 3, 2 };
D3D12Buffer indexBuffer;
D3D12Buffer::InitializeWithData(
device->GetDevice(),
cmdList->GetCommandList(),
indices,
sizeof(indices),
D3D12_RESOURCE_STATE_INDEX_BUFFER);
```

View File

@@ -0,0 +1,39 @@
# D3D12Buffer::Initialize
## 函数签名
```cpp
bool Initialize(ID3D12Device* device, uint64_t size, D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON, D3D12_HEAP_TYPE heapType = D3D12_HEAP_TYPE_DEFAULT)
```
## 中文描述
创建新缓冲区,分配 D3D12 显存资源。
## 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `device` | `ID3D12Device*` | D3D12 设备指针 |
| `size` | `uint64_t` | 缓冲区大小(字节) |
| `initialState` | `D3D12_RESOURCE_STATES` | 初始资源状态(默认 COMMON |
| `heapType` | `D3D12_HEAP_TYPE` | 堆类型DEFAULT默认、UPLOAD上传、READBACK回读 |
## 返回值
`bool` - 初始化是否成功
## 复杂度
O(n) - 取决于缓冲区大小
## 示例
```cpp
D3D12Buffer vertexBuffer;
vertexBuffer.Initialize(
device->GetDevice(),
sizeof(Vertex) * vertexCount,
D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER,
D3D12_HEAP_TYPE_DEFAULT);
```

View File

@@ -0,0 +1,27 @@
# D3D12Buffer::Map
## 函数签名
```cpp
void* Map() override
```
## 中文描述
将缓冲区内存映射到 CPU 可访问地址。仅对 UPLOAD 或 READBACK 堆有效。
## 返回值
`void*` - 映射的内存指针
## 复杂度
O(1)
## 示例
```cpp
void* mapped = uploadBuffer.Map();
memcpy(mapped, vertexData, sizeof(vertexData));
buffer.Unmap();
```

View File

@@ -0,0 +1,23 @@
# D3D12Buffer::SetData
## 函数签名
```cpp
void SetData(const void* data, size_t size, size_t offset = 0) override
```
## 中文描述
设置缓冲区数据。通过 Map/Unmap 实现。
## 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `data` | `const void*` | 数据指针 |
| `size` | `size_t` | 数据大小 |
| `offset` | `size_t` | 缓冲区内的偏移量 |
## 复杂度
O(n)

View File

@@ -0,0 +1,15 @@
# D3D12Buffer::Shutdown
## 函数签名
```cpp
void Shutdown() override
```
## 中文描述
释放 D3D12 缓冲区资源,将成员变量置为空。
## 复杂度
O(1)

View File

@@ -0,0 +1,15 @@
# D3D12Buffer::Unmap
## 函数签名
```cpp
void Unmap() override
```
## 中文描述
解除缓冲区内存映射。
## 复杂度
O(1)

View File

@@ -0,0 +1,28 @@
# D3D12Buffer::UpdateData
## 函数签名
```cpp
void UpdateData(const void* data, uint64_t size)
```
## 中文描述
更新缓冲区数据。要求缓冲区使用 UPLOAD 堆类型,否则行为未定义。
## 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `data` | `const void*` | 新数据指针 |
| `size` | `uint64_t` | 数据大小 |
## 复杂度
O(n)
## 示例
```cpp
uploadBuffer.UpdateData(newData, dataSize);
```

View File

@@ -0,0 +1,19 @@
# D3D12CommandAllocator
**命名空间**: `XCEngine::RHI`
**描述**: DirectX 12 命令分配器的 D3D12 实现。
## 方法列表
| 方法 | 文档 |
|------|------|
| `Initialize` | [详细文档](../../../threading/task-system/initialize.md) |
| `Shutdown` | [详细文档](../../../threading/task-system/shutdown.md) |
| `Reset` | [详细文档](../../../resources/resourcehandle/reset.md) |
| `IsReady` | [详细文档](is-ready.md) |
| `GetCommandAllocator` | [详细文档](get-command-allocator.md) |
## 相关文档
- [D3D12 后端总览](../overview.md)

View File

@@ -0,0 +1,15 @@
# D3D12CommandAllocator::GetCommandAllocator
```cpp
ID3D12CommandAllocator* GetCommandAllocator() const { return m_commandAllocator.Get(); }
```
获取底层的 D3D12 命令分配器接口。
**返回:** `ID3D12CommandAllocator*`
**复杂度:** O(1)
## 相关文档
- [D3D12CommandAllocator 总览](command-allocator.md) - 返回类总览

View File

@@ -0,0 +1,15 @@
# D3D12CommandAllocator::IsReady
```cpp
bool IsReady() const;
```
检查命令分配器是否准备就绪。
**返回:** 分配器是否准备就绪
**复杂度:** O(1)
## 相关文档
- [D3D12CommandAllocator 总览](command-allocator.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::AliasBarrier
```cpp
void AliasBarrier(void* beforeResource = nullptr, void* afterResource = nullptr);
```
添加资源别名屏障。
**参数:**
- `beforeResource` - 别名切换前的资源
- `afterResource` - 别名切换后的资源
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::BeginQuery
```cpp
void BeginQuery(ID3D12QueryHeap* queryHeap, QueryType type, uint32_t index);
```
开始查询。
**参数:**
- `queryHeap` - 查询堆
- `type` - 查询类型
- `index` - 查询索引
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::ClearDepthStencil
```cpp
void ClearDepthStencil(void* depthStencil, float depth, uint8_t stencil) override;
```
清除深度模板。
**参数:**
- `depthStencil` - 深度模板指针
- `depth` - 深度值
- `stencil` - 模板值
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::ClearRenderTarget
```cpp
void ClearRenderTarget(void* renderTarget, const float color[4]) override;
```
清除渲染目标。
**参数:**
- `renderTarget` - 渲染目标指针
- `color` - 清除颜色 [r, g, b, a]
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,143 @@
# D3D12CommandList
**命名空间**: `XCEngine::RHI`
**描述**: DirectX 12 命令列表的 D3D12 实现,继承自 `RHICommandList`
## 方法列表
### 生命周期
| 方法 | 文档 |
|------|------|
| `Initialize` | [详细文档](../../../threading/task-system/initialize.md) |
| `Shutdown` | [详细文档](../../../threading/task-system/shutdown.md) |
| `Reset` | [详细文档](../../../resources/resourcehandle/reset.md) |
| `Close` | [详细文档](../../../core/filewriter/close.md) |
| `GetCommandList` | [详细文档](get-command-list.md) |
### 资源屏障
| 方法 | 文档 |
|------|------|
| `TransitionBarrier` | [详细文档](transition-barrier.md) |
| `TransitionBarrierInternal` | [详细文档](transition-barrier-internal.md) |
| `UAVBarrier` | [详细文档](uav-barrier.md) |
| `AliasBarrier` | [详细文档](alias-barrier.md) |
### 管线状态
| 方法 | 文档 |
|------|------|
| `SetPipelineState` | [详细文档](set-pipeline-state.md) |
| `SetRootSignature` | [详细文档](set-root-signature.md) |
| `SetPrimitiveTopology` | [详细文档](set-primitive-topology.md) |
### 视口与裁剪
| 方法 | 文档 |
|------|------|
| `SetViewport` | [详细文档](set-viewport.md) |
| `SetViewports` | [详细文档](set-viewports.md) |
| `SetScissorRect` | [详细文档](set-scissor-rect.md) |
| `SetScissorRects` | [详细文档](set-scissor-rects.md) |
### 渲染目标
| 方法 | 文档 |
|------|------|
| `SetRenderTargets` | [详细文档](set-render-targets.md) |
| `SetRenderTargetsInternal` | [详细文档](set-render-targets-internal.md) |
| `SetRenderTargetsHandle` | [详细文档](set-render-targets-handle.md) |
### 顶点/索引缓冲区
| 方法 | 文档 |
|------|------|
| `SetVertexBuffer` | [详细文档](set-vertex-buffer.md) |
| `SetVertexBuffers` | [详细文档](set-vertex-buffers.md) |
| `SetIndexBuffer` | [详细文档](set-index-buffer.md) |
### 描述符
| 方法 | 文档 |
|------|------|
| `SetDescriptorHeap` | [详细文档](set-descriptor-heap.md) |
| `SetDescriptorHeaps` | [详细文档](set-descriptor-heaps.md) |
| `SetGraphicsDescriptorTable` | [详细文档](set-graphics-descriptor-table.md) |
| `SetComputeDescriptorTable` | [详细文档](set-compute-descriptor-table.md) |
### 根参数绑定
| 方法 | 文档 |
|------|------|
| `SetGraphicsRootConstantBufferView` | [详细文档](set-graphics-root-constant-buffer-view.md) |
| `SetGraphicsRoot32BitConstants` | [详细文档](set-graphics-root-32bit-constants.md) |
| `SetGraphicsRootDescriptorTable` | [详细文档](set-graphics-root-descriptor-table.md) |
| `SetGraphicsRootShaderResourceView` | [详细文档](set-graphics-root-shader-resource-view.md) |
### 渲染状态
| 方法 | 文档 |
|------|------|
| `SetStencilRef` | [详细文档](set-stencil-ref.md) |
| `SetBlendFactor` | [详细文档](set-blend-factor.md) |
| `SetDepthBias` | [详细文档](set-depth-bias.md) |
### 绘制
| 方法 | 文档 |
|------|------|
| `Draw` | [详细文档](draw.md) |
| `DrawIndexed` | [详细文档](draw-indexed.md) |
| `DrawInstancedIndirect` | [详细文档](draw-instanced-indirect.md) |
| `DrawIndexedInstancedIndirect` | [详细文档](draw-indexed-instanced-indirect.md) |
### 清除
| 方法 | 文档 |
|------|------|
| `Clear` | [详细文档](../../../memory/linear-allocator/clear.md) |
| `ClearRenderTarget` | [详细文档](clear-render-target.md) |
| `ClearDepthStencil` | [详细文档](clear-depth-stencil.md) |
### 复制
| 方法 | 文档 |
|------|------|
| `CopyResource` | [详细文档](copy-resource.md) |
| `CopyBuffer` | [详细文档](copy-buffer.md) |
| `CopyTexture` | [详细文档](copy-texture.md) |
### 查询
| 方法 | 文档 |
|------|------|
| `BeginQuery` | [详细文档](begin-query.md) |
| `EndQuery` | [详细文档](end-query.md) |
| `ResolveQueryData` | [详细文档](resolve-query-data.md) |
### 计算
| 方法 | 文档 |
|------|------|
| `Dispatch` | [详细文档](dispatch.md) |
| `DispatchIndirect` | [详细文档](dispatch-indirect.md) |
### Bundle
| 方法 | 文档 |
|------|------|
| `ExecuteBundle` | [详细文档](execute-bundle.md) |
### 状态管理
| 方法 | 文档 |
|------|------|
| `GetResourceState` | [详细文档](get-resource-state.md) |
| `TrackResource` | [详细文档](track-resource.md) |
## 相关文档
- [D3D12 后端总览](../overview.md)
- [RHICommandList](../../command-list/command-list.md) - 抽象命令列表接口

View File

@@ -0,0 +1,20 @@
# D3D12CommandList::CopyBuffer
```cpp
void CopyBuffer(ID3D12Resource* dst, uint64_t dstOffset, ID3D12Resource* src, uint64_t srcOffset, uint64_t size);
```
复制缓冲区。
**参数:**
- `dst` - 目标缓冲区
- `dstOffset` - 目标偏移
- `src` - 源缓冲区
- `srcOffset` - 源偏移
- `size` - 复制大小
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::CopyResource
```cpp
void CopyResource(void* dst, void* src) override;
```
复制资源。
**参数:**
- `dst` - 目标资源指针
- `src` - 源资源指针
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,19 @@
# D3D12CommandList::CopyTexture
```cpp
void CopyTexture(ID3D12Resource* dst, const D3D12_TEXTURE_COPY_LOCATION& dstLocation, ID3D12Resource* src, const D3D12_TEXTURE_COPY_LOCATION& srcLocation);
```
复制纹理。
**参数:**
- `dst` - 目标纹理
- `dstLocation` - 目标位置
- `src` - 源纹理
- `srcLocation` - 源位置
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::DispatchIndirect
```cpp
void DispatchIndirect(void* argBuffer, uint64_t alignedByteOffset);
```
间接分发计算命令。
**参数:**
- `argBuffer` - 参数缓冲区
- `alignedByteOffset` - 字节偏移
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::Dispatch
```cpp
void Dispatch(uint32_t x, uint32_t y, uint32_t z) override;
```
分发计算命令。
**参数:**
- `x` - X 维度线程组数量
- `y` - Y 维度线程组数量
- `z` - Z 维度线程组数量
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::DrawIndexedInstancedIndirect
```cpp
void DrawIndexedInstancedIndirect(void* argBuffer, uint64_t alignedByteOffset);
```
间接绘制索引实例。
**参数:**
- `argBuffer` - 参数缓冲区
- `alignedByteOffset` - 字节偏移
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,20 @@
# D3D12CommandList::DrawIndexed
```cpp
void DrawIndexed(uint32_t indexCount, uint32_t instanceCount = 1, uint32_t startIndex = 0, int32_t baseVertex = 0, uint32_t startInstance = 0) override;
```
绘制索引调用。
**参数:**
- `indexCount` - 索引数量
- `instanceCount` - 实例数量
- `startIndex` - 起始索引
- `baseVertex` - 基础顶点偏移
- `startInstance` - 起始实例索引
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::DrawInstancedIndirect
```cpp
void DrawInstancedIndirect(void* argBuffer, uint64_t alignedByteOffset);
```
间接绘制实例。
**参数:**
- `argBuffer` - 参数缓冲区
- `alignedByteOffset` - 字节偏移
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,19 @@
# D3D12CommandList::Draw
```cpp
void Draw(uint32_t vertexCount, uint32_t instanceCount = 1, uint32_t startVertex = 0, uint32_t startInstance = 0) override;
```
绘制调用。
**参数:**
- `vertexCount` - 顶点数量
- `instanceCount` - 实例数量
- `startVertex` - 起始顶点索引
- `startInstance` - 起始实例索引
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::EndQuery
```cpp
void EndQuery(ID3D12QueryHeap* queryHeap, QueryType type, uint32_t index);
```
结束查询。
**参数:**
- `queryHeap` - 查询堆
- `type` - 查询类型
- `index` - 查询索引
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::ExecuteBundle
```cpp
void ExecuteBundle(ID3D12GraphicsCommandList* bundle);
```
执行 Bundle。
**参数:**
- `bundle` - Bundle 命令列表
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,15 @@
# D3D12CommandList::GetCommandList
```cpp
ID3D12GraphicsCommandList* GetCommandList() const { return m_commandList.Get(); }
```
获取底层的 D3D12 图形命令列表接口。
**返回:** `ID3D12GraphicsCommandList*`
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::GetResourceState
```cpp
ResourceStates GetResourceState(ID3D12Resource* resource) const;
```
获取资源状态。
**参数:**
- `resource` - D3D12 资源指针
**返回:** 资源当前状态
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,21 @@
# D3D12CommandList::ResolveQueryData
```cpp
void ResolveQueryData(ID3D12QueryHeap* queryHeap, QueryType type, uint32_t startIndex, uint32_t count, ID3D12Resource* resultBuffer, uint64_t resultOffset);
```
解析查询数据。
**参数:**
- `queryHeap` - 查询堆
- `type` - 查询类型
- `startIndex` - 起始索引
- `count` - 查询数量
- `resultBuffer` - 结果缓冲区
- `resultOffset` - 结果偏移
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::SetBlendFactor
```cpp
void SetBlendFactor(const float blendFactor[4]);
```
设置混合因子。
**参数:**
- `blendFactor` - 混合因子数组 [r, g, b, a]
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::SetComputeDescriptorTable
```cpp
void SetComputeDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle);
```
设置计算描述符表。
**参数:**
- `rootParameterIndex` - 根参数索引
- `baseHandle` - GPU 描述符句柄
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::SetDepthBias
```cpp
void SetDepthBias(float depthBias, float slopeScaledDepthBias, float depthBiasClamp);
```
设置深度偏移。
**参数:**
- `depthBias` - 基础深度偏移
- `slopeScaledDepthBias` - 斜率缩放深度偏移
- `depthBiasClamp` - 深度偏移上限
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::SetDescriptorHeap
```cpp
void SetDescriptorHeap(ID3D12DescriptorHeap* heap);
```
设置描述符堆。
**参数:**
- `heap` - D3D12 描述符堆指针
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::SetDescriptorHeaps
```cpp
void SetDescriptorHeaps(uint32_t count, ID3D12DescriptorHeap** heaps);
```
设置多个描述符堆。
**参数:**
- `count` - 描述符堆数量
- `heaps` - 描述符堆指针数组
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::SetGraphicsDescriptorTable
```cpp
void SetGraphicsDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle);
```
设置图形描述符表。
**参数:**
- `rootParameterIndex` - 根参数索引
- `baseHandle` - GPU 描述符句柄
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,19 @@
# D3D12CommandList::SetGraphicsRoot32BitConstants
```cpp
void SetGraphicsRoot32BitConstants(uint32_t rootParameterIndex, uint32_t num32BitValuesToSet, const void* pSrcData, uint32_t destOffsetIn32BitValues);
```
设置图形根 32 位常量。
**参数:**
- `rootParameterIndex` - 根参数索引
- `num32BitValuesToSet` - 要设置的 32 位值数量
- `pSrcData` - 源数据指针
- `destOffsetIn32BitValues` - 目标偏移量
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::SetGraphicsRootConstantBufferView
```cpp
void SetGraphicsRootConstantBufferView(uint32_t rootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS bufferLocation);
```
设置图形根常量缓冲区视图。
**参数:**
- `rootParameterIndex` - 根参数索引
- `bufferLocation` - GPU 虚拟地址
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::SetGraphicsRootDescriptorTable
```cpp
void SetGraphicsRootDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseDescriptor);
```
设置图形根描述符表。
**参数:**
- `rootParameterIndex` - 根参数索引
- `baseDescriptor` - GPU 描述符句柄
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::SetGraphicsRootShaderResourceView
```cpp
void SetGraphicsRootShaderResourceView(uint32_t rootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS shaderResource);
```
设置图形根着色器资源视图。
**参数:**
- `rootParameterIndex` - 根参数索引
- `shaderResource` - GPU 虚拟地址
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::SetIndexBuffer
```cpp
void SetIndexBuffer(void* buffer, uint64_t offset, Format format) override;
```
设置索引缓冲区。
**参数:**
- `buffer` - 缓冲区指针
- `offset` - 缓冲区偏移
- `format` - 索引格式
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::SetPipelineState
```cpp
void SetPipelineState(void* pso) override;
```
设置图形管线状态对象。
**参数:**
- `pso` - 管线状态对象指针
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::SetPrimitiveTopology
```cpp
void SetPrimitiveTopology(PrimitiveTopology topology);
```
设置图元拓扑类型。
**参数:**
- `topology` - 图元拓扑类型
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::SetRenderTargetsHandle
```cpp
void SetRenderTargetsHandle(uint32_t count, const D3D12_CPU_DESCRIPTOR_HANDLE* renderTargetHandles, const D3D12_CPU_DESCRIPTOR_HANDLE* depthStencilHandle = nullptr);
```
使用描述符句柄设置渲染目标。
**参数:**
- `count` - 渲染目标数量
- `renderTargetHandles` - 渲染目标描述符句柄数组
- `depthStencilHandle` - 深度模板描述符句柄
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::SetRenderTargetsInternal
```cpp
void SetRenderTargetsInternal(uint32_t count, ID3D12Resource** renderTargets, ID3D12Resource* depthStencil = nullptr);
```
设置渲染目标(内部接口)。
**参数:**
- `count` - 渲染目标数量
- `renderTargets` - D3D12 资源指针数组
- `depthStencil` - 深度模板资源指针
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::SetRenderTargets
```cpp
void SetRenderTargets(uint32_t count, void** renderTargets, void* depthStencil = nullptr) override;
```
设置渲染目标。
**参数:**
- `count` - 渲染目标数量
- `renderTargets` - 渲染目标指针数组
- `depthStencil` - 深度模板目标指针
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::SetRootSignature
```cpp
void SetRootSignature(ID3D12RootSignature* signature);
```
设置根签名。
**参数:**
- `signature` - D3D12 根签名指针
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::SetScissorRect
```cpp
void SetScissorRect(const Rect& rect) override;
```
设置裁剪矩形。
**参数:**
- `rect` - 裁剪矩形结构
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::SetScissorRects
```cpp
void SetScissorRects(uint32_t count, const Rect* rects) override;
```
设置多个裁剪矩形。
**参数:**
- `count` - 裁剪矩形数量
- `rects` - 裁剪矩形数组
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::SetStencilRef
```cpp
void SetStencilRef(uint32_t stencilRef);
```
设置模板参考值。
**参数:**
- `stencilRef` - 模板参考值
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,19 @@
# D3D12CommandList::SetVertexBuffer
```cpp
void SetVertexBuffer(uint32_t slot, void* buffer, uint64_t offset, uint32_t stride) override;
```
设置单个顶点缓冲区。
**参数:**
- `slot` - 顶点缓冲区槽位
- `buffer` - 缓冲区指针
- `offset` - 缓冲区偏移
- `stride` - 顶点 stride
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,20 @@
# D3D12CommandList::SetVertexBuffers
```cpp
void SetVertexBuffers(uint32_t startSlot, uint32_t count, const uint64_t* buffers, const uint64_t* offsets, const uint32_t* strides) override;
```
设置多个顶点缓冲区。
**参数:**
- `startSlot` - 起始槽位
- `count` - 缓冲区数量
- `buffers` - 缓冲区指针数组
- `offsets` - 偏移数组
- `strides` - stride 数组
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::SetViewport
```cpp
void SetViewport(const Viewport& viewport) override;
```
设置视口。
**参数:**
- `viewport` - 视口结构
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandList::SetViewports
```cpp
void SetViewports(uint32_t count, const Viewport* viewports) override;
```
设置多个视口。
**参数:**
- `count` - 视口数量
- `viewports` - 视口数组
**复杂度:** O(n)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::TrackResource
```cpp
void TrackResource(ID3D12Resource* resource);
```
跟踪资源状态。
**参数:**
- `resource` - D3D12 资源指针
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,19 @@
# D3D12CommandList::TransitionBarrierInternal
```cpp
void TransitionBarrierInternal(ID3D12Resource* resource, ResourceStates stateBefore, ResourceStates stateAfter, uint32_t subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES);
```
为资源添加转换屏障(内部接口)。
**参数:**
- `resource` - D3D12 资源指针
- `stateBefore` - 转换前的资源状态
- `stateAfter` - 转换后的资源状态
- `subresource` - 子资源索引,默认为所有子资源
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,18 @@
# D3D12CommandList::TransitionBarrier
```cpp
void TransitionBarrier(void* resource, ResourceStates stateBefore, ResourceStates stateAfter) override;
```
为资源添加转换屏障。
**参数:**
- `resource` - 目标资源指针
- `stateBefore` - 转换前的资源状态
- `stateAfter` - 转换后的资源状态
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,16 @@
# D3D12CommandList::UAVBarrier
```cpp
void UAVBarrier(void* resource = nullptr);
```
添加无序访问视图屏障。
**参数:**
- `resource` - 目标资源指针nullptr 表示所有 UAV
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,26 @@
# D3D12CommandQueue
**命名空间**: `XCEngine::RHI`
**描述**: DirectX 12 命令队列的 D3D12 实现,继承自 `RHICommandQueue`
## 方法列表
| 方法 | 文档 |
|------|------|
| `Initialize` | [详细文档](../../../threading/task-system/initialize.md) |
| `Shutdown` | [详细文档](../../../threading/task-system/shutdown.md) |
| `ExecuteCommandLists` | [详细文档](execute-command-lists.md) |
| `Signal` | [详细文档](signal.md) |
| `Wait` | [详细文档](../../../threading/task-group/wait.md) |
| `GetCompletedValue` | [详细文档](get-completed-value.md) |
| `WaitForIdle` | [详细文档](wait-for-idle.md) |
| `GetType` | [详细文档](../../shader/get-type.md) |
| `GetTimestampFrequency` | [详细文档](get-timestamp-frequency.md) |
| `GetCommandQueue` | [详细文档](get-command-queue.md) |
| `GetNativeHandle` | [详细文档](../../buffer/get-native-handle.md) |
## 相关文档
- [D3D12 后端总览](../overview.md)
- [RHICommandQueue](../../command-queue/command-queue.md) - 抽象命令队列接口

View File

@@ -0,0 +1,17 @@
# D3D12CommandQueue::ExecuteCommandLists
```cpp
void ExecuteCommandLists(uint32_t count, void** lists) override;
```
执行命令列表。
**参数:**
- `count` - 命令列表数量
- `lists` - 命令列表指针数组
**复杂度:** O(n)
## 相关文档
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览

View File

@@ -0,0 +1,15 @@
# D3D12CommandQueue::GetCommandQueue
```cpp
ID3D12CommandQueue* GetCommandQueue() const { return m_commandQueue.Get(); }
```
获取底层 D3D12 命令队列接口。
**返回:** `ID3D12CommandQueue*`
**复杂度:** O(1)
## 相关文档
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览

View File

@@ -0,0 +1,15 @@
# D3D12CommandQueue::GetCompletedValue
```cpp
uint64_t GetCompletedValue() override;
```
获取已完成值。
**返回:** 栅栏已完成的值
**复杂度:** O(1)
## 相关文档
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览

View File

@@ -0,0 +1,15 @@
# D3D12CommandQueue::GetTimestampFrequency
```cpp
uint64_t GetTimestampFrequency() const override { return m_timestampFrequency; }
```
获取时间戳频率。
**返回:** 时间戳频率
**复杂度:** O(1)
## 相关文档
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览

View File

@@ -0,0 +1,17 @@
# D3D12CommandQueue::Signal
```cpp
void Signal(RHIFence* fence, uint64_t value) override;
```
发送信号。
**参数:**
- `fence` - 栅栏指针
- `value` - 信号值
**复杂度:** O(1)
## 相关文档
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览

View File

@@ -0,0 +1,13 @@
# D3D12CommandQueue::WaitForIdle
```cpp
void WaitForIdle() override;
```
等待空闲。
**复杂度:** O(n)
## 相关文档
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览

View File

@@ -0,0 +1,67 @@
# D3D12Common
**命名空间**: `XCEngine::RHI`
**描述**: D3D12 通用辅助函数集合,提供描述符大小、屏障创建、格式支持检查等功能。**所有函数均为 inline 函数**。
## 函数列表
### 描述符大小
| 函数 | 描述 |
|------|------|
| `GetDescriptorHandleIncrementSize` | 获取描述符增量大小 |
| `GetRTVDescriptorSize` | 获取 RTV 描述符大小 |
| `GetDSVDescriptorSize` | 获取 DSV 描述符大小 |
| `GetCBV_SRV_UAVDescriptorSize` | 获取 CBV/SRV/UAV 描述符大小 |
| `GetSamplerDescriptorSize` | 获取 Sampler 描述符大小 |
### 屏障创建
| 函数 | 描述 |
|------|------|
| `CreateTransitionBarrier` | 创建资源状态转换屏障 |
| `CreateUAVBarrier` | 创建 UAV 屏障 |
| `CreateAliasingBarrier` | 创建别名化屏障 |
### 格式支持
| 函数 | 描述 |
|------|------|
| `CheckFormatSupport` | 检查格式支持 |
| `IsRenderTargetFormatSupported` | 检查是否支持作为渲染目标 |
| `IsDepthStencilFormatSupported` | 检查是否支持作为深度模板 |
| `IsShaderResourceFormatSupported` | 检查 shader 是否可读取 |
| `IsTextureFormatSupported` | 检查是否支持作为纹理 |
### 清除值创建
| 函数 | 描述 |
|------|------|
| `CreateRenderTargetClearValue` | 创建渲染目标清除值 |
| `CreateDepthStencilClearValue` | 创建深度模板清除值 |
### 视口和裁剪矩形
| 函数 | 描述 |
|------|------|
| `CreateViewport` | 创建视口 |
| `CreateScissorRect` | 创建裁剪矩形 |
### 缓冲区视图
| 函数 | 描述 |
|------|------|
| `CreateVertexBufferView` | 创建顶点缓冲区视图 |
| `CreateIndexBufferView` | 创建索引缓冲区视图 |
### 描述符句柄运算
| 函数 | 描述 |
|------|------|
| `GetCPUDescriptorHandle` | 计算偏移后的 CPU 描述符句柄 |
| `GetGPUDescriptorHandle` | 计算偏移后的 GPU 描述符句柄 |
## 相关文档
- [D3D12 后端总览](../overview.md)

View File

@@ -0,0 +1,17 @@
# D3D12ConstantBufferView
**命名空间**: `XCEngine::RHI`
**描述**: DirectX 12 常量缓冲区视图的 D3D12 实现。
## 方法列表
| 方法 | 文档 |
|------|------|
| `Initialize` | [详细文档](../../../threading/task-system/initialize.md) |
| `Shutdown` | [详细文档](../../../threading/task-system/shutdown.md) |
| `GetCPUDescriptorHandle` | [详细文档](get-cpu-descriptor-handle.md) |
## 相关文档
- [D3D12 后端总览](../overview.md)

View File

@@ -0,0 +1,15 @@
# D3D12ConstantBufferView::GetCPUDescriptorHandle
```cpp
D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const { return m_handle; }
```
获取 CPU 描述符句柄。
**返回:** CPU 描述符句柄
**复杂度:** O(1)
## 相关文档
- [D3D12ConstantBufferView 总览](constant-buffer-view.md) - 返回类总览

View File

@@ -1,178 +0,0 @@
# D3D12Buffer
DirectX 12 缓冲区的 D3D12 实现,封装了 `ID3D12Resource` (buffer 类型)。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12Buffer.h>
```
## 继承关系
```
RHIBuffer (interface)
└── D3D12Buffer (implementation)
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12Buffer()`
默认构造函数。
#### `~D3D12Buffer() override`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `bool Initialize(ID3D12Device* device, uint64_t size, D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON, D3D12_HEAP_TYPE heapType = D3D12_HEAP_TYPE_DEFAULT)`
创建新缓冲区。
- `device`: D3D12 设备
- `size`: 缓冲区大小(字节)
- `initialState`: 初始资源状态
- `heapType`: 堆类型 (DEFAULT, UPLOAD, READBACK)
- 返回: 初始化是否成功
#### `bool InitializeFromExisting(ID3D12Resource* resource)`
从现有 D3D12 资源初始化。
- `resource`: 已存在的 `ID3D12Resource` 指针
#### `bool InitializeWithData(ID3D12Device* device, ID3D12GraphicsCommandList* commandList, const void* data, uint64_t size, D3D12_RESOURCE_STATES finalState)`
创建缓冲区并从内存数据初始化内容。
- `device`: D3D12 设备
- `commandList`: 命令列表(用于复制数据)
- `data`: 初始数据指针
- `size`: 数据大小
- `finalState`: 数据复制完成后的目标状态
#### `void Shutdown() override`
释放缓冲区资源。
### 数据操作
#### `void UpdateData(const void* data, uint64_t size)`
更新缓冲区数据(需要 UPLOAD 堆类型)。
#### `void SetData(const void* data, size_t size, size_t offset = 0) override`
设置缓冲区数据。
#### `void* Map() override`
映射缓冲区内存到 CPU 可访问。
#### `void Unmap() override`
解除缓冲区内存映射。
### 资源信息
#### `ID3D12Resource* GetResource() const`
获取底层 `ID3D12Resource` 指针。
#### `D3D12_RESOURCE_DESC GetDesc() const`
获取资源描述。
#### `D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress() const`
获取 GPU 虚拟地址。
#### `uint64_t GetGPUAddress() const`
获取 GPU 地址(等同于 `GetGPUVirtualAddress`)。
#### `uint64_t GetSize() const override`
获取缓冲区大小。
#### `ResourceStates GetState() const`
获取当前资源状态。
#### `void SetState(ResourceStates state)`
设置资源状态。
### 接口实现
#### `void* GetNativeHandle() override { return m_resource.Get(); }`
返回原生句柄。
#### `const std::string& GetName() const override`
获取对象名称。
#### `void SetName(const std::string& name) override`
设置对象名称。
#### `uint32_t GetStride() const override`
获取顶点步长。
#### `BufferType GetBufferType() const override`
获取缓冲区类型。
#### `void SetStride(uint32_t stride) override`
设置顶点步长。
#### `void SetBufferType(BufferType type) override`
设置缓冲区类型。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_resource` | `ComPtr<ID3D12Resource>` | D3D12 资源对象 |
| `m_state` | `ResourceStates` | 当前资源状态 |
| `m_name` | `std::string` | 对象名称 |
| `m_stride` | `uint32_t` | 顶点步长 |
| `m_bufferType` | `BufferType` | 缓冲区类型 |
## 使用示例
### 创建顶点缓冲区
```cpp
D3D12Buffer vertexBuffer;
struct Vertex { float pos[3]; float uv[2]; };
if (vertexBuffer.Initialize(
device->GetDevice(),
sizeof(Vertex) * vertexCount,
D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER,
D3D12_HEAP_TYPE_DEFAULT))
{
vertexBuffer.SetName(L"VertexBuffer");
vertexBuffer.SetStride(sizeof(Vertex));
vertexBuffer.SetBufferType(BufferType::Vertex);
}
```
### 创建并初始化索引缓冲区
```cpp
D3D12Buffer indexBuffer;
uint16_t indices[] = { 0, 1, 2, ... };
D3D12CommandList cmdList;
cmdList.Initialize(device->GetDevice());
indexBuffer.InitializeWithData(
device->GetDevice(),
cmdList.GetCommandList(),
indices,
sizeof(indices),
D3D12_RESOURCE_STATE_INDEX_BUFFER);
cmdList.Close();
```
### 更新 UPLOAD 缓冲区
```cpp
D3D12Buffer uploadBuffer;
uploadBuffer.Initialize(device, bufferSize, D3D12_RESOURCE_STATE_GENERIC_READ, D3D12_HEAP_TYPE_UPLOAD);
void* mapped = uploadBuffer.Map();
memcpy(mapped, data, dataSize);
uploadBuffer.Unmap();
```
## 备注
- `D3D12_HEAP_TYPE_DEFAULT`: GPU 专用显存,适合渲染使用
- `D3D12_HEAP_TYPE_UPLOAD`: CPU 可写 GPU 可读的堆,用于上传数据
- `D3D12_HEAP_TYPE_READBACK`: CPU 可读 GPU 回读数据的堆
- 创建后立即使用需注意资源状态转换

View File

@@ -1,80 +0,0 @@
# D3D12CommandAllocator
DirectX 12 命令分配器的 D3D12 实现,封装了 `ID3D12CommandAllocator`
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12CommandAllocator.h>
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12CommandAllocator()`
默认构造函数。
#### `~D3D12CommandAllocator()`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `bool Initialize(ID3D12Device* device, CommandQueueType type = CommandQueueType::Direct)`
初始化命令分配器。
- `device`: D3D12 设备
- `type`: 命令类型,必须与命令列表类型匹配
- 返回: 初始化是否成功
#### `void Shutdown()`
释放命令分配器。
### 操作
#### `void Reset()`
重置命令分配器,丢弃所有已记录的指令。
#### `bool IsReady() const`
检查分配器是否准备就绪GPU 不再使用)。
### 属性
#### `ID3D12CommandAllocator* GetCommandAllocator() const`
获取底层 `ID3D12CommandAllocator` 指针。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_commandAllocator` | `ComPtr<ID3D12CommandAllocator>` | D3D12 命令分配器 |
| `m_type` | `CommandQueueType` | 命令类型 |
## 使用示例
```cpp
// Create allocator
D3D12CommandAllocator allocator;
allocator.Initialize(device->GetDevice(), CommandQueueType::Direct);
// Create command list with allocator
D3D12CommandList cmdList;
cmdList.Initialize(device->GetDevice(), CommandQueueType::Direct,
allocator.GetCommandAllocator());
// Use command list...
cmdList->Close();
cmdQueue->ExecuteCommandListsInternal(1, &cmdList);
// Wait for GPU to finish
cmdQueue->WaitForIdle();
// Reset allocator for next frame
allocator.Reset();
cmdList->Reset(allocator.GetCommandAllocator(), nullptr);
```
## 备注
- 命令分配器必须在 GPU 完成所有关联命令后才能重置
- 每个帧通常有独立的命令分配器以支持帧间并行
- 命令分配器创建开销小,可以频繁创建销毁

View File

@@ -1,269 +0,0 @@
# D3D12CommandList
DirectX 12 图形命令列表的 D3D12 实现,封装了 `ID3D12GraphicsCommandList`
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12CommandList.h>
```
## 类概览
`D3D12CommandList` 继承自 `RHICommandList`,是 D3D12 渲染命令的录制和执行载体。它封装了 `ID3D12GraphicsCommandList`,并提供状态跟踪和资源管理功能。
## 公共成员函数
### 初始化与销毁
#### `bool Initialize(ID3D12Device* device, CommandQueueType type = CommandQueueType::Direct, ID3D12CommandAllocator* allocator = nullptr)`
初始化命令列表。
- `device`: D3D12 设备指针
- `type`: 命令队列类型 (Direct, Compute, Copy)
- `allocator`: 可选命令分配器
- 返回: 初始化是否成功
#### `void Shutdown()`
关闭并释放命令列表。
### 命令录制控制
#### `void Reset()`
重置命令列表,重新开始录制。
#### `void Close()`
关闭命令列表,停止录制。
#### `ID3D12GraphicsCommandList* GetCommandList() const`
获取底层 `ID3D12GraphicsCommandList` 指针。
### 资源状态转换
#### `void TransitionBarrier(void* resource, ResourceStates stateBefore, ResourceStates stateAfter)`
添加资源状态转换屏障。
#### `void UAVBarrier(void* resource = nullptr)`
添加无序访问视图屏障。
#### `void AliasBarrier(void* beforeResource = nullptr, void* afterResource = nullptr)`
添加别名化屏障。
### 管线状态设置
#### `void SetPipelineState(void* pso)`
设置图形管线状态对象。
#### `void SetRootSignature(ID3D12RootSignature* signature)`
设置根签名。
#### `void SetPrimitiveTopology(PrimitiveTopology topology)`
设置图元拓扑类型。
### 视口与裁剪矩形
#### `void SetViewport(const Viewport& viewport)`
设置单个视口。
#### `void SetViewports(uint32_t count, const Viewport* viewports)`
设置多个视口。
#### `void SetScissorRect(const Rect& rect)`
设置单个裁剪矩形。
#### `void SetScissorRects(uint32_t count, const Rect* rects)`
设置多个裁剪矩形。
### 渲染目标
#### `void SetRenderTargets(uint32_t count, void** renderTargets, void* depthStencil = nullptr)`
设置渲染目标视图。
#### `void SetRenderTargetsInternal(uint32_t count, ID3D12Resource** renderTargets, ID3D12Resource* depthStencil = nullptr)`
内部方法,直接使用 D3D12 资源指针。
#### `void SetRenderTargetsHandle(uint32_t count, const D3D12_CPU_DESCRIPTOR_HANDLE* renderTargetHandles, const D3D12_CPU_DESCRIPTOR_HANDLE* depthStencilHandle = nullptr)`
使用 CPU 描述符句柄设置渲染目标。
### 顶点缓冲区与索引缓冲区
#### `void SetVertexBuffer(uint32_t slot, void* buffer, uint64_t offset, uint32_t stride)`
设置单个顶点缓冲区。
#### `void SetVertexBuffers(uint32_t startSlot, uint32_t count, const uint64_t* buffers, const uint64_t* offsets, const uint32_t* strides)`
批量设置顶点缓冲区。
#### `void SetIndexBuffer(void* buffer, uint64_t offset, Format format)`
设置索引缓冲区。
### 描述符堆
#### `void SetDescriptorHeap(ID3D12DescriptorHeap* heap)`
设置描述符堆。
#### `void SetDescriptorHeaps(uint32_t count, ID3D12DescriptorHeap** heaps)`
设置多个描述符堆。
### 描述符表绑定
#### `void SetGraphicsDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle)`
设置图形渲染的描述符表。
#### `void SetComputeDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseHandle)`
设置计算渲染的描述符表。
### 根参数绑定
#### `void SetGraphicsRootConstantBufferView(uint32_t rootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS bufferLocation)`
设置根常量缓冲区视图。
#### `void SetGraphicsRoot32BitConstants(uint32_t rootParameterIndex, uint32_t num32BitValuesToSet, const void* pSrcData, uint32_t destOffsetIn32BitValues)`
设置根参数 32 位常量。
#### `void SetGraphicsRootDescriptorTable(uint32_t rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseDescriptor)`
设置根描述符表。
#### `void SetGraphicsRootShaderResourceView(uint32_t rootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS shaderResource)`
设置根着色器资源视图。
### 渲染状态
#### `void SetStencilRef(uint32_t stencilRef)`
设置模板参考值。
#### `void SetBlendFactor(const float blendFactor[4])`
设置混合因子。
#### `void SetDepthBias(float depthBias, float slopeScaledDepthBias, float depthBiasClamp)`
设置深度偏移。
### 绘制命令
#### `void Draw(uint32_t vertexCount, uint32_t instanceCount = 1, uint32_t startVertex = 0, uint32_t startInstance = 0)`
绘制非索引图元。
#### `void DrawIndexed(uint32_t indexCount, uint32_t instanceCount = 1, uint32_t startIndex = 0, int32_t baseVertex = 0, uint32_t startInstance = 0)`
绘制索引图元。
#### `void DrawInstancedIndirect(void* argBuffer, uint64_t alignedByteOffset)`
间接绘制实例化图元。
#### `void DrawIndexedInstancedIndirect(void* argBuffer, uint64_t alignedByteOffset)`
间接绘制索引实例化图元。
### 清除命令
#### `void Clear(float r, float g, float b, float a, uint32_t buffers)`
清除渲染目标和/或深度模板缓冲区。
#### `void ClearRenderTarget(void* renderTarget, const float color[4])`
清除渲染目标。
#### `void ClearDepthStencil(void* depthStencil, float depth, uint8_t stencil)`
清除深度模板缓冲区。
#### `void ClearRenderTargetView(ID3D12Resource* renderTarget, const float color[4], uint32_t rectCount = 0, const D3D12_RECT* rects = nullptr)`
使用资源指针清除渲染目标。
#### `void ClearDepthStencilView(ID3D12Resource* depthStencil, uint32_t clearFlags, float depth = 1.0f, uint8_t stencil = 0, uint32_t rectCount = 0, const D3D12_RECT* rects = nullptr)`
使用资源指针清除深度模板。
#### `void ClearUnorderedAccessView(...)`
清除无序访问视图。
### 资源复制
#### `void CopyResource(void* dst, void* src)`
复制整个资源。
#### `void CopyBuffer(ID3D12Resource* dst, uint64_t dstOffset, ID3D12Resource* src, uint64_t srcOffset, uint64_t size)`
复制缓冲区数据。
#### `void CopyTexture(ID3D12Resource* dst, const D3D12_TEXTURE_COPY_LOCATION& dstLocation, ID3D12Resource* src, const D3D12_TEXTURE_COPY_LOCATION& srcLocation)`
复制纹理数据。
### 查询
#### `void BeginQuery(ID3D12QueryHeap* queryHeap, QueryType type, uint32_t index)`
开始查询。
#### `void EndQuery(ID3D12QueryHeap* queryHeap, QueryType type, uint32_t index)`
结束查询。
#### `void ResolveQueryData(ID3D12QueryHeap* queryHeap, QueryType type, uint32_t startIndex, uint32_t count, ID3D12Resource* resultBuffer, uint64_t resultOffset)`
解析查询数据。
### 计算着色器
#### `void Dispatch(uint32_t x, uint32_t y, uint32_t z)`
分发计算着色器。
#### `void DispatchIndirect(void* argBuffer, uint64_t alignedByteOffset)`
间接分发计算着色器。
### Bundle
#### `void ExecuteBundle(ID3D12GraphicsCommandList* bundle)`
执行 Bundle 命令列表。
### 资源状态管理
#### `ResourceStates GetResourceState(ID3D12Resource* resource) const`
获取资源当前状态。
#### `void TrackResource(ID3D12Resource* resource)`
跟踪资源状态变化。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_commandList` | `ComPtr<ID3D12GraphicsCommandList>` | D3D12 命令列表 |
| `m_type` | `CommandQueueType` | 命令队列类型 |
| `m_resourceStateMap` | `unordered_map<ID3D12Resource*, ResourceStates>` | 资源状态映射 |
| `m_trackedResources` | `vector<ID3D12Resource*>` | 跟踪的资源列表 |
| `m_currentTopology` | `D3D12_PRIMITIVE_TOPOLOGY` | 当前拓扑类型 |
| `m_currentPipelineState` | `ID3D12PipelineState*` | 当前 PSO |
| `m_currentRootSignature` | `ID3D12RootSignature*` | 当前根签名 |
| `m_currentDescriptorHeap` | `ID3D12DescriptorHeap*` | 当前描述符堆 |
## 使用示例
```cpp
D3D12Device device;
device.Initialize(desc);
// Create command queue and list
CommandQueueDesc queueDesc;
queueDesc.type = CommandQueueType::Direct;
D3D12CommandQueue* cmdQueue = device.CreateCommandQueueImpl(queueDesc);
CommandListDesc listDesc;
listDesc.type = CommandQueueType::Direct;
D3D12CommandList* cmdList = device.CreateCommandListImpl(listDesc);
// Begin recording
cmdList->Reset();
cmdList->SetPipelineState(pipelineState);
cmdList->SetRenderTargets(1, &rtvHandle, &dsvHandle);
cmdList->SetViewports(1, &viewport);
cmdList->SetScissorRect(scissorRect);
cmdList->SetVertexBuffers(0, 1, &vbv);
cmdList->DrawIndexed(indexCount, 1, 0, 0, 0);
cmdList->Close();
// Execute
cmdQueue->ExecuteCommandListsInternal(1, &cmdList);
```
## 继承关系
```
RHICommandList (interface)
└── D3D12CommandList (implementation)
```
## 备注
- D3D12CommandList 内部维护资源状态映射,自动处理资源状态转换
- 使用 `TrackResource` 可以将自定义资源添加到状态跟踪系统
- Bundle 是一种优化手段,可以复用频繁执行的命令序列

View File

@@ -1,113 +0,0 @@
# D3D12CommandQueue
DirectX 12 命令队列的 D3D12 实现,封装了 `ID3D12CommandQueue`
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12CommandQueue.h>
```
## 继承关系
```
RHICommandQueue (interface)
└── D3D12CommandQueue (implementation)
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12CommandQueue()`
默认构造函数。
#### `~D3D12CommandQueue() override`
析构函数,确保调用 `Shutdown()`
### 初始化与销毁
#### `bool Initialize(ID3D12Device* device, CommandQueueType type = CommandQueueType::Direct)`
初始化命令队列。
- `device`: D3D12 设备
- `type`: 命令队列类型
- 返回: 初始化是否成功
#### `void Shutdown() override`
关闭命令队列。
### 命令执行
#### `void ExecuteCommandLists(uint32_t count, void** lists)`
执行命令列表(接口实现)。
#### `void ExecuteCommandListsInternal(uint32_t count, ID3D12CommandList** lists)`
执行命令列表(内部实现,接受 D3D12 原生类型)。
### 同步操作
#### `void Signal(RHIFence* fence, uint64_t value)`
发送信号量到栅栏。
#### `void Wait(RHIFence* fence, uint64_t value)`
等待栅栏达到指定值。
#### `void WaitForIdle()`
等待命令队列空闲。
#### `uint64_t GetCompletedValue() override`
获取已完成信号值。
#### `void Signal(ID3D12Fence* fence, uint64_t value)`
发送信号(内部版本)。
#### `void Wait(ID3D12Fence* fence, uint64_t value)`
等待(内部版本)。
### 属性查询
#### `CommandQueueType GetType() const override`
获取命令队列类型。
#### `uint64_t GetTimestampFrequency() const override`
获取时间戳频率Hz
#### `ID3D12CommandQueue* GetCommandQueue() const`
获取底层 `ID3D12CommandQueue` 指针。
#### `void* GetNativeHandle() override`
返回原生句柄。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_commandQueue` | `ComPtr<ID3D12CommandQueue>` | D3D12 命令队列 |
| `m_type` | `CommandQueueType` | 命令队列类型 |
| `m_timestampFrequency` | `uint64_t` | 时间戳频率 |
## 使用示例
```cpp
D3D12CommandQueue cmdQueue;
cmdQueue.Initialize(device->GetDevice(), CommandQueueType::Direct);
// Execute command list
ID3D12CommandList* lists[] = { cmdList->GetCommandList() };
cmdQueue.ExecuteCommandListsInternal(1, lists);
// Sync with fence
D3D12Fence fence;
fence.Initialize(device->GetDevice());
cmdQueue.Signal(fence.GetFence(), 1);
fence.Wait(1);
// Wait for idle
cmdQueue.WaitForIdle();
```
## 备注
- 三种命令队列类型Direct图形/计算、Compute计算、Copy复制
- 时间戳频率用于将 GPU 时间戳转换为实际时间
- `WaitForIdle` 会阻塞 CPU 直到所有已提交命令完成

View File

@@ -1,124 +0,0 @@
# D3D12Common
D3D12 通用辅助函数集合,提供描述符大小、屏障创建、格式支持检查等功能。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12Common.h>
```
## 命名空间
`XCEngine::RHI`
## 描述符大小函数
#### `inline UINT GetDescriptorHandleIncrementSize(ID3D12Device* device, D3D12_DESCRIPTOR_HEAP_TYPE heapType)`
获取描述符增量大小。
#### `inline UINT GetRTVDescriptorSize(ID3D12Device* device)`
获取 RTV 描述符大小。
#### `inline UINT GetDSVDescriptorSize(ID3D12Device* device)`
获取 DSV 描述符大小。
#### `inline UINT GetCBV_SRV_UAVDescriptorSize(ID3D12Device* device)`
获取 CBV/SRV/UAV 描述符大小。
#### `inline UINT GetSamplerDescriptorSize(ID3D12Device* device)`
获取 Sampler 描述符大小。
## 屏障创建函数
#### `inline D3D12_RESOURCE_BARRIER CreateTransitionBarrier(...)`
创建资源状态转换屏障。
参数:
- `resource`: 目标资源
- `stateBefore`: 转换前状态
- `stateAfter`: 转换后状态
- `subresource`: 子资源索引(默认所有)
#### `inline D3D12_RESOURCE_BARRIER CreateUAVBarrier(ID3D12Resource* resource = nullptr)`
创建 UAV 屏障。
#### `inline D3D12_RESOURCE_BARRIER CreateAliasingBarrier(...)`
创建别名化屏障。
## 格式支持检查
#### `inline bool CheckFormatSupport(ID3D12Device* device, DXGI_FORMAT format, D3D12_FORMAT_SUPPORT1 support1, D3D12_FORMAT_SUPPORT2 support2 = D3D12_FORMAT_SUPPORT2_NONE)`
检查格式支持。
#### `inline bool IsRenderTargetFormatSupported(ID3D12Device* device, DXGI_FORMAT format)`
检查是否支持作为渲染目标。
#### `inline bool IsDepthStencilFormatSupported(ID3D12Device* device, DXGI_FORMAT format)`
检查是否支持作为深度模板。
#### `inline bool IsShaderResourceFormatSupported(ID3D12Device* device, DXGI_FORMAT format)`
检查 shader 是否可以读取该格式。
#### `inline bool IsTextureFormatSupported(ID3D12Device* device, DXGI_FORMAT format)`
检查是否支持作为纹理。
## 清除值创建
#### `inline D3D12_CLEAR_VALUE CreateRenderTargetClearValue(DXGI_FORMAT format, float r = 0.0f, float g = 0.0f, float b = 0.0f, float a = 1.0f)`
创建渲染目标清除值。
#### `inline D3D12_CLEAR_VALUE CreateDepthStencilClearValue(DXGI_FORMAT format, float depth = 1.0f, uint8_t stencil = 0)`
创建深度模板清除值。
## 视口和裁剪矩形
#### `inline D3D12_VIEWPORT CreateViewport(float width, float height, float topLeftX = 0.0f, float topLeftY = 0.0f, float minDepth = 0.0f, float maxDepth = 1.0f)`
创建视口。
#### `inline D3D12_RECT CreateScissorRect(int left, int top, int right, int bottom)`
创建裁剪矩形。
## 缓冲区视图
#### `inline D3D12_VERTEX_BUFFER_VIEW CreateVertexBufferView(...)`
创建顶点缓冲区视图。
#### `inline D3D12_INDEX_BUFFER_VIEW CreateIndexBufferView(...)`
创建索引缓冲区视图。
## 描述符句柄运算
#### `inline D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle(...)`
计算偏移后的 CPU 描述符句柄。
#### `inline D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandle(...)`
计算偏移后的 GPU 描述符句柄。
## 使用示例
```cpp
// Check format support
if (!IsRenderTargetFormatSupported(device, DXGI_FORMAT_R8G8B8A8_UNORM)) {
// Fall back to supported format
}
// Create barriers
D3D12_RESOURCE_BARRIER barriers[2];
barriers[0] = CreateTransitionBarrier(
resource, D3D12_RESOURCE_STATE_RENDER_TARGET,
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
barriers[1] = CreateUAVBarrier(uavResource);
// Set barriers
cmdList->ResourceBarrier(2, barriers);
// Create viewport
D3D12_VIEWPORT vp = CreateViewport(1920.0f, 1080.0f);
cmdList->RSSetViewports(1, &vp);
```
## 备注
- 所有函数为 inline可在头文件中使用
- 这些是高频使用的辅助函数,避免重复代码

View File

@@ -1,47 +0,0 @@
# D3D12ConstantBufferView
DirectX 12 常量缓冲区视图的 D3D12 实现。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12ConstantBufferView.h>
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12ConstantBufferView()`
默认构造函数。
#### `~D3D12ConstantBufferView()`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `void Initialize(ID3D12Device* device, ID3D12Resource* buffer, const D3D12_CONSTANT_BUFFER_VIEW_DESC* desc = nullptr)`
创建 CBV。
- `buffer`: 缓冲区资源
- `desc`: CBV 描述(可选,会自动设置 size 为 256 字节对齐)
#### `void Shutdown()`
释放 CBV。
### 属性
#### `D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const`
获取 CPU 描述符句柄。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_handle` | `D3D12_CPU_DESCRIPTOR_HANDLE` | CPU 描述符句柄 |
| `m_resource` | `ID3D12Resource*` | 关联的缓冲区资源 |
## 备注
- CBV 大小自动向上对齐到 256 字节
- 常量缓冲区应使用 UPLOAD 堆类型以便 CPU 更新
- 可以通过根签名直接绑定 CBV 而无需 CBV 描述符

View File

@@ -1,52 +0,0 @@
# D3D12DepthStencilView
DirectX 12 深度模板视图的 D3D12 实现。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12DepthStencilView.h>
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12DepthStencilView()`
默认构造函数。
#### `~D3D12DepthStencilView()`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `void Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_DEPTH_STENCIL_VIEW_DESC* desc = nullptr)`
创建 DSV。
#### `void InitializeAt(ID3D12Device* device, ID3D12Resource* resource, D3D12_CPU_DESCRIPTOR_HANDLE handle, const D3D12_DEPTH_STENCIL_VIEW_DESC* desc = nullptr)`
在指定位置创建 DSV。
#### `void Shutdown()`
释放 DSV。
### 属性
#### `D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const`
获取 CPU 描述符句柄。
### 静态辅助函数
#### `static D3D12_DEPTH_STENCIL_VIEW_DESC CreateDesc(Format format, D3D12_DSV_DIMENSION dimension = D3D12_DSV_DIMENSION_TEXTURE2D)`
创建 DSV 描述。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_handle` | `D3D12_CPU_DESCRIPTOR_HANDLE` | CPU 描述符句柄 |
| `m_resource` | `ID3D12Resource*` | 关联的资源 |
## 备注
- DSV 必须在 DSV 类型描述符堆中分配
- 支持只读 DSV通过描述符标志区分

View File

@@ -1,114 +0,0 @@
# D3D12DescriptorHeap
DirectX 12 描述符堆的 D3D12 实现,封装了 `ID3D12DescriptorHeap`
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12DescriptorHeap.h>
```
## 继承关系
```
RHIDescriptorPool (interface)
└── D3D12DescriptorHeap (implementation)
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12DescriptorHeap()`
默认构造函数。
#### `~D3D12DescriptorHeap() override`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `bool Initialize(ID3D12Device* device, DescriptorHeapType type, uint32_t numDescriptors, bool shaderVisible = false)`
使用参数初始化。
- `device`: D3D12 设备
- `type`: 描述符堆类型
- `numDescriptors`: 描述符数量
- `shaderVisible`: 是否对 GPU 可见CBV_SRV_UAV 和 Sampler 堆需要)
- 返回: 初始化是否成功
#### `bool Initialize(const DescriptorPoolDesc& desc) override`
使用统一描述符初始化。
#### `void Shutdown() override`
释放描述符堆。
### 描述符句柄
#### `ID3D12DescriptorHeap* GetDescriptorHeap() const`
获取底层 `ID3D12DescriptorHeap` 指针。
#### `CPUDescriptorHandle GetCPUDescriptorHandle(uint32_t index)`
获取指定索引的 CPU 描述符句柄。
#### `GPUDescriptorHandle GetGPUDescriptorHandle(uint32_t index)`
获取指定索引的 GPU 描述符句柄。
#### `D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart() const`
获取堆起始 CPU 句柄。
#### `D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart() const`
获取堆起始 GPU 句柄。
### 属性
#### `uint32_t GetDescriptorCount() const override`
获取描述符总数。
#### `DescriptorHeapType GetType() const override`
获取描述符堆类型。
#### `uint32_t GetDescriptorSize() const`
获取单个描述符大小(增量大小)。
#### `void* GetNativeHandle() override`
返回原生句柄。
### 静态辅助函数
#### `static D3D12_DESCRIPTOR_HEAP_DESC CreateDesc(DescriptorHeapType type, uint32_t numDescriptors, bool shaderVisible = false)`
创建 D3D12 描述符堆描述。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_descriptorHeap` | `ComPtr<ID3D12DescriptorHeap>` | D3D12 描述符堆 |
| `m_type` | `DescriptorHeapType` | 堆类型 |
| `m_numDescriptors` | `uint32_t` | 描述符数量 |
| `m_descriptorSize` | `uint32_t` | 增量大小 |
| `m_shaderVisible` | `bool` | 是否 shader visible |
## 使用示例
```cpp
// Create RTV heap
D3D12DescriptorHeap rtvHeap;
rtvHeap.Initialize(device->GetDevice(), DescriptorHeapType::RTV, 10, false);
// Create SRV/CBV/UAV heap
D3D12DescriptorHeap cbvHeap;
cbvHeap.Initialize(device->GetDevice(), DescriptorHeapType::CBV_SRV_UAV, 100, true);
// Get handle for creating views
D3D12_CPU_DESCRIPTOR_HANDLE rtvHandle = rtvHeap.GetCPUDescriptorHandle(0);
// Create RTV
D3D12RenderTargetView rtv;
rtv.InitializeAt(device->GetDevice(), texture->GetResource(), rtvHandle, nullptr);
```
## 备注
- 四种描述符堆类型: CBV_SRV_UAV, Sampler, RTV, DSV
- RTV 和 DSV 堆通常不需要 shader visible
- CBV_SRV_UAV 和 Sampler 堆如需在 shader 中访问必须 shader visible
- 描述符堆创建后大小固定,不能调整

View File

@@ -1,169 +0,0 @@
# D3D12Device
DirectX 12 设备的 D3D12 实现,是引擎的 RHI 抽象层 `RHIDevice` 接口的具体实现。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12Device.h>
```
## 类概览
`D3D12Device` 封装了 DirectX 12 的 `ID3D12Device``IDXGIFactory4`,负责创建和管理所有 RHI 资源。
## 公共成员函数
### 初始化与销毁
#### `bool Initialize(const RHIDeviceDesc& desc)`
初始化 D3D12 设备,包括创建 DXGI Factory 和 D3D12 Device。
- `desc`: 设备描述符,包含调试层配置等
- 返回: 初始化是否成功
#### `void Shutdown()`
关闭并释放所有 D3D12 资源。
### 设备信息
#### `ID3D12Device* GetDevice() const`
获取底层 `ID3D12Device` 指针。
#### `IDXGIFactory4* GetFactory() const`
获取底层 `IDXGIFactory4` 指针。
#### `const AdapterInfo& GetAdapterInfo() const`
获取当前 GPU 适配器信息,包含:
- `description`: 适配器描述
- `dedicatedVideoMemory`: 专用显存
- `dedicatedSystemMemory`: 专用系统内存
- `sharedSystemMemory`: 共享系统内存
- `vendorId` / `deviceId`: 供应商和设备 ID
- `isSoftware`: 是否为软件适配器
#### `std::vector<AdapterInfo> EnumerateAdapters()`
枚举系统中所有可用的 GPU 适配器。
### 功能查询
#### `UINT GetDescriptorHandleIncrementSize(DescriptorHeapType type) const`
获取指定类型描述符堆的增量大小。
- `type`: 堆类型 (CBV_SRV_UAV, Sampler, RTV, DSV)
#### `bool CheckFeatureSupport(D3D12_FEATURE feature, void* featureSupportData, uint32_t featureSupportDataSize)`
查询设备支持的特定功能。
#### `const RHICapabilities& GetCapabilities() const`
获取设备功能支持信息。
#### `const RHIDeviceInfo& GetDeviceInfo() const`
获取设备详细信息。
### 设备状态
#### `bool IsDeviceRemoved() const`
检测设备是否被移除(通常因驱动崩溃)。
### 资源创建
#### `RHIBuffer* CreateBuffer(const BufferDesc& desc)` {#buffer}
创建 D3D12 缓冲区。
#### `RHITexture* CreateTexture(const TextureDesc& desc)` {#texture}
创建 D3D12 纹理。
#### `RHISwapChain* CreateSwapChain(const SwapChainDesc& desc)` {#swapchain}
创建 D3D12 交换链。
#### `RHICommandList* CreateCommandList(const CommandListDesc& desc)` {#cmdlist}
创建 D3D12 命令列表。
#### `RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc)` {#cmdqueue}
创建 D3D12 命令队列。
#### `RHIShader* CompileShader(const ShaderCompileDesc& desc)` {#shader}
编译着色器。
#### `RHIPipelineState* CreatePipelineState(const PipelineStateDesc& desc)` {#pso}
创建管线状态对象。
#### `RHIFence* CreateFence(const FenceDesc& desc)` {#fence}
创建栅栏同步对象。
#### `RHISampler* CreateSampler(const SamplerDesc& desc)` {#sampler}
创建采样器。
### 内部实现创建
#### `D3D12CommandQueue* CreateCommandQueueImpl(const CommandQueueDesc& desc)`
创建 `D3D12CommandQueue` 实例。
#### `D3D12CommandList* CreateCommandListImpl(const CommandListDesc& desc)`
创建 `D3D12CommandList` 实例。
#### `D3D12CommandAllocator* CreateCommandAllocator(const CommandAllocatorDesc& desc)`
创建 `D3D12CommandAllocator`
#### `D3D12DescriptorHeap* CreateDescriptorHeap(const DescriptorHeapDesc& desc)`
创建 `D3D12DescriptorHeap`
#### `D3D12QueryHeap* CreateQueryHeap(const QueryHeapDesc& desc)`
创建 `D3D12QueryHeap`
#### `D3D12RootSignature* CreateRootSignature(const RootSignatureDesc& desc)`
创建 `D3D12RootSignature`
### 视图创建
#### `D3D12RenderTargetView* CreateRenderTargetView(D3D12Buffer* resource, const RenderTargetViewDesc& desc)`
创建渲染目标视图。
#### `D3D12DepthStencilView* CreateDepthStencilView(D3D12Buffer* resource, const DepthStencilViewDesc& desc)`
创建深度模板视图。
#### `D3D12ShaderResourceView* CreateShaderResourceView(D3D12Buffer* resource, const ShaderResourceViewDesc& desc)`
创建着色器资源视图。
#### `D3D12UnorderedAccessView* CreateUnorderedAccessView(D3D12Buffer* resource, const UnorderedAccessViewDesc& desc)`
创建无序访问视图。
#### `D3D12ConstantBufferView* CreateConstantBufferView(D3D12Buffer* resource, const ConstantBufferViewDesc& desc)`
创建常量缓冲区视图。
## 使用示例
```cpp
#include <XCEngine/RHI/D3D12/D3D12Device.h>
using namespace XCEngine::RHI;
D3D12Device device;
RHIDeviceDesc desc;
desc.enableDebugLayer = true;
if (device.Initialize(desc)) {
auto& caps = device.GetCapabilities();
auto& info = device.GetAdapterInfo();
// Create resources
BufferDesc vertexBufferDesc;
vertexBufferDesc.size = 1024;
vertexBufferDesc.type = BufferType::Vertex;
RHIBuffer* vb = device.CreateBuffer(vertexBufferDesc);
device.Shutdown();
}
```
## 继承关系
```
RHIDevice (interface)
└── D3D12Device (implementation)
```
## 备注
- D3D12Device 是引擎中最重要的 D3D12 对象,所有其他 D3D12 资源都依赖它创建
- 设备移除Device Removed通常由驱动超时或硬件问题导致
- 使用 `SetDeviceRemoved()` 可以模拟设备移除场景用于测试

View File

@@ -1,154 +0,0 @@
# D3D12Enum
D3D12 枚举值转换函数集合,提供 RHI 抽象枚举到 D3D12 原生枚举的转换。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12Enum.h>
```
## 命名空间
`XCEngine::RHI`
## 转换函数列表
### 填充模式和剔除模式
#### `inline D3D12_FILL_MODE ToD3D12(FillMode mode)`
`FillMode::Wireframe` -> `D3D12_FILL_MODE_WIREFRAME`
`FillMode::Solid` -> `D3D12_FILL_MODE_SOLID`
#### `inline D3D12_CULL_MODE ToD3D12(CullMode mode)`
`CullMode::None` -> `D3D12_CULL_MODE_NONE`
`CullMode::Front` -> `D3D12_CULL_MODE_FRONT`
`CullMode::Back` -> `D3D12_CULL_MODE_BACK`
### 深度模板
#### `inline D3D12_COMPARISON_FUNC ToD3D12(ComparisonFunc func)`
转换比较函数 (Never, Less, Equal, LessEqual, Greater, NotEqual, GreaterEqual, Always)
#### `inline D3D12_STENCIL_OP ToD3D12(StencilOp op)`
转换模板操作 (Keep, Zero, Replace, IncrSat, DecrSat, Invert, Incr, Decr)
### 混合
#### `inline D3D12_BLEND_OP ToD3D12(BlendOp op)`
转换混合操作 (Add, Subtract, ReverseSubtract, Min, Max)
#### `inline D3D12_BLEND ToD3D12(BlendFactor factor)`
转换混合因子 (Zero, One, SrcColor, InvSrcColor, SrcAlpha, InvSrcAlpha, SrcAlphaSat, BlendFactor, InvBlendFactor)
#### `inline D3D12_LOGIC_OP ToD3D12(LogicOp op)`
转换逻辑操作 (Clear, Set, Copy, CopyInverted, Noop, Invert, And, Nand, Or, Nor, Xor, Equiv, AndReverse, AndInverted, OrReverse, OrInverted)
### 纹理采样
#### `inline D3D12_FILTER ToD3D12(FilterMode mode)`
转换过滤器模式 (Point, Linear, Anisotropic, ComparisonPoint, ComparisonLinear, ComparisonAnisotropic)
#### `inline D3D12_TEXTURE_ADDRESS_MODE ToD3D12(TextureAddressMode mode)`
转换纹理寻址模式 (Wrap, Mirror, Clamp, Border, MirrorOnce)
#### `inline D3D12_STATIC_BORDER_COLOR ToD3D12(BorderColor color)`
转换边框颜色 (TransparentBlack, OpaqueBlack, OpaqueWhite)
### Shader 相关
#### `inline D3D12_SHADER_VISIBILITY ToD3D12(ShaderVisibility visibility)`
转换 Shader 可见性 (All, Vertex, Hull, Domain, Geometry, Pixel, Amplification, Mesh)
### 格式
#### `inline DXGI_FORMAT ToD3D12(Format format)`
转换纹理/缓冲区格式。
支持的格式映射:
- `Format::Unknown` -> `DXGI_FORMAT_UNKNOWN`
- `Format::R8_UNorm` -> `DXGI_FORMAT_R8_UNORM`
- `Format::R8G8_UNorm` -> `DXGI_FORMAT_R8G8_UNORM`
- `Format::R8G8B8A8_UNorm` -> `DXGI_FORMAT_R8G8B8A8_UNORM`
- `Format::R16G16B16A16_Float` -> `DXGI_FORMAT_R16G16B16A16_FLOAT`
- `Format::R32G32B32A32_Float` -> `DXGI_FORMAT_R32G32B32A32_FLOAT`
- `Format::R16_Float` -> `DXGI_FORMAT_R16_FLOAT`
- `Format::R32_Float` -> `DXGI_FORMAT_R32_FLOAT`
- `Format::D16_UNorm` -> `DXGI_FORMAT_D16_UNORM`
- `Format::D24_UNorm_S8_UInt` -> `DXGI_FORMAT_D24_UNORM_S8_UINT`
- `Format::D32_Float` -> `DXGI_FORMAT_D32_FLOAT`
- `Format::BC1-7_UNorm` -> 对应 BC 压缩格式
- `Format::R32G32B32A32_UInt` -> `DXGI_FORMAT_R32G32B32A32_UINT`
- `Format::R32_UInt` -> `DXGI_FORMAT_R32_UINT`
#### `inline DXGI_FORMAT ToDXGI(Format format)`
`ToD3D12(format)`DXGI 别名。
### 资源状态
#### `inline D3D12_RESOURCE_STATES ToD3D12(ResourceStates state)`
转换资源状态 (Common, VertexAndConstantBuffer, IndexBuffer, RenderTarget, UnorderedAccess, DepthWrite, DepthRead, NonPixelShaderResource, PixelShaderResource, CopySrc, CopyDst, Present, GenericRead)
### 堆类型
#### `inline D3D12_HEAP_TYPE ToD3D12(HeapType type)`
转换堆类型 (Default, Upload, Readback)
### 拓扑
#### `inline D3D12_PRIMITIVE_TOPOLOGY_TYPE ToD3D12(PrimitiveTopology topology)`
转换图元拓扑类型 (Point, Line, Triangle, Patch)
#### `inline D3D12_PRIMITIVE_TOPOLOGY ToD3D12Topology(PrimitiveTopology topology)`
转换详细图元拓扑 (PointList, LineList, LineStrip, TriangleList, TriangleStrip, PatchList 等)
### 描述符堆
#### `inline D3D12_DESCRIPTOR_HEAP_TYPE ToD3D12(DescriptorHeapType type)`
转换描述符堆类型 (CBV_SRV_UAV, Sampler, RTV, DSV)
### 查询
#### `inline D3D12_QUERY_TYPE ToD3D12(QueryType type)`
转换查询类型 (Occlusion, Timestamp, PipelineStatistics)
### 根参数
#### `inline D3D12_ROOT_PARAMETER_TYPE ToD3D12(RootParameterType type)`
转换根参数类型 (DescriptorTable, Constants, CBV, SRV, UAV)
### 纹理类型
#### `inline D3D12_RESOURCE_DIMENSION ToD3D12(TextureType type)`
转换纹理类型维度 (Texture1D, Texture2D, Texture3D)
### 命令列表
#### `inline D3D12_COMMAND_LIST_TYPE ToD3D12(CommandQueueType type)`
转换命令列表类型 (Direct, Compute, Copy)
## 使用示例
```cpp
// When creating PSO
D3D12_GRAPHICS_PIPELINE_STATE_DESC desc = {};
desc.FillMode = ToD3D12(fillMode);
desc.CullMode = ToD3D12(cullMode);
desc.DepthStencilState.DepthFunc = ToD3D12(depthFunc);
// When creating texture
D3D12_RESOURCE_DESC texDesc = {};
texDesc.Format = ToD3D12(textureFormat);
// When transitioning resource
D3D12_RESOURCE_BARRIER barrier = CreateTransitionBarrier(
resource,
ToD3D12(stateBefore),
ToD3D12(stateAfter));
```
## 备注
- 所有转换函数为 inline可在头文件中使用
- switch 语句确保编译期检查所有枚举值
- 未处理的枚举值返回合理的默认值

View File

@@ -1,106 +0,0 @@
# D3D12Fence
DirectX 12 栅栏同步对象的 D3D12 实现,封装了 `ID3D12Fence`
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12Fence.h>
```
## 继承关系
```
RHIFence (interface)
└── D3D12Fence (implementation)
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12Fence()`
默认构造函数。
#### `~D3D12Fence() override`
析构函数,确保调用 `Shutdown()`
### 初始化与销毁
#### `bool Initialize(ID3D12Device* device, uint64_t initialValue = 0)`
初始化栅栏。
- `device`: D3D12 设备
- `initialValue`: 初始信号值
- 返回: 初始化是否成功
#### `void Shutdown() override`
关闭栅栏并释放事件句柄。
### 信号操作
#### `void Signal() override`
发送信号,将值增加 1。
#### `void Signal(uint64_t value) override`
发送信号,设置指定值。
#### `void Wait(uint64_t value) override`
等待栅栏达到指定值。
#### `uint64_t GetCompletedValue() const override`
获取当前完成值。
#### `bool IsSignaled() const override`
检查是否已达到信号值。
#### `void* GetEventHandle()`
获取事件句柄,用于自定义等待。
### 原生接口
#### `void* GetNativeHandle() override { return m_fence.Get(); }`
#### `ID3D12Fence* GetFence() const`
获取底层 `ID3D12Fence` 指针。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_fence` | `ComPtr<ID3D12Fence>` | D3D12 栅栏对象 |
| `m_eventHandle` | `void*` | 同步事件句柄 |
| `m_signalValue` | `uint64_t` | 最后信号值 |
## 使用示例
```cpp
D3D12Fence fence;
fence.Initialize(device->GetDevice());
// CPU-GPU 同步
cmdQueue->Signal(fence.GetFence(), 1);
fence.Wait(1);
// 多帧同步
uint64_t frameFenceValues[3] = {0, 0, 0};
int frameIndex = 0;
void RenderFrame() {
uint64_t fenceValue = frameIndex + 1;
cmdQueue->Signal(fence.GetFence(), fenceValue);
// Wait for this frame's previous render to complete
if (fence.GetCompletedValue() < frameFenceValues[frameIndex]) {
fence.Wait(frameFenceValues[frameIndex]);
}
frameFenceValues[frameIndex] = fenceValue;
frameIndex = (frameIndex + 1) % 3;
}
```
## 备注
- 栅栏用于 CPU-GPU 和 GPU-GPU 同步
- 事件句柄可用于 `WaitForSingleObject` 等 Win32 API
- 多帧缓冲时常用栅栏确保帧间资源安全

View File

@@ -1,78 +0,0 @@
# D3D12 后端概览
**命名空间**: `XCEngine::RHI`
**类型**: `module`
**描述**: DirectX 12 后端实现模块,提供对 DirectX 12 API 的完整封装。
## 概述
D3D12 后端是 XCEngine RHI 抽象层的 DirectX 12 实现。该模块封装了 DirectX 12 的所有核心功能,包括设备管理、资源创建、命令录制和执行、同步等。
## 模块内容
### 核心组件
| 组件 | 描述 |
|------|------|
| [D3D12Device](./d3d12-device.md) | DirectX 12 设备实现 |
| [D3D12CommandList](./d3d12-command-list.md) | 命令列表实现 |
### 资源类型
| 组件 | 描述 |
|------|------|
| [D3D12Buffer](./d3d12-buffer.md) | GPU 缓冲区实现 |
| [D3D12Texture](./d3d12-texture.md) | GPU 纹理实现 |
### 命令执行
| 组件 | 描述 |
|------|------|
| [D3D12CommandQueue](./d3d12-command-queue.md) | 命令队列实现 |
| [D3D12CommandAllocator](./d3d12-command-allocator.md) | 命令分配器 |
### 同步原语
| 组件 | 描述 |
|------|------|
| [D3D12Fence](./d3d12-fence.md) | 同步栅栏实现 |
| [D3D12SwapChain](./d3d12-swap-chain.md) | 交换链实现 |
### 渲染状态
| 组件 | 描述 |
|------|------|
| [D3D12Shader](./d3d12-shader.md) | 着色器实现 |
| [D3D12PipelineState](./d3d12-pipeline-state.md) | 管线状态对象 |
| [D3D12Sampler](./d3d12-sampler.md) | 采样器实现 |
| [D3D12RootSignature](./d3d12-root-signature.md) | 根签名实现 |
### 描述符
| 组件 | 描述 |
|------|------|
| [D3D12DescriptorHeap](./d3d12-descriptor-heap.md) | 描述符堆实现 |
| [D3D12RenderTargetView](./d3d12-render-target-view.md) | 渲染目标视图 |
| [D3D12DepthStencilView](./d3d12-depth-stencil-view.md) | 深度模板视图 |
| [D3D12ShaderResourceView](./d3d12-shader-resource-view.md) | 着色器资源视图 |
| [D3D12UnorderedAccessView](./d3d12-unordered-access-view.md) | 无序访问视图 |
| [D3D12ConstantBufferView](./d3d12-constant-buffer-view.md) | 常量缓冲视图 |
### 查询
| 组件 | 描述 |
|------|------|
| [D3D12QueryHeap](./d3d12-query-heap.md) | 查询堆实现 |
### 工具
| 组件 | 描述 |
|------|------|
| [D3D12Screenshot](./d3d12-screenshot.md) | 截图工具 |
## 相关文档
- [RHI 抽象层](../rhi/rhi-overview.md)
- [OpenGL 后端](../opengl/opengl-device.md)

View File

@@ -1,123 +0,0 @@
# D3D12PipelineState
DirectX 12 管线状态对象的 D3D12 实现,封装了 `ID3D12PipelineState`
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12PipelineState.h>
```
## 继承关系
```
RHIPipelineState (interface)
└── D3D12PipelineState (implementation)
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12PipelineState()`
默认构造函数。
#### `~D3D12PipelineState() override`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `bool Initialize(ID3D12Device* device, const D3D12_GRAPHICS_PIPELINE_STATE_DESC& desc)`
使用 D3D12 PSO 描述初始化。
- `device`: D3D12 设备
- `desc`: 完整的图形管线状态描述
- 返回: 初始化是否成功
#### `void Shutdown() override`
释放 PSO 资源。
### 原生接口
#### `ID3D12PipelineState* GetPipelineState() const`
获取底层 `ID3D12PipelineState` 指针。
#### `void* GetNativeHandle() override`
返回原生句柄。
#### `PipelineType GetType() const override`
返回 `PipelineType::Graphics`
### 绑定
#### `void Bind() override`
绑定 PSO 到命令列表。
#### `void Unbind() override`
解绑 PSO。
### 静态辅助函数
#### `static D3D12_GRAPHICS_PIPELINE_STATE_DESC CreateDesc(...)`
创建完整的 PSO 描述。
参数:
- `ID3D12RootSignature* rootSignature`: 根签名
- `const D3D12_SHADER_BYTECODE& vs`: 顶点着色器
- `const D3D12_SHADER_BYTECODE& ps`: 像素着色器
- `const D3D12_SHADER_BYTECODE& gs`: 几何着色器(可选)
- `uint32_t inputElementCount`: 输入元素数量
- `const D3D12_INPUT_ELEMENT_DESC* inputElements`: 输入元素数组
#### `static D3D12_INPUT_ELEMENT_DESC CreateInputElement(...)`
创建输入元素描述,有两个重载:
-`alignedByteOffset` 参数
- 自动计算 `alignedByteOffset` 参数
参数:
- `semanticName`: 语义名称 (e.g., "POSITION", "TEXCOORD")
- `semanticIndex`: 语义索引
- `format`: 格式
- `inputSlot`: 输入槽
- `alignedByteOffset`: 对齐偏移(可选)
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_pipelineState` | `ComPtr<ID3D12PipelineState>` | D3D12 PSO 对象 |
## 使用示例
```cpp
// Define input layout
D3D12_INPUT_ELEMENT_DESC inputElements[] = {
D3D12PipelineState::CreateInputElement("POSITION", 0, Format::R32G32B32A32_Float, 0),
D3D12PipelineState::CreateInputElement("TEXCOORD", 0, Format::R32G32_Float, 1),
};
// Create PSO description
D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc = {};
psoDesc.pRootSignature = rootSignature->GetRootSignature();
psoDesc.VS = vertexShader.GetD3D12Bytecode();
psoDesc.PS = pixelShader.GetD3D12Bytecode();
psoDesc.InputLayout = { inputElements, 2 };
psoDesc.RasterizerState = ...;
psoDesc.BlendState = ...;
psoDesc.DepthStencilState = ...;
psoDesc.SampleMask = UINT_MAX;
psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
psoDesc.NumRenderTargets = 1;
psoDesc.RTVFormats[0] = DXGI_FORMAT_R8G8B8A8_UNORM;
psoDesc.DSVFormat = DXGI_FORMAT_D24_UNORM_S8_UINT;
psoDesc.SampleDesc.Count = 1;
D3D12PipelineState pso;
pso.Initialize(device->GetDevice(), psoDesc);
pso.Bind();
```
## 备注
- PSO 一旦创建不可修改,只能重新创建
- PSO 创建开销大,应缓存复用
- `ID3D12PipelineState` 是不可变对象,切换开销比 OpenGL 小

View File

@@ -1,82 +0,0 @@
# D3D12QueryHeap
DirectX 12 查询堆的 D3D12 实现,封装了 `ID3D12QueryHeap`
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12QueryHeap.h>
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12QueryHeap()`
默认构造函数。
#### `~D3D12QueryHeap()`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `bool Initialize(ID3D12Device* device, QueryType type, uint32_t count)`
初始化查询堆。
- `device`: D3D12 设备
- `type`: 查询类型
- `count`: 查询数量
- 返回: 初始化是否成功
#### `void Shutdown()`
释放查询堆。
### 属性
#### `ID3D12QueryHeap* GetQueryHeap() const`
获取底层 `ID3D12QueryHeap` 指针。
#### `void* GetNativeHandle() const`
返回原生句柄。
#### `QueryType GetType() const`
获取查询类型。
#### `uint32_t GetCount() const`
获取查询数量。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_queryHeap` | `ComPtr<ID3D12QueryHeap>` | D3D12 查询堆 |
| `m_type` | `QueryType` | 查询类型 |
| `m_count` | `uint32_t` | 查询数量 |
## 使用示例
```cpp
// Create query heap for occlusion
D3D12QueryHeap queryHeap;
queryHeap.Initialize(device->GetDevice(), QueryType::Occlusion, 2);
// Create readback buffer for results
D3D12Buffer readbackBuffer;
readbackBuffer.Initialize(device->GetDevice(), sizeof(uint64_t) * 2,
D3D12_RESOURCE_STATE_COPY_DEST, D3D12_HEAP_TYPE_READBACK);
// In render pass
cmdList->BeginQuery(queryHeap.GetQueryHeap(), QueryType::Occlusion, 0);
// Draw bounding box
cmdList->Draw(8);
cmdList->EndQuery(queryHeap.GetQueryHeap(), QueryType::Occlusion, 0);
// Resolve to readback buffer
cmdList->ResolveQueryData(queryHeap.GetQueryHeap(), QueryType::Occlusion, 0, 1,
readbackBuffer.GetResource(), 0);
```
## 备注
- 三种查询类型: Occlusion遮挡、Timestamp时间戳、PipelineStatistics管线统计
- 查询数据需要通过 resolve 操作复制到可读缓冲区
- 时间戳查询需要命令队列支持时间戳功能

View File

@@ -1,68 +0,0 @@
# D3D12RenderTargetView
DirectX 12 渲染目标视图的 D3D12 实现。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12RenderTargetView.h>
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12RenderTargetView()`
默认构造函数。
#### `~D3D12RenderTargetView()`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `void Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_RENDER_TARGET_VIEW_DESC* desc = nullptr)`
在描述符堆中分配描述符并创建 RTV。
- `device`: D3D12 设备
- `resource`: 资源对象
- `desc`: RTV 描述(可选,自动推断)
#### `void InitializeAt(ID3D12Device* device, ID3D12Resource* resource, D3D12_CPU_DESCRIPTOR_HANDLE handle, const D3D12_RENDER_TARGET_VIEW_DESC* desc = nullptr)`
在指定描述符句柄位置创建 RTV。
- `handle`: 预分配的描述符句柄
#### `void Shutdown()`
释放 RTV不释放资源
### 属性
#### `D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const`
获取 CPU 描述符句柄。
### 静态辅助函数
#### `static D3D12_RENDER_TARGET_VIEW_DESC CreateDesc(Format format, D3D12_RTV_DIMENSION dimension = D3D12_RTV_DIMENSION_TEXTURE2D)`
创建 RTV 描述。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_handle` | `D3D12_CPU_DESCRIPTOR_HANDLE` | CPU 描述符句柄 |
| `m_resource` | `ID3D12Resource*` | 关联的资源 |
## 使用示例
```cpp
D3D12RenderTargetView rtv;
rtv.Initialize(device->GetDevice(), texture->GetResource());
// Or at specific handle
D3D12_CPU_DESCRIPTOR_HANDLE handle = rtvHeap.GetCPUDescriptorHandle(0);
D3D12RenderTargetView rtv2;
rtv2.InitializeAt(device->GetDevice(), texture2->GetResource(), handle);
```
## 备注
- RTV 不拥有底层资源Shutdown 不会释放资源
- RTV 必须在 RTV 类型描述符堆中分配

View File

@@ -1,132 +0,0 @@
# D3D12RootSignature
DirectX 12 根签名的 D3D12 实现,封装了 `ID3D12RootSignature`
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12RootSignature.h>
```
## 命名空间
`XCEngine::RHI` (不继承 RHI 抽象接口)
## 公共成员函数
### 构造函数与析构函数
#### `D3D12RootSignature()`
默认构造函数。
#### `~D3D12RootSignature()`
析构函数,确保调用 `Shutdown()`
### 生命周期
#### `bool Initialize(ID3D12Device* device, const D3D12_ROOT_SIGNATURE_DESC& desc)`
初始化根签名。
- `device`: D3D12 设备
- `desc`: 根签名描述
- 返回: 初始化是否成功
#### `void Shutdown()`
释放根签名。
### 原生接口
#### `ID3D12RootSignature* GetRootSignature() const`
获取底层 `ID3D12RootSignature` 指针。
#### `void* GetNativeHandle() const`
返回原生句柄。
#### `uint32_t GetParameterCount() const`
获取根参数数量。
### 静态辅助函数
#### `static D3D12_ROOT_SIGNATURE_DESC CreateDesc(...)`
创建根签名描述。
参数:
- `D3D12_ROOT_PARAMETER* parameters`: 根参数数组
- `uint32_t parameterCount`: 参数数量
- `D3D12_STATIC_SAMPLER_DESC* samplers`: 静态采样器数组
- `uint32_t samplerCount`: 静态采样器数量
- `D3D12_ROOT_SIGNATURE_FLAGS flags`: 标志
#### `static D3D12_ROOT_PARAMETER CreateCBV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0)`
创建常量缓冲区视图根参数。
#### `static D3D12_ROOT_PARAMETER CreateSRV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0)`
创建着色器资源视图根参数。
#### `static D3D12_ROOT_PARAMETER CreateUAV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0)`
创建无序访问视图根参数。
#### `static D3D12_ROOT_PARAMETER Create32BitConstants(uint32_t shaderRegister, uint32_t num32BitValues, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0)`
创建 32 位常量根参数。
#### `static D3D12_ROOT_PARAMETER CreateDescriptorTable(uint32_t numRanges, const D3D12_DESCRIPTOR_RANGE* ranges, ShaderVisibility visibility = ShaderVisibility::All)`
创建描述符表根参数。
#### `static D3D12_STATIC_SAMPLER_DESC CreateStaticSampler(...)`
创建静态采样器描述。
#### `static D3D12_SAMPLER_DESC CreateSamplerDesc(FilterMode filter, TextureAddressMode address, float maxLOD = D3D12_FLOAT32_MAX)`
创建采样器描述。
#### `static D3D12_DESCRIPTOR_RANGE CreateDescriptorRange(...)`
创建描述符范围。
参数:
- `type`: 描述符类型 (CBV, SRV, UAV, Sampler)
- `baseShaderRegister`: 基寄存器编号
- `numDescriptors`: 描述符数量
- `registerSpace`: 寄存器空间
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_rootSignature` | `ComPtr<ID3D12RootSignature>` | D3D12 根签名 |
| `m_parameterCount` | `uint32_t` | 参数数量 |
## 使用示例
```cpp
// Create root parameters
D3D12_ROOT_PARAMETER params[3];
// Parameter 0: CBV
params[0] = D3D12RootSignature::CreateCBV(0);
// Parameter 1: 32-bit constants (e.g., 4x4 matrix = 16 floats)
params[1] = D3D12RootSignature::Create32BitConstants(0, 16);
// Parameter 2: Descriptor table
D3D12_DESCRIPTOR_RANGE ranges[1];
ranges[0] = D3D12RootSignature::CreateDescriptorRange(
D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 10);
params[2] = D3D12RootSignature::CreateDescriptorTable(1, ranges);
// Create static samplers
D3D12_SAMPLER_DESC sampDesc = D3D12RootSignature::CreateSamplerDesc(
FilterMode::Linear, TextureAddressMode::Wrap);
D3D12_STATIC_SAMPLER_DESC staticSamp = D3D12RootSignature::CreateStaticSampler(0, sampDesc);
// Create root signature
D3D12_ROOT_SIGNATURE_DESC rsDesc = D3D12RootSignature::CreateDesc(
params, 3, &staticSamp, 1);
D3D12RootSignature rootSig;
rootSig.Initialize(device->GetDevice(), rsDesc);
```
## 备注
- 根签名定义 GPU 能访问的资源布局
- 根参数有三种类型: 描述符表、常量、描述符
- 描述符表使用描述符范围引用描述符堆中的描述符
- 静态采样器嵌入根签名,无需描述符堆
- 根签名需要与 PSO 匹配

View File

@@ -1,64 +0,0 @@
# D3D12Sampler
DirectX 12 采样器的 D3D12 实现。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12Sampler.h>
```
## 继承关系
```
RHISampler (interface)
└── D3D12Sampler (implementation)
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12Sampler()`
默认构造函数。
#### `~D3D12Sampler() override`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `bool Initialize(ID3D12Device* device, const D3D12_SAMPLER_DESC& desc)`
初始化采样器。
- `device`: D3D12 设备
- `desc`: D3D12 采样器描述
- 返回: 初始化是否成功
#### `void Shutdown() override`
释放采样器。
### 描述
#### `D3D12_SAMPLER_DESC GetDesc() const`
获取采样器描述。
### 接口实现
#### `void* GetNativeHandle() override`
返回 `nullptr`D3D12 采样器通过描述符堆管理)。
#### `unsigned int GetID() override`
返回 0。
#### `void Bind(unsigned int unit) override / Unbind(unsigned int unit) override`
绑定/解绑(空实现)。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_desc` | `D3D12_SAMPLER_DESC` | 采样器描述 |
## 备注
- D3D12 采样器通常放在根签名或采样器描述符堆中
- 静态采样器在根签名中声明,无需描述符堆

View File

@@ -1,50 +0,0 @@
# D3D12Screenshot
D3D12 截图工具类,提供屏幕截图捕获功能。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12Screenshot.h>
```
## 命名空间
`XCEngine::RHI`
## 公共静态成员函数
#### `static bool Capture(ID3D12Device* device, ID3D12CommandQueue* commandQueue, ID3D12Resource* renderTarget, const char* filename, uint32_t width, uint32_t height)`
捕获渲染目标内容并保存为图片。
- `device`: D3D12 设备
- `commandQueue`: 命令队列
- `renderTarget`: 渲染目标资源
- `filename`: 输出文件名
- `width` / `height`: 截图尺寸
- 返回: 捕获是否成功
## 内部静态成员函数
#### `static bool CopyToReadbackAndSave(...)`
内部实现:复制到回读缓冲区并保存。
## 使用示例
```cpp
// Capture back buffer
D3D12Texture* backBuffer = swapChain->GetBackBuffer(
swapChain->GetCurrentBackBufferIndex());
D3D12Screenshot::Capture(
device->GetDevice(),
cmdQueue->GetCommandQueue(),
backBuffer->GetResource(),
"screenshot.png",
1920, 1080);
```
## 备注
- 截图自动复制到 READBACK 堆然后保存
- 支持 PNG 等常见图片格式
- 可能在内部创建临时资源

View File

@@ -1,53 +0,0 @@
# D3D12ShaderResourceView
DirectX 12 着色器资源视图的 D3D12 实现。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12ShaderResourceView.h>
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12ShaderResourceView()`
默认构造函数。
#### `~D3D12ShaderResourceView()`
析构函数,确保调用 `Shutdown()`
### 初始化
#### `void Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_SHADER_RESOURCE_VIEW_DESC* desc = nullptr)`
创建 SRV。
#### `void InitializeAt(ID3D12Device* device, ID3D12Resource* resource, D3D12_CPU_DESCRIPTOR_HANDLE handle, const D3D12_SHADER_RESOURCE_VIEW_DESC* desc = nullptr)`
在指定位置创建 SRV。
#### `void Shutdown()`
释放 SRV。
### 属性
#### `D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const`
获取 CPU 描述符句柄。
### 静态辅助函数
#### `static D3D12_SHADER_RESOURCE_VIEW_DESC CreateDesc(Format format, D3D12_SRV_DIMENSION dimension = D3D12_SRV_DIMENSION_TEXTURE2D, uint32_t mipLevels = 1)`
创建 SRV 描述。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_handle` | `D3D12_CPU_DESCRIPTOR_HANDLE` | CPU 描述符句柄 |
| `m_resource` | `ID3D12Resource*` | 关联的资源 |
## 备注
- SRV 用于在 shader 中读取资源
- SRV 必须在 CBV_SRV_UAV 类型描述符堆中分配
- 如果需要在 shader 中访问,必须创建 shader visible 的描述符堆

View File

@@ -1,108 +0,0 @@
# D3D12Shader
DirectX 12 着色器的 D3D12 实现,封装了 `ID3DBlob` 编译结果。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12Shader.h>
```
## 继承关系
```
RHIShader (interface)
└── D3D12Shader (implementation)
```
## 公共成员函数
### 构造函数与析构函数
#### `D3D12Shader()`
默认构造函数。
#### `~D3D12Shader() override`
析构函数,确保调用 `Shutdown()`
### 编译
#### `bool CompileFromFile(const wchar_t* filePath, const char* entryPoint, const char* target) override`
从文件编译着色器。
- `filePath`: HLSL 文件路径
- `entryPoint`: 入口点函数名 (e.g., "VS", "PS")
- `target`: 着色器目标 (e.g., "vs_5_1", "ps_5_1", "cs_5_1")
- 返回: 编译是否成功
#### `bool Compile(const void* sourceData, size_t sourceSize, const char* entryPoint, const char* target) override`
从内存编译着色器。
- `sourceData`: 着色器源代码
- `sourceSize`: 代码大小
- `entryPoint`: 入口点
- `target`: 目标
- 返回: 编译是否成功
#### `void Shutdown() override`
释放着色器编译结果。
### 着色器信息
#### `const D3D12_SHADER_BYTECODE GetD3D12Bytecode() const`
获取 D3D12 着色器字节码结构。
#### `const void* GetBytecode() const`
获取字节码指针。
#### `size_t GetBytecodeSize() const`
获取字节码大小。
#### `ShaderType GetType() const override`
获取着色器类型。
#### `const InputLayoutDesc& GetInputLayout() const`
获取输入布局描述。
### 接口实现
#### `void* GetNativeHandle() override`
返回字节码指针。
#### `bool IsValid() const override`
检查着色器是否有效。
#### `void Bind() override / Unbind() override`
绑定/解绑(空实现)。
#### `void SetInt/SetFloat/SetVec3/SetVec4/SetMat4(...)`
设置着色器变量(空实现,实际通过根签名绑定)。
## 内部成员
| 成员 | 类型 | 描述 |
|------|------|------|
| `m_bytecode` | `ComPtr<ID3DBlob>` | 编译成功的字节码 |
| `m_error` | `ComPtr<ID3DBlob>` | 编译错误信息 |
| `m_type` | `ShaderType` | 着色器类型 |
| `m_inputLayout` | `InputLayoutDesc` | 输入布局 |
## 使用示例
```cpp
D3D12Shader vertexShader;
if (vertexShader.CompileFromFile(L"shaders/DefaultVS.hlsl", "main", "vs_5_1")) {
auto bytecode = vertexShader.GetD3D12Bytecode();
// Use in PSO description
}
D3D12Shader pixelShader;
pixelShader.CompileFromFile(L"shaders/DefaultPS.hlsl", "main", "ps_5_1");
D3D12Shader computeShader;
computeShader.CompileFromFile(L"shaders/CopyCS.hlsl", "main", "cs_5_1");
```
## 备注
- 编译错误信息存储在 `m_error` 中,可输出到日志
- 字节码用于创建 Pipeline State Object
- 着色器目标格式: `{type}_{major}_{minor}`, e.g., `vs_5_1`, `ps_6_0`

Some files were not shown because too many files have changed in this diff Show More