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:
36
docs/api/rhi/d3d12/README.md
Normal file
36
docs/api/rhi/d3d12/README.md
Normal 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)
|
||||
33
docs/api/rhi/d3d12/buffer/buffer.md
Normal file
33
docs/api/rhi/d3d12/buffer/buffer.md
Normal 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) - 抽象缓冲区接口
|
||||
16
docs/api/rhi/d3d12/buffer/get-buffer-type.md
Normal file
16
docs/api/rhi/d3d12/buffer/get-buffer-type.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12Buffer::GetBufferType / SetBufferType
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
BufferType GetBufferType() const override
|
||||
void SetBufferType(BufferType type) override
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
获取和设置缓冲区类型(Vertex / Index / Constant 等)。
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
19
docs/api/rhi/d3d12/buffer/get-desc.md
Normal file
19
docs/api/rhi/d3d12/buffer/get-desc.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# D3D12Buffer::GetDesc
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
D3D12_RESOURCE_DESC GetDesc() const
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
获取 D3D12 资源描述结构。
|
||||
|
||||
## 返回值
|
||||
|
||||
`D3D12_RESOURCE_DESC` - 资源描述
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
19
docs/api/rhi/d3d12/buffer/get-gpu-address.md
Normal file
19
docs/api/rhi/d3d12/buffer/get-gpu-address.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# D3D12Buffer::GetGPUAddress
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
uint64_t GetGPUAddress() const
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
获取 GPU 地址(等同于 `GetGPUVirtualAddress`)。
|
||||
|
||||
## 返回值
|
||||
|
||||
`uint64_t` - GPU 地址
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
19
docs/api/rhi/d3d12/buffer/get-gpu-virtual-address.md
Normal file
19
docs/api/rhi/d3d12/buffer/get-gpu-virtual-address.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# D3D12Buffer::GetGPUVirtualAddress
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress() const
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
获取 GPU 虚拟地址,用于根签名绑定。
|
||||
|
||||
## 返回值
|
||||
|
||||
`D3D12_GPU_VIRTUAL_ADDRESS` - GPU 虚拟地址
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
16
docs/api/rhi/d3d12/buffer/get-name.md
Normal file
16
docs/api/rhi/d3d12/buffer/get-name.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12Buffer::GetName / SetName
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
const std::string& GetName() const override
|
||||
void SetName(const std::string& name) override
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
获取和设置对象名称(用于调试)。
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
19
docs/api/rhi/d3d12/buffer/get-native-handle.md
Normal file
19
docs/api/rhi/d3d12/buffer/get-native-handle.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# D3D12Buffer::GetNativeHandle
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
void* GetNativeHandle() override
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
返回原生句柄,即 `ID3D12Resource*`。
|
||||
|
||||
## 返回值
|
||||
|
||||
`void*` - 原生句柄
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
19
docs/api/rhi/d3d12/buffer/get-resource.md
Normal file
19
docs/api/rhi/d3d12/buffer/get-resource.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# D3D12Buffer::GetResource
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
ID3D12Resource* GetResource() const
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
获取底层 `ID3D12Resource` 指针。
|
||||
|
||||
## 返回值
|
||||
|
||||
`ID3D12Resource*` - D3D12 资源指针
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
19
docs/api/rhi/d3d12/buffer/get-size.md
Normal file
19
docs/api/rhi/d3d12/buffer/get-size.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# D3D12Buffer::GetSize
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
uint64_t GetSize() const override
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
获取缓冲区大小(字节)。
|
||||
|
||||
## 返回值
|
||||
|
||||
`uint64_t` - 缓冲区大小
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
16
docs/api/rhi/d3d12/buffer/get-state.md
Normal file
16
docs/api/rhi/d3d12/buffer/get-state.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12Buffer::GetState / SetState
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
ResourceStates GetState() const
|
||||
void SetState(ResourceStates state)
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
获取和设置当前资源状态。用于状态跟踪和屏障生成。
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
16
docs/api/rhi/d3d12/buffer/get-stride.md
Normal file
16
docs/api/rhi/d3d12/buffer/get-stride.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12Buffer::GetStride / SetStride
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
uint32_t GetStride() const override
|
||||
void SetStride(uint32_t stride) override
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
获取和设置顶点缓冲区步长(字节)。
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
35
docs/api/rhi/d3d12/buffer/initialize-from-existing.md
Normal file
35
docs/api/rhi/d3d12/buffer/initialize-from-existing.md
Normal 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());
|
||||
```
|
||||
42
docs/api/rhi/d3d12/buffer/initialize-with-data.md
Normal file
42
docs/api/rhi/d3d12/buffer/initialize-with-data.md
Normal 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);
|
||||
```
|
||||
39
docs/api/rhi/d3d12/buffer/initialize.md
Normal file
39
docs/api/rhi/d3d12/buffer/initialize.md
Normal 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);
|
||||
```
|
||||
27
docs/api/rhi/d3d12/buffer/map.md
Normal file
27
docs/api/rhi/d3d12/buffer/map.md
Normal 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();
|
||||
```
|
||||
23
docs/api/rhi/d3d12/buffer/set-data.md
Normal file
23
docs/api/rhi/d3d12/buffer/set-data.md
Normal 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)
|
||||
15
docs/api/rhi/d3d12/buffer/shutdown.md
Normal file
15
docs/api/rhi/d3d12/buffer/shutdown.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# D3D12Buffer::Shutdown
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
void Shutdown() override
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
释放 D3D12 缓冲区资源,将成员变量置为空。
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
15
docs/api/rhi/d3d12/buffer/unmap.md
Normal file
15
docs/api/rhi/d3d12/buffer/unmap.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# D3D12Buffer::Unmap
|
||||
|
||||
## 函数签名
|
||||
|
||||
```cpp
|
||||
void Unmap() override
|
||||
```
|
||||
|
||||
## 中文描述
|
||||
|
||||
解除缓冲区内存映射。
|
||||
|
||||
## 复杂度
|
||||
|
||||
O(1)
|
||||
28
docs/api/rhi/d3d12/buffer/update-data.md
Normal file
28
docs/api/rhi/d3d12/buffer/update-data.md
Normal 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);
|
||||
```
|
||||
19
docs/api/rhi/d3d12/command-allocator/command-allocator.md
Normal file
19
docs/api/rhi/d3d12/command-allocator/command-allocator.md
Normal 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)
|
||||
@@ -0,0 +1,15 @@
|
||||
# D3D12CommandAllocator::GetCommandAllocator
|
||||
|
||||
```cpp
|
||||
ID3D12CommandAllocator* GetCommandAllocator() const { return m_commandAllocator.Get(); }
|
||||
```
|
||||
|
||||
获取底层的 D3D12 命令分配器接口。
|
||||
|
||||
**返回:** `ID3D12CommandAllocator*`
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandAllocator 总览](command-allocator.md) - 返回类总览
|
||||
15
docs/api/rhi/d3d12/command-allocator/is-ready.md
Normal file
15
docs/api/rhi/d3d12/command-allocator/is-ready.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# D3D12CommandAllocator::IsReady
|
||||
|
||||
```cpp
|
||||
bool IsReady() const;
|
||||
```
|
||||
|
||||
检查命令分配器是否准备就绪。
|
||||
|
||||
**返回:** 分配器是否准备就绪
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandAllocator 总览](command-allocator.md) - 返回类总览
|
||||
17
docs/api/rhi/d3d12/command-list/alias-barrier.md
Normal file
17
docs/api/rhi/d3d12/command-list/alias-barrier.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# D3D12CommandList::AliasBarrier
|
||||
|
||||
```cpp
|
||||
void AliasBarrier(void* beforeResource = nullptr, void* afterResource = nullptr);
|
||||
```
|
||||
|
||||
添加资源别名屏障。
|
||||
|
||||
**参数:**
|
||||
- `beforeResource` - 别名切换前的资源
|
||||
- `afterResource` - 别名切换后的资源
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/begin-query.md
Normal file
18
docs/api/rhi/d3d12/command-list/begin-query.md
Normal 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) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/clear-depth-stencil.md
Normal file
18
docs/api/rhi/d3d12/command-list/clear-depth-stencil.md
Normal 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) - 返回类总览
|
||||
17
docs/api/rhi/d3d12/command-list/clear-render-target.md
Normal file
17
docs/api/rhi/d3d12/command-list/clear-render-target.md
Normal 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) - 返回类总览
|
||||
143
docs/api/rhi/d3d12/command-list/command-list.md
Normal file
143
docs/api/rhi/d3d12/command-list/command-list.md
Normal 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) - 抽象命令列表接口
|
||||
20
docs/api/rhi/d3d12/command-list/copy-buffer.md
Normal file
20
docs/api/rhi/d3d12/command-list/copy-buffer.md
Normal 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) - 返回类总览
|
||||
17
docs/api/rhi/d3d12/command-list/copy-resource.md
Normal file
17
docs/api/rhi/d3d12/command-list/copy-resource.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# D3D12CommandList::CopyResource
|
||||
|
||||
```cpp
|
||||
void CopyResource(void* dst, void* src) override;
|
||||
```
|
||||
|
||||
复制资源。
|
||||
|
||||
**参数:**
|
||||
- `dst` - 目标资源指针
|
||||
- `src` - 源资源指针
|
||||
|
||||
**复杂度:** O(n)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
19
docs/api/rhi/d3d12/command-list/copy-texture.md
Normal file
19
docs/api/rhi/d3d12/command-list/copy-texture.md
Normal 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) - 返回类总览
|
||||
17
docs/api/rhi/d3d12/command-list/dispatch-indirect.md
Normal file
17
docs/api/rhi/d3d12/command-list/dispatch-indirect.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# D3D12CommandList::DispatchIndirect
|
||||
|
||||
```cpp
|
||||
void DispatchIndirect(void* argBuffer, uint64_t alignedByteOffset);
|
||||
```
|
||||
|
||||
间接分发计算命令。
|
||||
|
||||
**参数:**
|
||||
- `argBuffer` - 参数缓冲区
|
||||
- `alignedByteOffset` - 字节偏移
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/dispatch.md
Normal file
18
docs/api/rhi/d3d12/command-list/dispatch.md
Normal 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) - 返回类总览
|
||||
@@ -0,0 +1,17 @@
|
||||
# D3D12CommandList::DrawIndexedInstancedIndirect
|
||||
|
||||
```cpp
|
||||
void DrawIndexedInstancedIndirect(void* argBuffer, uint64_t alignedByteOffset);
|
||||
```
|
||||
|
||||
间接绘制索引实例。
|
||||
|
||||
**参数:**
|
||||
- `argBuffer` - 参数缓冲区
|
||||
- `alignedByteOffset` - 字节偏移
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
20
docs/api/rhi/d3d12/command-list/draw-indexed.md
Normal file
20
docs/api/rhi/d3d12/command-list/draw-indexed.md
Normal 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) - 返回类总览
|
||||
17
docs/api/rhi/d3d12/command-list/draw-instanced-indirect.md
Normal file
17
docs/api/rhi/d3d12/command-list/draw-instanced-indirect.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# D3D12CommandList::DrawInstancedIndirect
|
||||
|
||||
```cpp
|
||||
void DrawInstancedIndirect(void* argBuffer, uint64_t alignedByteOffset);
|
||||
```
|
||||
|
||||
间接绘制实例。
|
||||
|
||||
**参数:**
|
||||
- `argBuffer` - 参数缓冲区
|
||||
- `alignedByteOffset` - 字节偏移
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
19
docs/api/rhi/d3d12/command-list/draw.md
Normal file
19
docs/api/rhi/d3d12/command-list/draw.md
Normal 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) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/end-query.md
Normal file
18
docs/api/rhi/d3d12/command-list/end-query.md
Normal 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) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/execute-bundle.md
Normal file
16
docs/api/rhi/d3d12/command-list/execute-bundle.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::ExecuteBundle
|
||||
|
||||
```cpp
|
||||
void ExecuteBundle(ID3D12GraphicsCommandList* bundle);
|
||||
```
|
||||
|
||||
执行 Bundle。
|
||||
|
||||
**参数:**
|
||||
- `bundle` - Bundle 命令列表
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
15
docs/api/rhi/d3d12/command-list/get-command-list.md
Normal file
15
docs/api/rhi/d3d12/command-list/get-command-list.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# D3D12CommandList::GetCommandList
|
||||
|
||||
```cpp
|
||||
ID3D12GraphicsCommandList* GetCommandList() const { return m_commandList.Get(); }
|
||||
```
|
||||
|
||||
获取底层的 D3D12 图形命令列表接口。
|
||||
|
||||
**返回:** `ID3D12GraphicsCommandList*`
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/get-resource-state.md
Normal file
18
docs/api/rhi/d3d12/command-list/get-resource-state.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# D3D12CommandList::GetResourceState
|
||||
|
||||
```cpp
|
||||
ResourceStates GetResourceState(ID3D12Resource* resource) const;
|
||||
```
|
||||
|
||||
获取资源状态。
|
||||
|
||||
**参数:**
|
||||
- `resource` - D3D12 资源指针
|
||||
|
||||
**返回:** 资源当前状态
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
21
docs/api/rhi/d3d12/command-list/resolve-query-data.md
Normal file
21
docs/api/rhi/d3d12/command-list/resolve-query-data.md
Normal 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) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/set-blend-factor.md
Normal file
16
docs/api/rhi/d3d12/command-list/set-blend-factor.md
Normal 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) - 返回类总览
|
||||
@@ -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) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/set-depth-bias.md
Normal file
18
docs/api/rhi/d3d12/command-list/set-depth-bias.md
Normal 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) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/set-descriptor-heap.md
Normal file
16
docs/api/rhi/d3d12/command-list/set-descriptor-heap.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::SetDescriptorHeap
|
||||
|
||||
```cpp
|
||||
void SetDescriptorHeap(ID3D12DescriptorHeap* heap);
|
||||
```
|
||||
|
||||
设置描述符堆。
|
||||
|
||||
**参数:**
|
||||
- `heap` - D3D12 描述符堆指针
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
17
docs/api/rhi/d3d12/command-list/set-descriptor-heaps.md
Normal file
17
docs/api/rhi/d3d12/command-list/set-descriptor-heaps.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# D3D12CommandList::SetDescriptorHeaps
|
||||
|
||||
```cpp
|
||||
void SetDescriptorHeaps(uint32_t count, ID3D12DescriptorHeap** heaps);
|
||||
```
|
||||
|
||||
设置多个描述符堆。
|
||||
|
||||
**参数:**
|
||||
- `count` - 描述符堆数量
|
||||
- `heaps` - 描述符堆指针数组
|
||||
|
||||
**复杂度:** O(n)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
@@ -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) - 返回类总览
|
||||
@@ -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) - 返回类总览
|
||||
@@ -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) - 返回类总览
|
||||
@@ -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) - 返回类总览
|
||||
@@ -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) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/set-index-buffer.md
Normal file
18
docs/api/rhi/d3d12/command-list/set-index-buffer.md
Normal 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) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/set-pipeline-state.md
Normal file
16
docs/api/rhi/d3d12/command-list/set-pipeline-state.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::SetPipelineState
|
||||
|
||||
```cpp
|
||||
void SetPipelineState(void* pso) override;
|
||||
```
|
||||
|
||||
设置图形管线状态对象。
|
||||
|
||||
**参数:**
|
||||
- `pso` - 管线状态对象指针
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/set-primitive-topology.md
Normal file
16
docs/api/rhi/d3d12/command-list/set-primitive-topology.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::SetPrimitiveTopology
|
||||
|
||||
```cpp
|
||||
void SetPrimitiveTopology(PrimitiveTopology topology);
|
||||
```
|
||||
|
||||
设置图元拓扑类型。
|
||||
|
||||
**参数:**
|
||||
- `topology` - 图元拓扑类型
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/set-render-targets-handle.md
Normal file
18
docs/api/rhi/d3d12/command-list/set-render-targets-handle.md
Normal 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) - 返回类总览
|
||||
@@ -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) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/set-render-targets.md
Normal file
18
docs/api/rhi/d3d12/command-list/set-render-targets.md
Normal 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) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/set-root-signature.md
Normal file
16
docs/api/rhi/d3d12/command-list/set-root-signature.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::SetRootSignature
|
||||
|
||||
```cpp
|
||||
void SetRootSignature(ID3D12RootSignature* signature);
|
||||
```
|
||||
|
||||
设置根签名。
|
||||
|
||||
**参数:**
|
||||
- `signature` - D3D12 根签名指针
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/set-scissor-rect.md
Normal file
16
docs/api/rhi/d3d12/command-list/set-scissor-rect.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::SetScissorRect
|
||||
|
||||
```cpp
|
||||
void SetScissorRect(const Rect& rect) override;
|
||||
```
|
||||
|
||||
设置裁剪矩形。
|
||||
|
||||
**参数:**
|
||||
- `rect` - 裁剪矩形结构
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
17
docs/api/rhi/d3d12/command-list/set-scissor-rects.md
Normal file
17
docs/api/rhi/d3d12/command-list/set-scissor-rects.md
Normal 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) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/set-stencil-ref.md
Normal file
16
docs/api/rhi/d3d12/command-list/set-stencil-ref.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::SetStencilRef
|
||||
|
||||
```cpp
|
||||
void SetStencilRef(uint32_t stencilRef);
|
||||
```
|
||||
|
||||
设置模板参考值。
|
||||
|
||||
**参数:**
|
||||
- `stencilRef` - 模板参考值
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
19
docs/api/rhi/d3d12/command-list/set-vertex-buffer.md
Normal file
19
docs/api/rhi/d3d12/command-list/set-vertex-buffer.md
Normal 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) - 返回类总览
|
||||
20
docs/api/rhi/d3d12/command-list/set-vertex-buffers.md
Normal file
20
docs/api/rhi/d3d12/command-list/set-vertex-buffers.md
Normal 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) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/set-viewport.md
Normal file
16
docs/api/rhi/d3d12/command-list/set-viewport.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::SetViewport
|
||||
|
||||
```cpp
|
||||
void SetViewport(const Viewport& viewport) override;
|
||||
```
|
||||
|
||||
设置视口。
|
||||
|
||||
**参数:**
|
||||
- `viewport` - 视口结构
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
17
docs/api/rhi/d3d12/command-list/set-viewports.md
Normal file
17
docs/api/rhi/d3d12/command-list/set-viewports.md
Normal 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) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/track-resource.md
Normal file
16
docs/api/rhi/d3d12/command-list/track-resource.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::TrackResource
|
||||
|
||||
```cpp
|
||||
void TrackResource(ID3D12Resource* resource);
|
||||
```
|
||||
|
||||
跟踪资源状态。
|
||||
|
||||
**参数:**
|
||||
- `resource` - D3D12 资源指针
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
@@ -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) - 返回类总览
|
||||
18
docs/api/rhi/d3d12/command-list/transition-barrier.md
Normal file
18
docs/api/rhi/d3d12/command-list/transition-barrier.md
Normal 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) - 返回类总览
|
||||
16
docs/api/rhi/d3d12/command-list/uav-barrier.md
Normal file
16
docs/api/rhi/d3d12/command-list/uav-barrier.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# D3D12CommandList::UAVBarrier
|
||||
|
||||
```cpp
|
||||
void UAVBarrier(void* resource = nullptr);
|
||||
```
|
||||
|
||||
添加无序访问视图屏障。
|
||||
|
||||
**参数:**
|
||||
- `resource` - 目标资源指针,nullptr 表示所有 UAV
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandList 总览](command-list.md) - 返回类总览
|
||||
26
docs/api/rhi/d3d12/command-queue/command-queue.md
Normal file
26
docs/api/rhi/d3d12/command-queue/command-queue.md
Normal 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) - 抽象命令队列接口
|
||||
17
docs/api/rhi/d3d12/command-queue/execute-command-lists.md
Normal file
17
docs/api/rhi/d3d12/command-queue/execute-command-lists.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# D3D12CommandQueue::ExecuteCommandLists
|
||||
|
||||
```cpp
|
||||
void ExecuteCommandLists(uint32_t count, void** lists) override;
|
||||
```
|
||||
|
||||
执行命令列表。
|
||||
|
||||
**参数:**
|
||||
- `count` - 命令列表数量
|
||||
- `lists` - 命令列表指针数组
|
||||
|
||||
**复杂度:** O(n)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览
|
||||
15
docs/api/rhi/d3d12/command-queue/get-command-queue.md
Normal file
15
docs/api/rhi/d3d12/command-queue/get-command-queue.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# D3D12CommandQueue::GetCommandQueue
|
||||
|
||||
```cpp
|
||||
ID3D12CommandQueue* GetCommandQueue() const { return m_commandQueue.Get(); }
|
||||
```
|
||||
|
||||
获取底层 D3D12 命令队列接口。
|
||||
|
||||
**返回:** `ID3D12CommandQueue*`
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览
|
||||
15
docs/api/rhi/d3d12/command-queue/get-completed-value.md
Normal file
15
docs/api/rhi/d3d12/command-queue/get-completed-value.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# D3D12CommandQueue::GetCompletedValue
|
||||
|
||||
```cpp
|
||||
uint64_t GetCompletedValue() override;
|
||||
```
|
||||
|
||||
获取已完成值。
|
||||
|
||||
**返回:** 栅栏已完成的值
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览
|
||||
15
docs/api/rhi/d3d12/command-queue/get-timestamp-frequency.md
Normal file
15
docs/api/rhi/d3d12/command-queue/get-timestamp-frequency.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# D3D12CommandQueue::GetTimestampFrequency
|
||||
|
||||
```cpp
|
||||
uint64_t GetTimestampFrequency() const override { return m_timestampFrequency; }
|
||||
```
|
||||
|
||||
获取时间戳频率。
|
||||
|
||||
**返回:** 时间戳频率
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览
|
||||
17
docs/api/rhi/d3d12/command-queue/signal.md
Normal file
17
docs/api/rhi/d3d12/command-queue/signal.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# D3D12CommandQueue::Signal
|
||||
|
||||
```cpp
|
||||
void Signal(RHIFence* fence, uint64_t value) override;
|
||||
```
|
||||
|
||||
发送信号。
|
||||
|
||||
**参数:**
|
||||
- `fence` - 栅栏指针
|
||||
- `value` - 信号值
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览
|
||||
13
docs/api/rhi/d3d12/command-queue/wait-for-idle.md
Normal file
13
docs/api/rhi/d3d12/command-queue/wait-for-idle.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# D3D12CommandQueue::WaitForIdle
|
||||
|
||||
```cpp
|
||||
void WaitForIdle() override;
|
||||
```
|
||||
|
||||
等待空闲。
|
||||
|
||||
**复杂度:** O(n)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12CommandQueue 总览](command-queue.md) - 返回类总览
|
||||
67
docs/api/rhi/d3d12/common/common.md
Normal file
67
docs/api/rhi/d3d12/common/common.md
Normal 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)
|
||||
@@ -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)
|
||||
@@ -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) - 返回类总览
|
||||
@@ -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 回读数据的堆
|
||||
- 创建后立即使用需注意资源状态转换
|
||||
@@ -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 完成所有关联命令后才能重置
|
||||
- 每个帧通常有独立的命令分配器以支持帧间并行
|
||||
- 命令分配器创建开销小,可以频繁创建销毁
|
||||
@@ -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 是一种优化手段,可以复用频繁执行的命令序列
|
||||
@@ -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 直到所有已提交命令完成
|
||||
@@ -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,可在头文件中使用
|
||||
- 这些是高频使用的辅助函数,避免重复代码
|
||||
@@ -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 描述符
|
||||
@@ -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(通过描述符标志区分)
|
||||
@@ -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
|
||||
- 描述符堆创建后大小固定,不能调整
|
||||
@@ -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()` 可以模拟设备移除场景用于测试
|
||||
@@ -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 语句确保编译期检查所有枚举值
|
||||
- 未处理的枚举值返回合理的默认值
|
||||
@@ -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
|
||||
- 多帧缓冲时常用栅栏确保帧间资源安全
|
||||
@@ -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)
|
||||
@@ -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 小
|
||||
@@ -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 操作复制到可读缓冲区
|
||||
- 时间戳查询需要命令队列支持时间戳功能
|
||||
@@ -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 类型描述符堆中分配
|
||||
@@ -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 匹配
|
||||
@@ -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 采样器通常放在根签名或采样器描述符堆中
|
||||
- 静态采样器在根签名中声明,无需描述符堆
|
||||
@@ -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 等常见图片格式
|
||||
- 可能在内部创建临时资源
|
||||
@@ -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 的描述符堆
|
||||
@@ -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
Reference in New Issue
Block a user