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

3.5 KiB

RHICommandQueue

命名空间: XCEngine::RHI

类型: class (abstract)

头文件: XCEngine/RHI/RHICommandQueue.h

描述: 抽象命令提交队列,负责执行命令列表、管理 GPU 同步以及暴露基础队列信息。

角色概述

RHICommandQueue 对应的是原生图形 API 里的提交队列概念。当前接口主要承担三类职责:

  • 提交命令列表
  • RHIFence 协作完成 GPU 同步
  • 暴露队列类型、帧索引和时间戳频率等队列级信息

在抽象层里,它位于 RHIDeviceRHICommandList 之间,是“录制好的 GPU 工作真正被执行”的入口。

当前接口语义

提交

这是队列最核心的方法。但要注意,当前签名是 ExecuteCommandLists(uint32_t count, void** lists),而不是 RHICommandList**。这说明抽象层在提交阶段仍保留了一定后端适配痕迹,接口类型安全性不算强。

同步

这组接口提供了最基础的 GPU timeline / fence 同步语义。

队列与帧信息

其中 WaitForPreviousFrame()GetCurrentFrame() 暗示当前抽象层除了通用队列语义,还兼顾了交换链驱动的 frame-loop 使用场景。

队列类型

队列类型由 CommandQueueType 表达,当前枚举包括:

  • Direct
  • Compute
  • Copy

但从当前测试覆盖和接口成熟度看,最常见、最稳定的仍是 Direct 路径。

生命周期与所有权

RHICommandQueue 通常由 RHIDevice 创建,并以裸指针形式返回。和本模块其他对象一样,推荐使用模式是:

  1. RHIDevice::CreateCommandQueue()
  2. 使用队列提交命令或等待同步
  3. queue->Shutdown()
  4. delete queue

设计理解

从商业引擎实践看,把 queue 抽象单独暴露出来是合理的:

  • 它让 renderer 可以明确区分“录制命令”和“提交命令”。
  • 它为多队列或异步计算扩展保留了接口形状。
  • 它便于测试在设备层之上直接验证提交和同步行为。

但当前实现仍然比较早期:

  • 提交接口还不够类型安全。
  • 队列抽象还没有扩展到更复杂的 submission batch、timeline semaphore 或跨队列调度模型。
  • WaitForPreviousFrame() 这类接口说明它同时背负了一些具体 frame-loop 约定,而不是完全最小化的 queue 抽象。

公共方法

相关指南

相关文档