# D3D12Enum D3D12 枚举值转换函数集合,提供 RHI 抽象枚举到 D3D12 原生枚举的转换。 ## 头文件 ```cpp #include ``` ## 命名空间 `XCEngine::RHI` ## 转换函数列表 ### 填充模式和剔除模式 #### `inline D3D12_FILL_MODE ToD3D12(FillMode mode)` `FillMode::Wireframe` -> `D3D12_FILL_MODE_WIREFRAME` `FillMode::Solid` -> `D3D12_FILL_MODE_SOLID` #### `inline D3D12_CULL_MODE ToD3D12(CullMode mode)` `CullMode::None` -> `D3D12_CULL_MODE_NONE` `CullMode::Front` -> `D3D12_CULL_MODE_FRONT` `CullMode::Back` -> `D3D12_CULL_MODE_BACK` ### 深度模板 #### `inline D3D12_COMPARISON_FUNC ToD3D12(ComparisonFunc func)` 转换比较函数 (Never, Less, Equal, LessEqual, Greater, NotEqual, GreaterEqual, Always) #### `inline D3D12_STENCIL_OP ToD3D12(StencilOp op)` 转换模板操作 (Keep, Zero, Replace, IncrSat, DecrSat, Invert, Incr, Decr) ### 混合 #### `inline D3D12_BLEND_OP ToD3D12(BlendOp op)` 转换混合操作 (Add, Subtract, ReverseSubtract, Min, Max) #### `inline D3D12_BLEND ToD3D12(BlendFactor factor)` 转换混合因子 (Zero, One, SrcColor, InvSrcColor, SrcAlpha, InvSrcAlpha, SrcAlphaSat, BlendFactor, InvBlendFactor) #### `inline D3D12_LOGIC_OP ToD3D12(LogicOp op)` 转换逻辑操作 (Clear, Set, Copy, CopyInverted, Noop, Invert, And, Nand, Or, Nor, Xor, Equiv, AndReverse, AndInverted, OrReverse, OrInverted) ### 纹理采样 #### `inline D3D12_FILTER ToD3D12(FilterMode mode)` 转换过滤器模式 (Point, Linear, Anisotropic, ComparisonPoint, ComparisonLinear, ComparisonAnisotropic) #### `inline D3D12_TEXTURE_ADDRESS_MODE ToD3D12(TextureAddressMode mode)` 转换纹理寻址模式 (Wrap, Mirror, Clamp, Border, MirrorOnce) #### `inline D3D12_STATIC_BORDER_COLOR ToD3D12(BorderColor color)` 转换边框颜色 (TransparentBlack, OpaqueBlack, OpaqueWhite) ### Shader 相关 #### `inline D3D12_SHADER_VISIBILITY ToD3D12(ShaderVisibility visibility)` 转换 Shader 可见性 (All, Vertex, Hull, Domain, Geometry, Pixel, Amplification, Mesh) ### 格式 #### `inline DXGI_FORMAT ToD3D12(Format format)` 转换纹理/缓冲区格式。 支持的格式映射: - `Format::Unknown` -> `DXGI_FORMAT_UNKNOWN` - `Format::R8_UNorm` -> `DXGI_FORMAT_R8_UNORM` - `Format::R8G8_UNorm` -> `DXGI_FORMAT_R8G8_UNORM` - `Format::R8G8B8A8_UNorm` -> `DXGI_FORMAT_R8G8B8A8_UNORM` - `Format::R16G16B16A16_Float` -> `DXGI_FORMAT_R16G16B16A16_FLOAT` - `Format::R32G32B32A32_Float` -> `DXGI_FORMAT_R32G32B32A32_FLOAT` - `Format::R16_Float` -> `DXGI_FORMAT_R16_FLOAT` - `Format::R32_Float` -> `DXGI_FORMAT_R32_FLOAT` - `Format::D16_UNorm` -> `DXGI_FORMAT_D16_UNORM` - `Format::D24_UNorm_S8_UInt` -> `DXGI_FORMAT_D24_UNORM_S8_UINT` - `Format::D32_Float` -> `DXGI_FORMAT_D32_FLOAT` - `Format::BC1-7_UNorm` -> 对应 BC 压缩格式 - `Format::R32G32B32A32_UInt` -> `DXGI_FORMAT_R32G32B32A32_UINT` - `Format::R32_UInt` -> `DXGI_FORMAT_R32_UINT` #### `inline DXGI_FORMAT ToDXGI(Format format)` 同 `ToD3D12(format)`,DXGI 别名。 ### 资源状态 #### `inline D3D12_RESOURCE_STATES ToD3D12(ResourceStates state)` 转换资源状态 (Common, VertexAndConstantBuffer, IndexBuffer, RenderTarget, UnorderedAccess, DepthWrite, DepthRead, NonPixelShaderResource, PixelShaderResource, CopySrc, CopyDst, Present, GenericRead) ### 堆类型 #### `inline D3D12_HEAP_TYPE ToD3D12(HeapType type)` 转换堆类型 (Default, Upload, Readback) ### 拓扑 #### `inline D3D12_PRIMITIVE_TOPOLOGY_TYPE ToD3D12(PrimitiveTopology topology)` 转换图元拓扑类型 (Point, Line, Triangle, Patch) #### `inline D3D12_PRIMITIVE_TOPOLOGY ToD3D12Topology(PrimitiveTopology topology)` 转换详细图元拓扑 (PointList, LineList, LineStrip, TriangleList, TriangleStrip, PatchList 等) ### 描述符堆 #### `inline D3D12_DESCRIPTOR_HEAP_TYPE ToD3D12(DescriptorHeapType type)` 转换描述符堆类型 (CBV_SRV_UAV, Sampler, RTV, DSV) ### 查询 #### `inline D3D12_QUERY_TYPE ToD3D12(QueryType type)` 转换查询类型 (Occlusion, Timestamp, PipelineStatistics) ### 根参数 #### `inline D3D12_ROOT_PARAMETER_TYPE ToD3D12(RootParameterType type)` 转换根参数类型 (DescriptorTable, Constants, CBV, SRV, UAV) ### 纹理类型 #### `inline D3D12_RESOURCE_DIMENSION ToD3D12(TextureType type)` 转换纹理类型维度 (Texture1D, Texture2D, Texture3D) ### 命令列表 #### `inline D3D12_COMMAND_LIST_TYPE ToD3D12(CommandQueueType type)` 转换命令列表类型 (Direct, Compute, Copy) ## 使用示例 ```cpp // When creating PSO D3D12_GRAPHICS_PIPELINE_STATE_DESC desc = {}; desc.FillMode = ToD3D12(fillMode); desc.CullMode = ToD3D12(cullMode); desc.DepthStencilState.DepthFunc = ToD3D12(depthFunc); // When creating texture D3D12_RESOURCE_DESC texDesc = {}; texDesc.Format = ToD3D12(textureFormat); // When transitioning resource D3D12_RESOURCE_BARRIER barrier = CreateTransitionBarrier( resource, ToD3D12(stateBefore), ToD3D12(stateAfter)); ``` ## 备注 - 所有转换函数为 inline,可在头文件中使用 - switch 语句确保编译期检查所有枚举值 - 未处理的枚举值返回合理的默认值