- 修复opengl/下13个文件对overview.md的错误引用,改为opengl.md - 修复opengl/shader/下2处get-native-handle.md的错误路径引用 - 修复rhi.md中rhifactory路径错误 - 修复opengl.md中对d3d12.md的错误引用 - 修复opengl/README.md中的overview.md引用 - 新增RHIFramebuffer完整文档(7个文件) - 新增RHIRenderPass完整文档(7个文件) - 更新rhi.md总览页,添加RHIFramebuffer和RHIRenderPass分类
76 lines
2.4 KiB
Markdown
76 lines
2.4 KiB
Markdown
# D3D12Fence
|
||
|
||
## 命名空间
|
||
|
||
`XCEngine::RHI`
|
||
|
||
## 类型
|
||
|
||
类 (Class)
|
||
|
||
## 描述
|
||
|
||
D3D12Fence 是 DirectX 12 栅栏同步原语的实现类,继承自 RHIFence。该类封装了 ID3D12Fence 对象和 Win32 事件句柄,提供 GPU 与 CPU 之间的同步机制。
|
||
|
||
## 概述
|
||
|
||
D3D12Fence 通过 DirectX 12 的栅栏机制实现 GPU 命令队列的同步。每个栅栏关联一个 64 位递增数值,当 GPU 到达指定栅栏点时会更新该值,CPU 端可以等待栅栏达到目标值后继续执行。
|
||
|
||
## 公共方法表格
|
||
|
||
| 方法 | 签名 | 描述 |
|
||
|------|------|------|
|
||
| Initialize | `bool Initialize(ID3D12Device* device, uint64_t initialValue = 0)` | 初始化 D3D12Fence 对象 |
|
||
| Shutdown | `void Shutdown() override` | 释放栅栏相关资源 |
|
||
| Signal | `void Signal() override` | 使用默认值 1 触发栅栏 |
|
||
| Signal | `void Signal(uint64_t value) override` | 使用指定值触发栅栏 |
|
||
| Wait | `void Wait(uint64_t value) override` | 等待栅栏达到指定值 |
|
||
| GetCompletedValue | `uint64_t GetCompletedValue() const override` | 获取栅栏当前完成值 |
|
||
| IsSignaled | `bool IsSignaled() const override` | 检查栅栏是否已触发 |
|
||
| GetEventHandle | `void* GetEventHandle()` | 获取 Win32 事件句柄 |
|
||
| GetNativeHandle | `void* GetNativeHandle() override` | 获取底层 D3D12Fence 指针 |
|
||
| GetFence | `ID3D12Fence* GetFence() const` | 获取 ID3D12Fence 接口 |
|
||
|
||
## 使用示例
|
||
|
||
```cpp
|
||
#include "XCEngine/RHI/D3D12/D3D12Fence.h"
|
||
#include <d3d12.h>
|
||
|
||
// 创建设备后初始化栅栏
|
||
ID3D12Device* device = ...;
|
||
D3D12Fence fence;
|
||
if (!fence.Initialize(device)) {
|
||
return false;
|
||
}
|
||
|
||
// 在 GPU 命令完成后触发栅栏
|
||
fence.Signal(1);
|
||
|
||
// 在 CPU 端等待栅栏
|
||
fence.Wait(1);
|
||
|
||
// 检查栅栏状态
|
||
if (fence.IsSignaled()) {
|
||
// 栅栏已触发,可以继续执行
|
||
}
|
||
|
||
// 获取底层 D3D12Fence 进行高级操作
|
||
ID3D12Fence* nativeFence = fence.GetFence();
|
||
|
||
// 销毁前关闭
|
||
fence.Shutdown();
|
||
```
|
||
|
||
## 相关文档
|
||
|
||
- [Initialize](../../../threading/task-system/initialize.md)
|
||
- [Shutdown](../../../threading/task-system/shutdown.md)
|
||
- [Signal](../../command-queue/signal.md)
|
||
- [Wait](../../../threading/task-group/wait.md)
|
||
- [GetCompletedValue](../../command-queue/get-completed-value.md)
|
||
- [IsSignaled](../../fence/is-signaled.md)
|
||
- [GetEventHandle](get-event-handle.md)
|
||
- [GetNativeHandle](../../buffer/get-native-handle.md)
|
||
- [GetFence](get-fence.md)
|