Files
XCEngine/docs/api/rhi/command-queue/command-queue.md
ssdfasd d83ed56177 fix(rhi): Fix RHI abstraction layer API docs per api-skill.md template
- Rename texture/dtor.md to destructor.md per template spec
- Remove duplicate non-hyphenated fence docs (getnativehandle.md, issignaled.md, getcompletedvalue.md)
- Fix template field issues:
  - swap-chain, command-queue: 类型 now uses 'class (abstract)'
  - sampler: 头文件 now uses full path 'XCEngine/RHI/RHISampler.h'
  - types: 类型 fixed from 'structs' to 'struct'
  - enums: 类型 fixed from 'enums' to 'enum class'
- Fix include paths in command-queue and pipeline-layout code examples
- Create missing constructor/destructor docs for 11 classes:
  buffer, texture, shader, device, command-list, command-queue,
  fence, sampler, swap-chain, pipeline-state, pipeline-layout
- Update class overview pages to include constructor/destructor entries
2026-03-22 03:07:41 +08:00

2.6 KiB
Raw Blame History

RHICommandQueue

命名空间: XCEngine::RHI

类型: class (abstract)

头文件: XCEngine/RHI/RHICommandQueue.h

描述: GPU 命令队列抽象接口,负责提交和执行命令列表,以及 GPU/CPU 同步。

概述

RHICommandQueue 是 RHIRender Hardware Interface系统中的核心抽象接口之一封装了底层图形 APID3D12/Vulkan/Metal 等)的命令队列功能。

主要职责:

  • 命令提交:将准备好的命令列表提交到 GPU 执行
  • GPU/CPU 同步通过栅栏Fence机制协调 CPU 和 GPU 的执行顺序
  • 队列类型管理:区分直接队列、计算队列和复制队列

使用场景:

  • 渲染循环中提交绘制命令
  • 资源在 GPU 和 CPU 之间传输时的同步
  • 多线程渲染时的命令生成和提交

公共方法

方法 描述
RHICommandQueue 默认构造函数
~RHICommandQueue 虚析构函数
Shutdown 关闭并释放资源
ExecuteCommandLists 执行命令列表
Signal 向栅栏发送信号
Wait 等待栅栏达到指定值
GetCompletedValue 获取栅栏已完成的值
WaitForIdle 等待队列所有操作完成
GetType 获取队列类型
GetTimestampFrequency 获取时间戳频率
GetNativeHandle 获取原生句柄

使用示例

#include <XCEngine/RHI/RHICommandQueue.h>
#include <XCEngine/RHI/RHIDevice.h>
#include <XCEngine/RHI/RHIFence.h>
#include <XCEngine/RHI/RHICommandList.h>

void RenderLoop(RHIDevice* device, RHICommandQueue* cmdQueue) {
    CommandQueueDesc queueDesc;
    queueDesc.queueType = (uint32_t)CommandQueueType::Direct;
    RHICommandQueue* commandQueue = device->CreateCommandQueue(queueDesc);

    FenceDesc fenceDesc;
    RHIFence* fence = device->CreateFence(fenceDesc);

    RHICommandList* commandList = device->CreateCommandList();
    commandList->Begin();
    commandList->DrawInstanced(vertices, vertexCount, 0);
    commandList->End();

    void* lists[1] = { commandList };
    commandQueue->ExecuteCommandLists(1, lists);
    commandQueue->Signal(fence, 1);
    fence->Wait(1);

    commandQueue->WaitForIdle();
    commandQueue->Shutdown();
}

相关文档