79 lines
5.0 KiB
Markdown
79 lines
5.0 KiB
Markdown
# D3D12Enum
|
||
|
||
**命名空间**: `XCEngine::RHI`
|
||
|
||
**类型**: `namespace` (枚举转换函数集合)
|
||
|
||
**描述**: D3D12 枚举值转换函数集合,提供 RHI 抽象枚举到 D3D12 原生枚举的转换。**所有函数均为 inline 函数**。
|
||
|
||
## 概述
|
||
|
||
`D3D12Enum.h` 提供了 RHI 抽象层枚举类型到 DirectX 12 原生枚举类型的转换函数。这些函数是 D3D12 后端实现的核心组成部分,使得上层的 RHI 抽象枚举能够正确转换为对应的 D3D12 枚举值。设计遵循 DirectX 12 规范,涵盖填充模式、剔除模式、混合操作、纹理寻址、图元拓扑等核心渲染参数。
|
||
|
||
## 转换函数详细列表
|
||
|
||
| 函数 | 源类型 | 目标类型 | 描述 |
|
||
|------|--------|----------|------|
|
||
| `ToD3D12(FillMode)` | `FillMode` | `D3D12_FILL_MODE` | 填充模式转换 (Wireframe/Solid) |
|
||
| `ToD3D12(CullMode)` | `CullMode` | `D3D12_CULL_MODE` | 剔除模式转换 (None/Front/Back) |
|
||
| `ToD3D12(ComparisonFunc)` | `ComparisonFunc` | `D3D12_COMPARISON_FUNC` | 比较函数转换 (Never/Less/Equal/LessEqual/Greater/NotEqual/GreaterEqual/Always) |
|
||
| `ToD3D12(StencilOp)` | `StencilOp` | `D3D12_STENCIL_OP` | 模板操作转换 (Keep/Zero/Replace/IncrSat/DecrSat/Invert/Incr/Decr) |
|
||
| `ToD3D12(BlendOp)` | `BlendOp` | `D3D12_BLEND_OP` | 混合操作转换 (Add/Subtract/ReverseSubtract/Min/Max) |
|
||
| `ToD3D12(BlendFactor)` | `BlendFactor` | `D3D12_BLEND` | 混合因子转换 (Zero/One/SrcColor/InvSrcColor/SrcAlpha/InvSrcAlpha/SrcAlphaSat/BlendFactor/InvBlendFactor) |
|
||
| `ToD3D12(LogicOp)` | `LogicOp` | `D3D12_LOGIC_OP` | 逻辑操作转换 (Clear/Set/Copy/CopyInverted/Noop/Invert/And/Nand/Or/Nor/Xor/Equiv/AndReverse/AndInverted/OrReverse/OrInverted) |
|
||
| `ToD3D12(FilterMode)` | `FilterMode` | `D3D12_FILTER` | 过滤器模式转换 (Point/Linear/Anisotropic/ComparisonPoint/ComparisonLinear/ComparisonAnisotropic) |
|
||
| `ToD3D12(TextureAddressMode)` | `TextureAddressMode` | `D3D12_TEXTURE_ADDRESS_MODE` | 纹理寻址模式转换 (Wrap/Mirror/Clamp/Border/MirrorOnce) |
|
||
| `ToD3D12(BorderColor)` | `BorderColor` | `D3D12_STATIC_BORDER_COLOR` | 边框颜色转换 (TransparentBlack/OpaqueBlack/OpaqueWhite) |
|
||
| `ToD3D12(ShaderVisibility)` | `ShaderVisibility` | `D3D12_SHADER_VISIBILITY` | Shader 可见性转换 (All/Vertex/Hull/Domain/Geometry/Pixel/Amplification/Mesh) |
|
||
| `ToD3D12(Format)` | `Format` | `DXGI_FORMAT` | 格式转换 (Unknown/R8_UNorm/R8G8_UNorm/R8G8B8A8_UNorm/R16G16B16A16_Float/R32G32B32A32_Float/R16_Float/R32_Float/D16_UNorm/D24_UNorm_S8_UInt/D32_Float/BC1-7_UNorm/BC6H_UF16/R32G32B32A32_UInt/R32_UInt) |
|
||
| `ToDXGI(Format)` | `Format` | `DXGI_FORMAT` | DXGI 格式转换(内部调用 `ToD3D12(Format)`) |
|
||
| `ToD3D12(ResourceStates)` | `ResourceStates` | `D3D12_RESOURCE_STATES` | 资源状态转换 (Common/VertexAndConstantBuffer/IndexBuffer/RenderTarget/UnorderedAccess/DepthWrite/DepthRead/NonPixelShaderResource/PixelShaderResource/CopySrc/CopyDst/Present/GenericRead) |
|
||
| `ToD3D12(HeapType)` | `HeapType` | `D3D12_HEAP_TYPE` | 堆类型转换 (Default/Upload/Readback) |
|
||
| `ToD3D12(PrimitiveTopology)` | `PrimitiveTopology` | `D3D12_PRIMITIVE_TOPOLOGY_TYPE` | 图元拓扑类型转换 (PointList/Line*/Triangle*/PatchList) |
|
||
| `ToD3D12Topology(PrimitiveTopology)` | `PrimitiveTopology` | `D3D12_PRIMITIVE_TOPOLOGY` | 图元拓扑详细转换(包含控制点信息) |
|
||
| `ToD3D12(DescriptorHeapType)` | `DescriptorHeapType` | `D3D12_DESCRIPTOR_HEAP_TYPE` | 描述符堆类型转换 (CBV_SRV_UAV/Sampler/RTV/DSV) |
|
||
| `ToD3D12(QueryType)` | `QueryType` | `D3D12_QUERY_TYPE` | 查询类型转换 (Occlusion/Timestamp/PipelineStatistics) |
|
||
| `ToD3D12(RootParameterType)` | `RootParameterType` | `D3D12_ROOT_PARAMETER_TYPE` | 根参数类型转换 (DescriptorTable/Constants/CBV/SRV/UAV) |
|
||
| `ToD3D12(TextureType)` | `TextureType` | `D3D12_RESOURCE_DIMENSION` | 纹理类型维度转换 (Texture1D/Texture2D*/Texture3D) |
|
||
| `ToD3D12(CommandQueueType)` | `CommandQueueType` | `D3D12_COMMAND_LIST_TYPE` | 命令列表类型转换 (Direct/Compute/Copy) |
|
||
|
||
## 使用示例
|
||
|
||
### 渲染状态设置
|
||
|
||
```cpp
|
||
#include <XCEngine/RHI/D3D12/D3D12Enum.h>
|
||
|
||
void SetupRenderState(XCEngine::RHI::FillMode fill, XCEngine::RHI::CullMode cull) {
|
||
D3D12_FILL_MODE d3dFill = XCEngine::RHI::ToD3D12(fill);
|
||
D3D12_CULL_MODE d3dCull = XCEngine::RHI::ToD3D12(cull);
|
||
}
|
||
```
|
||
|
||
### 纹理采样器配置
|
||
|
||
```cpp
|
||
#include <XCEngine/RHI/D3D12/D3D12Enum.h>
|
||
|
||
void ConfigureSampler(XCEngine::RHI::FilterMode filterMode, XCEngine::RHI::TextureAddressMode addressMode) {
|
||
D3D12_FILTER filter = XCEngine::RHI::ToD3D12(filterMode);
|
||
D3D12_TEXTURE_ADDRESS_MODE address = XCEngine::RHI::ToD3D12(addressMode);
|
||
}
|
||
```
|
||
|
||
### 资源状态转换
|
||
|
||
```cpp
|
||
#include <XCEngine/RHI/D3D12/D3D12Enum.h>
|
||
|
||
void TransitionResource(XCEngine::RHI::ResourceStates state) {
|
||
D3D12_RESOURCE_STATES d3dState = XCEngine::RHI::ToD3D12(state);
|
||
}
|
||
```
|
||
|
||
## 相关文档
|
||
|
||
- [D3D12 后端概览](../d3d12.md)
|
||
- [D3D12Types](../../types/types.md) - 类型转换
|
||
- [RHI 枚举定义](../../../threading/task-system-config/README.md) - RHI 抽象层枚举定义
|