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

105 lines
3.5 KiB
Markdown

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