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

155 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 语句确保编译期检查所有枚举值
- 未处理的枚举值返回合理的默认值