5.0 KiB
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_UNKNOWNFormat::R8_UNorm->DXGI_FORMAT_R8_UNORMFormat::R8G8_UNorm->DXGI_FORMAT_R8G8_UNORMFormat::R8G8B8A8_UNorm->DXGI_FORMAT_R8G8B8A8_UNORMFormat::R16G16B16A16_Float->DXGI_FORMAT_R16G16B16A16_FLOATFormat::R32G32B32A32_Float->DXGI_FORMAT_R32G32B32A32_FLOATFormat::R16_Float->DXGI_FORMAT_R16_FLOATFormat::R32_Float->DXGI_FORMAT_R32_FLOATFormat::D16_UNorm->DXGI_FORMAT_D16_UNORMFormat::D24_UNorm_S8_UInt->DXGI_FORMAT_D24_UNORM_S8_UINTFormat::D32_Float->DXGI_FORMAT_D32_FLOATFormat::BC1-7_UNorm-> 对应 BC 压缩格式Format::R32G32B32A32_UInt->DXGI_FORMAT_R32G32B32A32_UINTFormat::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 语句确保编译期检查所有枚举值
- 未处理的枚举值返回合理的默认值