Files
XCEngine/docs/api/rhi/d3d12/command-list/command-list.md

5.2 KiB

D3D12CommandList

命名空间: XCEngine::RHI

继承自: RHICommandList

头文件: XCEngine/RHI/D3D12/D3D12CommandList.h

概述

D3D12CommandList 是 DirectX 12 命令列表的 RHI 实现,封装了 ID3D12GraphicsCommandList 接口。该类负责记录 GPU 命令,包括绘制调用、资源状态转换、渲染目标设置等。

主要功能

  • 命令录制: 支持图形和计算命令的录制
  • 资源状态管理: 维护资源状态映射表,跟踪资源转换
  • 描述符管理: 管理 GPU 描述符堆和描述符表
  • 状态设置: 设置管线状态、根签名、视口、裁剪矩形等

公共方法

方法 描述
D3D12CommandList 构造函数
~D3D12CommandList 析构函数
Initialize 初始化命令列表
Shutdown 关闭命令列表
Reset 重置命令列表
Close 关闭命令列表
GetCommandList 获取 D3D12 命令列表
TransitionBarrier 资源状态转换
UAVBarrier UAV 屏障
AliasBarrier 别名屏障
SetPipelineState 设置管线状态
SetRootSignature 设置根签名
SetPrimitiveTopology 设置图元拓扑
SetViewport 设置视口
SetViewports 设置多个视口
SetScissorRect 设置裁剪矩形
SetScissorRects 设置多个裁剪矩形
SetRenderTargets 设置渲染目标
SetVertexBuffer 设置顶点缓冲
SetVertexBuffers 设置多个顶点缓冲
SetIndexBuffer 设置索引缓冲
SetDescriptorHeap 设置描述符堆
SetDescriptorHeaps 设置多个描述符堆
SetGraphicsDescriptorTable 设置图形描述符表
SetComputeDescriptorTable 设置计算描述符表
SetGraphicsRootConstantBufferView 设置图形根常量缓冲视图
SetGraphicsRoot32BitConstants 设置图形根 32 位常量
SetGraphicsRootDescriptorTable 设置图形根描述符表
SetGraphicsRootShaderResourceView 设置图形根着色器资源视图
SetStencilRef 设置模板引用值
SetDepthStencilState 设置深度模板状态
SetBlendState 设置混合状态
SetBlendFactor 设置混合因子
SetDepthBias 设置深度偏移
Draw 绘制
DrawIndexed 索引绘制
DrawInstancedIndirect 实例化间接绘制
DrawIndexedInstancedIndirect 索引实例化间接绘制
Clear 清除
ClearRenderTarget 清除渲染目标
ClearDepthStencil 清除深度模板
ClearUnorderedAccessView 清除无序访问视图
CopyResource 复制资源
CopyBuffer 复制缓冲区
CopyTexture 复制纹理
BeginQuery 开始查询
EndQuery 结束查询
ResolveQueryData 解析查询数据
Dispatch 分发计算任务
DispatchIndirect 间接分发计算任务
ExecuteBundle 执行 Bundle
GetResourceState 获取资源状态
TrackResource 跟踪资源

使用示例

#include "XCEngine/RHI/D3D12/D3D12CommandList.h"
#include "XCEngine/RHI/D3D12/D3D12Device.h"

using namespace XCEngine::RHI;

// 创建命令列表
D3D12CommandList cmdList;
ID3D12Device* device = /* 获取设备 */;

// 初始化
if (!cmdList.Initialize(device, CommandQueueType::Direct)) {
    return false;
}

// 重置并开始录制
cmdList.Reset();

// 设置渲染状态
cmdList.SetPipelineState(pipelineState);
cmdList.SetRootSignature(rootSignature);
cmdList.SetPrimitiveTopology(PrimitiveTopology::TriangleList);
cmdList.SetViewport(viewport);
cmdList.SetRenderTargets(1, renderTargets, depthStencil);

// 绑定资源
cmdList.SetVertexBuffer(0, vertexBuffer, 0, sizeof(Vertex));
cmdList.SetIndexBuffer(indexBuffer, 0, Format::R32_UINT);

// 绘制
cmdList.DrawIndexed(indexCount, 1, 0, 0, 0);

// 关闭命令列表
cmdList.Close();

相关文档