//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;

use crate::*;

/// An enumeration of the different data types in Metal.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/metal/mtldatatype?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MTLDataType(pub NSUInteger);
impl MTLDataType {
    /// Represents no data type.
    #[doc(alias = "MTLDataTypeNone")]
    pub const None: Self = Self(0);
    /// Represents a struct data type.
    #[doc(alias = "MTLDataTypeStruct")]
    pub const Struct: Self = Self(1);
    /// Represents an array data type.
    #[doc(alias = "MTLDataTypeArray")]
    pub const Array: Self = Self(2);
    /// Represents a data type consisting of a single floating-point value.
    #[doc(alias = "MTLDataTypeFloat")]
    pub const Float: Self = Self(3);
    /// Represents a data type consisting of a vector of two floating-point values.
    #[doc(alias = "MTLDataTypeFloat2")]
    pub const Float2: Self = Self(4);
    /// Represents a data type consisting of a vector of three floating-point values.
    #[doc(alias = "MTLDataTypeFloat3")]
    pub const Float3: Self = Self(5);
    /// Represents a data type consisting of a vector of four floating-point values.
    #[doc(alias = "MTLDataTypeFloat4")]
    pub const Float4: Self = Self(6);
    /// Represents a data type consisting of a 2x2 floating-point matrix.
    #[doc(alias = "MTLDataTypeFloat2x2")]
    pub const Float2x2: Self = Self(7);
    /// Represents a data type consisting of a 2x3 floating-point matrix.
    #[doc(alias = "MTLDataTypeFloat2x3")]
    pub const Float2x3: Self = Self(8);
    /// Represents a data type consisting of a 2x4 floating-point matrix.
    #[doc(alias = "MTLDataTypeFloat2x4")]
    pub const Float2x4: Self = Self(9);
    /// Represents a data type consisting of a 3x2 floating-point matrix.
    #[doc(alias = "MTLDataTypeFloat3x2")]
    pub const Float3x2: Self = Self(10);
    /// Represents a data type consisting of a 3x3 floating-point matrix.
    #[doc(alias = "MTLDataTypeFloat3x3")]
    pub const Float3x3: Self = Self(11);
    /// Represents a data type consisting of a 3x4 floating-point matrix.
    #[doc(alias = "MTLDataTypeFloat3x4")]
    pub const Float3x4: Self = Self(12);
    /// Represents a data type consisting of a 4x2 floating-point matrix.
    #[doc(alias = "MTLDataTypeFloat4x2")]
    pub const Float4x2: Self = Self(13);
    /// Represents a data type consisting of a 4x3 floating-point matrix.
    #[doc(alias = "MTLDataTypeFloat4x3")]
    pub const Float4x3: Self = Self(14);
    /// Represents a data type consisting of a 4x4 floating-point matrix.
    #[doc(alias = "MTLDataTypeFloat4x4")]
    pub const Float4x4: Self = Self(15);
    /// Represents a data type consisting of a half-precision floating-point value.
    #[doc(alias = "MTLDataTypeHalf")]
    pub const Half: Self = Self(16);
    /// Represents a data type consisting of a vector of two half-precision floating-point values.
    #[doc(alias = "MTLDataTypeHalf2")]
    pub const Half2: Self = Self(17);
    /// Represents a data type consisting of a vector of three half-precision floating-point values.
    #[doc(alias = "MTLDataTypeHalf3")]
    pub const Half3: Self = Self(18);
    /// Represents a data type consisting of a vector of four half-precision floating-point values.
    #[doc(alias = "MTLDataTypeHalf4")]
    pub const Half4: Self = Self(19);
    /// Represents a data type consisting of a 2x2 half-precision floating-point matrix.
    #[doc(alias = "MTLDataTypeHalf2x2")]
    pub const Half2x2: Self = Self(20);
    /// Represents a data type consisting of a 2x3 half-precision floating-point matrix.
    #[doc(alias = "MTLDataTypeHalf2x3")]
    pub const Half2x3: Self = Self(21);
    /// Represents a data type consisting of a 2x4 half-precision floating-point matrix.
    #[doc(alias = "MTLDataTypeHalf2x4")]
    pub const Half2x4: Self = Self(22);
    /// Represents a data type consisting of a 3x2 half-precision floating-point matrix.
    #[doc(alias = "MTLDataTypeHalf3x2")]
    pub const Half3x2: Self = Self(23);
    /// Represents a data type consisting of a 3x3 half-precision floating-point matrix.
    #[doc(alias = "MTLDataTypeHalf3x3")]
    pub const Half3x3: Self = Self(24);
    /// Represents a data type consisting of a 3x4 half-precision floating-point matrix.
    #[doc(alias = "MTLDataTypeHalf3x4")]
    pub const Half3x4: Self = Self(25);
    /// Represents a data type consisting of a 4x2 half-precision floating-point matrix.
    #[doc(alias = "MTLDataTypeHalf4x2")]
    pub const Half4x2: Self = Self(26);
    /// Represents a data type consisting of a 4x3 half-precision floating-point matrix.
    #[doc(alias = "MTLDataTypeHalf4x3")]
    pub const Half4x3: Self = Self(27);
    /// Represents a data type consisting of a 4x4 half-precision floating-point matrix.
    #[doc(alias = "MTLDataTypeHalf4x4")]
    pub const Half4x4: Self = Self(28);
    /// Represents a data type consisting of a single signed integer value.
    #[doc(alias = "MTLDataTypeInt")]
    pub const Int: Self = Self(29);
    /// Represents a data type consisting of a vector of two signed integer values.
    #[doc(alias = "MTLDataTypeInt2")]
    pub const Int2: Self = Self(30);
    /// Represents a data type consisting of a vector of three signed integer values.
    #[doc(alias = "MTLDataTypeInt3")]
    pub const Int3: Self = Self(31);
    /// Represents a data type consisting of a vector of four signed integer values.
    #[doc(alias = "MTLDataTypeInt4")]
    pub const Int4: Self = Self(32);
    /// Represents a data type consisting of a single unsigned integer value.
    #[doc(alias = "MTLDataTypeUInt")]
    pub const UInt: Self = Self(33);
    /// Represents a data type consisting of a vector of two unsigned integer values.
    #[doc(alias = "MTLDataTypeUInt2")]
    pub const UInt2: Self = Self(34);
    /// Represents a data type consisting of a vector of three unsigned integer values.
    #[doc(alias = "MTLDataTypeUInt3")]
    pub const UInt3: Self = Self(35);
    /// Represents a data type consisting of a vector of four unsigned integer values.
    #[doc(alias = "MTLDataTypeUInt4")]
    pub const UInt4: Self = Self(36);
    /// Represents a data type consisting of a single 16-bit signed integer value.
    #[doc(alias = "MTLDataTypeShort")]
    pub const Short: Self = Self(37);
    /// Represents a data type consisting of a vector of two 16-bit signed integer values.
    #[doc(alias = "MTLDataTypeShort2")]
    pub const Short2: Self = Self(38);
    /// Represents a data type consisting of a vector of three 16-bit signed integer values.
    #[doc(alias = "MTLDataTypeShort3")]
    pub const Short3: Self = Self(39);
    /// Represents a data type consisting of a vector of three 16-bit signed integer values.
    #[doc(alias = "MTLDataTypeShort4")]
    pub const Short4: Self = Self(40);
    /// Represents a data type consisting of a single 16-bit unsigned integer value.
    #[doc(alias = "MTLDataTypeUShort")]
    pub const UShort: Self = Self(41);
    /// Represents a data type consisting of a vector of two 16-bit unsigned integer values.
    #[doc(alias = "MTLDataTypeUShort2")]
    pub const UShort2: Self = Self(42);
    /// Represents a data type consisting of a vector of three 16-bit unsigned integer values.
    #[doc(alias = "MTLDataTypeUShort3")]
    pub const UShort3: Self = Self(43);
    /// Represents a data type consisting of a vector of four 16-bit unsigned integer values.
    #[doc(alias = "MTLDataTypeUShort4")]
    pub const UShort4: Self = Self(44);
    /// Represents a data type consisting of a single signed character value.
    #[doc(alias = "MTLDataTypeChar")]
    pub const Char: Self = Self(45);
    /// Represents a data type consisting of a vector of two signed character values.
    #[doc(alias = "MTLDataTypeChar2")]
    pub const Char2: Self = Self(46);
    /// Represents a data type consisting of a vector of three signed character values.
    #[doc(alias = "MTLDataTypeChar3")]
    pub const Char3: Self = Self(47);
    /// Represents a data type consisting of a vector of four signed character values.
    #[doc(alias = "MTLDataTypeChar4")]
    pub const Char4: Self = Self(48);
    /// Represents a data type consisting of a single unsigned character value.
    #[doc(alias = "MTLDataTypeUChar")]
    pub const UChar: Self = Self(49);
    /// Represents a data type consisting of a vector of two unsigned character values.
    #[doc(alias = "MTLDataTypeUChar2")]
    pub const UChar2: Self = Self(50);
    /// Represents a data type consisting of a vector of three unsigned character values.
    #[doc(alias = "MTLDataTypeUChar3")]
    pub const UChar3: Self = Self(51);
    /// Represents a data type consisting of a vector of four unsigned character values.
    #[doc(alias = "MTLDataTypeUChar4")]
    pub const UChar4: Self = Self(52);
    /// Represents a data type consisting of a single boolean value.
    #[doc(alias = "MTLDataTypeBool")]
    pub const Bool: Self = Self(53);
    /// Represents a data type consisting of a vector of two boolean values.
    #[doc(alias = "MTLDataTypeBool2")]
    pub const Bool2: Self = Self(54);
    /// Represents a data type consisting of a vector of three boolean values.
    #[doc(alias = "MTLDataTypeBool3")]
    pub const Bool3: Self = Self(55);
    /// Represents a data type consisting of a vector of four boolean values.
    #[doc(alias = "MTLDataTypeBool4")]
    pub const Bool4: Self = Self(56);
    /// Represents a data type corresponding to a texture object.
    #[doc(alias = "MTLDataTypeTexture")]
    pub const Texture: Self = Self(58);
    /// Represents a data type corresponding to a sampler state object.
    #[doc(alias = "MTLDataTypeSampler")]
    pub const Sampler: Self = Self(59);
    /// Represents a data type corresponding to a pointer.
    #[doc(alias = "MTLDataTypePointer")]
    pub const Pointer: Self = Self(60);
    /// Represents an image block data type consisting of an unsigned 8-bit red channel normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeR8Unorm")]
    pub const R8Unorm: Self = Self(62);
    /// Represents an image block data type consisting of an signed 8-bit red channel normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeR8Snorm")]
    pub const R8Snorm: Self = Self(63);
    /// Represents an image block data type consisting of an unsigned 16-bit red channel normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeR16Unorm")]
    pub const R16Unorm: Self = Self(64);
    /// Represents an image block data type consisting of a signed 16-bit red channel normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeR16Snorm")]
    pub const R16Snorm: Self = Self(65);
    /// Represents an image block data type consisting of an unsigned 8-bit red channel and a unsigned 8-bit green channel, both normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeRG8Unorm")]
    pub const RG8Unorm: Self = Self(66);
    /// Represents an image block data type consisting of a signed 8-bit red channel and a signed 8-bit green channel, both normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeRG8Snorm")]
    pub const RG8Snorm: Self = Self(67);
    /// Represents an image block data type consisting of an unsigned 16-bit red channel and an unsigned 16-bit green channel, both normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeRG16Unorm")]
    pub const RG16Unorm: Self = Self(68);
    /// Represents an image block data type consisting of a signed 16-bit red channel and a signed 16-bit green channel, both normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeRG16Snorm")]
    pub const RG16Snorm: Self = Self(69);
    /// Represents an image block data type consisting of four unsigned 8-bit channels normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeRGBA8Unorm")]
    pub const RGBA8Unorm: Self = Self(70);
    /// Represents an image block data type consisting of four unsigned 8-bit channels normalized to the [0-1] range and subject to gamma-correction.
    #[doc(alias = "MTLDataTypeRGBA8Unorm_sRGB")]
    pub const RGBA8Unorm_sRGB: Self = Self(71);
    /// Represents an image block data type consisting of four signed 8-bit channels normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeRGBA8Snorm")]
    pub const RGBA8Snorm: Self = Self(72);
    /// Represents an image block data type consisting of four unsigned 16-bit channels normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeRGBA16Unorm")]
    pub const RGBA16Unorm: Self = Self(73);
    /// Represents an image block data type consisting of four signed 16-bit channels normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeRGBA16Snorm")]
    pub const RGBA16Snorm: Self = Self(74);
    /// Represents an image block data type consisting of three unsigned 10-bit channels and one 2-bit unsigned alpha channel, all normalized to the [0-1] range.
    #[doc(alias = "MTLDataTypeRGB10A2Unorm")]
    pub const RGB10A2Unorm: Self = Self(75);
    /// Represents an image block data type consisting of two 11-bit floating-point channels, and one 10-bit floating-point blue channel.
    #[doc(alias = "MTLDataTypeRG11B10Float")]
    pub const RG11B10Float: Self = Self(76);
    /// Represents an image block data type consisting of three 9-bit floating-point channels, and one 5-bit floating-point exponent.
    #[doc(alias = "MTLDataTypeRGB9E5Float")]
    pub const RGB9E5Float: Self = Self(77);
    /// Represents a data type corresponding to a render pipeline state object.
    #[doc(alias = "MTLDataTypeRenderPipeline")]
    pub const RenderPipeline: Self = Self(78);
    /// Represents a data type corresponding to a compute pipeline state object.
    #[doc(alias = "MTLDataTypeComputePipeline")]
    pub const ComputePipeline: Self = Self(79);
    /// Represents a data type corresponding to an indirect command buffer object.
    #[doc(alias = "MTLDataTypeIndirectCommandBuffer")]
    pub const IndirectCommandBuffer: Self = Self(80);
    /// Represents a data type consisting of a signed long integer value.
    #[doc(alias = "MTLDataTypeLong")]
    pub const Long: Self = Self(81);
    /// Represents a data type consisting of a vector of two signed long integer values.
    #[doc(alias = "MTLDataTypeLong2")]
    pub const Long2: Self = Self(82);
    /// Represents a data type consisting of a vector of three signed long integer values.
    #[doc(alias = "MTLDataTypeLong3")]
    pub const Long3: Self = Self(83);
    /// Represents a data type consisting of a vector of four signed long integer values.
    #[doc(alias = "MTLDataTypeLong4")]
    pub const Long4: Self = Self(84);
    /// Represents a data type consisting of an unsigned long integer value.
    #[doc(alias = "MTLDataTypeULong")]
    pub const ULong: Self = Self(85);
    /// Represents a data type consisting of a vector two unsigned long integer values.
    #[doc(alias = "MTLDataTypeULong2")]
    pub const ULong2: Self = Self(86);
    /// Represents a data type consisting of a vector three unsigned long integer values.
    #[doc(alias = "MTLDataTypeULong3")]
    pub const ULong3: Self = Self(87);
    /// Represents a data type consisting of a vector four unsigned long integer values.
    #[doc(alias = "MTLDataTypeULong4")]
    pub const ULong4: Self = Self(88);
    /// Represents a data type corresponding to a visible function table object.
    #[doc(alias = "MTLDataTypeVisibleFunctionTable")]
    pub const VisibleFunctionTable: Self = Self(115);
    /// Represents a data type corresponding to an intersection function table object.
    #[doc(alias = "MTLDataTypeIntersectionFunctionTable")]
    pub const IntersectionFunctionTable: Self = Self(116);
    /// Represents a data type corresponding to a primitive acceleration structure.
    #[doc(alias = "MTLDataTypePrimitiveAccelerationStructure")]
    pub const PrimitiveAccelerationStructure: Self = Self(117);
    /// Represents a data type corresponding to an instance acceleration structure.
    #[doc(alias = "MTLDataTypeInstanceAccelerationStructure")]
    pub const InstanceAccelerationStructure: Self = Self(118);
    /// Represents a data type consisting of a single BFloat value.
    #[doc(alias = "MTLDataTypeBFloat")]
    pub const BFloat: Self = Self(121);
    /// Represents a data type consisting of a vector two BFloat values.
    #[doc(alias = "MTLDataTypeBFloat2")]
    pub const BFloat2: Self = Self(122);
    /// Represents a data type consisting of a vector three BFloat values.
    #[doc(alias = "MTLDataTypeBFloat3")]
    pub const BFloat3: Self = Self(123);
    /// Represents a data type consisting of a vector four BFloat values.
    #[doc(alias = "MTLDataTypeBFloat4")]
    pub const BFloat4: Self = Self(124);
    /// Represents a data type corresponding to a depth-stencil state object.
    #[doc(alias = "MTLDataTypeDepthStencilState")]
    pub const DepthStencilState: Self = Self(139);
    /// Represents a data type corresponding to a machine learning tensor.
    #[doc(alias = "MTLDataTypeTensor")]
    pub const Tensor: Self = Self(140);
}

unsafe impl Encode for MTLDataType {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

unsafe impl RefEncode for MTLDataType {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
