2.0 KiB
2.0 KiB
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_valueShutdown()是空实现
因此这里的 Wait() 不是阻塞等待 GPU 信号,而只是一个软件层面的“把值推进到至少等于目标值”。
与命令队列的关系
VulkanCommandQueue 的 Signal() / 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() constvoid* GetNativeHandle()