use super::*;
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum Name {
Barycentrics = D3D_NAME_BARYCENTRICS.0 as u32,
ClipDistance = D3D_NAME_CLIP_DISTANCE.0 as u32,
Coverage = D3D_NAME_COVERAGE.0 as u32,
Cullprimitive = D3D_NAME_CULLPRIMITIVE.0 as u32,
CullDistance = D3D_NAME_CULL_DISTANCE.0 as u32,
Depth = D3D_NAME_DEPTH.0 as u32,
DepthGreaterEqual = D3D_NAME_DEPTH_GREATER_EQUAL.0 as u32,
DepthLessEqual = D3D_NAME_DEPTH_LESS_EQUAL.0 as u32,
FinalLineDensityTessfactor = D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR.0 as u32,
FinalLineDetailTessfactor = D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR.0 as u32,
FinalQuadEdgeTessfactor = D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR.0 as u32,
FinalQuadInsideTessfactor = D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR.0 as u32,
FinalTriEdgeTessfactor = D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR.0 as u32,
FinalTriInsideTessfactor = D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR.0 as u32,
InnerCoverage = D3D_NAME_INNER_COVERAGE.0 as u32,
InstanceId = D3D_NAME_INSTANCE_ID.0 as u32,
IsFrontFace = D3D_NAME_IS_FRONT_FACE.0 as u32,
Position = D3D_NAME_POSITION.0 as u32,
PrimitiveId = D3D_NAME_PRIMITIVE_ID.0 as u32,
RenderTargetArrayIndex = D3D_NAME_RENDER_TARGET_ARRAY_INDEX.0 as u32,
SampleIndex = D3D_NAME_SAMPLE_INDEX.0 as u32,
Shadingrate = D3D_NAME_SHADINGRATE.0 as u32,
StencilRef = D3D_NAME_STENCIL_REF.0 as u32,
Target = D3D_NAME_TARGET.0 as u32,
Undefined = D3D_NAME_UNDEFINED.0 as u32,
VertexId = D3D_NAME_VERTEX_ID.0 as u32,
ViewportArrayIndex = D3D_NAME_VIEWPORT_ARRAY_INDEX.0 as u32,
}
impl Name {
pub(crate) fn new(value: D3D_NAME) -> Option<Self> {
match value {
D3D_NAME_BARYCENTRICS => Some(Self::Barycentrics),
D3D_NAME_CLIP_DISTANCE => Some(Self::ClipDistance),
D3D_NAME_COVERAGE => Some(Self::Coverage),
D3D_NAME_CULLPRIMITIVE => Some(Self::Cullprimitive),
D3D_NAME_CULL_DISTANCE => Some(Self::CullDistance),
D3D_NAME_DEPTH => Some(Self::Depth),
D3D_NAME_DEPTH_GREATER_EQUAL => Some(Self::DepthGreaterEqual),
D3D_NAME_DEPTH_LESS_EQUAL => Some(Self::DepthLessEqual),
D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR => {
Some(Self::FinalLineDensityTessfactor)
}
D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR => {
Some(Self::FinalLineDetailTessfactor)
}
D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR => Some(Self::FinalQuadEdgeTessfactor),
D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR => {
Some(Self::FinalQuadInsideTessfactor)
}
D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR => Some(Self::FinalTriEdgeTessfactor),
D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR => Some(Self::FinalTriInsideTessfactor),
D3D_NAME_INNER_COVERAGE => Some(Self::InnerCoverage),
D3D_NAME_INSTANCE_ID => Some(Self::InstanceId),
D3D_NAME_IS_FRONT_FACE => Some(Self::IsFrontFace),
D3D_NAME_POSITION => Some(Self::Position),
D3D_NAME_PRIMITIVE_ID => Some(Self::PrimitiveId),
D3D_NAME_RENDER_TARGET_ARRAY_INDEX => Some(Self::RenderTargetArrayIndex),
D3D_NAME_SAMPLE_INDEX => Some(Self::SampleIndex),
D3D_NAME_SHADINGRATE => Some(Self::Shadingrate),
D3D_NAME_STENCIL_REF => Some(Self::StencilRef),
D3D_NAME_TARGET => Some(Self::Target),
D3D_NAME_UNDEFINED => Some(Self::Undefined),
D3D_NAME_VERTEX_ID => Some(Self::VertexId),
D3D_NAME_VIEWPORT_ARRAY_INDEX => Some(Self::ViewportArrayIndex),
_ => None,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum MinPrecision {
Any10 = D3D_MIN_PRECISION_ANY_10.0 as u32,
Any16 = D3D_MIN_PRECISION_ANY_16.0 as u32,
Default = D3D_MIN_PRECISION_DEFAULT.0 as u32,
Float16 = D3D_MIN_PRECISION_FLOAT_16.0 as u32,
Float28 = D3D_MIN_PRECISION_FLOAT_2_8.0 as u32,
Reserved = D3D_MIN_PRECISION_RESERVED.0 as u32,
Sint16 = D3D_MIN_PRECISION_SINT_16.0 as u32,
Uint16 = D3D_MIN_PRECISION_UINT_16.0 as u32,
}
impl MinPrecision {
pub(crate) fn new(value: D3D_MIN_PRECISION) -> Option<Self> {
match value {
D3D_MIN_PRECISION_ANY_10 => Some(Self::Any10),
D3D_MIN_PRECISION_ANY_16 => Some(Self::Any16),
D3D_MIN_PRECISION_DEFAULT => Some(Self::Default),
D3D_MIN_PRECISION_FLOAT_16 => Some(Self::Float16),
D3D_MIN_PRECISION_FLOAT_2_8 => Some(Self::Float28),
D3D_MIN_PRECISION_RESERVED => Some(Self::Reserved),
D3D_MIN_PRECISION_SINT_16 => Some(Self::Sint16),
D3D_MIN_PRECISION_UINT_16 => Some(Self::Uint16),
_ => None,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum ShaderInputType {
Byteaddress = D3D_SIT_BYTEADDRESS.0 as u32,
Cbuffer = D3D_SIT_CBUFFER.0 as u32,
Rtaccelerationstructure = D3D_SIT_RTACCELERATIONSTRUCTURE.0 as u32,
Sampler = D3D_SIT_SAMPLER.0 as u32,
Structured = D3D_SIT_STRUCTURED.0 as u32,
Tbuffer = D3D_SIT_TBUFFER.0 as u32,
Texture = D3D_SIT_TEXTURE.0 as u32,
UavAppendStructured = D3D_SIT_UAV_APPEND_STRUCTURED.0 as u32,
UavConsumeStructured = D3D_SIT_UAV_CONSUME_STRUCTURED.0 as u32,
UavFeedbacktexture = D3D_SIT_UAV_FEEDBACKTEXTURE.0 as u32,
UavRwbyteaddress = D3D_SIT_UAV_RWBYTEADDRESS.0 as u32,
UavRwstructured = D3D_SIT_UAV_RWSTRUCTURED.0 as u32,
UavRwstructuredWithCounter = D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER.0 as u32,
UavRwtyped = D3D_SIT_UAV_RWTYPED.0 as u32,
}
impl ShaderInputType {
pub(crate) fn new(value: D3D_SHADER_INPUT_TYPE) -> Option<Self> {
match value {
D3D_SIT_BYTEADDRESS => Some(Self::Byteaddress),
D3D_SIT_CBUFFER => Some(Self::Cbuffer),
D3D_SIT_RTACCELERATIONSTRUCTURE => Some(Self::Rtaccelerationstructure),
D3D_SIT_SAMPLER => Some(Self::Sampler),
D3D_SIT_STRUCTURED => Some(Self::Structured),
D3D_SIT_TBUFFER => Some(Self::Tbuffer),
D3D_SIT_TEXTURE => Some(Self::Texture),
D3D_SIT_UAV_APPEND_STRUCTURED => Some(Self::UavAppendStructured),
D3D_SIT_UAV_CONSUME_STRUCTURED => Some(Self::UavConsumeStructured),
D3D_SIT_UAV_FEEDBACKTEXTURE => Some(Self::UavFeedbacktexture),
D3D_SIT_UAV_RWBYTEADDRESS => Some(Self::UavRwbyteaddress),
D3D_SIT_UAV_RWSTRUCTURED => Some(Self::UavRwstructured),
D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER => {
Some(Self::UavRwstructuredWithCounter)
}
D3D_SIT_UAV_RWTYPED => Some(Self::UavRwtyped),
_ => None,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum ResourceReturnType {
Continued = D3D_RETURN_TYPE_CONTINUED.0 as u32,
Double = D3D_RETURN_TYPE_DOUBLE.0 as u32,
Float = D3D_RETURN_TYPE_FLOAT.0 as u32,
Mixed = D3D_RETURN_TYPE_MIXED.0 as u32,
Sint = D3D_RETURN_TYPE_SINT.0 as u32,
Snorm = D3D_RETURN_TYPE_SNORM.0 as u32,
Uint = D3D_RETURN_TYPE_UINT.0 as u32,
Unorm = D3D_RETURN_TYPE_UNORM.0 as u32,
}
impl ResourceReturnType {
pub(crate) fn new(value: D3D_RESOURCE_RETURN_TYPE) -> Option<Self> {
match value {
D3D_RETURN_TYPE_CONTINUED => Some(Self::Continued),
D3D_RETURN_TYPE_DOUBLE => Some(Self::Double),
D3D_RETURN_TYPE_FLOAT => Some(Self::Float),
D3D_RETURN_TYPE_MIXED => Some(Self::Mixed),
D3D_RETURN_TYPE_SINT => Some(Self::Sint),
D3D_RETURN_TYPE_SNORM => Some(Self::Snorm),
D3D_RETURN_TYPE_UINT => Some(Self::Uint),
D3D_RETURN_TYPE_UNORM => Some(Self::Unorm),
_ => None,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum SrvDimension {
Buffer = D3D_SRV_DIMENSION_BUFFER.0 as u32,
Bufferex = D3D_SRV_DIMENSION_BUFFEREX.0 as u32,
Texture1D = D3D_SRV_DIMENSION_TEXTURE1D.0 as u32,
Texture1Darray = D3D_SRV_DIMENSION_TEXTURE1DARRAY.0 as u32,
Texture2D = D3D_SRV_DIMENSION_TEXTURE2D.0 as u32,
Texture2Darray = D3D_SRV_DIMENSION_TEXTURE2DARRAY.0 as u32,
Texture2Dms = D3D_SRV_DIMENSION_TEXTURE2DMS.0 as u32,
Texture2Dmsarray = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY.0 as u32,
Texture3D = D3D_SRV_DIMENSION_TEXTURE3D.0 as u32,
Texturecube = D3D_SRV_DIMENSION_TEXTURECUBE.0 as u32,
Texturecubearray = D3D_SRV_DIMENSION_TEXTURECUBEARRAY.0 as u32,
Unknown = D3D_SRV_DIMENSION_UNKNOWN.0 as u32,
}
impl SrvDimension {
pub(crate) fn new(value: D3D_SRV_DIMENSION) -> Option<Self> {
match value {
D3D_SRV_DIMENSION_BUFFER => Some(Self::Buffer),
D3D_SRV_DIMENSION_BUFFEREX => Some(Self::Bufferex),
D3D_SRV_DIMENSION_TEXTURE1D => Some(Self::Texture1D),
D3D_SRV_DIMENSION_TEXTURE1DARRAY => Some(Self::Texture1Darray),
D3D_SRV_DIMENSION_TEXTURE2D => Some(Self::Texture2D),
D3D_SRV_DIMENSION_TEXTURE2DARRAY => Some(Self::Texture2Darray),
D3D_SRV_DIMENSION_TEXTURE2DMS => Some(Self::Texture2Dms),
D3D_SRV_DIMENSION_TEXTURE2DMSARRAY => Some(Self::Texture2Dmsarray),
D3D_SRV_DIMENSION_TEXTURE3D => Some(Self::Texture3D),
D3D_SRV_DIMENSION_TEXTURECUBE => Some(Self::Texturecube),
D3D_SRV_DIMENSION_TEXTURECUBEARRAY => Some(Self::Texturecubearray),
D3D_SRV_DIMENSION_UNKNOWN => Some(Self::Unknown),
_ => None,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)]
pub struct ShaderInputFlags(u32);
impl ShaderInputFlags {
pub const COMPARISON_SAMPLER: Self = Self(D3D_SIF_COMPARISON_SAMPLER.0 as u32);
pub const TEXTURE_COMPONENTS: Self = Self(D3D_SIF_TEXTURE_COMPONENTS.0 as u32);
pub const TEXTURE_COMPONENT_0: Self = Self(D3D_SIF_TEXTURE_COMPONENT_0.0 as u32);
pub const TEXTURE_COMPONENT_1: Self = Self(D3D_SIF_TEXTURE_COMPONENT_1.0 as u32);
pub const UNUSED: Self = Self(D3D_SIF_UNUSED.0 as u32);
pub const USERPACKED: Self = Self(D3D_SIF_USERPACKED.0 as u32);
pub(crate) fn new(value: u32) -> Self {
Self(value)
}
#[inline]
pub fn contains(&self, value: Self) -> bool {
self.0 & value.0 != 0
}
}
impl std::ops::BitOr for ShaderInputFlags {
type Output = Self;
#[inline]
fn bitor(self, other: Self) -> Self::Output {
Self(self.0 | other.0)
}
}