Files
XCEngine/docs/api/rhi/d3d12/fence/index.md
ssdfasd 1cf744b755 refactor(docs): RHI模块文档重构 - 修复18处链接错误并新增RHIFramebuffer/RHIRenderPass文档
- 修复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分类
2026-03-26 01:29:00 +08:00

76 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)