refactor: RHI枚举改为独立编号,添加D3D12转换层
This commit is contained in:
135
engine/include/XCEngine/RHI/D3D12/D3D12Enum.h
Normal file
135
engine/include/XCEngine/RHI/D3D12/D3D12Enum.h
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <d3d12.h>
|
||||||
|
#include "../Enums.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;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace RHI
|
||||||
|
} // namespace XCEngine
|
||||||
@@ -18,64 +18,64 @@ enum class ShaderType : uint8_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum class CullMode : uint8_t {
|
enum class CullMode : uint8_t {
|
||||||
None = 1,
|
None,
|
||||||
Front = 2,
|
Front,
|
||||||
Back = 3
|
Back
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class FillMode : uint8_t {
|
enum class FillMode : uint8_t {
|
||||||
Wireframe = 2,
|
Wireframe,
|
||||||
Solid = 3
|
Solid
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class BlendOp : uint8_t {
|
enum class BlendOp : uint8_t {
|
||||||
Add = 1,
|
Add,
|
||||||
Subtract = 2,
|
Subtract,
|
||||||
ReverseSubtract = 3,
|
ReverseSubtract,
|
||||||
Min = 4,
|
Min,
|
||||||
Max = 5
|
Max
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class BlendFactor : uint8_t {
|
enum class BlendFactor : uint8_t {
|
||||||
Zero = 0,
|
Zero,
|
||||||
One = 1,
|
One,
|
||||||
SrcColor = 2,
|
SrcColor,
|
||||||
InvSrcColor = 3,
|
InvSrcColor,
|
||||||
SrcAlpha = 4,
|
SrcAlpha,
|
||||||
InvSrcAlpha = 5,
|
InvSrcAlpha,
|
||||||
DstAlpha = 6,
|
DstAlpha,
|
||||||
InvDstAlpha = 7,
|
InvDstAlpha,
|
||||||
DstColor = 8,
|
DstColor,
|
||||||
InvDstColor = 9,
|
InvDstColor,
|
||||||
SrcAlphaSat = 10,
|
SrcAlphaSat,
|
||||||
BlendFactor = 11,
|
BlendFactor,
|
||||||
InvBlendFactor = 12,
|
InvBlendFactor,
|
||||||
Src1Color = 13,
|
Src1Color,
|
||||||
InvSrc1Color = 14,
|
InvSrc1Color,
|
||||||
Src1Alpha = 15,
|
Src1Alpha,
|
||||||
InvSrc1Alpha = 16
|
InvSrc1Alpha
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class ComparisonFunc : uint8_t {
|
enum class ComparisonFunc : uint8_t {
|
||||||
Never = 1,
|
Never,
|
||||||
Less = 2,
|
Less,
|
||||||
Equal = 3,
|
Equal,
|
||||||
LessEqual = 4,
|
LessEqual,
|
||||||
Greater = 5,
|
Greater,
|
||||||
NotEqual = 6,
|
NotEqual,
|
||||||
GreaterEqual = 7,
|
GreaterEqual,
|
||||||
Always = 8
|
Always
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class StencilOp : uint8_t {
|
enum class StencilOp : uint8_t {
|
||||||
Keep = 1,
|
Keep,
|
||||||
Zero = 2,
|
Zero,
|
||||||
Replace = 3,
|
Replace,
|
||||||
IncrSat = 4,
|
IncrSat,
|
||||||
DecrSat = 5,
|
DecrSat,
|
||||||
Invert = 6,
|
Invert,
|
||||||
Incr = 7,
|
Incr,
|
||||||
Decr = 8
|
Decr
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class TextureType : uint8_t {
|
enum class TextureType : uint8_t {
|
||||||
@@ -119,86 +119,86 @@ enum class CommandQueueType : uint8_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum class LoadAction : uint8_t {
|
enum class LoadAction : uint8_t {
|
||||||
Undefined = 0,
|
Undefined,
|
||||||
Load = 1,
|
Load,
|
||||||
Clear = 2
|
Clear
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class StoreAction : uint8_t {
|
enum class StoreAction : uint8_t {
|
||||||
Undefined = 0,
|
Undefined,
|
||||||
Store = 1,
|
Store,
|
||||||
Resolve = 2,
|
Resolve,
|
||||||
StoreAndResolve = 3,
|
StoreAndResolve,
|
||||||
Discard = 4
|
Discard
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class PresentFlags : uint8_t {
|
enum class PresentFlags : uint8_t {
|
||||||
None = 0,
|
None,
|
||||||
AllowTearing = 1,
|
AllowTearing,
|
||||||
StrictlyTimedFrame = 2,
|
StrictlyTimedFrame,
|
||||||
AllowDisplayLatencyWaitableObject = 4
|
AllowDisplayLatencyWaitableObject
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class PrimitiveTopology : uint8_t {
|
enum class PrimitiveTopology : uint8_t {
|
||||||
Undefined = 0,
|
Undefined,
|
||||||
PointList = 1,
|
PointList,
|
||||||
LineList = 2,
|
LineList,
|
||||||
LineStrip = 3,
|
LineStrip,
|
||||||
TriangleList = 4,
|
TriangleList,
|
||||||
TriangleStrip = 5,
|
TriangleStrip,
|
||||||
LineListAdj = 10,
|
LineListAdj,
|
||||||
LineStripAdj = 11,
|
LineStripAdj,
|
||||||
TriangleListAdj = 12,
|
TriangleListAdj,
|
||||||
TriangleStripAdj = 13,
|
TriangleStripAdj,
|
||||||
PatchList = 33
|
PatchList
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class FilterMode : uint8_t {
|
enum class FilterMode : uint8_t {
|
||||||
Point = 0,
|
Point,
|
||||||
Linear = 1,
|
Linear,
|
||||||
Anisotropic = 2,
|
Anisotropic,
|
||||||
ComparisonPoint = 3,
|
ComparisonPoint,
|
||||||
ComparisonLinear = 4,
|
ComparisonLinear,
|
||||||
ComparisonAnisotropic = 5,
|
ComparisonAnisotropic,
|
||||||
MinimumPoint = 7,
|
MinimumPoint,
|
||||||
MinimumLinear = 8,
|
MinimumLinear,
|
||||||
MinimumAnisotropic = 9,
|
MinimumAnisotropic,
|
||||||
MaximumPoint = 11,
|
MaximumPoint,
|
||||||
MaximumLinear = 12,
|
MaximumLinear,
|
||||||
MaximumAnisotropic = 13
|
MaximumAnisotropic
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class TextureAddressMode : uint8_t {
|
enum class TextureAddressMode : uint8_t {
|
||||||
Wrap = 1,
|
Wrap,
|
||||||
Mirror = 2,
|
Mirror,
|
||||||
Clamp = 3,
|
Clamp,
|
||||||
Border = 4,
|
Border,
|
||||||
MirrorOnce = 5
|
MirrorOnce
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class BorderColor : uint8_t {
|
enum class BorderColor : uint8_t {
|
||||||
TransparentBlack = 0,
|
TransparentBlack,
|
||||||
OpaqueBlack = 1,
|
OpaqueBlack,
|
||||||
OpaqueWhite = 2
|
OpaqueWhite
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class LogicOp : uint8_t {
|
enum class LogicOp : uint8_t {
|
||||||
Clear = 0,
|
Clear,
|
||||||
Set = 1,
|
Set,
|
||||||
Copy = 2,
|
Copy,
|
||||||
CopyInverted = 3,
|
CopyInverted,
|
||||||
Noop = 4,
|
Noop,
|
||||||
Invert = 5,
|
Invert,
|
||||||
And = 6,
|
And,
|
||||||
Nand = 7,
|
Nand,
|
||||||
Or = 8,
|
Or,
|
||||||
Nor = 9,
|
Nor,
|
||||||
Xor = 10,
|
Xor,
|
||||||
Equiv = 11,
|
Equiv,
|
||||||
AndReverse = 12,
|
AndReverse,
|
||||||
AndInverted = 13,
|
AndInverted,
|
||||||
OrReverse = 14,
|
OrReverse,
|
||||||
OrInverted = 15
|
OrInverted
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class ColorWriteMask : uint8_t {
|
enum class ColorWriteMask : uint8_t {
|
||||||
@@ -214,14 +214,14 @@ inline ColorWriteMask operator|(ColorWriteMask a, ColorWriteMask b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum class ShaderVisibility : uint8_t {
|
enum class ShaderVisibility : uint8_t {
|
||||||
All = 0,
|
All,
|
||||||
Vertex = 1,
|
Vertex,
|
||||||
Hull = 2,
|
Hull,
|
||||||
Domain = 3,
|
Domain,
|
||||||
Geometry = 4,
|
Geometry,
|
||||||
Pixel = 5,
|
Pixel,
|
||||||
Amplification = 6,
|
Amplification,
|
||||||
Mesh = 7
|
Mesh
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class RootParameterType : uint8_t {
|
enum class RootParameterType : uint8_t {
|
||||||
@@ -246,26 +246,26 @@ enum class QueryType : uint8_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum class Format : uint32_t {
|
enum class Format : uint32_t {
|
||||||
Unknown = 0,
|
Unknown,
|
||||||
R8_UNorm = 61,
|
R8_UNorm,
|
||||||
R8G8_UNorm = 49,
|
R8G8_UNorm,
|
||||||
R8G8B8A8_UNorm = 28,
|
R8G8B8A8_UNorm,
|
||||||
R16G16B16A16_Float = 10,
|
R16G16B16A16_Float,
|
||||||
R32G32B32A32_Float = 2,
|
R32G32B32A32_Float,
|
||||||
R16_Float = 54,
|
R16_Float,
|
||||||
R32_Float = 41,
|
R32_Float,
|
||||||
D16_UNorm = 55,
|
D16_UNorm,
|
||||||
D24_UNorm_S8_UInt = 45,
|
D24_UNorm_S8_UInt,
|
||||||
D32_Float = 40,
|
D32_Float,
|
||||||
BC1_UNorm = 71,
|
BC1_UNorm,
|
||||||
BC2_UNorm = 74,
|
BC2_UNorm,
|
||||||
BC3_UNorm = 77,
|
BC3_UNorm,
|
||||||
BC4_UNorm = 80,
|
BC4_UNorm,
|
||||||
BC5_UNorm = 83,
|
BC5_UNorm,
|
||||||
BC6H_UF16 = 95,
|
BC6H_UF16,
|
||||||
BC7_UNorm = 98,
|
BC7_UNorm,
|
||||||
R32G32B32A32_UInt = 23,
|
R32G32B32A32_UInt,
|
||||||
R32_UInt = 39
|
R32_UInt
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace RHI
|
} // namespace RHI
|
||||||
|
|||||||
@@ -14,8 +14,9 @@ target_compile_definitions(D3D12 PRIVATE
|
|||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(D3D12 PRIVATE
|
target_include_directories(D3D12 PRIVATE
|
||||||
${CMAKE_SOURCE_DIR}/tests/D3D12
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
${CMAKE_SOURCE_DIR}/tests/D3D12/stbi
|
${CMAKE_CURRENT_SOURCE_DIR}/stbi
|
||||||
|
D:/Xuanchi/高斯泼溅/XCEngine/engine/include
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(D3D12 PRIVATE
|
target_link_libraries(D3D12 PRIVATE
|
||||||
|
|||||||
@@ -1,272 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <cstdint>
|
|
||||||
|
|
||||||
namespace XCEngine {
|
|
||||||
namespace RHI {
|
|
||||||
|
|
||||||
enum class ShaderType : uint8_t {
|
|
||||||
Vertex,
|
|
||||||
Hull,
|
|
||||||
Domain,
|
|
||||||
Geometry,
|
|
||||||
Pixel,
|
|
||||||
Compute,
|
|
||||||
Amplification,
|
|
||||||
Mesh,
|
|
||||||
Library
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class CullMode : uint8_t {
|
|
||||||
None = 1,
|
|
||||||
Front = 2,
|
|
||||||
Back = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class FillMode : uint8_t {
|
|
||||||
Wireframe = 2,
|
|
||||||
Solid = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class BlendOp : uint8_t {
|
|
||||||
Add = 1,
|
|
||||||
Subtract = 2,
|
|
||||||
ReverseSubtract = 3,
|
|
||||||
Min = 4,
|
|
||||||
Max = 5
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class BlendFactor : uint8_t {
|
|
||||||
Zero = 0,
|
|
||||||
One = 1,
|
|
||||||
SrcColor = 2,
|
|
||||||
InvSrcColor = 3,
|
|
||||||
SrcAlpha = 4,
|
|
||||||
InvSrcAlpha = 5,
|
|
||||||
DstAlpha = 6,
|
|
||||||
InvDstAlpha = 7,
|
|
||||||
DstColor = 8,
|
|
||||||
InvDstColor = 9,
|
|
||||||
SrcAlphaSat = 10,
|
|
||||||
BlendFactor = 11,
|
|
||||||
InvBlendFactor = 12,
|
|
||||||
Src1Color = 13,
|
|
||||||
InvSrc1Color = 14,
|
|
||||||
Src1Alpha = 15,
|
|
||||||
InvSrc1Alpha = 16
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class ComparisonFunc : uint8_t {
|
|
||||||
Never = 1,
|
|
||||||
Less = 2,
|
|
||||||
Equal = 3,
|
|
||||||
LessEqual = 4,
|
|
||||||
Greater = 5,
|
|
||||||
NotEqual = 6,
|
|
||||||
GreaterEqual = 7,
|
|
||||||
Always = 8
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class StencilOp : uint8_t {
|
|
||||||
Keep = 1,
|
|
||||||
Zero = 2,
|
|
||||||
Replace = 3,
|
|
||||||
IncrSat = 4,
|
|
||||||
DecrSat = 5,
|
|
||||||
Invert = 6,
|
|
||||||
Incr = 7,
|
|
||||||
Decr = 8
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class TextureType : uint8_t {
|
|
||||||
Texture1D,
|
|
||||||
Texture2D,
|
|
||||||
Texture2DArray,
|
|
||||||
Texture3D,
|
|
||||||
TextureCube,
|
|
||||||
TextureCubeArray
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class BufferType : uint8_t {
|
|
||||||
Vertex,
|
|
||||||
Index,
|
|
||||||
Constant,
|
|
||||||
ReadBack,
|
|
||||||
Indirect,
|
|
||||||
RaytracingAccelerationStructure,
|
|
||||||
ShaderBindingTable
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class DescriptorType : uint8_t {
|
|
||||||
CBV,
|
|
||||||
SRV,
|
|
||||||
UAV,
|
|
||||||
Sampler,
|
|
||||||
RTV,
|
|
||||||
DSV
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class PipelineType : uint8_t {
|
|
||||||
Graphics,
|
|
||||||
Compute,
|
|
||||||
Raytracing
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class CommandQueueType : uint8_t {
|
|
||||||
Direct,
|
|
||||||
Compute,
|
|
||||||
Copy
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class LoadAction : uint8_t {
|
|
||||||
Undefined = 0,
|
|
||||||
Load = 1,
|
|
||||||
Clear = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class StoreAction : uint8_t {
|
|
||||||
Undefined = 0,
|
|
||||||
Store = 1,
|
|
||||||
Resolve = 2,
|
|
||||||
StoreAndResolve = 3,
|
|
||||||
Discard = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class PresentFlags : uint8_t {
|
|
||||||
None = 0,
|
|
||||||
AllowTearing = 1,
|
|
||||||
StrictlyTimedFrame = 2,
|
|
||||||
AllowDisplayLatencyWaitableObject = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class PrimitiveTopology : uint8_t {
|
|
||||||
Undefined = 0,
|
|
||||||
PointList = 1,
|
|
||||||
LineList = 2,
|
|
||||||
LineStrip = 3,
|
|
||||||
TriangleList = 4,
|
|
||||||
TriangleStrip = 5,
|
|
||||||
LineListAdj = 10,
|
|
||||||
LineStripAdj = 11,
|
|
||||||
TriangleListAdj = 12,
|
|
||||||
TriangleStripAdj = 13,
|
|
||||||
PatchList = 33
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class FilterMode : uint8_t {
|
|
||||||
Point = 0,
|
|
||||||
Linear = 1,
|
|
||||||
Anisotropic = 2,
|
|
||||||
ComparisonPoint = 3,
|
|
||||||
ComparisonLinear = 4,
|
|
||||||
ComparisonAnisotropic = 5,
|
|
||||||
MinimumPoint = 7,
|
|
||||||
MinimumLinear = 8,
|
|
||||||
MinimumAnisotropic = 9,
|
|
||||||
MaximumPoint = 11,
|
|
||||||
MaximumLinear = 12,
|
|
||||||
MaximumAnisotropic = 13
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class TextureAddressMode : uint8_t {
|
|
||||||
Wrap = 1,
|
|
||||||
Mirror = 2,
|
|
||||||
Clamp = 3,
|
|
||||||
Border = 4,
|
|
||||||
MirrorOnce = 5
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class BorderColor : uint8_t {
|
|
||||||
TransparentBlack = 0,
|
|
||||||
OpaqueBlack = 1,
|
|
||||||
OpaqueWhite = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class LogicOp : uint8_t {
|
|
||||||
Clear = 0,
|
|
||||||
Set = 1,
|
|
||||||
Copy = 2,
|
|
||||||
CopyInverted = 3,
|
|
||||||
Noop = 4,
|
|
||||||
Invert = 5,
|
|
||||||
And = 6,
|
|
||||||
Nand = 7,
|
|
||||||
Or = 8,
|
|
||||||
Nor = 9,
|
|
||||||
Xor = 10,
|
|
||||||
Equiv = 11,
|
|
||||||
AndReverse = 12,
|
|
||||||
AndInverted = 13,
|
|
||||||
OrReverse = 14,
|
|
||||||
OrInverted = 15
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class ColorWriteMask : uint8_t {
|
|
||||||
Red = 1,
|
|
||||||
Green = 2,
|
|
||||||
Blue = 4,
|
|
||||||
Alpha = 8,
|
|
||||||
All = 15
|
|
||||||
};
|
|
||||||
|
|
||||||
inline ColorWriteMask operator|(ColorWriteMask a, ColorWriteMask b) {
|
|
||||||
return static_cast<ColorWriteMask>(static_cast<uint8_t>(a) | static_cast<uint8_t>(b));
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class ShaderVisibility : uint8_t {
|
|
||||||
All = 0,
|
|
||||||
Vertex = 1,
|
|
||||||
Hull = 2,
|
|
||||||
Domain = 3,
|
|
||||||
Geometry = 4,
|
|
||||||
Pixel = 5,
|
|
||||||
Amplification = 6,
|
|
||||||
Mesh = 7
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class RootParameterType : uint8_t {
|
|
||||||
DescriptorTable,
|
|
||||||
Constants,
|
|
||||||
CBV,
|
|
||||||
SRV,
|
|
||||||
UAV
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class DescriptorHeapType : uint8_t {
|
|
||||||
CBV_SRV_UAV,
|
|
||||||
Sampler,
|
|
||||||
RTV,
|
|
||||||
DSV
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class QueryType : uint8_t {
|
|
||||||
Occlusion,
|
|
||||||
Timestamp,
|
|
||||||
PipelineStatistics
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class Format : uint32_t {
|
|
||||||
Unknown = 0,
|
|
||||||
R8_UNorm = 61,
|
|
||||||
R8G8_UNorm = 49,
|
|
||||||
R8G8B8A8_UNorm = 28,
|
|
||||||
R16G16B16A16_Float = 10,
|
|
||||||
R32G32B32A32_Float = 2,
|
|
||||||
R16_Float = 54,
|
|
||||||
R32_Float = 41,
|
|
||||||
D16_UNorm = 55,
|
|
||||||
D24_UNorm_S8_UInt = 45,
|
|
||||||
D32_Float = 40,
|
|
||||||
BC1_UNorm = 71,
|
|
||||||
BC2_UNorm = 74,
|
|
||||||
BC3_UNorm = 77,
|
|
||||||
BC4_UNorm = 80,
|
|
||||||
BC5_UNorm = 83,
|
|
||||||
BC6H_UF16 = 95,
|
|
||||||
BC7_UNorm = 98,
|
|
||||||
R32G32B32A32_UInt = 23,
|
|
||||||
R32_UInt = 39
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace RHI
|
|
||||||
} // namespace XCEngine
|
|
||||||
@@ -11,7 +11,8 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include "stbi/stb_image.h"
|
#include "stbi/stb_image.h"
|
||||||
#include "RHI/Enums.h"
|
#include "XCEngine/RHI/Enums.h"
|
||||||
|
#include "XCEngine/RHI/D3D12/D3D12Enum.h"
|
||||||
|
|
||||||
using namespace XCEngine::RHI;
|
using namespace XCEngine::RHI;
|
||||||
|
|
||||||
@@ -208,13 +209,13 @@ D3D12_RESOURCE_BARRIER InitResourceBarrier(
|
|||||||
ID3D12RootSignature* InitRootSignature() {
|
ID3D12RootSignature* InitRootSignature() {
|
||||||
D3D12_ROOT_PARAMETER rootParameters[4];
|
D3D12_ROOT_PARAMETER rootParameters[4];
|
||||||
rootParameters[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
|
rootParameters[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
|
||||||
rootParameters[1].ShaderVisibility = static_cast<D3D12_SHADER_VISIBILITY>(ShaderVisibility::Vertex);
|
rootParameters[1].ShaderVisibility = ToD3D12(ShaderVisibility::Vertex);
|
||||||
rootParameters[1].Constants.RegisterSpace = 0;
|
rootParameters[1].Constants.RegisterSpace = 0;
|
||||||
rootParameters[1].Constants.ShaderRegister = 0;
|
rootParameters[1].Constants.ShaderRegister = 0;
|
||||||
rootParameters[1].Constants.Num32BitValues = 4;
|
rootParameters[1].Constants.Num32BitValues = 4;
|
||||||
|
|
||||||
rootParameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
|
rootParameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
|
||||||
rootParameters[0].ShaderVisibility = static_cast<D3D12_SHADER_VISIBILITY>(ShaderVisibility::All);
|
rootParameters[0].ShaderVisibility = ToD3D12(ShaderVisibility::All);
|
||||||
rootParameters[0].Descriptor.RegisterSpace = 0;
|
rootParameters[0].Descriptor.RegisterSpace = 0;
|
||||||
rootParameters[0].Descriptor.ShaderRegister = 1;
|
rootParameters[0].Descriptor.ShaderRegister = 1;
|
||||||
|
|
||||||
@@ -226,26 +227,26 @@ ID3D12RootSignature* InitRootSignature() {
|
|||||||
descriptorRange[0].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;
|
descriptorRange[0].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;
|
||||||
|
|
||||||
rootParameters[2].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
|
rootParameters[2].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
|
||||||
rootParameters[2].ShaderVisibility = static_cast<D3D12_SHADER_VISIBILITY>(ShaderVisibility::Pixel);
|
rootParameters[2].ShaderVisibility = ToD3D12(ShaderVisibility::Pixel);
|
||||||
rootParameters[2].DescriptorTable.pDescriptorRanges = descriptorRange;
|
rootParameters[2].DescriptorTable.pDescriptorRanges = descriptorRange;
|
||||||
rootParameters[2].DescriptorTable.NumDescriptorRanges = _countof(descriptorRange);
|
rootParameters[2].DescriptorTable.NumDescriptorRanges = _countof(descriptorRange);
|
||||||
|
|
||||||
rootParameters[3].ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV;
|
rootParameters[3].ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV;
|
||||||
rootParameters[3].ShaderVisibility = static_cast<D3D12_SHADER_VISIBILITY>(ShaderVisibility::All);
|
rootParameters[3].ShaderVisibility = ToD3D12(ShaderVisibility::All);
|
||||||
rootParameters[3].Descriptor.RegisterSpace = 1;
|
rootParameters[3].Descriptor.RegisterSpace = 1;
|
||||||
rootParameters[3].Descriptor.ShaderRegister = 0;
|
rootParameters[3].Descriptor.ShaderRegister = 0;
|
||||||
|
|
||||||
D3D12_STATIC_SAMPLER_DESC samplerDesc[1];
|
D3D12_STATIC_SAMPLER_DESC samplerDesc[1];
|
||||||
memset(samplerDesc, 0, sizeof(D3D12_STATIC_SAMPLER_DESC) * _countof(samplerDesc));
|
memset(samplerDesc, 0, sizeof(D3D12_STATIC_SAMPLER_DESC) * _countof(samplerDesc));
|
||||||
samplerDesc[0].Filter = static_cast<D3D12_FILTER>(FilterMode::Linear);
|
samplerDesc[0].Filter = ToD3D12(FilterMode::Linear);
|
||||||
samplerDesc[0].AddressU = static_cast<D3D12_TEXTURE_ADDRESS_MODE>(TextureAddressMode::Clamp);
|
samplerDesc[0].AddressU = ToD3D12(TextureAddressMode::Clamp);
|
||||||
samplerDesc[0].AddressV = static_cast<D3D12_TEXTURE_ADDRESS_MODE>(TextureAddressMode::Clamp);
|
samplerDesc[0].AddressV = ToD3D12(TextureAddressMode::Clamp);
|
||||||
samplerDesc[0].AddressW = static_cast<D3D12_TEXTURE_ADDRESS_MODE>(TextureAddressMode::Clamp);
|
samplerDesc[0].AddressW = ToD3D12(TextureAddressMode::Clamp);
|
||||||
samplerDesc[0].BorderColor = static_cast<D3D12_STATIC_BORDER_COLOR>(BorderColor::OpaqueBlack);
|
samplerDesc[0].BorderColor = ToD3D12(BorderColor::OpaqueBlack);
|
||||||
samplerDesc[0].MaxLOD = D3D12_FLOAT32_MAX;
|
samplerDesc[0].MaxLOD = D3D12_FLOAT32_MAX;
|
||||||
samplerDesc[0].RegisterSpace = 0;
|
samplerDesc[0].RegisterSpace = 0;
|
||||||
samplerDesc[0].ShaderRegister = 0;
|
samplerDesc[0].ShaderRegister = 0;
|
||||||
samplerDesc[0].ShaderVisibility = static_cast<D3D12_SHADER_VISIBILITY>(ShaderVisibility::Pixel);
|
samplerDesc[0].ShaderVisibility = ToD3D12(ShaderVisibility::Pixel);
|
||||||
|
|
||||||
D3D12_ROOT_SIGNATURE_DESC rootSignatureDesc = {};
|
D3D12_ROOT_SIGNATURE_DESC rootSignatureDesc = {};
|
||||||
rootSignatureDesc.NumParameters = _countof(rootParameters);
|
rootSignatureDesc.NumParameters = _countof(rootParameters);
|
||||||
@@ -515,20 +516,20 @@ ID3D12PipelineState* CreatePSO(ID3D12RootSignature* inID3D12RootSignature,
|
|||||||
psoDesc.InputLayout = vertexDataLayoutDesc;
|
psoDesc.InputLayout = vertexDataLayoutDesc;
|
||||||
psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
|
psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
|
||||||
|
|
||||||
psoDesc.RasterizerState.FillMode = static_cast<D3D12_FILL_MODE>(FillMode::Solid);
|
psoDesc.RasterizerState.FillMode = ToD3D12(FillMode::Solid);
|
||||||
psoDesc.RasterizerState.CullMode = static_cast<D3D12_CULL_MODE>(CullMode::Back);
|
psoDesc.RasterizerState.CullMode = ToD3D12(CullMode::Back);
|
||||||
psoDesc.RasterizerState.DepthClipEnable = TRUE;
|
psoDesc.RasterizerState.DepthClipEnable = TRUE;
|
||||||
|
|
||||||
psoDesc.DepthStencilState.DepthEnable = true;
|
psoDesc.DepthStencilState.DepthEnable = true;
|
||||||
psoDesc.DepthStencilState.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;
|
psoDesc.DepthStencilState.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;
|
||||||
psoDesc.DepthStencilState.DepthFunc = static_cast<D3D12_COMPARISON_FUNC>(ComparisonFunc::LessEqual);
|
psoDesc.DepthStencilState.DepthFunc = ToD3D12(ComparisonFunc::LessEqual);
|
||||||
|
|
||||||
psoDesc.BlendState = { 0 };
|
psoDesc.BlendState = { 0 };
|
||||||
D3D12_RENDER_TARGET_BLEND_DESC rtBlendDesc = {
|
D3D12_RENDER_TARGET_BLEND_DESC rtBlendDesc = {
|
||||||
FALSE,FALSE,
|
FALSE,FALSE,
|
||||||
static_cast<D3D12_BLEND>(BlendFactor::SrcAlpha),static_cast<D3D12_BLEND>(BlendFactor::InvSrcAlpha),static_cast<D3D12_BLEND_OP>(BlendOp::Add),
|
ToD3D12(BlendFactor::SrcAlpha),ToD3D12(BlendFactor::InvSrcAlpha),ToD3D12(BlendOp::Add),
|
||||||
static_cast<D3D12_BLEND>(BlendFactor::SrcAlpha),static_cast<D3D12_BLEND>(BlendFactor::InvSrcAlpha),static_cast<D3D12_BLEND_OP>(BlendOp::Add),
|
ToD3D12(BlendFactor::SrcAlpha),ToD3D12(BlendFactor::InvSrcAlpha),ToD3D12(BlendOp::Add),
|
||||||
static_cast<D3D12_LOGIC_OP>(LogicOp::Noop),
|
ToD3D12(LogicOp::Noop),
|
||||||
static_cast<UINT8>(ColorWriteMask::All),
|
static_cast<UINT8>(ColorWriteMask::All),
|
||||||
};
|
};
|
||||||
for (int i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
|
for (int i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
|
||||||
|
|||||||
Reference in New Issue
Block a user