155 lines
5.0 KiB
Markdown
155 lines
5.0 KiB
Markdown
|
|
# 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 语句确保编译期检查所有枚举值
|
|||
|
|
- 未处理的枚举值返回合理的默认值
|