docs: update RHI API docs

This commit is contained in:
2026-03-20 02:35:45 +08:00
parent ea756c0177
commit 070b444f8f
501 changed files with 13493 additions and 2022 deletions

View File

@@ -13,6 +13,15 @@ void BeginQuery(ID3D12QueryHeap* queryHeap, QueryType type, uint32_t index);
**复杂度:** O(1)
**示例:**
```cpp
ID3D12QueryHeap* queryHeap = /* 获取查询堆 */;
cmdList.BeginQuery(queryHeap, QueryType::Timestamp, 0);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [EndQuery](end-query.md) - 结束查询
- [ResolveQueryData](resolve-query-data.md) - 解析查询数据

View File

@@ -0,0 +1,21 @@
# D3D12CommandList::Clear
```cpp
void Clear(float r, float g, float b, float a, uint32_t buffers) override;
```
清除渲染目标和/或深度模板缓冲区。
**参数:**
- `r` - 清除颜色(红色通道)
- `g` - 清除颜色(绿色通道)
- `b` - 清除颜色(蓝色通道)
- `a` - 清除颜色Alpha通道
- `buffers` - 要清除的缓冲区标志
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [RHICommandList::Clear](../../command-list/command-list.md) - 基类方法

View File

@@ -0,0 +1,14 @@
# D3D12CommandList::Close
```cpp
void Close() override;
```
关闭命令列表,停止录制。
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [RHICommandList::Close](../../command-list/command-list.md) - 基类方法

View File

@@ -2,18 +2,33 @@
**命名空间**: `XCEngine::RHI`
**描述**: DirectX 12 命令列表的 D3D12 实现,继承自 `RHICommandList`
**继承自**: [`RHICommandList`](../../command-list/command-list.md)
**头文件**: `XCEngine/RHI/D3D12/D3D12CommandList.h`
## 概述
`D3D12CommandList` 是 DirectX 12 命令列表的 RHI 实现,封装了 `ID3D12GraphicsCommandList` 接口。该类负责记录 GPU 命令,包括绘制调用、资源状态转换、渲染目标设置等。
### 主要功能
- **命令录制**: 支持图形和计算命令的录制
- **资源状态管理**: 维护资源状态映射表,跟踪资源转换
- **描述符管理**: 管理 GPU 描述符堆和描述符表
- **状态设置**: 设置管线状态、根签名、视口、裁剪矩形等
## 公共方法
| 方法 | 描述 |
|------|------|
| [`Shutdown`](../../../threading/task-system/shutdown.md) | 关闭命令列表 |
| [`Reset`](../../command-list/reset.md) | 重置命令列表 |
| [`Close`](../../command-list/close.md) | 关闭命令列表 |
| [`D3D12CommandList`](../../../threading/lambdatask/constructor.md) | 构造函数 |
| [`~D3D12CommandList`](../../../threading/readwritelock/destructor.md) | 析构函数 |
| [`Initialize`](initialize.md) | 初始化命令列表 |
| [`Shutdown`](shutdown.md) | 关闭命令列表 |
| [`Reset`](reset.md) | 重置命令列表 |
| [`Close`](close.md) | 关闭命令列表 |
| [`GetCommandList`](get-command-list.md) | 获取 D3D12 命令列表 |
| [`TransitionBarrier`](transition-barrier.md) | 资源状态转换 |
| [`TransitionBarrierInternal`](transition-barrier-internal.md) | 内部资源状态转换 |
| [`UAVBarrier`](uav-barrier.md) | UAV 屏障 |
| [`AliasBarrier`](alias-barrier.md) | 别名屏障 |
| [`SetPipelineState`](set-pipeline-state.md) | 设置管线状态 |
@@ -24,8 +39,6 @@
| [`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) | 设置索引缓冲 |
@@ -44,7 +57,7 @@
| [`DrawIndexed`](draw-indexed.md) | 索引绘制 |
| [`DrawInstancedIndirect`](draw-instanced-indirect.md) | 实例化间接绘制 |
| [`DrawIndexedInstancedIndirect`](draw-indexed-instanced-indirect.md) | 索引实例化间接绘制 |
| [`Clear`](../../command-list/clear.md) | 清除 |
| [`Clear`](clear.md) | 清除 |
| [`ClearRenderTarget`](clear-render-target.md) | 清除渲染目标 |
| [`ClearDepthStencil`](clear-depth-stencil.md) | 清除深度模板 |
| [`CopyResource`](copy-resource.md) | 复制资源 |
@@ -59,7 +72,45 @@
| [`GetResourceState`](get-resource-state.md) | 获取资源状态 |
| [`TrackResource`](track-resource.md) | 跟踪资源 |
## 使用示例
```cpp
#include "XCEngine/RHI/D3D12/D3D12CommandList.h"
#include "XCEngine/RHI/D3D12/D3D12Device.h"
using namespace XCEngine::RHI;
// 创建命令列表
D3D12CommandList cmdList;
ID3D12Device* device = /* 获取设备 */;
// 初始化
if (!cmdList.Initialize(device, CommandQueueType::Direct)) {
return false;
}
// 重置并开始录制
cmdList.Reset();
// 设置渲染状态
cmdList.SetPipelineState(pipelineState);
cmdList.SetRootSignature(rootSignature);
cmdList.SetPrimitiveTopology(PrimitiveTopology::TriangleList);
cmdList.SetViewport(viewport);
cmdList.SetRenderTargets(1, renderTargets, depthStencil);
// 绑定资源
cmdList.SetVertexBuffer(0, vertexBuffer, 0, sizeof(Vertex));
cmdList.SetIndexBuffer(indexBuffer, 0, Format::R32_UINT);
// 绘制
cmdList.DrawIndexed(indexCount, 1, 0, 0, 0);
// 关闭命令列表
cmdList.Close();
```
## 相关文档
- [D3D12 后端总览](../../opengl/overview.md)
- [D3D12 后端总览](../d3d12.md)
- [RHICommandList](../../command-list/command-list.md) - 抽象命令列表接口

