Files
XCEngine/docs/api/rhi/d3d12/fence/index.md

2.3 KiB
Raw Blame History

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 接口

使用示例

#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();

相关文档