# D3D12CommandList **命名空间**: `XCEngine::RHI` **继承自**: [`RHICommandList`](../../command-list/command-list.md) **头文件**: `XCEngine/RHI/D3D12/D3D12CommandList.h` ## 概述 `D3D12CommandList` 是 DirectX 12 命令列表的 RHI 实现,封装了 `ID3D12GraphicsCommandList` 接口。该类负责记录 GPU 命令,包括绘制调用、资源状态转换、渲染目标设置等。 ### 主要功能 - **命令录制**: 支持图形和计算命令的录制 - **资源状态管理**: 维护资源状态映射表,跟踪资源转换 - **描述符管理**: 管理 GPU 描述符堆和描述符表 - **状态设置**: 设置管线状态、根签名、视口、裁剪矩形等 ## 公共方法 | 方法 | 描述 | |------|------| | [`D3D12CommandList`](constructor.md) | 构造函数 | | [`~D3D12CommandList`](destructor.md) | 析构函数 | | [`Initialize`](initialize.md) | 初始化命令列表 | | [`Shutdown`](shutdown.md) | 关闭命令列表 | | [`Reset`](reset.md) | 重置命令列表 | | [`Close`](close.md) | 关闭命令列表 | | [`GetCommandList`](get-command-list.md) | 获取 D3D12 命令列表 | | [`TransitionBarrier`](transition-barrier.md) | 资源状态转换 | | [`UAVBarrier`](uav-barrier.md) | UAV 屏障 | | [`AliasBarrier`](alias-barrier.md) | 别名屏障 | | [`SetPipelineState`](set-pipeline-state.md) | 设置管线状态 | | [`SetRootSignature`](set-root-signature.md) | 设置根签名 | | [`SetPrimitiveTopology`](set-primitive-topology.md) | 设置图元拓扑 | | [`SetViewport`](set-viewport.md) | 设置视口 | | [`SetViewports`](set-viewports.md) | 设置多个视口 | | [`SetScissorRect`](set-scissor-rect.md) | 设置裁剪矩形 | | [`SetScissorRects`](set-scissor-rects.md) | 设置多个裁剪矩形 | | [`SetRenderTargets`](set-render-targets.md) | 设置渲染目标 | | [`SetVertexBuffer`](set-vertex-buffer.md) | 设置顶点缓冲 | | [`SetVertexBuffers`](set-vertex-buffers.md) | 设置多个顶点缓冲 | | [`SetIndexBuffer`](set-index-buffer.md) | 设置索引缓冲 | | [`SetDescriptorHeap`](set-descriptor-heap.md) | 设置描述符堆 | | [`SetDescriptorHeaps`](set-descriptor-heaps.md) | 设置多个描述符堆 | | [`SetGraphicsDescriptorTable`](set-graphics-descriptor-table.md) | 设置图形描述符表 | | [`SetComputeDescriptorTable`](set-compute-descriptor-table.md) | 设置计算描述符表 | | [`SetGraphicsRootConstantBufferView`](set-graphics-root-constant-buffer-view.md) | 设置图形根常量缓冲视图 | | [`SetGraphicsRoot32BitConstants`](set-graphics-root-32bit-constants.md) | 设置图形根 32 位常量 | | [`SetGraphicsRootDescriptorTable`](set-graphics-root-descriptor-table.md) | 设置图形根描述符表 | | [`SetGraphicsRootShaderResourceView`](set-graphics-root-shader-resource-view.md) | 设置图形根着色器资源视图 | | [`SetStencilRef`](set-stencil-ref.md) | 设置模板引用值 | | [`SetDepthStencilState`](set-depth-stencil-state.md) | 设置深度模板状态 | | [`SetBlendState`](set-blend-state.md) | 设置混合状态 | | [`SetBlendFactor`](set-blend-factor.md) | 设置混合因子 | | [`SetDepthBias`](set-depth-bias.md) | 设置深度偏移 | | [`Draw`](draw.md) | 绘制 | | [`DrawIndexed`](draw-indexed.md) | 索引绘制 | | [`DrawInstancedIndirect`](draw-instanced-indirect.md) | 实例化间接绘制 | | [`DrawIndexedInstancedIndirect`](draw-indexed-instanced-indirect.md) | 索引实例化间接绘制 | | [`Clear`](clear.md) | 清除 | | [`ClearRenderTarget`](clear-render-target.md) | 清除渲染目标 | | [`ClearDepthStencil`](clear-depth-stencil.md) | 清除深度模板 | | [`ClearUnorderedAccessView`](clear-unordered-access-view.md) | 清除无序访问视图 | | [`CopyResource`](copy-resource.md) | 复制资源 | | [`CopyBuffer`](copy-buffer.md) | 复制缓冲区 | | [`CopyTexture`](copy-texture.md) | 复制纹理 | | [`BeginQuery`](begin-query.md) | 开始查询 | | [`EndQuery`](end-query.md) | 结束查询 | | [`ResolveQueryData`](resolve-query-data.md) | 解析查询数据 | | [`Dispatch`](dispatch.md) | 分发计算任务 | | [`DispatchIndirect`](dispatch-indirect.md) | 间接分发计算任务 | | [`ExecuteBundle`](execute-bundle.md) | 执行 Bundle | | [`GetResourceState`](get-resource-state.md) | 获取资源状态 | | [`TrackResource`](track-resource.md) | 跟踪资源 | ## 使用示例 ```cpp #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(); ``` ## 相关文档 - [D3D12 后端总览](../d3d12.md) - [RHICommandList](../../command-list/command-list.md) - 抽象命令列表接口