Source code
Revision control
Copy as Markdown
Other Tools
//! 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!(
#[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<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}
impl DefaultRetained for MTLType {
#[inline]
fn default_retained() -> Retained<Self> {
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<NSString>;
#[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<Retained<MTLStructType>>;
#[unsafe(method(arrayType))]
#[unsafe(method_family = none)]
pub fn arrayType(&self) -> Option<Retained<MTLArrayType>>;
#[unsafe(method(textureReferenceType))]
#[unsafe(method_family = none)]
pub fn textureReferenceType(&self) -> Option<Retained<MTLTextureReferenceType>>;
#[unsafe(method(pointerType))]
#[unsafe(method_family = none)]
pub fn pointerType(&self) -> Option<Retained<MTLPointerType>>;
/// 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<Retained<MTLTensorReferenceType>>;
#[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<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}
impl DefaultRetained for MTLStructMember {
#[inline]
fn default_retained() -> Retained<Self> {
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<NSArray<MTLStructMember>>;
#[unsafe(method(memberByName:))]
#[unsafe(method_family = none)]
pub fn memberByName(&self, name: &NSString) -> Option<Retained<MTLStructMember>>;
);
}
/// Methods declared on superclass `NSObject`.
impl MTLStructType {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}
impl DefaultRetained for MTLStructType {
#[inline]
fn default_retained() -> Retained<Self> {
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<Retained<MTLStructType>>;
#[unsafe(method(elementArrayType))]
#[unsafe(method_family = none)]
pub fn elementArrayType(&self) -> Option<Retained<MTLArrayType>>;
#[unsafe(method(elementTextureReferenceType))]
#[unsafe(method_family = none)]
pub fn elementTextureReferenceType(&self) -> Option<Retained<MTLTextureReferenceType>>;
#[unsafe(method(elementPointerType))]
#[unsafe(method_family = none)]
pub fn elementPointerType(&self) -> Option<Retained<MTLPointerType>>;
/// 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<Retained<MTLTensorReferenceType>>;
);
}
/// Methods declared on superclass `NSObject`.
impl MTLArrayType {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}
impl DefaultRetained for MTLArrayType {
#[inline]
fn default_retained() -> Retained<Self> {
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<Retained<MTLStructType>>;
#[unsafe(method(elementArrayType))]
#[unsafe(method_family = none)]
pub fn elementArrayType(&self) -> Option<Retained<MTLArrayType>>;
);
}
/// Methods declared on superclass `NSObject`.
impl MTLPointerType {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}
impl DefaultRetained for MTLPointerType {
#[inline]
fn default_retained() -> Retained<Self> {
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<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}
impl DefaultRetained for MTLTextureReferenceType {
#[inline]
fn default_retained() -> Retained<Self> {
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<Retained<MTLTensorExtents>>;
/// 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<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}
impl DefaultRetained for MTLTensorReferenceType {
#[inline]
fn default_retained() -> Retained<Self> {
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<NSString>;
#[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<Retained<MTLStructType>>;
#[unsafe(method(bufferPointerType))]
#[unsafe(method_family = none)]
pub fn bufferPointerType(&self) -> Option<Retained<MTLPointerType>>;
#[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<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}
impl DefaultRetained for MTLArgument {
#[inline]
fn default_retained() -> Retained<Self> {
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<NSString>;
#[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<Retained<MTLStructType>>;
#[unsafe(method(bufferPointerType))]
#[unsafe(method_family = none)]
fn bufferPointerType(&self) -> Option<Retained<MTLPointerType>>;
}
);
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<Retained<MTLTensorExtents>>;
}
);