Files
XCEngine/docs/api/XCEngine/RHI/Vulkan/VulkanFence/VulkanFence.md
2026-03-29 01:36:53 +08:00

2.0 KiB
Raw Blame History

VulkanFence

命名空间: XCEngine::RHI

类型: class

头文件: XCEngine/RHI/Vulkan/VulkanFence.h

描述: Vulkan 后端里的 RHIFence 轻量实现,当前本质上是一个软件计数器,而不是原生 VkFence 封装。

概览

VulkanFence 的接口形状继承自抽象层 fence 契约,但当前实现非常轻:

  • 内部只保存 uint64_t m_value
  • 不创建 VkFence
  • 不等待 GPU 真正完成某条提交

当前实现的真实行为

  • 构造时可以指定初始值
  • Signal() 会把值加一
  • Signal(uint64_t value) 会直接把值改成传入值
  • Wait(uint64_t value) 如果当前值更小,就把它提升到目标值
  • GetCompletedValue() 返回当前计数
  • GetNativeHandle() 返回 &m_value
  • Shutdown() 是空实现

因此这里的 Wait() 不是阻塞等待 GPU 信号,而只是一个软件层面的“把值推进到至少等于目标值”。

与命令队列的关系

VulkanCommandQueueSignal() / Wait() 当前只是把调用转发到 RHIFence,并没有接入 Vulkan 的 native queue synchronization。

这意味着当前 fence 语义更接近“测试友好的抽象完成值”,而不是商业级引擎里用于 CPU/GPU 精确同步的 timeline fence。

线程语义

源码里没有原子操作和锁。不要把它当成高并发同步原语使用。

设计取向

这个实现显然是为了先把抽象层 fence 接口接通,方便测试与统一 API而不是为了提供完整 Vulkan 同步系统。

当前限制

  • 不是 VkFence
  • 不代表 GPU 真正完成状态
  • Wait() 不阻塞
  • GetNativeHandle() 只是 uint64_t 地址

主要公开方法

  • void Shutdown()
  • void Signal()
  • void Signal(uint64_t value)
  • void Wait(uint64_t value)
  • uint64_t GetCompletedValue() const
  • void* GetNativeHandle()

相关文档