Documentation
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)
    }
}