# 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 // 创建设备后初始化栅栏 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](../../fence/constructor.md) - [Shutdown](../../fence/shutdown.md) - [Signal](../../fence/signal.md) - [Wait](../../fence/wait.md) - [GetCompletedValue](../../fence/get-completed-value.md) - [IsSignaled](../../fence/is-signaled.md) - [GetEventHandle](get-event-handle.md) - [GetNativeHandle](../../fence/get-native-handle.md) - [GetFence](get-fence.md)