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

5.1 KiB
Raw Blame History

D3D12CommandList

命名空间: XCEngine::RHI

类型: class

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

描述: DirectX 12 命令列表封装类,负责录制图形和计算命令

概述

D3D12CommandList 是 DirectX 12 命令列表的封装类,继承自 RHICommandList 接口。它负责录制所有图形渲染命令包括状态设置、绘制调用、资源状态转换、复制操作等。D3D12CommandList 支持命令列表重置和关闭以实现命令重用,内部维护资源状态跟踪以优化状态转换屏障。

该类是渲染管线的核心,负责将所有渲染操作命令化并提交到 GPU 执行。

公共方法

方法 描述
D3D12CommandList() 默认构造函数
~D3D12CommandList() 虚析构函数
Initialize 初始化命令列表
Shutdown 关闭命令列表
Reset 重置命令列表
Close 关闭命令列表
GetCommandList 获取底层命令列表指针
TransitionBarrier 设置资源转换屏障
UAVBarrier 设置 UAV 屏障
AliasBarrier 设置别名屏障
SetPipelineState 设置管道状态
SetViewport 设置视口
SetViewports 设置多个视口
SetScissorRect 设置裁剪矩形
SetScissorRects 设置多个裁剪矩形
SetPrimitiveTopology 设置图元拓扑
SetRenderTargets 设置渲染目标
SetVertexBuffer 设置顶点缓冲区
SetVertexBuffers 设置多个顶点缓冲区
SetIndexBuffer 设置索引缓冲区
SetStencilRef 设置模板参考值
SetDepthStencilState 设置深度模板状态
SetBlendState 设置混合状态
SetBlendFactor 设置混合因子
SetDepthBias 设置深度偏移
Draw 绘制调用
DrawIndexed 绘制索引图元
DrawInstancedIndirect 间接实例绘制
DrawIndexedInstancedIndirect 间接索引实例绘制
Clear 清除缓冲区
ClearRenderTarget 清除渲染目标
ClearDepthStencil 清除深度模板
CopyResource 复制资源
CopyBuffer 复制缓冲区
CopyTexture 复制纹理
BeginQuery 开始查询
EndQuery 结束查询
ResolveQueryData 解析查询数据
Dispatch 分发计算任务
DispatchIndirect 间接分发计算任务
ExecuteBundle 执行命令束

使用示例

#include <XCEngine/RHI/D3D12/D3D12CommandList.h>

using namespace XCEngine::RHI;

// 创建命令列表
D3D12CommandList commandList;
commandList.Initialize(device, CommandQueueType::Direct);

// 开始录制命令
commandList.Reset();

// 设置渲染目标
commandList.SetRenderTargets(1, &renderTargetView, nullptr);
float clearColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
commandList.ClearRenderTarget(renderTargetView, clearColor);

// 设置视口
Viewport viewport = { 0.0f, 0.0f, 1280.0f, 720.0f, 0.0f, 1.0f };
commandList.SetViewport(viewport);

// 设置图元拓扑
commandList.SetPrimitiveTopology(PrimitiveTopology::TriangleList);

// 绑定顶点缓冲区
commandList.SetVertexBuffer(0, vertexBuffer, 0, sizeof(Vertex));

// 绑定索引缓冲区
commandList.SetIndexBuffer(indexBuffer, 0, Format::R32_UInt);

// 绑定管道状态
commandList.SetPipelineState(pipelineState);

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

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

// 提交到命令队列
commandQueue->ExecuteCommandListsInternal(1, &cmdList);

相关文档