Files
XCEngine/engine/include/XCEngine/RHI/D3D12/D3D12Enum.h
ssdfasd 5683b10e65 Rename RHI header files for clarity
- Rename Enums.h to RHIEnums.h
- Rename Types.h to RHITypes.h
- Update all include references in D3D12 headers and test files
2026-03-17 02:39:22 +08:00

297 lines
14 KiB
C++

#pragma once
#include <d3d12.h>
#include <dxgi1_4.h>
#include "../RHIEnums.h"
namespace XCEngine {
namespace RHI {
inline D3D12_FILL_MODE ToD3D12(FillMode mode) {
switch (mode) {
case FillMode::Wireframe: return D3D12_FILL_MODE_WIREFRAME;
case FillMode::Solid: return D3D12_FILL_MODE_SOLID;
}
return D3D12_FILL_MODE_SOLID;
}
inline D3D12_CULL_MODE ToD3D12(CullMode mode) {
switch (mode) {
case CullMode::None: return D3D12_CULL_MODE_NONE;
case CullMode::Front: return D3D12_CULL_MODE_FRONT;
case CullMode::Back: return D3D12_CULL_MODE_BACK;
}
return D3D12_CULL_MODE_NONE;
}
inline D3D12_COMPARISON_FUNC ToD3D12(ComparisonFunc func) {
switch (func) {
case ComparisonFunc::Never: return D3D12_COMPARISON_FUNC_NEVER;
case ComparisonFunc::Less: return D3D12_COMPARISON_FUNC_LESS;
case ComparisonFunc::Equal: return D3D12_COMPARISON_FUNC_EQUAL;
case ComparisonFunc::LessEqual: return D3D12_COMPARISON_FUNC_LESS_EQUAL;
case ComparisonFunc::Greater: return D3D12_COMPARISON_FUNC_GREATER;
case ComparisonFunc::NotEqual: return D3D12_COMPARISON_FUNC_NOT_EQUAL;
case ComparisonFunc::GreaterEqual: return D3D12_COMPARISON_FUNC_GREATER_EQUAL;
case ComparisonFunc::Always: return D3D12_COMPARISON_FUNC_ALWAYS;
}
return D3D12_COMPARISON_FUNC_ALWAYS;
}
inline D3D12_BLEND_OP ToD3D12(BlendOp op) {
switch (op) {
case BlendOp::Add: return D3D12_BLEND_OP_ADD;
case BlendOp::Subtract: return D3D12_BLEND_OP_SUBTRACT;
case BlendOp::ReverseSubtract: return D3D12_BLEND_OP_REV_SUBTRACT;
case BlendOp::Min: return D3D12_BLEND_OP_MIN;
case BlendOp::Max: return D3D12_BLEND_OP_MAX;
}
return D3D12_BLEND_OP_ADD;
}
inline D3D12_BLEND ToD3D12(BlendFactor factor) {
switch (factor) {
case BlendFactor::Zero: return D3D12_BLEND_ZERO;
case BlendFactor::One: return D3D12_BLEND_ONE;
case BlendFactor::SrcColor: return D3D12_BLEND_SRC_COLOR;
case BlendFactor::InvSrcColor: return D3D12_BLEND_INV_SRC_COLOR;
case BlendFactor::SrcAlpha: return D3D12_BLEND_SRC_ALPHA;
case BlendFactor::InvSrcAlpha: return D3D12_BLEND_INV_SRC_ALPHA;
case BlendFactor::SrcAlphaSat: return D3D12_BLEND_SRC_ALPHA_SAT;
case BlendFactor::BlendFactor: return D3D12_BLEND_BLEND_FACTOR;
case BlendFactor::InvBlendFactor: return D3D12_BLEND_INV_BLEND_FACTOR;
}
return D3D12_BLEND_ONE;
}
inline D3D12_LOGIC_OP ToD3D12(LogicOp op) {
switch (op) {
case LogicOp::Clear: return D3D12_LOGIC_OP_CLEAR;
case LogicOp::Set: return D3D12_LOGIC_OP_SET;
case LogicOp::Copy: return D3D12_LOGIC_OP_COPY;
case LogicOp::CopyInverted: return D3D12_LOGIC_OP_COPY_INVERTED;
case LogicOp::Noop: return D3D12_LOGIC_OP_NOOP;
case LogicOp::Invert: return D3D12_LOGIC_OP_INVERT;
case LogicOp::And: return D3D12_LOGIC_OP_AND;
case LogicOp::Nand: return D3D12_LOGIC_OP_NAND;
case LogicOp::Or: return D3D12_LOGIC_OP_OR;
case LogicOp::Nor: return D3D12_LOGIC_OP_NOR;
case LogicOp::Xor: return D3D12_LOGIC_OP_XOR;
case LogicOp::Equiv: return D3D12_LOGIC_OP_EQUIV;
case LogicOp::AndReverse: return D3D12_LOGIC_OP_AND_REVERSE;
case LogicOp::AndInverted: return D3D12_LOGIC_OP_AND_INVERTED;
case LogicOp::OrReverse: return D3D12_LOGIC_OP_OR_REVERSE;
case LogicOp::OrInverted: return D3D12_LOGIC_OP_OR_INVERTED;
}
return D3D12_LOGIC_OP_NOOP;
}
inline D3D12_FILTER ToD3D12(FilterMode mode) {
switch (mode) {
case FilterMode::Point: return D3D12_FILTER_MIN_MAG_MIP_POINT;
case FilterMode::Linear: return D3D12_FILTER_MIN_MAG_MIP_LINEAR;
case FilterMode::Anisotropic: return D3D12_FILTER_ANISOTROPIC;
case FilterMode::ComparisonPoint: return D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT;
case FilterMode::ComparisonLinear: return D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR;
case FilterMode::ComparisonAnisotropic: return D3D12_FILTER_COMPARISON_ANISOTROPIC;
}
return D3D12_FILTER_MIN_MAG_MIP_LINEAR;
}
inline D3D12_TEXTURE_ADDRESS_MODE ToD3D12(TextureAddressMode mode) {
switch (mode) {
case TextureAddressMode::Wrap: return D3D12_TEXTURE_ADDRESS_MODE_WRAP;
case TextureAddressMode::Mirror: return D3D12_TEXTURE_ADDRESS_MODE_MIRROR;
case TextureAddressMode::Clamp: return D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
case TextureAddressMode::Border: return D3D12_TEXTURE_ADDRESS_MODE_BORDER;
case TextureAddressMode::MirrorOnce: return D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE;
}
return D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
}
inline D3D12_STATIC_BORDER_COLOR ToD3D12(BorderColor color) {
switch (color) {
case BorderColor::TransparentBlack: return D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK;
case BorderColor::OpaqueBlack: return D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK;
case BorderColor::OpaqueWhite: return D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE;
}
return D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK;
}
inline D3D12_SHADER_VISIBILITY ToD3D12(ShaderVisibility visibility) {
switch (visibility) {
case ShaderVisibility::All: return D3D12_SHADER_VISIBILITY_ALL;
case ShaderVisibility::Vertex: return D3D12_SHADER_VISIBILITY_VERTEX;
case ShaderVisibility::Hull: return D3D12_SHADER_VISIBILITY_HULL;
case ShaderVisibility::Domain: return D3D12_SHADER_VISIBILITY_DOMAIN;
case ShaderVisibility::Geometry: return D3D12_SHADER_VISIBILITY_GEOMETRY;
case ShaderVisibility::Pixel: return D3D12_SHADER_VISIBILITY_PIXEL;
case ShaderVisibility::Amplification: return D3D12_SHADER_VISIBILITY_AMPLIFICATION;
case ShaderVisibility::Mesh: return D3D12_SHADER_VISIBILITY_MESH;
}
return D3D12_SHADER_VISIBILITY_ALL;
}
inline DXGI_FORMAT ToD3D12(Format format) {
switch (format) {
case Format::Unknown: return DXGI_FORMAT_UNKNOWN;
case Format::R8_UNorm: return DXGI_FORMAT_R8_UNORM;
case Format::R8G8_UNorm: return DXGI_FORMAT_R8G8_UNORM;
case Format::R8G8B8A8_UNorm: return DXGI_FORMAT_R8G8B8A8_UNORM;
case Format::R16G16B16A16_Float: return DXGI_FORMAT_R16G16B16A16_FLOAT;
case Format::R32G32B32A32_Float: return DXGI_FORMAT_R32G32B32A32_FLOAT;
case Format::R16_Float: return DXGI_FORMAT_R16_FLOAT;
case Format::R32_Float: return DXGI_FORMAT_R32_FLOAT;
case Format::D16_UNorm: return DXGI_FORMAT_D16_UNORM;
case Format::D24_UNorm_S8_UInt: return DXGI_FORMAT_D24_UNORM_S8_UINT;
case Format::D32_Float: return DXGI_FORMAT_D32_FLOAT;
case Format::BC1_UNorm: return DXGI_FORMAT_BC1_UNORM;
case Format::BC2_UNorm: return DXGI_FORMAT_BC2_UNORM;
case Format::BC3_UNorm: return DXGI_FORMAT_BC3_UNORM;
case Format::BC4_UNorm: return DXGI_FORMAT_BC4_UNORM;
case Format::BC5_UNorm: return DXGI_FORMAT_BC5_UNORM;
case Format::BC6H_UF16: return DXGI_FORMAT_BC6H_UF16;
case Format::BC7_UNorm: return DXGI_FORMAT_BC7_UNORM;
case Format::R32G32B32A32_UInt: return DXGI_FORMAT_R32G32B32A32_UINT;
case Format::R32_UInt: return DXGI_FORMAT_R32_UINT;
}
return DXGI_FORMAT_UNKNOWN;
}
inline D3D12_RESOURCE_STATES ToD3D12(ResourceStates state) {
switch (state) {
case ResourceStates::Common: return D3D12_RESOURCE_STATE_COMMON;
case ResourceStates::VertexAndConstantBuffer: return D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER;
case ResourceStates::IndexBuffer: return D3D12_RESOURCE_STATE_INDEX_BUFFER;
case ResourceStates::RenderTarget: return D3D12_RESOURCE_STATE_RENDER_TARGET;
case ResourceStates::UnorderedAccess: return D3D12_RESOURCE_STATE_UNORDERED_ACCESS;
case ResourceStates::DepthWrite: return D3D12_RESOURCE_STATE_DEPTH_WRITE;
case ResourceStates::DepthRead: return D3D12_RESOURCE_STATE_DEPTH_READ;
case ResourceStates::NonPixelShaderResource: return D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
case ResourceStates::PixelShaderResource: return D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
case ResourceStates::CopySrc: return D3D12_RESOURCE_STATE_COPY_SOURCE;
case ResourceStates::CopyDst: return D3D12_RESOURCE_STATE_COPY_DEST;
case ResourceStates::Present: return D3D12_RESOURCE_STATE_PRESENT;
case ResourceStates::GenericRead: return D3D12_RESOURCE_STATE_GENERIC_READ;
}
return D3D12_RESOURCE_STATE_COMMON;
}
inline D3D12_HEAP_TYPE ToD3D12(HeapType type) {
switch (type) {
case HeapType::Default: return D3D12_HEAP_TYPE_DEFAULT;
case HeapType::Upload: return D3D12_HEAP_TYPE_UPLOAD;
case HeapType::Readback: return D3D12_HEAP_TYPE_READBACK;
}
return D3D12_HEAP_TYPE_DEFAULT;
}
inline D3D12_PRIMITIVE_TOPOLOGY_TYPE ToD3D12(PrimitiveTopology topology) {
switch (topology) {
case PrimitiveTopology::PointList: return D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT;
case PrimitiveTopology::LineList:
case PrimitiveTopology::LineStrip:
case PrimitiveTopology::LineListAdj:
case PrimitiveTopology::LineStripAdj:
return D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE;
case PrimitiveTopology::TriangleList:
case PrimitiveTopology::TriangleStrip:
case PrimitiveTopology::TriangleListAdj:
case PrimitiveTopology::TriangleStripAdj:
return D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
case PrimitiveTopology::PatchList:
return D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH;
}
return D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
}
inline D3D12_PRIMITIVE_TOPOLOGY ToD3D12Topology(PrimitiveTopology topology) {
switch (topology) {
case PrimitiveTopology::Undefined: return D3D_PRIMITIVE_TOPOLOGY_UNDEFINED;
case PrimitiveTopology::PointList: return D3D_PRIMITIVE_TOPOLOGY_POINTLIST;
case PrimitiveTopology::LineList: return D3D_PRIMITIVE_TOPOLOGY_LINELIST;
case PrimitiveTopology::LineStrip: return D3D_PRIMITIVE_TOPOLOGY_LINESTRIP;
case PrimitiveTopology::TriangleList: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
case PrimitiveTopology::TriangleStrip: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP;
case PrimitiveTopology::LineListAdj: return D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ;
case PrimitiveTopology::LineStripAdj: return D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ;
case PrimitiveTopology::TriangleListAdj: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ;
case PrimitiveTopology::TriangleStripAdj: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ;
case PrimitiveTopology::PatchList: return D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST;
}
return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
}
inline D3D12_DESCRIPTOR_HEAP_TYPE ToD3D12(DescriptorHeapType type) {
switch (type) {
case DescriptorHeapType::CBV_SRV_UAV: return D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
case DescriptorHeapType::Sampler: return D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER;
case DescriptorHeapType::RTV: return D3D12_DESCRIPTOR_HEAP_TYPE_RTV;
case DescriptorHeapType::DSV: return D3D12_DESCRIPTOR_HEAP_TYPE_DSV;
}
return D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
}
inline D3D12_QUERY_TYPE ToD3D12(QueryType type) {
switch (type) {
case QueryType::Occlusion: return D3D12_QUERY_TYPE_OCCLUSION;
case QueryType::Timestamp: return D3D12_QUERY_TYPE_TIMESTAMP;
case QueryType::PipelineStatistics: return D3D12_QUERY_TYPE_PIPELINE_STATISTICS;
}
return D3D12_QUERY_TYPE_OCCLUSION;
}
inline D3D12_ROOT_PARAMETER_TYPE ToD3D12(RootParameterType type) {
switch (type) {
case RootParameterType::DescriptorTable: return D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
case RootParameterType::Constants: return D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
case RootParameterType::CBV: return D3D12_ROOT_PARAMETER_TYPE_CBV;
case RootParameterType::SRV: return D3D12_ROOT_PARAMETER_TYPE_SRV;
case RootParameterType::UAV: return D3D12_ROOT_PARAMETER_TYPE_UAV;
}
return D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
}
inline DXGI_FORMAT ToDXGI(Format format) {
return ToD3D12(format);
}
inline D3D12_RESOURCE_DIMENSION ToD3D12(TextureType type) {
switch (type) {
case TextureType::Texture1D: return D3D12_RESOURCE_DIMENSION_TEXTURE1D;
case TextureType::Texture2D:
case TextureType::Texture2DArray:
case TextureType::TextureCube:
case TextureType::TextureCubeArray:
return D3D12_RESOURCE_DIMENSION_TEXTURE2D;
case TextureType::Texture3D: return D3D12_RESOURCE_DIMENSION_TEXTURE3D;
}
return D3D12_RESOURCE_DIMENSION_TEXTURE2D;
}
inline D3D12_STENCIL_OP ToD3D12(StencilOp op) {
switch (op) {
case StencilOp::Keep: return D3D12_STENCIL_OP_KEEP;
case StencilOp::Zero: return D3D12_STENCIL_OP_ZERO;
case StencilOp::Replace: return D3D12_STENCIL_OP_REPLACE;
case StencilOp::IncrSat: return D3D12_STENCIL_OP_INCR_SAT;
case StencilOp::DecrSat: return D3D12_STENCIL_OP_DECR_SAT;
case StencilOp::Invert: return D3D12_STENCIL_OP_INVERT;
case StencilOp::Incr: return D3D12_STENCIL_OP_INCR;
case StencilOp::Decr: return D3D12_STENCIL_OP_DECR;
}
return D3D12_STENCIL_OP_KEEP;
}
inline D3D12_COMMAND_LIST_TYPE ToD3D12(CommandQueueType type) {
switch (type) {
case CommandQueueType::Direct: return D3D12_COMMAND_LIST_TYPE_DIRECT;
case CommandQueueType::Compute: return D3D12_COMMAND_LIST_TYPE_COMPUTE;
case CommandQueueType::Copy: return D3D12_COMMAND_LIST_TYPE_COPY;
}
return D3D12_COMMAND_LIST_TYPE_DIRECT;
}
} // namespace RHI
} // namespace XCEngine