# D3D12Common **命名空间**: `XCEngine::RHI` **类型**: `inline 函数集合` (header-only) **描述**: D3D12 通用辅助函数集合,提供描述符大小查询、资源屏障创建、格式支持检查、视图创建等功能。所有函数均为 `inline` 函数,封装自 DirectX 12 原生 API。 ## 概述 D3D12Common 是 D3D12 后端的工具函数模块,封装了 DirectX 12 常用的辅助功能,包括: - **描述符大小查询**: 封装 `ID3D12Device::GetDescriptorHandleIncrementSize`,提供各类描述符的增量大小 - **资源屏障创建**: 封装 `D3D12_RESOURCE_BARRIER` 的三种类型(Transition、UAV、Aliasing) - **格式支持检查**: 封装 `ID3D12Device::CheckFeatureSupport`,检查格式是否支持特定用途 - **视图创建**: 封装 D3D12_VERTEX_BUFFER_VIEW、D3D12_INDEX_BUFFER_VIEW、D3D12_VIEWPORT 等创建 - **描述符句柄运算**: 提供描述符句柄的偏移计算 这些函数均为无状态的纯函数,设计用于简化 D3D12 常见操作的代码编写。 ## 函数列表 ### 描述符大小 | 函数 | 描述 | |------|------| | [`GetDescriptorHandleIncrementSize`](get-descriptor-handle-increment-size.md) | 获取指定描述符堆类型的增量大小 | | [`GetRTVDescriptorSize`](get-rtv-descriptor-size.md) | 获取 RTV 描述符大小 | | [`GetDSVDescriptorSize`](get-dsv-descriptor-size.md) | 获取 DSV 描述符大小 | | [`GetCBV_SRV_UAVDescriptorSize`](get-cbv-srv-uav-descriptor-size.md) | 获取 CBV/SRV/UAV 描述符大小 | | [`GetSamplerDescriptorSize`](get-sampler-descriptor-size.md) | 获取 Sampler 描述符大小 | ### 屏障创建 | 函数 | 描述 | |------|------| | [`CreateTransitionBarrier`](create-transition-barrier.md) | 创建资源状态转换屏障 | | [`CreateUAVBarrier`](create-uav-barrier.md) | 创建 UAV 屏障 | | [`CreateAliasingBarrier`](create-aliasing-barrier.md) | 创建别名化屏障 | ### 格式支持 | 函数 | 描述 | |------|------| | [`CheckFormatSupport`](check-format-support.md) | 检查格式是否支持指定功能 | | [`IsRenderTargetFormatSupported`](is-render-target-format-supported.md) | 检查是否支持作为渲染目标 | | [`IsDepthStencilFormatSupported`](is-depth-stencil-format-supported.md) | 检查是否支持作为深度模板 | | [`IsShaderResourceFormatSupported`](is-shader-resource-format-supported.md) | 检查是否支持作为着色器资源 | | [`IsTextureFormatSupported`](is-texture-format-supported.md) | 检查是否支持作为纹理 | ### 清除值创建 | 函数 | 描述 | |------|------| | [`CreateRenderTargetClearValue`](create-render-target-clear-value.md) | 创建渲染目标清除值 | | [`CreateDepthStencilClearValue`](create-depth-stencil-clear-value.md) | 创建深度模板清除值 | ### 视口和裁剪矩形 | 函数 | 描述 | |------|------| | [`CreateViewport`](create-viewport.md) | 创建视口结构 | | [`CreateScissorRect`](create-scissor-rect.md) | 创建裁剪矩形 | ### 缓冲区视图 | 函数 | 描述 | |------|------| | [`CreateVertexBufferView`](create-vertex-buffer-view.md) | 创建顶点缓冲区视图 | | [`CreateIndexBufferView`](create-index-buffer-view.md) | 创建索引缓冲区视图 | ### 描述符句柄运算 | 函数 | 描述 | |------|------| | [`GetCPUDescriptorHandle`](get-cpu-descriptor-handle.md) | 计算偏移后的 CPU 描述符句柄 | | [`GetGPUDescriptorHandle`](get-gpu-descriptor-handle.md) | 计算偏移后的 GPU 描述符句柄 | ## 使用示例 ```cpp #include using namespace XCEngine::RHI; // 获取描述符大小 ID3D12Device* device = ...; UINT rtvSize = GetRTVDescriptorSize(device); // 创建资源屏障 D3D12_RESOURCE_BARRIER barrier = CreateTransitionBarrier( resource, D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COMMON ); // 检查格式支持 if (IsTextureFormatSupported(device, DXGI_FORMAT_BC1_UNORM)) { // 使用压缩纹理 } // 创建视口 D3D12_VIEWPORT viewport = CreateViewport(1280.0f, 720.0f); ``` ## 相关文档 - [D3D12 后端概览](../d3d12.md) - D3D12 模块总览 - [RHI 模块总览](../../rhi.md) - RHI 抽象层 - [D3D12Device](../device/device.md) - D3D12 设备 - [D3D12DescriptorHeap](../descriptor-heap/descriptor-heap.md) - 描述符堆