View File

@@ -13,8 +13,18 @@ void CopyBuffer(ID3D12Resource* dst, uint64_t dstOffset, ID3D12Resource* src, ui
- `srcOffset` - 源偏移
- `size` - 复制大小
**复杂度:** O(n)
**复杂度:** O(n)n 为复制数据量
**示例:**
```cpp
ID3D12Resource* srcBuffer = /* 源缓冲区 */;
ID3D12Resource* dstBuffer = /* 目标缓冲区 */;
cmdList.CopyBuffer(dstBuffer, 0, srcBuffer, 0, 1024);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [CopyResource](copy-resource.md) - 复制整个资源
- [CopyTexture](copy-texture.md) - 复制纹理数据

View File

@@ -10,8 +10,18 @@ void CopyResource(void* dst, void* src) override;
- `dst` - 目标资源指针
- `src` - 源资源指针
**复杂度:** O(n)
**复杂度:** O(n)n 为资源大小
**示例:**
```cpp
ID3D12Resource* dst = /* 目标资源 */;
ID3D12Resource* src = /* 源资源 */;
cmdList.CopyResource(dst, src);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [CopyBuffer](copy-buffer.md) - 复制缓冲区数据
- [CopyTexture](copy-texture.md) - 复制纹理数据

View File

@@ -12,8 +12,26 @@ void CopyTexture(ID3D12Resource* dst, const D3D12_TEXTURE_COPY_LOCATION& dstLoca
- `src` - 源纹理
- `srcLocation` - 源位置
**复杂度:** O(n)
**复杂度:** O(n)n 为复制数据量
**示例:**
```cpp
D3D12_TEXTURE_COPY_LOCATION dstLoc = {};
dstLoc.pResource = dstTexture;
dstLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
dstLoc.SubresourceIndex = 0;
D3D12_TEXTURE_COPY_LOCATION srcLoc = {};
srcLoc.pResource = srcTexture;
srcLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
srcLoc.SubresourceIndex = 0;
cmdList.CopyTexture(dst, dstLoc, src, srcLoc);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [CopyResource](copy-resource.md) - 复制整个资源
- [CopyBuffer](copy-buffer.md) - 复制缓冲区数据

View File

@@ -4,7 +4,7 @@
void DispatchIndirect(void* argBuffer, uint64_t alignedByteOffset);
```
间接分发计算命令。
间接分发计算命令,使用存储在缓冲区中的参数执行 `Dispatch` 操作
**参数:**
- `argBuffer` - 参数缓冲区
@@ -12,6 +12,14 @@ void DispatchIndirect(void* argBuffer, uint64_t alignedByteOffset);
**复杂度:** O(1)
**示例:**
```cpp
ID3D12Resource* argBuffer = /* 包含 DispatchIndirect 参数的缓冲区 */;
cmdList.DispatchIndirect(argBuffer, 0);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [Dispatch](dispatch.md) - 直接分发计算任务

View File

@@ -13,6 +13,15 @@ void EndQuery(ID3D12QueryHeap* queryHeap, QueryType type, uint32_t index);
**复杂度:** O(1)
**示例:**
```cpp
ID3D12QueryHeap* queryHeap = /* 获取查询堆 */;
cmdList.EndQuery(queryHeap, QueryType::Timestamp, 0);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [BeginQuery](begin-query.md) - 开始查询
- [ResolveQueryData](resolve-query-data.md) - 解析查询数据

View File

@@ -11,6 +11,13 @@ void ExecuteBundle(ID3D12GraphicsCommandList* bundle);
**复杂度:** O(1)
**示例:**
```cpp
ID3D12GraphicsCommandList* bundle = /* 获取 Bundle */;
cmdList.ExecuteBundle(bundle);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -9,10 +9,22 @@ ResourceStates GetResourceState(ID3D12Resource* resource) const;
**参数:**
- `resource` - D3D12 资源指针
**返回:** 资源当前状态
**返回** 资源当前状态,如果资源未被跟踪则返回 `ResourceStates::Common`
**复杂度:** O(1)
**示例:**
```cpp
ID3D12Resource* resource = /* 获取资源 */;
ResourceStates state = cmdList.GetResourceState(resource);
if (state == ResourceStates::RenderTarget) {
// 资源当前为渲染目标状态
}
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [TrackResource](track-resource.md) - 跟踪资源
- [TransitionBarrier](transition-barrier.md) - 资源状态转换

View File

@@ -0,0 +1,40 @@
# D3D12CommandList::Initialize
```cpp
bool Initialize(ID3D12Device* device, CommandQueueType type = CommandQueueType::Direct, ID3D12CommandAllocator* allocator = nullptr);
```
初始化 D3D12 命令列表,创建 `ID3D12GraphicsCommandList` 实例。
**参数:**
- `device` - D3D12 设备指针
- `type` - 命令队列类型,默认为 `CommandQueueType::Direct`
- `allocator` - 命令分配器指针,如果为 `nullptr`,则由方法内部创建
**返回值:**
- `bool` - 初始化成功返回 `true`,失败返回 `false`
**复杂度:** O(1)
**示例:**
```cpp
D3D12CommandList cmdList;
ID3D12Device* device = /* 获取设备 */;
if (!cmdList.Initialize(device)) {
// 处理初始化失败
return;
}
// 使用命令列表...
cmdList.Reset();
// ... 录制命令
cmdList.Close();
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [Shutdown](shutdown.md) - 关闭命令列表
- [Close](close.md) - 关闭命令列表

View File

@@ -0,0 +1,14 @@
# D3D12CommandList::Reset
```cpp
void Reset() override;
```
重置命令列表,准备录制新命令。
**复杂度:** O(1)
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [RHICommandList::Reset](../../command-list/command-list.md) - 基类方法

View File

@@ -14,8 +14,18 @@ void ResolveQueryData(ID3D12QueryHeap* queryHeap, QueryType type, uint32_t start
- `resultBuffer` - 结果缓冲区
- `resultOffset` - 结果偏移
**复杂度:** O(n)
**复杂度:** O(n)n 为查询数量
**示例:**
```cpp
ID3D12QueryHeap* queryHeap = /* 获取查询堆 */;
ID3D12Resource* resultBuffer = /* 结果缓冲区 */;
cmdList.ResolveQueryData(queryHeap, QueryType::Timestamp, 0, 1, resultBuffer, 0);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [BeginQuery](begin-query.md) - 开始查询
- [EndQuery](end-query.md) - 结束查询

View File

@@ -13,6 +13,16 @@ void SetDepthBias(float depthBias, float slopeScaledDepthBias, float depthBiasCl
**复杂度:** O(1)
**注意:** 当前实现为空,深度偏移通过管线状态对象设置。
**示例:**
```cpp
// 深度偏移参数通常在 PSO 中设置
// 此方法当前为空实现
cmdList.SetDepthBias(0.0f, 0.0f, 0.0f);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览

View File

@@ -0,0 +1,14 @@
# D3D12CommandList::Shutdown
```cpp
void Shutdown() override;
```
关闭命令列表并释放相关资源。
**复杂度:** O(n) - 遍历释放所有跟踪的资源
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [RHICommandList::Shutdown](../../command-list/command-list.md) - 基类方法

View File

@@ -11,6 +11,15 @@ void TrackResource(ID3D12Resource* resource);
**复杂度:** O(1)
**示例:**
```cpp
ID3D12Resource* resource = /* 获取资源 */;
cmdList.TrackResource(resource);
```
## 相关文档
- [D3D12CommandList 总览](command-list.md) - 返回类总览
- [GetResourceState](get-resource-state.md) - 获取资源状态
- [TransitionBarrier](transition-barrier.md) - 资源状态转换