Files
XCEngine/docs/api/rhi/d3d12/d3d12-enum.md

5.0 KiB
Raw Blame History

D3D12Enum

D3D12 枚举值转换函数集合,提供 RHI 抽象枚举到 D3D12 原生枚举的转换。

头文件

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

命名空间

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)

使用示例

// 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 语句确保编译期检查所有枚举值
  • 未处理的枚举值返回合理的默认值