//! This file has been automatically generated by `objc2`'s `header-translator`. //! DO NOT EDIT use core::ptr::NonNull; use objc2::__framework_prelude::*; use objc2_foundation::*; use crate::*; /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlindextype?language=objc) // NS_ENUM #[repr(transparent)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct MTLIndexType(pub NSUInteger); impl MTLIndexType { #[doc(alias = "MTLIndexTypeUInt16")] pub const UInt16: Self = Self(0); #[doc(alias = "MTLIndexTypeUInt32")] pub const UInt32: Self = Self(1); } unsafe impl Encode for MTLIndexType { const ENCODING: Encoding = NSUInteger::ENCODING; } unsafe impl RefEncode for MTLIndexType { const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING); } /// The type of a resource binding. /// /// /// This binding represents a buffer. /// /// /// This binding represents threadgroup memory. /// /// /// This binding represents a texture. /// /// /// This binding represents a sampler. /// /// /// This binding represents an image block data. /// /// /// This binding represents an image block. /// /// /// This binding represents a visible function table object. /// /// /// This binding represents a primitive acceleration structure object. /// /// /// This binding represents an instance acceleration structure object. /// /// /// This binding represents an intersection function table object. /// /// /// This binding represents an object payload. /// /// /// This binding represents a tensor object. /// /// See also [Apple's documentation](https://developer.apple.com/documentation/metal/mtlbindingtype?language=objc) // NS_ENUM #[repr(transparent)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct MTLBindingType(pub NSInteger); impl MTLBindingType { #[doc(alias = "MTLBindingTypeBuffer")] pub const Buffer: Self = Self(0); #[doc(alias = "MTLBindingTypeThreadgroupMemory")] pub const ThreadgroupMemory: Self = Self(1); #[doc(alias = "MTLBindingTypeTexture")] pub const Texture: Self = Self(2); #[doc(alias = "MTLBindingTypeSampler")] pub const Sampler: Self = Self(3); #[doc(alias = "MTLBindingTypeImageblockData")] pub const ImageblockData: Self = Self(16); #[doc(alias = "MTLBindingTypeImageblock")] pub const Imageblock: Self = Self(17); #[doc(alias = "MTLBindingTypeVisibleFunctionTable")] pub const VisibleFunctionTable: Self = Self(24); #[doc(alias = "MTLBindingTypePrimitiveAccelerationStructure")] pub const PrimitiveAccelerationStructure: Self = Self(25); #[doc(alias = "MTLBindingTypeInstanceAccelerationStructure")] pub const InstanceAccelerationStructure: Self = Self(26); #[doc(alias = "MTLBindingTypeIntersectionFunctionTable")] pub const IntersectionFunctionTable: Self = Self(27); #[doc(alias = "MTLBindingTypeObjectPayload")] pub const ObjectPayload: Self = Self(34); #[doc(alias = "MTLBindingTypeTensor")] pub const Tensor: Self = Self(37); } unsafe impl Encode for MTLBindingType { const ENCODING: Encoding = NSInteger::ENCODING; } unsafe impl RefEncode for MTLBindingType { const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING); } /// The type for an input to a MTLRenderPipelineState or a MTLComputePipelineState /// /// /// This input is a MTLBuffer /// /// /// This input is a pointer to the threadgroup memory. /// /// /// This input is a MTLTexture. /// /// /// This input is a sampler. /// /// See also [Apple's documentation](https://developer.apple.com/documentation/metal/mtlargumenttype?language=objc) // NS_ENUM #[deprecated] #[repr(transparent)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct MTLArgumentType(pub NSUInteger); impl MTLArgumentType { #[doc(alias = "MTLArgumentTypeBuffer")] #[deprecated] pub const Buffer: Self = Self(0); #[doc(alias = "MTLArgumentTypeThreadgroupMemory")] #[deprecated] pub const ThreadgroupMemory: Self = Self(1); #[doc(alias = "MTLArgumentTypeTexture")] #[deprecated] pub const Texture: Self = Self(2); #[doc(alias = "MTLArgumentTypeSampler")] #[deprecated] pub const Sampler: Self = Self(3); #[doc(alias = "MTLArgumentTypeImageblockData")] pub const ImageblockData: Self = Self(16); #[doc(alias = "MTLArgumentTypeImageblock")] pub const Imageblock: Self = Self(17); #[doc(alias = "MTLArgumentTypeVisibleFunctionTable")] pub const VisibleFunctionTable: Self = Self(24); #[doc(alias = "MTLArgumentTypePrimitiveAccelerationStructure")] pub const PrimitiveAccelerationStructure: Self = Self(25); #[doc(alias = "MTLArgumentTypeInstanceAccelerationStructure")] pub const InstanceAccelerationStructure: Self = Self(26); #[doc(alias = "MTLArgumentTypeIntersectionFunctionTable")] pub const IntersectionFunctionTable: Self = Self(27); } unsafe impl Encode for MTLArgumentType { const ENCODING: Encoding = NSUInteger::ENCODING; } unsafe impl RefEncode for MTLArgumentType { const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING); } /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlbindingaccess?language=objc) // NS_ENUM #[repr(transparent)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct MTLBindingAccess(pub NSUInteger); impl MTLBindingAccess { #[doc(alias = "MTLBindingAccessReadOnly")] pub const ReadOnly: Self = Self(0); #[doc(alias = "MTLBindingAccessReadWrite")] pub const ReadWrite: Self = Self(1); #[doc(alias = "MTLBindingAccessWriteOnly")] pub const WriteOnly: Self = Self(2); #[deprecated] pub const MTLArgumentAccessReadOnly: Self = Self(MTLBindingAccess::ReadOnly.0); #[deprecated] pub const MTLArgumentAccessReadWrite: Self = Self(MTLBindingAccess::ReadWrite.0); #[deprecated] pub const MTLArgumentAccessWriteOnly: Self = Self(MTLBindingAccess::WriteOnly.0); } unsafe impl Encode for MTLBindingAccess { const ENCODING: Encoding = NSUInteger::ENCODING; } unsafe impl RefEncode for MTLBindingAccess { const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING); } /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlargumentaccess?language=objc) #[deprecated] pub type MTLArgumentAccess = MTLBindingAccess; extern_class!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtltype?language=objc) #[unsafe(super(NSObject))] #[derive(Debug, PartialEq, Eq, Hash)] pub struct MTLType; ); extern_conformance!( unsafe impl NSObjectProtocol for MTLType {} ); impl MTLType { extern_methods!( #[cfg(feature = "MTLDataType")] #[unsafe(method(dataType))] #[unsafe(method_family = none)] pub fn dataType(&self) -> MTLDataType; ); } /// Methods declared on superclass `NSObject`. impl MTLType { extern_methods!( #[unsafe(method(init))] #[unsafe(method_family = init)] pub fn init(this: Allocated) -> Retained; #[unsafe(method(new))] #[unsafe(method_family = new)] pub fn new() -> Retained; ); } impl DefaultRetained for MTLType { #[inline] fn default_retained() -> Retained { Self::new() } } extern_class!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlstructmember?language=objc) #[unsafe(super(NSObject))] #[derive(Debug, PartialEq, Eq, Hash)] pub struct MTLStructMember; ); extern_conformance!( unsafe impl NSObjectProtocol for MTLStructMember {} ); impl MTLStructMember { extern_methods!( #[unsafe(method(name))] #[unsafe(method_family = none)] pub fn name(&self) -> Retained; #[unsafe(method(offset))] #[unsafe(method_family = none)] pub fn offset(&self) -> NSUInteger; #[cfg(feature = "MTLDataType")] #[unsafe(method(dataType))] #[unsafe(method_family = none)] pub fn dataType(&self) -> MTLDataType; #[unsafe(method(structType))] #[unsafe(method_family = none)] pub fn structType(&self) -> Option>; #[unsafe(method(arrayType))] #[unsafe(method_family = none)] pub fn arrayType(&self) -> Option>; #[unsafe(method(textureReferenceType))] #[unsafe(method_family = none)] pub fn textureReferenceType(&self) -> Option>; #[unsafe(method(pointerType))] #[unsafe(method_family = none)] pub fn pointerType(&self) -> Option>; /// Provides a description of the underlying tensor type when this struct member holds a tensor. /// /// - Returns: A description of the tensor type that this struct member holds, or `nil` if this struct member doesn't hold a tensor. #[unsafe(method(tensorReferenceType))] #[unsafe(method_family = none)] pub fn tensorReferenceType(&self) -> Option>; #[unsafe(method(argumentIndex))] #[unsafe(method_family = none)] pub fn argumentIndex(&self) -> NSUInteger; ); } /// Methods declared on superclass `NSObject`. impl MTLStructMember { extern_methods!( #[unsafe(method(init))] #[unsafe(method_family = init)] pub fn init(this: Allocated) -> Retained; #[unsafe(method(new))] #[unsafe(method_family = new)] pub fn new() -> Retained; ); } impl DefaultRetained for MTLStructMember { #[inline] fn default_retained() -> Retained { Self::new() } } extern_class!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlstructtype?language=objc) #[unsafe(super(MTLType, NSObject))] #[derive(Debug, PartialEq, Eq, Hash)] pub struct MTLStructType; ); extern_conformance!( unsafe impl NSObjectProtocol for MTLStructType {} ); impl MTLStructType { extern_methods!( #[unsafe(method(members))] #[unsafe(method_family = none)] pub fn members(&self) -> Retained>; #[unsafe(method(memberByName:))] #[unsafe(method_family = none)] pub fn memberByName(&self, name: &NSString) -> Option>; ); } /// Methods declared on superclass `NSObject`. impl MTLStructType { extern_methods!( #[unsafe(method(init))] #[unsafe(method_family = init)] pub fn init(this: Allocated) -> Retained; #[unsafe(method(new))] #[unsafe(method_family = new)] pub fn new() -> Retained; ); } impl DefaultRetained for MTLStructType { #[inline] fn default_retained() -> Retained { Self::new() } } extern_class!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlarraytype?language=objc) #[unsafe(super(MTLType, NSObject))] #[derive(Debug, PartialEq, Eq, Hash)] pub struct MTLArrayType; ); extern_conformance!( unsafe impl NSObjectProtocol for MTLArrayType {} ); impl MTLArrayType { extern_methods!( #[cfg(feature = "MTLDataType")] #[unsafe(method(elementType))] #[unsafe(method_family = none)] pub fn elementType(&self) -> MTLDataType; #[unsafe(method(arrayLength))] #[unsafe(method_family = none)] pub fn arrayLength(&self) -> NSUInteger; #[unsafe(method(stride))] #[unsafe(method_family = none)] pub fn stride(&self) -> NSUInteger; #[unsafe(method(argumentIndexStride))] #[unsafe(method_family = none)] pub fn argumentIndexStride(&self) -> NSUInteger; #[unsafe(method(elementStructType))] #[unsafe(method_family = none)] pub fn elementStructType(&self) -> Option>; #[unsafe(method(elementArrayType))] #[unsafe(method_family = none)] pub fn elementArrayType(&self) -> Option>; #[unsafe(method(elementTextureReferenceType))] #[unsafe(method_family = none)] pub fn elementTextureReferenceType(&self) -> Option>; #[unsafe(method(elementPointerType))] #[unsafe(method_family = none)] pub fn elementPointerType(&self) -> Option>; /// Provides a description of the underlying tensor type when this array holds tensors as its elements. /// /// - Returns: A description of the tensor type that this array holds, or `nil` if this struct member doesn't hold a tensor. #[unsafe(method(elementTensorReferenceType))] #[unsafe(method_family = none)] pub fn elementTensorReferenceType(&self) -> Option>; ); } /// Methods declared on superclass `NSObject`. impl MTLArrayType { extern_methods!( #[unsafe(method(init))] #[unsafe(method_family = init)] pub fn init(this: Allocated) -> Retained; #[unsafe(method(new))] #[unsafe(method_family = new)] pub fn new() -> Retained; ); } impl DefaultRetained for MTLArrayType { #[inline] fn default_retained() -> Retained { Self::new() } } extern_class!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlpointertype?language=objc) #[unsafe(super(MTLType, NSObject))] #[derive(Debug, PartialEq, Eq, Hash)] pub struct MTLPointerType; ); extern_conformance!( unsafe impl NSObjectProtocol for MTLPointerType {} ); impl MTLPointerType { extern_methods!( #[cfg(feature = "MTLDataType")] #[unsafe(method(elementType))] #[unsafe(method_family = none)] pub fn elementType(&self) -> MTLDataType; #[unsafe(method(access))] #[unsafe(method_family = none)] pub fn access(&self) -> MTLBindingAccess; #[unsafe(method(alignment))] #[unsafe(method_family = none)] pub fn alignment(&self) -> NSUInteger; #[unsafe(method(dataSize))] #[unsafe(method_family = none)] pub fn dataSize(&self) -> NSUInteger; #[unsafe(method(elementIsArgumentBuffer))] #[unsafe(method_family = none)] pub fn elementIsArgumentBuffer(&self) -> bool; #[unsafe(method(elementStructType))] #[unsafe(method_family = none)] pub fn elementStructType(&self) -> Option>; #[unsafe(method(elementArrayType))] #[unsafe(method_family = none)] pub fn elementArrayType(&self) -> Option>; ); } /// Methods declared on superclass `NSObject`. impl MTLPointerType { extern_methods!( #[unsafe(method(init))] #[unsafe(method_family = init)] pub fn init(this: Allocated) -> Retained; #[unsafe(method(new))] #[unsafe(method_family = new)] pub fn new() -> Retained; ); } impl DefaultRetained for MTLPointerType { #[inline] fn default_retained() -> Retained { Self::new() } } extern_class!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtltexturereferencetype?language=objc) #[unsafe(super(MTLType, NSObject))] #[derive(Debug, PartialEq, Eq, Hash)] pub struct MTLTextureReferenceType; ); extern_conformance!( unsafe impl NSObjectProtocol for MTLTextureReferenceType {} ); impl MTLTextureReferenceType { extern_methods!( #[cfg(feature = "MTLDataType")] #[unsafe(method(textureDataType))] #[unsafe(method_family = none)] pub fn textureDataType(&self) -> MTLDataType; #[cfg(feature = "MTLTexture")] #[unsafe(method(textureType))] #[unsafe(method_family = none)] pub fn textureType(&self) -> MTLTextureType; #[unsafe(method(access))] #[unsafe(method_family = none)] pub fn access(&self) -> MTLBindingAccess; #[unsafe(method(isDepthTexture))] #[unsafe(method_family = none)] pub fn isDepthTexture(&self) -> bool; ); } /// Methods declared on superclass `NSObject`. impl MTLTextureReferenceType { extern_methods!( #[unsafe(method(init))] #[unsafe(method_family = init)] pub fn init(this: Allocated) -> Retained; #[unsafe(method(new))] #[unsafe(method_family = new)] pub fn new() -> Retained; ); } impl DefaultRetained for MTLTextureReferenceType { #[inline] fn default_retained() -> Retained { Self::new() } } extern_class!( /// An object that represents a tensor in the shading language in a struct or array. /// /// See also [Apple's documentation](https://developer.apple.com/documentation/metal/mtltensorreferencetype?language=objc) #[unsafe(super(MTLType, NSObject))] #[derive(Debug, PartialEq, Eq, Hash)] pub struct MTLTensorReferenceType; ); extern_conformance!( unsafe impl NSObjectProtocol for MTLTensorReferenceType {} ); impl MTLTensorReferenceType { extern_methods!( #[cfg(feature = "MTLTensor")] /// The underlying data format of the tensor. #[unsafe(method(tensorDataType))] #[unsafe(method_family = none)] pub fn tensorDataType(&self) -> MTLTensorDataType; #[cfg(feature = "MTLDataType")] /// The data format you use for indexing into the tensor. #[unsafe(method(indexType))] #[unsafe(method_family = none)] pub fn indexType(&self) -> MTLDataType; #[cfg(feature = "MTLTensor")] /// The array of sizes, in elements, one for each dimension of this tensor. /// /// Because shader-bound tensors have dynamic extents, the ``MTLTensorExtents/rank`` of `dimensions` corresponds to the rank the shader function specifies, and ``MTLTensorExtents/extentsAtDimensionIndex:`` always returns a value of -1. #[unsafe(method(dimensions))] #[unsafe(method_family = none)] pub fn dimensions(&self) -> Option>; /// A value that represents the read/write permissions of the tensor. #[unsafe(method(access))] #[unsafe(method_family = none)] pub fn access(&self) -> MTLBindingAccess; ); } /// Methods declared on superclass `NSObject`. impl MTLTensorReferenceType { extern_methods!( #[unsafe(method(init))] #[unsafe(method_family = init)] pub fn init(this: Allocated) -> Retained; #[unsafe(method(new))] #[unsafe(method_family = new)] pub fn new() -> Retained; ); } impl DefaultRetained for MTLTensorReferenceType { #[inline] fn default_retained() -> Retained { Self::new() } } extern_class!( /// MTLArgument /// /// See also [Apple's documentation](https://developer.apple.com/documentation/metal/mtlargument?language=objc) #[unsafe(super(NSObject))] #[derive(Debug, PartialEq, Eq, Hash)] #[deprecated] pub struct MTLArgument; ); unsafe impl Send for MTLArgument {} unsafe impl Sync for MTLArgument {} extern_conformance!( unsafe impl NSObjectProtocol for MTLArgument {} ); impl MTLArgument { extern_methods!( #[deprecated] #[unsafe(method(name))] #[unsafe(method_family = none)] pub fn name(&self) -> Retained; #[deprecated] #[unsafe(method(type))] #[unsafe(method_family = none)] pub fn r#type(&self) -> MTLArgumentType; #[deprecated] #[unsafe(method(access))] #[unsafe(method_family = none)] pub fn access(&self) -> MTLBindingAccess; #[deprecated] #[unsafe(method(index))] #[unsafe(method_family = none)] pub fn index(&self) -> NSUInteger; #[deprecated] #[unsafe(method(isActive))] #[unsafe(method_family = none)] pub fn isActive(&self) -> bool; #[deprecated] #[unsafe(method(bufferAlignment))] #[unsafe(method_family = none)] pub fn bufferAlignment(&self) -> NSUInteger; #[deprecated] #[unsafe(method(bufferDataSize))] #[unsafe(method_family = none)] pub fn bufferDataSize(&self) -> NSUInteger; #[cfg(feature = "MTLDataType")] #[deprecated] #[unsafe(method(bufferDataType))] #[unsafe(method_family = none)] pub fn bufferDataType(&self) -> MTLDataType; #[deprecated] #[unsafe(method(bufferStructType))] #[unsafe(method_family = none)] pub fn bufferStructType(&self) -> Option>; #[unsafe(method(bufferPointerType))] #[unsafe(method_family = none)] pub fn bufferPointerType(&self) -> Option>; #[deprecated] #[unsafe(method(threadgroupMemoryAlignment))] #[unsafe(method_family = none)] pub fn threadgroupMemoryAlignment(&self) -> NSUInteger; #[deprecated] #[unsafe(method(threadgroupMemoryDataSize))] #[unsafe(method_family = none)] pub fn threadgroupMemoryDataSize(&self) -> NSUInteger; #[cfg(feature = "MTLTexture")] #[deprecated] #[unsafe(method(textureType))] #[unsafe(method_family = none)] pub fn textureType(&self) -> MTLTextureType; #[cfg(feature = "MTLDataType")] #[deprecated] #[unsafe(method(textureDataType))] #[unsafe(method_family = none)] pub fn textureDataType(&self) -> MTLDataType; #[unsafe(method(isDepthTexture))] #[unsafe(method_family = none)] pub fn isDepthTexture(&self) -> bool; #[unsafe(method(arrayLength))] #[unsafe(method_family = none)] pub fn arrayLength(&self) -> NSUInteger; ); } /// Methods declared on superclass `NSObject`. impl MTLArgument { extern_methods!( #[unsafe(method(init))] #[unsafe(method_family = init)] pub fn init(this: Allocated) -> Retained; #[unsafe(method(new))] #[unsafe(method_family = new)] pub fn new() -> Retained; ); } impl DefaultRetained for MTLArgument { #[inline] fn default_retained() -> Retained { Self::new() } } extern_protocol!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlbinding?language=objc) pub unsafe trait MTLBinding: NSObjectProtocol + Send + Sync { #[unsafe(method(name))] #[unsafe(method_family = none)] fn name(&self) -> Retained; #[unsafe(method(type))] #[unsafe(method_family = none)] fn r#type(&self) -> MTLBindingType; #[unsafe(method(access))] #[unsafe(method_family = none)] fn access(&self) -> MTLBindingAccess; #[unsafe(method(index))] #[unsafe(method_family = none)] fn index(&self) -> NSUInteger; #[unsafe(method(isUsed))] #[unsafe(method_family = none)] fn isUsed(&self) -> bool; #[unsafe(method(isArgument))] #[unsafe(method_family = none)] fn isArgument(&self) -> bool; } ); extern_protocol!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlbufferbinding?language=objc) pub unsafe trait MTLBufferBinding: MTLBinding { #[unsafe(method(bufferAlignment))] #[unsafe(method_family = none)] fn bufferAlignment(&self) -> NSUInteger; #[unsafe(method(bufferDataSize))] #[unsafe(method_family = none)] fn bufferDataSize(&self) -> NSUInteger; #[cfg(feature = "MTLDataType")] #[unsafe(method(bufferDataType))] #[unsafe(method_family = none)] fn bufferDataType(&self) -> MTLDataType; #[unsafe(method(bufferStructType))] #[unsafe(method_family = none)] fn bufferStructType(&self) -> Option>; #[unsafe(method(bufferPointerType))] #[unsafe(method_family = none)] fn bufferPointerType(&self) -> Option>; } ); extern_protocol!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlthreadgroupbinding?language=objc) pub unsafe trait MTLThreadgroupBinding: MTLBinding { #[unsafe(method(threadgroupMemoryAlignment))] #[unsafe(method_family = none)] fn threadgroupMemoryAlignment(&self) -> NSUInteger; #[unsafe(method(threadgroupMemoryDataSize))] #[unsafe(method_family = none)] fn threadgroupMemoryDataSize(&self) -> NSUInteger; } ); extern_protocol!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtltexturebinding?language=objc) pub unsafe trait MTLTextureBinding: MTLBinding { #[cfg(feature = "MTLTexture")] #[unsafe(method(textureType))] #[unsafe(method_family = none)] fn textureType(&self) -> MTLTextureType; #[cfg(feature = "MTLDataType")] #[unsafe(method(textureDataType))] #[unsafe(method_family = none)] fn textureDataType(&self) -> MTLDataType; #[unsafe(method(isDepthTexture))] #[unsafe(method_family = none)] fn isDepthTexture(&self) -> bool; #[unsafe(method(arrayLength))] #[unsafe(method_family = none)] fn arrayLength(&self) -> NSUInteger; } ); extern_protocol!( /// [Apple's documentation](https://developer.apple.com/documentation/metal/mtlobjectpayloadbinding?language=objc) pub unsafe trait MTLObjectPayloadBinding: MTLBinding { #[unsafe(method(objectPayloadAlignment))] #[unsafe(method_family = none)] fn objectPayloadAlignment(&self) -> NSUInteger; #[unsafe(method(objectPayloadDataSize))] #[unsafe(method_family = none)] fn objectPayloadDataSize(&self) -> NSUInteger; } ); extern_protocol!( /// An object that represents a tensor bound to a graphics or compute function or a machine learning function. /// /// See also [Apple's documentation](https://developer.apple.com/documentation/metal/mtltensorbinding?language=objc) pub unsafe trait MTLTensorBinding: MTLBinding { #[cfg(feature = "MTLTensor")] /// The underlying data format of this tensor. #[unsafe(method(tensorDataType))] #[unsafe(method_family = none)] fn tensorDataType(&self) -> MTLTensorDataType; #[cfg(feature = "MTLDataType")] /// The data format you use for indexing into the tensor. #[unsafe(method(indexType))] #[unsafe(method_family = none)] fn indexType(&self) -> MTLDataType; #[cfg(feature = "MTLTensor")] /// The array of sizes, in elements, one for each dimension of this tensor. /// /// Because shader-bound tensors have dynamic extents, if this tensor is shader bound, the ``MTLTensorExtents/rank`` of `dimensions` corresponds to the rank the shader function specifies, and ``MTLTensorExtents/extentsAtDimensionIndex:`` always returns a value of -1. /// In the case of functions used with machine learning pipelines, `dimensions` corresponds to the default shape, if you provide one. Otherwise, it's `nil` in the case of an undefined shape. #[unsafe(method(dimensions))] #[unsafe(method_family = none)] fn dimensions(&self) -> Option>; } );