Files
XCEngine/docs/api/rhi/rhi-command-queue.md

83 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RHICommandQueue
**命名空间**: `XCEngine::RHI`
**类型**: `class` (abstract)
**描述**: GPU 命令队列抽象接口,负责提交和执行命令列表,以及 GPU/CPU 同步。
## 概述
`RHICommandQueue` 封装了 GPU 命令队列的操作包括命令列表提交、同步栅栏操作、GPU 空闲等待等功能。
## 公共方法
### 生命周期
| 方法 | 描述 |
|------|------|
| `virtual void Shutdown()` | 关闭命令队列 |
### 命令执行
| 方法 | 描述 |
|------|------|
| `virtual void ExecuteCommandLists(uint32_t count, void** lists)` | 执行命令列表 |
| `virtual void Signal(RHIFence* fence, uint64_t value)` | 信号通知栅栏 |
| `virtual void Wait(RHIFence* fence, uint64_t value)` | 等待栅栏 |
| `virtual uint64_t GetCompletedValue()` | 获取已完成的值 |
| `virtual void WaitForIdle()` | 等待队列空闲 |
### 属性访问
| 方法 | 描述 |
|------|------|
| `virtual CommandQueueType GetType() const` | 获取队列类型 |
| `virtual uint64_t GetTimestampFrequency() const` | 获取时间戳频率 |
### 其他
| 方法 | 描述 |
|------|------|
| `virtual void* GetNativeHandle()` | 获取原生 API 句柄 |
## 命令队列类型 (CommandQueueType)
| 枚举值 | 描述 |
|--------|------|
| `Direct` | 直接队列,用于图形和计算命令 |
| `Compute` | 计算队列,专门用于计算着色器 |
| `Copy` | 复制队列,专门用于资源复制 |
## 使用示例
```cpp
// 创建命令队列
CommandQueueDesc queueDesc;
queueDesc.queueType = (uint32_t)CommandQueueType::Direct;
RHICommandQueue* commandQueue = device->CreateCommandQueue(queueDesc);
// 创建同步栅栏
FenceDesc fenceDesc;
fenceDesc.initialValue = 0;
RHIFence* fence = device->CreateFence(fenceDesc);
// 提交命令列表执行
commandQueue->ExecuteCommandLists(1, (void**)&commandList);
// 信号通知栅栏
commandQueue->Signal(fence, 1);
// CPU 等待 GPU 完成
fence->Wait(1);
// 或者让 CPU 等待队列空闲
commandQueue->WaitForIdle();
```
## 相关文档
- [RHICommandList](./rhi-command-list.md) - 命令列表
- [RHIFence](./rhi-fence.md) - 同步栅栏
- [RHIDevice](./rhi-device.md) - 创建设备