1#![allow(
2 clippy::module_name_repetitions,
3 clippy::too_many_lines,
4 clippy::type_complexity
5)]
6
7use crate::{
8 ffi,
9 util::{c_string, take_optional_string},
10 ComputePipelineState, DynamicLibrary, MetalDevice, MetalLibrary, RenderPipelineState,
11};
12use core::ffi::{c_char, c_void};
13use core::ptr;
14use std::path::Path;
15
16macro_rules! opaque_symbol_handle {
17 ($(#[$meta:meta])* pub struct $name:ident;) => {
18 $(#[$meta])*
19pub struct $name {
21 ptr: *mut c_void,
22 }
23
24 unsafe impl Send for $name {}
28 unsafe impl Sync for $name {}
29
30 impl Drop for $name {
31 fn drop(&mut self) {
32 if !self.ptr.is_null() {
33 unsafe { ffi::am_object_release(self.ptr) };
34 self.ptr = ptr::null_mut();
35 }
36 }
37 }
38
39 impl $name {
40#[must_use]
42 pub const fn as_ptr(&self) -> *mut c_void {
43 self.ptr
44 }
45
46 #[must_use]
55 pub unsafe fn from_raw(ptr: *mut c_void) -> Self {
56 Self { ptr }
57 }
58
59 #[allow(dead_code)]
60 fn wrap(ptr: *mut c_void) -> Option<Self> {
61 if ptr.is_null() {
62 None
63 } else {
64 Some(Self { ptr })
65 }
66 }
67
68#[must_use]
70 pub fn label(&self) -> Option<String> {
71 unsafe { take_optional_string(ffi::am_object_copy_label(self.ptr)) }
72 }
73 }
74 };
75}
76
77macro_rules! opaque_symbol_class {
78 ($(#[$meta:meta])* pub struct $name:ident => $objc:literal;) => {
79 opaque_symbol_handle!(
80 $(#[$meta])*
81pub struct $name;
83 );
84
85 impl $name {
86#[must_use]
88 pub fn new() -> Option<Self> {
89 Self::wrap(unsafe {
90 ffi::am_new_class_instance(concat!($objc, "\0").as_ptr().cast())
91 })
92 }
93 }
94 };
95}
96
97macro_rules! raw_value_type {
98 ($(#[$meta:meta])* pub struct $name:ident($ty:ty);) => {
99 $(#[$meta])*
100#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
102 #[repr(transparent)]
103 pub struct $name(pub $ty);
104
105 impl $name {
106#[must_use]
108 pub const fn from_raw(raw: $ty) -> Self {
109 Self(raw)
110 }
111
112#[must_use]
114 pub const fn as_raw(self) -> $ty {
115 self.0
116 }
117 }
118 };
119}
120
121macro_rules! metal_string_constant {
122 ($(#[$meta:meta])* pub fn $name:ident => $symbol:literal;) => {
123 $(#[$meta])*
124#[must_use]
126 pub fn $name() -> Option<String> {
127 unsafe {
128 take_optional_string(
129 ffi::am_copy_metal_string_constant(concat!($symbol, "\0").as_ptr().cast()),
130 )
131 }
132 }
133 };
134}
135
136unsafe fn take_device_array(ptr: *mut *mut c_void, count: usize) -> Vec<MetalDevice> {
148 if ptr.is_null() || count == 0 {
149 return Vec::new();
150 }
151
152 let slice = core::slice::from_raw_parts(ptr, count);
153 let values = slice
154 .iter()
155 .copied()
156 .map(|device| unsafe { MetalDevice::from_retained_ptr(device) })
157 .collect();
158 libc::free(ptr.cast());
159 values
160}
161
162pub type MetalCommonCounter = String;
164pub type MetalCommonCounterSet = String;
166pub type MetalDeviceNotificationName = String;
168pub type MetalAutoreleasedArgument = MetalArgument;
170pub type MetalArgumentType = MetalBindingType;
172pub type MetalAutoreleasedComputePipelineReflection = MetalComputePipelineReflection;
174pub type MetalAutoreleasedRenderPipelineReflection = MetalRenderPipelineReflection;
176pub type MetalNewLibraryCompletionHandler =
178 Box<dyn FnMut(Result<MetalLibrary, String>) + Send + 'static>;
179pub type MetalNewDynamicLibraryCompletionHandler =
181 Box<dyn FnMut(Result<DynamicLibrary, String>) + Send + 'static>;
182pub type MetalNewComputePipelineStateCompletionHandler =
184 Box<dyn FnMut(Result<ComputePipelineState, String>) + Send + 'static>;
185pub type MetalNewComputePipelineStateWithReflectionCompletionHandler = Box<
187 dyn FnMut(Result<(ComputePipelineState, MetalComputePipelineReflection), String>)
188 + Send
189 + 'static,
190>;
191pub type MetalNewRenderPipelineStateCompletionHandler =
193 Box<dyn FnMut(Result<RenderPipelineState, String>) + Send + 'static>;
194pub type MetalNewRenderPipelineStateWithReflectionCompletionHandler = Box<
196 dyn FnMut(Result<(RenderPipelineState, MetalRenderPipelineReflection), String>)
197 + Send
198 + 'static,
199>;
200pub type MetalTimestamp = u64;
202
203#[derive(Debug, Clone, Copy, Default, PartialEq)]
215pub struct MetalCoordinate2D {
216 pub x: f32,
218 pub y: f32,
220}
221
222impl MetalCoordinate2D {
223 #[must_use]
225 pub const fn new(x: f32, y: f32) -> Self {
226 Self { x, y }
227 }
228}
229
230#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
242pub struct MetalSize {
243 pub width: usize,
245 pub height: usize,
247 pub depth: usize,
249}
250
251impl MetalSize {
252 #[must_use]
254 pub const fn new(width: usize, height: usize, depth: usize) -> Self {
255 Self {
256 width,
257 height,
258 depth,
259 }
260 }
261}
262
263raw_value_type!(
264 pub struct MetalGpuAddress(u64);
275);
276
277#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
288pub struct MetalOrigin {
289 pub x: usize,
291 pub y: usize,
293 pub z: usize,
295}
296
297impl MetalOrigin {
298 #[must_use]
300 pub const fn new(x: usize, y: usize, z: usize) -> Self {
301 Self { x, y, z }
302 }
303}
304
305#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
317pub struct MetalRegion {
318 pub origin: MetalOrigin,
320 pub size: MetalSize,
322}
323
324impl MetalRegion {
325 #[must_use]
327 pub const fn new(origin: MetalOrigin, size: MetalSize) -> Self {
328 Self { origin, size }
329 }
330
331 #[must_use]
333 pub const fn new_1d(x: usize, width: usize) -> Self {
334 Self {
335 origin: MetalOrigin::new(x, 0, 0),
336 size: MetalSize::new(width, 1, 1),
337 }
338 }
339
340 #[must_use]
342 pub const fn new_2d(x: usize, y: usize, width: usize, height: usize) -> Self {
343 Self {
344 origin: MetalOrigin::new(x, y, 0),
345 size: MetalSize::new(width, height, 1),
346 }
347 }
348
349 #[must_use]
351 pub const fn new_3d(
352 x: usize,
353 y: usize,
354 z: usize,
355 width: usize,
356 height: usize,
357 depth: usize,
358 ) -> Self {
359 Self {
360 origin: MetalOrigin::new(x, y, z),
361 size: MetalSize::new(width, height, depth),
362 }
363 }
364}
365
366#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
377#[repr(transparent)]
378pub struct MetalResourceId {
379 pub value: u64,
381}
382
383impl MetalResourceId {
384 #[must_use]
386 pub const fn new(value: u64) -> Self {
387 Self { value }
388 }
389}
390
391#[derive(Debug, Clone, Copy, Default, PartialEq)]
402pub struct MetalPackedFloat3 {
403 pub x: f32,
405 pub y: f32,
407 pub z: f32,
409}
410
411impl MetalPackedFloat3 {
412 #[must_use]
414 pub const fn new(x: f32, y: f32, z: f32) -> Self {
415 Self { x, y, z }
416 }
417}
418
419#[derive(Debug, Clone, Copy, PartialEq)]
430pub struct MetalPackedFloatQuaternion {
431 pub x: f32,
433 pub y: f32,
435 pub z: f32,
437 pub w: f32,
439}
440
441impl Default for MetalPackedFloatQuaternion {
442 fn default() -> Self {
443 Self {
444 x: 0.0,
445 y: 0.0,
446 z: 0.0,
447 w: 1.0,
448 }
449 }
450}
451
452impl MetalPackedFloatQuaternion {
453 #[must_use]
455 pub const fn new(x: f32, y: f32, z: f32, w: f32) -> Self {
456 Self { x, y, z, w }
457 }
458}
459
460#[derive(Debug, Clone, Copy, Default, PartialEq)]
476pub struct MetalPackedFloat4x3 {
477 pub columns: [MetalPackedFloat3; 4],
479}
480
481impl MetalPackedFloat4x3 {
482 #[must_use]
484 pub const fn new(
485 column0: MetalPackedFloat3,
486 column1: MetalPackedFloat3,
487 column2: MetalPackedFloat3,
488 column3: MetalPackedFloat3,
489 ) -> Self {
490 Self {
491 columns: [column0, column1, column2, column3],
492 }
493 }
494}
495
496raw_value_type!(
497 pub struct MetalSparseTextureMappingMode(usize);
499);
500
501opaque_symbol_handle!(
502 pub struct MetalDeviceObserver;
504);
505
506pub type MetalDeviceObserverCallback = unsafe extern "C" fn(
508 device: *mut c_void,
509 notification_name: *const c_char,
510 user_data: *mut c_void,
511);
512
513impl MetalDeviceObserver {
514 pub fn remove(&self) {
516 unsafe { ffi::am_remove_device_observer(self.as_ptr()) };
517 }
518}
519
520#[must_use]
522pub fn copy_all_devices() -> Vec<MetalDevice> {
523 let mut count = 0;
524 let ptr = unsafe { ffi::am_copy_all_devices(&mut count) };
525 unsafe { take_device_array(ptr, count) }
526}
527
528pub unsafe fn copy_all_devices_with_observer(
538 callback: Option<MetalDeviceObserverCallback>,
539 user_data: *mut c_void,
540) -> (Vec<MetalDevice>, Option<MetalDeviceObserver>) {
541 let mut count = 0;
542 let mut observer = ptr::null_mut();
543 let ptr =
544 ffi::am_copy_all_devices_with_observer(&mut count, &mut observer, callback, user_data);
545 (
546 take_device_array(ptr, count),
547 MetalDeviceObserver::wrap(observer),
548 )
549}
550
551pub fn remove_device_observer(observer: &MetalDeviceObserver) {
553 observer.remove();
554}
555
556pub struct MetalIoCompressionContext {
558 ptr: *mut c_void,
559}
560
561impl Drop for MetalIoCompressionContext {
562 fn drop(&mut self) {
563 if !self.ptr.is_null() {
564 unsafe { ffi::am_io_flush_and_destroy_compression_context(self.ptr) };
565 self.ptr = ptr::null_mut();
566 }
567 }
568}
569
570impl MetalIoCompressionContext {
571 #[must_use]
573 pub const fn as_ptr(&self) -> *mut c_void {
574 self.ptr
575 }
576
577 #[must_use]
586 pub unsafe fn from_raw(ptr: *mut c_void) -> Self {
587 Self { ptr }
588 }
589
590 pub fn append_data(&self, data: &[u8]) {
592 unsafe {
593 ffi::am_io_compression_context_append_data(self.ptr, data.as_ptr(), data.len());
594 }
595 }
596
597 #[must_use]
599 pub fn flush_and_destroy(mut self) -> MetalIoCompressionStatus {
600 let status = unsafe { ffi::am_io_flush_and_destroy_compression_context(self.ptr) };
601 self.ptr = ptr::null_mut();
602 MetalIoCompressionStatus::from_raw(status)
603 }
604}
605
606#[must_use]
608pub fn io_compression_context_default_chunk_size() -> usize {
609 unsafe { ffi::am_io_compression_context_default_chunk_size() }
610}
611
612#[must_use]
614pub fn create_io_compression_context(
615 path: &Path,
616 method: MetalIoCompressionMethod,
617 chunk_size: Option<usize>,
618) -> Option<MetalIoCompressionContext> {
619 let path = c_string(path.to_string_lossy().as_ref()).ok()?;
620 let chunk_size = chunk_size.unwrap_or_else(io_compression_context_default_chunk_size);
621 let ptr = unsafe {
622 ffi::am_io_create_compression_context(path.as_ptr(), method.as_raw(), chunk_size)
623 };
624 if ptr.is_null() {
625 None
626 } else {
627 Some(unsafe { MetalIoCompressionContext::from_raw(ptr) })
628 }
629}
630
631metal_string_constant!(pub fn metal4_command_queue_error_domain => "MTL4CommandQueueErrorDomain";);
632metal_string_constant!(pub fn metal_binary_archive_domain => "MTLBinaryArchiveDomain";);
633metal_string_constant!(pub fn metal_capture_error_domain => "MTLCaptureErrorDomain";);
634metal_string_constant!(pub fn metal_command_buffer_encoder_info_error_key => "MTLCommandBufferEncoderInfoErrorKey";);
635metal_string_constant!(pub fn metal_command_buffer_error_domain => "MTLCommandBufferErrorDomain";);
636metal_string_constant!(pub fn metal_common_counter_clipper_invocations => "MTLCommonCounterClipperInvocations";);
637metal_string_constant!(pub fn metal_common_counter_clipper_primitives_out => "MTLCommonCounterClipperPrimitivesOut";);
638metal_string_constant!(pub fn metal_common_counter_compute_kernel_invocations => "MTLCommonCounterComputeKernelInvocations";);
639metal_string_constant!(pub fn metal_common_counter_fragment_cycles => "MTLCommonCounterFragmentCycles";);
640metal_string_constant!(pub fn metal_common_counter_fragment_invocations => "MTLCommonCounterFragmentInvocations";);
641metal_string_constant!(pub fn metal_common_counter_fragments_passed => "MTLCommonCounterFragmentsPassed";);
642metal_string_constant!(pub fn metal_common_counter_post_tessellation_vertex_cycles => "MTLCommonCounterPostTessellationVertexCycles";);
643metal_string_constant!(pub fn metal_common_counter_post_tessellation_vertex_invocations => "MTLCommonCounterPostTessellationVertexInvocations";);
644metal_string_constant!(pub fn metal_common_counter_render_target_write_cycles => "MTLCommonCounterRenderTargetWriteCycles";);
645metal_string_constant!(pub fn metal_common_counter_set_stage_utilization => "MTLCommonCounterSetStageUtilization";);
646metal_string_constant!(pub fn metal_common_counter_set_statistic => "MTLCommonCounterSetStatistic";);
647metal_string_constant!(pub fn metal_common_counter_set_timestamp => "MTLCommonCounterSetTimestamp";);
648metal_string_constant!(pub fn metal_common_counter_tessellation_cycles => "MTLCommonCounterTessellationCycles";);
649metal_string_constant!(pub fn metal_common_counter_tessellation_input_patches => "MTLCommonCounterTessellationInputPatches";);
650metal_string_constant!(pub fn metal_common_counter_timestamp => "MTLCommonCounterTimestamp";);
651metal_string_constant!(pub fn metal_common_counter_total_cycles => "MTLCommonCounterTotalCycles";);
652metal_string_constant!(pub fn metal_common_counter_vertex_cycles => "MTLCommonCounterVertexCycles";);
653metal_string_constant!(pub fn metal_common_counter_vertex_invocations => "MTLCommonCounterVertexInvocations";);
654metal_string_constant!(pub fn metal_counter_error_domain => "MTLCounterErrorDomain";);
655metal_string_constant!(pub fn metal_device_removal_requested_notification => "MTLDeviceRemovalRequestedNotification";);
656metal_string_constant!(pub fn metal_device_was_added_notification => "MTLDeviceWasAddedNotification";);
657metal_string_constant!(pub fn metal_device_was_removed_notification => "MTLDeviceWasRemovedNotification";);
658metal_string_constant!(pub fn metal_dynamic_library_domain => "MTLDynamicLibraryDomain";);
659metal_string_constant!(pub fn metal_io_error_domain => "MTLIOErrorDomain";);
660metal_string_constant!(pub fn metal_library_error_domain => "MTLLibraryErrorDomain";);
661metal_string_constant!(pub fn metal_log_state_error_domain => "MTLLogStateErrorDomain";);
662metal_string_constant!(pub fn metal_tensor_domain => "MTLTensorDomain";);
663
664raw_value_type!(
665 pub struct Metal4AlphaToCoverageState(usize);
667);
668raw_value_type!(
669 pub struct Metal4AlphaToOneState(usize);
671);
672raw_value_type!(
673 pub struct Metal4BinaryFunctionOptions(usize);
675);
676raw_value_type!(
677 pub struct Metal4BlendState(usize);
679);
680raw_value_type!(
681 pub struct Metal4CommandQueueError(usize);
683);
684raw_value_type!(
685 pub struct Metal4CompilerTaskStatus(usize);
687);
688raw_value_type!(
689 pub struct Metal4CounterHeapType(usize);
691);
692raw_value_type!(
693 pub struct Metal4IndirectCommandBufferSupportState(usize);
695);
696raw_value_type!(
697 pub struct Metal4LogicalToPhysicalColorAttachmentMappingState(usize);
699);
700raw_value_type!(
701 pub struct Metal4PipelineDataSetSerializerConfiguration(usize);
703);
704raw_value_type!(
705 pub struct Metal4RenderEncoderOptions(usize);
707);
708raw_value_type!(
709 pub struct Metal4ShaderReflection(usize);
711);
712raw_value_type!(
713 pub struct Metal4TimestampGranularity(usize);
715);
716raw_value_type!(
717 pub struct Metal4VisibilityOptions(usize);
719);
720raw_value_type!(
721 pub struct MetalAccelerationStructureInstanceDescriptorType(usize);
723);
724raw_value_type!(
725 pub struct MetalAccelerationStructureInstanceOptions(usize);
727);
728raw_value_type!(
729 pub struct MetalAccelerationStructureRefitOptions(usize);
731);
732raw_value_type!(
733 pub struct MetalAccelerationStructureUsage(usize);
735);
736raw_value_type!(
737 pub struct MetalArgumentAccess(usize);
739);
740raw_value_type!(
741 pub struct MetalAttributeFormat(usize);
743);
744raw_value_type!(
745 pub struct MetalBarrierScope(usize);
747);
748raw_value_type!(
749 pub struct MetalBinaryArchiveError(usize);
751);
752raw_value_type!(
753 pub struct MetalBindingType(usize);
755);
756raw_value_type!(
757 pub struct MetalBlitOption(usize);
759);
760raw_value_type!(
761 pub struct MetalBufferSparseTier(usize);
763);
764raw_value_type!(
765 pub struct MetalCaptureError(usize);
767);
768raw_value_type!(
769 pub struct MetalCommandBufferError(usize);
771);
772raw_value_type!(
773 pub struct MetalCommandBufferErrorOption(usize);
775);
776raw_value_type!(
777 pub struct MetalCommandEncoderErrorState(usize);
779);
780raw_value_type!(
781 pub struct MetalCompileSymbolVisibility(usize);
783);
784raw_value_type!(
785 pub struct MetalCounterSampleBufferError(usize);
787);
788raw_value_type!(
789 pub struct MetalCullMode(usize);
791);
792raw_value_type!(
793 pub struct MetalCurveBasis(usize);
795);
796raw_value_type!(
797 pub struct MetalCurveEndCaps(usize);
799);
800raw_value_type!(
801 pub struct MetalCurveType(usize);
803);
804raw_value_type!(
805 pub struct MetalDataType(usize);
807);
808raw_value_type!(
809 pub struct MetalDepthClipMode(usize);
811);
812raw_value_type!(
813 pub struct MetalDeviceLocation(usize);
815);
816raw_value_type!(
817 pub struct MetalDispatchType(usize);
819);
820raw_value_type!(
821 pub struct MetalDynamicLibraryError(usize);
823);
824raw_value_type!(
825 pub struct MetalFeatureSet(usize);
827);
828raw_value_type!(
829 pub struct MetalFunctionLogType(usize);
831);
832raw_value_type!(
833 pub struct MetalFunctionOptions(usize);
835);
836raw_value_type!(
837 pub struct MetalFunctionType(usize);
839);
840raw_value_type!(
841 pub struct MetalHeapType(usize);
843);
844raw_value_type!(
845 pub struct MetalIndexType(usize);
847);
848raw_value_type!(
849 pub struct MetalIoCommandQueueType(usize);
851);
852raw_value_type!(
853 pub struct MetalIoCompressionMethod(usize);
855);
856raw_value_type!(
857 pub struct MetalIoCompressionStatus(usize);
859);
860raw_value_type!(
861 pub struct MetalIoPriority(usize);
863);
864raw_value_type!(
865 pub struct MetalIoStatus(usize);
867);
868raw_value_type!(
869 pub struct MetalLanguageVersion(usize);
871);
872raw_value_type!(
873 pub struct MetalLibraryError(usize);
875);
876raw_value_type!(
877 pub struct MetalLibraryOptimizationLevel(usize);
879);
880raw_value_type!(
881 pub struct MetalLibraryType(usize);
883);
884raw_value_type!(
885 pub struct MetalLogStateError(usize);
887);
888raw_value_type!(
889 pub struct MetalMathFloatingPointFunctions(usize);
891);
892raw_value_type!(
893 pub struct MetalMathMode(usize);
895);
896raw_value_type!(
897 pub struct MetalMatrixLayout(usize);
899);
900raw_value_type!(
901 pub struct MetalMotionBorderMode(usize);
903);
904raw_value_type!(
905 pub struct MetalMultisampleDepthResolveFilter(usize);
907);
908raw_value_type!(
909 pub struct MetalMultisampleStencilResolveFilter(usize);
911);
912raw_value_type!(
913 pub struct MetalMutability(usize);
915);
916raw_value_type!(
917 pub struct MetalPatchType(usize);
919);
920raw_value_type!(
921 pub struct MetalPipelineOption(usize);
923);
924raw_value_type!(
925 pub struct MetalPrimitiveTopologyClass(usize);
927);
928raw_value_type!(
929 pub struct MetalReadWriteTextureTier(usize);
931);
932raw_value_type!(
933 pub struct MetalRenderStages(usize);
935);
936raw_value_type!(
937 pub struct MetalResourceUsage(usize);
939);
940raw_value_type!(
941 pub struct MetalShaderValidation(usize);
943);
944raw_value_type!(
945 pub struct MetalSparsePageSize(usize);
947);
948raw_value_type!(
949 pub struct MetalSparseTextureRegionAlignmentMode(usize);
951);
952raw_value_type!(
953 pub struct MetalStages(usize);
955);
956raw_value_type!(
957 pub struct MetalStepFunction(usize);
959);
960raw_value_type!(
961 pub struct MetalStitchedLibraryOptions(usize);
963);
964raw_value_type!(
965 pub struct MetalStoreActionOptions(usize);
967);
968raw_value_type!(
969 pub struct MetalTensorDataType(usize);
971);
972raw_value_type!(
973 pub struct MetalTensorError(usize);
975);
976raw_value_type!(
977 pub struct MetalTensorUsage(usize);
979);
980raw_value_type!(
981 pub struct MetalTessellationControlPointIndexType(usize);
983);
984raw_value_type!(
985 pub struct MetalTessellationFactorFormat(usize);
987);
988raw_value_type!(
989 pub struct MetalTessellationFactorStepFunction(usize);
991);
992raw_value_type!(
993 pub struct MetalTessellationPartitionMode(usize);
995);
996raw_value_type!(
997 pub struct MetalTextureCompressionType(usize);
999);
1000raw_value_type!(
1001 pub struct MetalTextureSparseTier(usize);
1003);
1004raw_value_type!(
1005 pub struct MetalTextureSwizzle(usize);
1007);
1008raw_value_type!(
1009 pub struct MetalTransformType(usize);
1011);
1012raw_value_type!(
1013 pub struct MetalTriangleFillMode(usize);
1015);
1016raw_value_type!(
1017 pub struct MetalVertexFormat(usize);
1019);
1020raw_value_type!(
1021 pub struct MetalVertexStepFunction(usize);
1023);
1024raw_value_type!(
1025 pub struct MetalVisibilityResultMode(usize);
1027);
1028raw_value_type!(
1029 pub struct MetalVisibilityResultType(usize);
1031);
1032raw_value_type!(
1033 pub struct MetalWinding(usize);
1035);
1036opaque_symbol_handle!(
1037 pub struct Metal4Archive;
1039);
1040opaque_symbol_handle!(
1041 pub struct Metal4ArgumentTable;
1043);
1044opaque_symbol_handle!(
1045 pub struct Metal4BinaryFunction;
1047);
1048opaque_symbol_handle!(
1049 pub struct Metal4CommandAllocator;
1051);
1052opaque_symbol_handle!(
1053 pub struct Metal4CommandBuffer;
1055);
1056opaque_symbol_handle!(
1057 pub struct Metal4CommandEncoder;
1059);
1060opaque_symbol_handle!(
1061 pub struct Metal4CommandQueue;
1063);
1064opaque_symbol_handle!(
1065 pub struct Metal4CommitFeedback;
1067);
1068opaque_symbol_handle!(
1069 pub struct Metal4Compiler;
1071);
1072opaque_symbol_handle!(
1073 pub struct Metal4CompilerTask;
1075);
1076opaque_symbol_handle!(
1077 pub struct Metal4ComputeCommandEncoder;
1079);
1080opaque_symbol_handle!(
1081 pub struct Metal4CounterHeap;
1083);
1084opaque_symbol_handle!(
1085 pub struct Metal4FxFrameInterpolator;
1087);
1088opaque_symbol_handle!(
1089 pub struct Metal4FxSpatialScaler;
1091);
1092opaque_symbol_handle!(
1093 pub struct Metal4FxTemporalDenoisedScaler;
1095);
1096opaque_symbol_handle!(
1097 pub struct Metal4FxTemporalScaler;
1099);
1100opaque_symbol_handle!(
1101 pub struct Metal4MachineLearningCommandEncoder;
1103);
1104opaque_symbol_handle!(
1105 pub struct Metal4MachineLearningPipelineState;
1107);
1108opaque_symbol_handle!(
1109 pub struct Metal4PipelineDataSetSerializer;
1111);
1112opaque_symbol_handle!(
1113 pub struct Metal4RenderCommandEncoder;
1115);
1116opaque_symbol_handle!(
1117 pub struct MetalAccelerationStructureCommandEncoder;
1119);
1120opaque_symbol_handle!(
1121 pub struct MetalAllocation;
1123);
1124opaque_symbol_handle!(
1125 pub struct MetalBinding;
1127);
1128opaque_symbol_handle!(
1129 pub struct MetalBufferBinding;
1131);
1132opaque_symbol_handle!(
1133 pub struct MetalCommandBufferEncoderInfo;
1135);
1136opaque_symbol_handle!(
1137 pub struct MetalCommandEncoder;
1139);
1140opaque_symbol_handle!(
1141 pub struct MetalCounter;
1143);
1144opaque_symbol_handle!(
1145 pub struct MetalDrawable;
1147);
1148opaque_symbol_handle!(
1149 pub struct MetalFunctionHandle;
1151);
1152opaque_symbol_handle!(
1153 pub struct MetalFunctionLog;
1155);
1156opaque_symbol_handle!(
1157 pub struct MetalFunctionLogDebugLocation;
1159);
1160opaque_symbol_handle!(
1161 pub struct MetalFunctionStitchingAttribute;
1163);
1164opaque_symbol_handle!(
1165 pub struct MetalFunctionStitchingNode;
1167);
1168opaque_symbol_handle!(
1169 pub struct MetalFxFrameInterpolator;
1171);
1172opaque_symbol_handle!(
1173 pub struct MetalFxFrameInterpolatorBase;
1175);
1176opaque_symbol_handle!(
1177 pub struct MetalFxSpatialScalerBase;
1179);
1180opaque_symbol_handle!(
1181 pub struct MetalFxTemporalDenoisedScaler;
1183);
1184opaque_symbol_handle!(
1185 pub struct MetalFxTemporalDenoisedScalerBase;
1187);
1188opaque_symbol_handle!(
1189 pub struct MetalFxTemporalScalerBase;
1191);
1192opaque_symbol_handle!(
1193 pub struct MetalIndirectComputeCommand;
1195);
1196opaque_symbol_handle!(
1197 pub struct MetalIndirectComputeCommandEncoder;
1199);
1200opaque_symbol_handle!(
1201 pub struct MetalIndirectRenderCommand;
1203);
1204opaque_symbol_handle!(
1205 pub struct MetalIndirectRenderCommandEncoder;
1207);
1208opaque_symbol_handle!(
1209 pub struct MetalIoCommandBuffer;
1211);
1212opaque_symbol_handle!(
1213 pub struct MetalIoCommandQueue;
1215);
1216opaque_symbol_handle!(
1217 pub struct MetalIoFileHandle;
1219);
1220opaque_symbol_handle!(
1221 pub struct MetalIoScratchBuffer;
1223);
1224opaque_symbol_handle!(
1225 pub struct MetalIoScratchBufferAllocator;
1227);
1228opaque_symbol_handle!(
1229 pub struct MetalLogContainer;
1231);
1232opaque_symbol_handle!(
1233 pub struct MetalObjectPayloadBinding;
1235);
1236opaque_symbol_handle!(
1237 pub struct MetalParallelRenderCommandEncoder;
1239);
1240opaque_symbol_handle!(
1241 pub struct MetalRasterizationRateMap;
1243);
1244opaque_symbol_handle!(
1245 pub struct MetalResource;
1247);
1248opaque_symbol_handle!(
1249 pub struct MetalResourceStateCommandEncoder;
1251);
1252opaque_symbol_handle!(
1253 pub struct MetalResourceViewPool;
1255);
1256opaque_symbol_handle!(
1257 pub struct MetalTensor;
1259);
1260opaque_symbol_handle!(
1261 pub struct MetalTensorBinding;
1263);
1264opaque_symbol_handle!(
1265 pub struct MetalTextureBinding;
1267);
1268opaque_symbol_handle!(
1269 pub struct MetalTextureViewPool;
1271);
1272opaque_symbol_handle!(
1273 pub struct MetalThreadgroupBinding;
1275);
1276opaque_symbol_class!(pub struct Metal4AccelerationStructureBoundingBoxGeometryDescriptor => "MTL4AccelerationStructureBoundingBoxGeometryDescriptor";);
1277opaque_symbol_class!(pub struct Metal4AccelerationStructureCurveGeometryDescriptor => "MTL4AccelerationStructureCurveGeometryDescriptor";);
1278opaque_symbol_class!(pub struct Metal4AccelerationStructureDescriptor => "MTL4AccelerationStructureDescriptor";);
1279opaque_symbol_class!(pub struct Metal4AccelerationStructureGeometryDescriptor => "MTL4AccelerationStructureGeometryDescriptor";);
1280opaque_symbol_class!(pub struct Metal4AccelerationStructureMotionBoundingBoxGeometryDescriptor => "MTL4AccelerationStructureMotionBoundingBoxGeometryDescriptor";);
1281opaque_symbol_class!(pub struct Metal4AccelerationStructureMotionCurveGeometryDescriptor => "MTL4AccelerationStructureMotionCurveGeometryDescriptor";);
1282opaque_symbol_class!(pub struct Metal4AccelerationStructureMotionTriangleGeometryDescriptor => "MTL4AccelerationStructureMotionTriangleGeometryDescriptor";);
1283opaque_symbol_class!(pub struct Metal4AccelerationStructureTriangleGeometryDescriptor => "MTL4AccelerationStructureTriangleGeometryDescriptor";);
1284opaque_symbol_class!(pub struct Metal4ArgumentTableDescriptor => "MTL4ArgumentTableDescriptor";);
1285opaque_symbol_class!(pub struct Metal4BinaryFunctionDescriptor => "MTL4BinaryFunctionDescriptor";);
1286opaque_symbol_class!(pub struct Metal4CommandAllocatorDescriptor => "MTL4CommandAllocatorDescriptor";);
1287opaque_symbol_class!(pub struct Metal4CommandBufferOptions => "MTL4CommandBufferOptions";);
1288opaque_symbol_class!(pub struct Metal4CommandQueueDescriptor => "MTL4CommandQueueDescriptor";);
1289opaque_symbol_class!(pub struct Metal4CommitOptions => "MTL4CommitOptions";);
1290opaque_symbol_class!(pub struct Metal4CompilerDescriptor => "MTL4CompilerDescriptor";);
1291opaque_symbol_class!(pub struct Metal4CompilerTaskOptions => "MTL4CompilerTaskOptions";);
1292opaque_symbol_class!(pub struct Metal4ComputePipelineDescriptor => "MTL4ComputePipelineDescriptor";);
1293opaque_symbol_class!(pub struct Metal4CounterHeapDescriptor => "MTL4CounterHeapDescriptor";);
1294opaque_symbol_class!(pub struct Metal4FunctionDescriptor => "MTL4FunctionDescriptor";);
1295opaque_symbol_class!(pub struct Metal4IndirectInstanceAccelerationStructureDescriptor => "MTL4IndirectInstanceAccelerationStructureDescriptor";);
1296opaque_symbol_class!(pub struct Metal4InstanceAccelerationStructureDescriptor => "MTL4InstanceAccelerationStructureDescriptor";);
1297opaque_symbol_class!(pub struct Metal4LibraryDescriptor => "MTL4LibraryDescriptor";);
1298opaque_symbol_class!(pub struct Metal4LibraryFunctionDescriptor => "MTL4LibraryFunctionDescriptor";);
1299opaque_symbol_class!(pub struct Metal4MachineLearningPipelineDescriptor => "MTL4MachineLearningPipelineDescriptor";);
1300opaque_symbol_class!(pub struct Metal4MachineLearningPipelineReflection => "MTL4MachineLearningPipelineReflection";);
1301opaque_symbol_class!(pub struct Metal4MeshRenderPipelineDescriptor => "MTL4MeshRenderPipelineDescriptor";);
1302opaque_symbol_class!(pub struct Metal4PipelineDataSetSerializerDescriptor => "MTL4PipelineDataSetSerializerDescriptor";);
1303opaque_symbol_class!(pub struct Metal4PipelineDescriptor => "MTL4PipelineDescriptor";);
1304opaque_symbol_class!(pub struct Metal4PipelineOptions => "MTL4PipelineOptions";);
1305opaque_symbol_class!(pub struct Metal4PipelineStageDynamicLinkingDescriptor => "MTL4PipelineStageDynamicLinkingDescriptor";);
1306opaque_symbol_class!(pub struct Metal4PrimitiveAccelerationStructureDescriptor => "MTL4PrimitiveAccelerationStructureDescriptor";);
1307opaque_symbol_class!(pub struct Metal4RenderPassDescriptor => "MTL4RenderPassDescriptor";);
1308opaque_symbol_class!(pub struct Metal4RenderPipelineBinaryFunctionsDescriptor => "MTL4RenderPipelineBinaryFunctionsDescriptor";);
1309opaque_symbol_class!(pub struct Metal4RenderPipelineColorAttachmentDescriptor => "MTL4RenderPipelineColorAttachmentDescriptor";);
1310opaque_symbol_class!(pub struct Metal4RenderPipelineColorAttachmentDescriptorArray => "MTL4RenderPipelineColorAttachmentDescriptorArray";);
1311opaque_symbol_class!(pub struct Metal4RenderPipelineDescriptor => "MTL4RenderPipelineDescriptor";);
1312opaque_symbol_class!(pub struct Metal4RenderPipelineDynamicLinkingDescriptor => "MTL4RenderPipelineDynamicLinkingDescriptor";);
1313opaque_symbol_class!(pub struct Metal4SpecializedFunctionDescriptor => "MTL4SpecializedFunctionDescriptor";);
1314opaque_symbol_class!(pub struct Metal4StaticLinkingDescriptor => "MTL4StaticLinkingDescriptor";);
1315opaque_symbol_class!(pub struct Metal4StitchedFunctionDescriptor => "MTL4StitchedFunctionDescriptor";);
1316opaque_symbol_class!(pub struct Metal4TileRenderPipelineDescriptor => "MTL4TileRenderPipelineDescriptor";);
1317opaque_symbol_class!(pub struct MetalAccelerationStructureBoundingBoxGeometryDescriptor => "MTLAccelerationStructureBoundingBoxGeometryDescriptor";);
1318opaque_symbol_class!(pub struct MetalAccelerationStructureCurveGeometryDescriptor => "MTLAccelerationStructureCurveGeometryDescriptor";);
1319opaque_symbol_class!(pub struct MetalAccelerationStructureDescriptor => "MTLAccelerationStructureDescriptor";);
1320opaque_symbol_class!(pub struct MetalAccelerationStructureGeometryDescriptor => "MTLAccelerationStructureGeometryDescriptor";);
1321opaque_symbol_class!(pub struct MetalAccelerationStructureMotionBoundingBoxGeometryDescriptor => "MTLAccelerationStructureMotionBoundingBoxGeometryDescriptor";);
1322opaque_symbol_class!(pub struct MetalAccelerationStructureMotionCurveGeometryDescriptor => "MTLAccelerationStructureMotionCurveGeometryDescriptor";);
1323opaque_symbol_class!(pub struct MetalAccelerationStructureMotionTriangleGeometryDescriptor => "MTLAccelerationStructureMotionTriangleGeometryDescriptor";);
1324opaque_symbol_class!(pub struct MetalAccelerationStructurePassDescriptor => "MTLAccelerationStructurePassDescriptor";);
1325opaque_symbol_class!(pub struct MetalAccelerationStructurePassSampleBufferAttachmentDescriptor => "MTLAccelerationStructurePassSampleBufferAttachmentDescriptor";);
1326opaque_symbol_class!(pub struct MetalAccelerationStructurePassSampleBufferAttachmentDescriptorArray => "MTLAccelerationStructurePassSampleBufferAttachmentDescriptorArray";);
1327opaque_symbol_class!(pub struct MetalAccelerationStructureTriangleGeometryDescriptor => "MTLAccelerationStructureTriangleGeometryDescriptor";);
1328opaque_symbol_class!(pub struct MetalArchitecture => "MTLArchitecture";);
1329opaque_symbol_class!(pub struct MetalArgument => "MTLArgument";);
1330opaque_symbol_class!(pub struct MetalArrayType => "MTLArrayType";);
1331opaque_symbol_class!(pub struct MetalAttribute => "MTLAttribute";);
1332opaque_symbol_class!(pub struct MetalAttributeDescriptor => "MTLAttributeDescriptor";);
1333opaque_symbol_class!(pub struct MetalAttributeDescriptorArray => "MTLAttributeDescriptorArray";);
1334opaque_symbol_class!(pub struct MetalBinaryArchiveDescriptor => "MTLBinaryArchiveDescriptor";);
1335opaque_symbol_class!(pub struct MetalBlitPassDescriptor => "MTLBlitPassDescriptor";);
1336opaque_symbol_class!(pub struct MetalBlitPassSampleBufferAttachmentDescriptor => "MTLBlitPassSampleBufferAttachmentDescriptor";);
1337opaque_symbol_class!(pub struct MetalBlitPassSampleBufferAttachmentDescriptorArray => "MTLBlitPassSampleBufferAttachmentDescriptorArray";);
1338opaque_symbol_class!(pub struct MetalBufferLayoutDescriptor => "MTLBufferLayoutDescriptor";);
1339opaque_symbol_class!(pub struct MetalBufferLayoutDescriptorArray => "MTLBufferLayoutDescriptorArray";);
1340opaque_symbol_class!(
1341 pub struct MetalCaptureDescriptor => "MTLCaptureDescriptor";
1343);
1344opaque_symbol_class!(pub struct MetalCommandBufferDescriptor => "MTLCommandBufferDescriptor";);
1345opaque_symbol_class!(pub struct MetalCommandQueueDescriptor => "MTLCommandQueueDescriptor";);
1346opaque_symbol_class!(pub struct MetalCompileOptions => "MTLCompileOptions";);
1347opaque_symbol_class!(pub struct MetalComputePassDescriptor => "MTLComputePassDescriptor";);
1348opaque_symbol_class!(pub struct MetalComputePassSampleBufferAttachmentDescriptor => "MTLComputePassSampleBufferAttachmentDescriptor";);
1349opaque_symbol_class!(pub struct MetalComputePassSampleBufferAttachmentDescriptorArray => "MTLComputePassSampleBufferAttachmentDescriptorArray";);
1350opaque_symbol_class!(pub struct MetalComputePipelineReflection => "MTLComputePipelineReflection";);
1351opaque_symbol_class!(pub struct MetalCounterSampleBufferDescriptor => "MTLCounterSampleBufferDescriptor";);
1352opaque_symbol_class!(pub struct MetalFunctionConstant => "MTLFunctionConstant";);
1353opaque_symbol_class!(pub struct MetalFunctionConstantValues => "MTLFunctionConstantValues";);
1354opaque_symbol_class!(pub struct MetalFunctionDescriptor => "MTLFunctionDescriptor";);
1355opaque_symbol_class!(pub struct MetalFunctionReflection => "MTLFunctionReflection";);
1356opaque_symbol_class!(pub struct MetalFunctionStitchingAttributeAlwaysInline => "MTLFunctionStitchingAttributeAlwaysInline";);
1357opaque_symbol_class!(pub struct MetalFunctionStitchingFunctionNode => "MTLFunctionStitchingFunctionNode";);
1358opaque_symbol_class!(pub struct MetalFunctionStitchingGraph => "MTLFunctionStitchingGraph";);
1359opaque_symbol_class!(pub struct MetalFunctionStitchingInputNode => "MTLFunctionStitchingInputNode";);
1360opaque_symbol_class!(pub struct MetalFxFrameInterpolatorDescriptor => "MTLFXFrameInterpolatorDescriptor";);
1361opaque_symbol_class!(pub struct MetalFxTemporalDenoisedScalerDescriptor => "MTLFXTemporalDenoisedScalerDescriptor";);
1362opaque_symbol_class!(pub struct MetalHeapDescriptor => "MTLHeapDescriptor";);
1363opaque_symbol_class!(pub struct MetalIndirectCommandBufferDescriptor => "MTLIndirectCommandBufferDescriptor";);
1364opaque_symbol_class!(pub struct MetalIndirectInstanceAccelerationStructureDescriptor => "MTLIndirectInstanceAccelerationStructureDescriptor";);
1365opaque_symbol_class!(pub struct MetalInstanceAccelerationStructureDescriptor => "MTLInstanceAccelerationStructureDescriptor";);
1366opaque_symbol_class!(pub struct MetalIntersectionFunctionDescriptor => "MTLIntersectionFunctionDescriptor";);
1367opaque_symbol_class!(pub struct MetalIntersectionFunctionTableDescriptor => "MTLIntersectionFunctionTableDescriptor";);
1368opaque_symbol_class!(pub struct MetalIoCommandQueueDescriptor => "MTLIOCommandQueueDescriptor";);
1369opaque_symbol_class!(pub struct MetalLinkedFunctions => "MTLLinkedFunctions";);
1370opaque_symbol_class!(pub struct MetalLogStateDescriptor => "MTLLogStateDescriptor";);
1371opaque_symbol_class!(pub struct MetalLogicalToPhysicalColorAttachmentMap => "MTLLogicalToPhysicalColorAttachmentMap";);
1372opaque_symbol_class!(pub struct MetalMeshRenderPipelineDescriptor => "MTLMeshRenderPipelineDescriptor";);
1373opaque_symbol_class!(pub struct MetalMotionKeyframeData => "MTLMotionKeyframeData";);
1374opaque_symbol_class!(pub struct MetalPipelineBufferDescriptor => "MTLPipelineBufferDescriptor";);
1375opaque_symbol_class!(pub struct MetalPipelineBufferDescriptorArray => "MTLPipelineBufferDescriptorArray";);
1376opaque_symbol_class!(pub struct MetalPointerType => "MTLPointerType";);
1377opaque_symbol_class!(pub struct MetalPrimitiveAccelerationStructureDescriptor => "MTLPrimitiveAccelerationStructureDescriptor";);
1378opaque_symbol_class!(pub struct MetalRasterizationRateLayerArray => "MTLRasterizationRateLayerArray";);
1379opaque_symbol_class!(pub struct MetalRasterizationRateLayerDescriptor => "MTLRasterizationRateLayerDescriptor";);
1380opaque_symbol_class!(pub struct MetalRasterizationRateMapDescriptor => "MTLRasterizationRateMapDescriptor";);
1381opaque_symbol_class!(pub struct MetalRasterizationRateSampleArray => "MTLRasterizationRateSampleArray";);
1382opaque_symbol_class!(pub struct MetalRenderPassAttachmentDescriptor => "MTLRenderPassAttachmentDescriptor";);
1383opaque_symbol_class!(pub struct MetalRenderPassColorAttachmentDescriptor => "MTLRenderPassColorAttachmentDescriptor";);
1384opaque_symbol_class!(pub struct MetalRenderPassColorAttachmentDescriptorArray => "MTLRenderPassColorAttachmentDescriptorArray";);
1385opaque_symbol_class!(pub struct MetalRenderPassDepthAttachmentDescriptor => "MTLRenderPassDepthAttachmentDescriptor";);
1386opaque_symbol_class!(pub struct MetalRenderPassDescriptor => "MTLRenderPassDescriptor";);
1387opaque_symbol_class!(pub struct MetalRenderPassSampleBufferAttachmentDescriptor => "MTLRenderPassSampleBufferAttachmentDescriptor";);
1388opaque_symbol_class!(pub struct MetalRenderPassSampleBufferAttachmentDescriptorArray => "MTLRenderPassSampleBufferAttachmentDescriptorArray";);
1389opaque_symbol_class!(pub struct MetalRenderPassStencilAttachmentDescriptor => "MTLRenderPassStencilAttachmentDescriptor";);
1390opaque_symbol_class!(pub struct MetalRenderPipelineColorAttachmentDescriptorArray => "MTLRenderPipelineColorAttachmentDescriptorArray";);
1391opaque_symbol_class!(pub struct MetalRenderPipelineFunctionsDescriptor => "MTLRenderPipelineFunctionsDescriptor";);
1392opaque_symbol_class!(pub struct MetalRenderPipelineReflection => "MTLRenderPipelineReflection";);
1393opaque_symbol_class!(pub struct MetalResidencySetDescriptor => "MTLResidencySetDescriptor";);
1394opaque_symbol_class!(pub struct MetalResourceStatePassDescriptor => "MTLResourceStatePassDescriptor";);
1395opaque_symbol_class!(pub struct MetalResourceStatePassSampleBufferAttachmentDescriptor => "MTLResourceStatePassSampleBufferAttachmentDescriptor";);
1396opaque_symbol_class!(pub struct MetalResourceStatePassSampleBufferAttachmentDescriptorArray => "MTLResourceStatePassSampleBufferAttachmentDescriptorArray";);
1397opaque_symbol_class!(pub struct MetalResourceViewPoolDescriptor => "MTLResourceViewPoolDescriptor";);
1398opaque_symbol_class!(pub struct MetalSharedEventHandle => "MTLSharedEventHandle";);
1399opaque_symbol_class!(pub struct MetalSharedEventListener => "MTLSharedEventListener";);
1400opaque_symbol_class!(pub struct MetalSharedTextureHandle => "MTLSharedTextureHandle";);
1401opaque_symbol_class!(pub struct MetalStageInputOutputDescriptor => "MTLStageInputOutputDescriptor";);
1402opaque_symbol_class!(pub struct MetalStitchedLibraryDescriptor => "MTLStitchedLibraryDescriptor";);
1403opaque_symbol_class!(pub struct MetalStructMember => "MTLStructMember";);
1404opaque_symbol_class!(pub struct MetalStructType => "MTLStructType";);
1405opaque_symbol_class!(pub struct MetalTensorDescriptor => "MTLTensorDescriptor";);
1406opaque_symbol_class!(pub struct MetalTensorExtents => "MTLTensorExtents";);
1407opaque_symbol_class!(pub struct MetalTensorReferenceType => "MTLTensorReferenceType";);
1408opaque_symbol_class!(pub struct MetalTextureReferenceType => "MTLTextureReferenceType";);
1409opaque_symbol_class!(pub struct MetalTextureViewDescriptor => "MTLTextureViewDescriptor";);
1410opaque_symbol_class!(pub struct MetalTileRenderPipelineColorAttachmentDescriptorArray => "MTLTileRenderPipelineColorAttachmentDescriptorArray";);
1411opaque_symbol_class!(pub struct MetalType => "MTLType";);
1412opaque_symbol_class!(pub struct MetalVertexAttribute => "MTLVertexAttribute";);
1413opaque_symbol_class!(pub struct MetalVertexAttributeDescriptor => "MTLVertexAttributeDescriptor";);
1414opaque_symbol_class!(pub struct MetalVertexAttributeDescriptorArray => "MTLVertexAttributeDescriptorArray";);
1415opaque_symbol_class!(pub struct MetalVertexBufferLayoutDescriptor => "MTLVertexBufferLayoutDescriptor";);
1416opaque_symbol_class!(pub struct MetalVertexBufferLayoutDescriptorArray => "MTLVertexBufferLayoutDescriptorArray";);
1417opaque_symbol_class!(pub struct MetalVertexDescriptor => "MTLVertexDescriptor";);
1418opaque_symbol_class!(pub struct MetalVisibleFunctionTableDescriptor => "MTLVisibleFunctionTableDescriptor";);