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

155 lines
5.0 KiB
Markdown
Raw Normal View History

# D3D12Enum
D3D12 枚举值转换函数集合,提供 RHI 抽象枚举到 D3D12 原生枚举的转换。
## 头文件
```cpp
#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)
## 使用示例
```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 语句确保编译期检查所有枚举值
- 未处理的枚举值返回合理的默认值