Files
another-boids-in-rust/vendor/metal/src/argument.rs

367 lines
8.1 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Copyright 2017 GFX developers
//
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
// http://opensource.org/licenses/MIT>, at your option. This file may not be
// copied, modified, or distributed except according to those terms.
use super::{MTLTextureType, NSUInteger};
use objc::runtime::{NO, YES};
/// See <https://developer.apple.com/documentation/metal/mtldatatype>
#[repr(u64)]
#[allow(non_camel_case_types)]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum MTLDataType {
None = 0,
Struct = 1,
Array = 2,
Float = 3,
Float2 = 4,
Float3 = 5,
Float4 = 6,
Float2x2 = 7,
Float2x3 = 8,
Float2x4 = 9,
Float3x2 = 10,
Float3x3 = 11,
Float3x4 = 12,
Float4x2 = 13,
Float4x3 = 14,
Float4x4 = 15,
Half = 16,
Half2 = 17,
Half3 = 18,
Half4 = 19,
Half2x2 = 20,
Half2x3 = 21,
Half2x4 = 22,
Half3x2 = 23,
Half3x3 = 24,
Half3x4 = 25,
Half4x2 = 26,
Half4x3 = 27,
Half4x4 = 28,
Int = 29,
Int2 = 30,
Int3 = 31,
Int4 = 32,
UInt = 33,
UInt2 = 34,
UInt3 = 35,
UInt4 = 36,
Short = 37,
Short2 = 38,
Short3 = 39,
Short4 = 40,
UShort = 41,
UShort2 = 42,
UShort3 = 43,
UShort4 = 44,
Char = 45,
Char2 = 46,
Char3 = 47,
Char4 = 48,
UChar = 49,
UChar2 = 50,
UChar3 = 51,
UChar4 = 52,
Bool = 53,
Bool2 = 54,
Bool3 = 55,
Bool4 = 56,
Texture = 58,
Sampler = 59,
Pointer = 60,
R8Unorm = 62,
R8Snorm = 63,
R16Unorm = 64,
R16Snorm = 65,
RG8Unorm = 66,
RG8Snorm = 67,
RG16Unorm = 68,
RG16Snorm = 69,
RGBA8Unorm = 70,
RGBA8Unorm_sRGB = 71,
RGBA8Snorm = 72,
RGBA16Unorm = 73,
RGBA16Snorm = 74,
RGB10A2Unorm = 75,
RG11B10Float = 76,
RGB9E5Float = 77,
RenderPipeline = 78,
ComputePipeline = 79,
IndirectCommandBuffer = 80,
Long = 81,
Long2 = 82,
Long3 = 83,
Long4 = 84,
ULong = 85,
ULong2 = 86,
ULong3 = 87,
ULong4 = 88,
VisibleFunctionTable = 115,
IntersectionFunctionTable = 116,
PrimitiveAccelerationStructure = 117,
InstanceAccelerationStructure = 118,
BFloat = 121,
BFloat2 = 122,
BFloat3 = 123,
BFloat4 = 124,
}
/// See <https://developer.apple.com/documentation/metal/mtlargumenttype>
#[repr(u64)]
#[deprecated(
note = "Since: iOS 8.016.0, iPadOS 8.016.0, macOS 10.1113.0, Mac Catalyst 13.116.0, tvOS 9.016.0"
)]
#[allow(non_camel_case_types)]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum MTLArgumentType {
Buffer = 0,
ThreadgroupMemory = 1,
Texture = 2,
Sampler = 3,
ImageblockData = 16,
Imageblock = 17,
}
/// See <https://developer.apple.com/documentation/metal/mtlargumentaccess>
#[repr(u64)]
#[allow(non_camel_case_types)]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum MTLArgumentAccess {
ReadOnly = 0,
ReadWrite = 1,
WriteOnly = 2,
}
/// See <https://developer.apple.com/documentation/metal/mtlstructmember>
pub enum MTLStructMember {}
foreign_obj_type! {
type CType = MTLStructMember;
pub struct StructMember;
}
impl StructMemberRef {
pub fn name(&self) -> &str {
unsafe {
let name = msg_send![self, name];
crate::nsstring_as_str(name)
}
}
pub fn offset(&self) -> NSUInteger {
unsafe { msg_send![self, offset] }
}
pub fn data_type(&self) -> MTLDataType {
unsafe { msg_send![self, dataType] }
}
pub fn struct_type(&self) -> MTLStructType {
unsafe { msg_send![self, structType] }
}
pub fn array_type(&self) -> MTLArrayType {
unsafe { msg_send![self, arrayType] }
}
}
pub enum MTLStructMemberArray {}
foreign_obj_type! {
type CType = MTLStructMemberArray;
pub struct StructMemberArray;
}
impl StructMemberArrayRef {
pub fn object_at(&self, index: NSUInteger) -> Option<&StructMemberRef> {
unsafe { msg_send![self, objectAtIndexedSubscript: index] }
}
pub fn count(&self) -> NSUInteger {
unsafe { msg_send![self, count] }
}
}
/// See <https://developer.apple.com/documentation/metal/mtlstructtype>
pub enum MTLStructType {}
foreign_obj_type! {
type CType = MTLStructType;
pub struct StructType;
}
impl StructTypeRef {
pub fn members(&self) -> &StructMemberArrayRef {
unsafe { msg_send![self, members] }
}
pub fn member_from_name(&self, name: &str) -> Option<&StructMemberRef> {
let nsname = crate::nsstring_from_str(name);
unsafe { msg_send![self, memberByName: nsname] }
}
}
/// See <https://developer.apple.com/documentation/metal/mtlarraytype>
pub enum MTLArrayType {}
foreign_obj_type! {
type CType = MTLArrayType;
pub struct ArrayType;
}
impl ArrayTypeRef {
pub fn array_length(&self) -> NSUInteger {
unsafe { msg_send![self, arrayLength] }
}
pub fn stride(&self) -> NSUInteger {
unsafe { msg_send![self, stride] }
}
pub fn element_type(&self) -> MTLDataType {
unsafe { msg_send![self, elementType] }
}
pub fn element_struct_type(&self) -> MTLStructType {
unsafe { msg_send![self, elementStructType] }
}
pub fn element_array_type(&self) -> MTLArrayType {
unsafe { msg_send![self, elementArrayType] }
}
}
/// <https://developer.apple.com/documentation/metal/mtlargument>
#[deprecated(
note = "Since iOS 8.016.0, iPadOS 8.016.0, macOS 10.1113.0, Mac Catalyst 13.116.0, tvOS 9.016.0"
)]
pub enum MTLArgument {}
foreign_obj_type! {
type CType = MTLArgument;
pub struct Argument;
}
impl ArgumentRef {
pub fn name(&self) -> &str {
unsafe {
let name = msg_send![self, name];
crate::nsstring_as_str(name)
}
}
pub fn type_(&self) -> MTLArgumentType {
unsafe { msg_send![self, type] }
}
pub fn access(&self) -> MTLArgumentAccess {
unsafe { msg_send![self, access] }
}
pub fn index(&self) -> NSUInteger {
unsafe { msg_send![self, index] }
}
pub fn is_active(&self) -> bool {
unsafe { msg_send_bool![self, isActive] }
}
pub fn buffer_alignment(&self) -> NSUInteger {
unsafe { msg_send![self, bufferAlignment] }
}
pub fn buffer_data_size(&self) -> NSUInteger {
unsafe { msg_send![self, bufferDataSize] }
}
pub fn buffer_data_type(&self) -> MTLDataType {
unsafe { msg_send![self, bufferDataType] }
}
pub fn buffer_struct_type(&self) -> &StructTypeRef {
unsafe { msg_send![self, bufferStructType] }
}
pub fn threadgroup_memory_alignment(&self) -> NSUInteger {
unsafe { msg_send![self, threadgroupMemoryAlignment] }
}
pub fn threadgroup_memory_data_size(&self) -> NSUInteger {
unsafe { msg_send![self, threadgroupMemoryDataSize] }
}
pub fn texture_type(&self) -> MTLTextureType {
unsafe { msg_send![self, textureType] }
}
pub fn texture_data_type(&self) -> MTLDataType {
unsafe { msg_send![self, textureDataType] }
}
}
/// See <https://developer.apple.com/documentation/metal/mtlargumentdescriptor>
pub enum MTLArgumentDescriptor {}
foreign_obj_type! {
type CType = MTLArgumentDescriptor;
pub struct ArgumentDescriptor;
}
impl ArgumentDescriptor {
pub fn new<'a>() -> &'a ArgumentDescriptorRef {
unsafe {
let class = class!(MTLArgumentDescriptor);
msg_send![class, argumentDescriptor]
}
}
}
impl ArgumentDescriptorRef {
pub fn set_data_type(&self, ty: MTLDataType) {
unsafe { msg_send![self, setDataType: ty] }
}
pub fn set_index(&self, index: NSUInteger) {
unsafe { msg_send![self, setIndex: index] }
}
pub fn set_access(&self, access: MTLArgumentAccess) {
unsafe { msg_send![self, setAccess: access] }
}
pub fn set_array_length(&self, length: NSUInteger) {
unsafe { msg_send![self, setArrayLength: length] }
}
pub fn set_texture_type(&self, ty: MTLTextureType) {
unsafe { msg_send![self, setTextureType: ty] }
}
}