3.5 KiB
3.5 KiB
RHICommandQueue
命名空间: XCEngine::RHI
类型: class (abstract)
头文件: XCEngine/RHI/RHICommandQueue.h
描述: 抽象命令提交队列,负责执行命令列表、管理 GPU 同步以及暴露基础队列信息。
角色概述
RHICommandQueue 对应的是原生图形 API 里的提交队列概念。当前接口主要承担三类职责:
- 提交命令列表
- 和 RHIFence 协作完成 GPU 同步
- 暴露队列类型、帧索引和时间戳频率等队列级信息
在抽象层里,它位于 RHIDevice 和 RHICommandList 之间,是“录制好的 GPU 工作真正被执行”的入口。
当前接口语义
提交
这是队列最核心的方法。但要注意,当前签名是 ExecuteCommandLists(uint32_t count, void** lists),而不是 RHICommandList**。这说明抽象层在提交阶段仍保留了一定后端适配痕迹,接口类型安全性不算强。
同步
这组接口提供了最基础的 GPU timeline / fence 同步语义。
队列与帧信息
其中 WaitForPreviousFrame() 和 GetCurrentFrame() 暗示当前抽象层除了通用队列语义,还兼顾了交换链驱动的 frame-loop 使用场景。
队列类型
队列类型由 CommandQueueType 表达,当前枚举包括:
DirectComputeCopy
但从当前测试覆盖和接口成熟度看,最常见、最稳定的仍是 Direct 路径。
生命周期与所有权
RHICommandQueue 通常由 RHIDevice 创建,并以裸指针形式返回。和本模块其他对象一样,推荐使用模式是:
RHIDevice::CreateCommandQueue()- 使用队列提交命令或等待同步
queue->Shutdown()delete queue
设计理解
从商业引擎实践看,把 queue 抽象单独暴露出来是合理的:
- 它让 renderer 可以明确区分“录制命令”和“提交命令”。
- 它为多队列或异步计算扩展保留了接口形状。
- 它便于测试在设备层之上直接验证提交和同步行为。
但当前实现仍然比较早期:
- 提交接口还不够类型安全。
- 队列抽象还没有扩展到更复杂的 submission batch、timeline semaphore 或跨队列调度模型。
WaitForPreviousFrame()这类接口说明它同时背负了一些具体 frame-loop 约定,而不是完全最小化的 queue 抽象。
公共方法
- ExecuteCommandLists
- Signal
- Wait
- GetCompletedValue
- WaitForIdle
- GetType
- GetTimestampFrequency
- GetNativeHandle
- WaitForPreviousFrame
- GetCurrentFrame