Share via


IMTLDevice Interface

Definition

System protocol for interacting with a single graphics device.

[Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V131) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V132) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V17) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V133) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V18) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V131) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areBarycentricCoordsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="BarycentricCoordsSupported", PropertyType=typeof(System.Boolean), Selector="barycentricCoordsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")]
public interface IMTLDevice : IDisposable, ObjCRuntime.INativeObject
[Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V131) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V132) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V17) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V133) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V18) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V131) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areBarycentricCoordsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="BarycentricCoordsSupported", PropertyType=typeof(System.Boolean), Selector="barycentricCoordsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maximumConcurrentCompilationTaskCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaximumConcurrentCompilationTaskCount", PropertyType=typeof(System.UIntPtr), Selector="maximumConcurrentCompilationTaskCount")]
public interface IMTLDevice : IDisposable, ObjCRuntime.INativeObject
[Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areBarycentricCoordsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="BarycentricCoordsSupported", PropertyType=typeof(System.Boolean), Selector="barycentricCoordsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maximumConcurrentCompilationTaskCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaximumConcurrentCompilationTaskCount", PropertyType=typeof(System.UIntPtr), Selector="maximumConcurrentCompilationTaskCount")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V122) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V123) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V16) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V124) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V17) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V122) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isLowPower", IsProperty=true, IsRequired=true, IsStatic=false, Name="LowPower", PropertyType=typeof(System.Boolean), Selector="lowPower")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isHeadless", IsProperty=true, IsRequired=true, IsStatic=false, Name="Headless", PropertyType=typeof(System.Boolean), Selector="headless")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isDepth24Stencil8PixelFormatSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="Depth24Stencil8PixelFormatSupported", PropertyType=typeof(System.Boolean), Selector="depth24Stencil8PixelFormatSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isRemovable", IsProperty=true, IsRequired=true, IsStatic=false, Name="Removable", PropertyType=typeof(System.Boolean), Selector="removable")]
public interface IMTLDevice : IDisposable, ObjCRuntime.INativeObject
[Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areBarycentricCoordsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="BarycentricCoordsSupported", PropertyType=typeof(System.Boolean), Selector="barycentricCoordsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maximumConcurrentCompilationTaskCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaximumConcurrentCompilationTaskCount", PropertyType=typeof(System.UIntPtr), Selector="maximumConcurrentCompilationTaskCount")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isLowPower", IsProperty=true, IsRequired=true, IsStatic=false, Name="LowPower", PropertyType=typeof(System.Boolean), Selector="lowPower")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isHeadless", IsProperty=true, IsRequired=true, IsStatic=false, Name="Headless", PropertyType=typeof(System.Boolean), Selector="headless")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isDepth24Stencil8PixelFormatSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="Depth24Stencil8PixelFormatSupported", PropertyType=typeof(System.Boolean), Selector="depth24Stencil8PixelFormatSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isRemovable", IsProperty=true, IsRequired=true, IsStatic=false, Name="Removable", PropertyType=typeof(System.Boolean), Selector="removable")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V112) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V113) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V15) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V114) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V16) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V112) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="peerIndex", IsProperty=true, IsRequired=true, IsStatic=false, Name="PeerIndex", PropertyType=typeof(System.UInt32), Selector="peerIndex")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="peerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="PeerCount", PropertyType=typeof(System.UInt32), Selector="peerCount")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="peerGroupID", IsProperty=true, IsRequired=true, IsStatic=false, Name="PeerGroupId", PropertyType=typeof(System.UInt64), Selector="peerGroupID")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxTransferRate", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxTransferRate", PropertyType=typeof(System.UInt64), Selector="maxTransferRate")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="location", IsProperty=true, IsRequired=true, IsStatic=false, Name="Location", PropertyType=typeof(Metal.MTLDeviceLocation), Selector="location")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="locationNumber", IsProperty=true, IsRequired=true, IsStatic=false, Name="LocationNumber", PropertyType=typeof(System.UIntPtr), Selector="locationNumber")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="shouldMaximizeConcurrentCompilation", IsProperty=true, IsRequired=true, IsStatic=false, Name="ShouldMaximizeConcurrentCompilation", PropertyType=typeof(System.Boolean), Selector="shouldMaximizeConcurrentCompilation", SetterSelector="setShouldMaximizeConcurrentCompilation:")]
public interface IMTLDevice : IDisposable, ObjCRuntime.INativeObject
[Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V76) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V77) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V11) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V78) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V12) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V76) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")]
public interface IMTLDevice : IDisposable, ObjCRuntime.INativeObject
[Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")]
[Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maximumConcurrentCompilationTaskCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaximumConcurrentCompilationTaskCount", PropertyType=typeof(System.UIntPtr), Selector="maximumConcurrentCompilationTaskCount")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V76) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V77) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V11) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V78) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V12) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")]
[Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V76) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")]
public interface IMTLDevice : IDisposable, ObjCRuntime.INativeObject
[<Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V131) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V132) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V17) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V133) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V18) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V131) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areBarycentricCoordsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="BarycentricCoordsSupported", PropertyType=typeof(System.Boolean), Selector="barycentricCoordsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")>]
type IMTLDevice = interface
    interface INativeObject
    interface IDisposable
[<Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V131) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V132) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V17) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V133) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V18) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V131) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areBarycentricCoordsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="BarycentricCoordsSupported", PropertyType=typeof(System.Boolean), Selector="barycentricCoordsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maximumConcurrentCompilationTaskCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaximumConcurrentCompilationTaskCount", PropertyType=typeof(System.UIntPtr), Selector="maximumConcurrentCompilationTaskCount")>]
type IMTLDevice = interface
    interface INativeObject
    interface IDisposable
[<Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areBarycentricCoordsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="BarycentricCoordsSupported", PropertyType=typeof(System.Boolean), Selector="barycentricCoordsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maximumConcurrentCompilationTaskCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaximumConcurrentCompilationTaskCount", PropertyType=typeof(System.UIntPtr), Selector="maximumConcurrentCompilationTaskCount")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V122) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V123) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V16) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V124) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V17) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V122) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isLowPower", IsProperty=true, IsRequired=true, IsStatic=false, Name="LowPower", PropertyType=typeof(System.Boolean), Selector="lowPower")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isHeadless", IsProperty=true, IsRequired=true, IsStatic=false, Name="Headless", PropertyType=typeof(System.Boolean), Selector="headless")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isDepth24Stencil8PixelFormatSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="Depth24Stencil8PixelFormatSupported", PropertyType=typeof(System.Boolean), Selector="depth24Stencil8PixelFormatSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isRemovable", IsProperty=true, IsRequired=true, IsStatic=false, Name="Removable", PropertyType=typeof(System.Boolean), Selector="removable")>]
type IMTLDevice = interface
    interface INativeObject
    interface IDisposable
[<Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areBarycentricCoordsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="BarycentricCoordsSupported", PropertyType=typeof(System.Boolean), Selector="barycentricCoordsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maximumConcurrentCompilationTaskCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaximumConcurrentCompilationTaskCount", PropertyType=typeof(System.UIntPtr), Selector="maximumConcurrentCompilationTaskCount")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isLowPower", IsProperty=true, IsRequired=true, IsStatic=false, Name="LowPower", PropertyType=typeof(System.Boolean), Selector="lowPower")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isHeadless", IsProperty=true, IsRequired=true, IsStatic=false, Name="Headless", PropertyType=typeof(System.Boolean), Selector="headless")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isDepth24Stencil8PixelFormatSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="Depth24Stencil8PixelFormatSupported", PropertyType=typeof(System.Boolean), Selector="depth24Stencil8PixelFormatSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="isRemovable", IsProperty=true, IsRequired=true, IsStatic=false, Name="Removable", PropertyType=typeof(System.Boolean), Selector="removable")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V112) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V113) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V15) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V114) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V16) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V112) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="peerIndex", IsProperty=true, IsRequired=true, IsStatic=false, Name="PeerIndex", PropertyType=typeof(System.UInt32), Selector="peerIndex")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="peerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="PeerCount", PropertyType=typeof(System.UInt32), Selector="peerCount")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="peerGroupID", IsProperty=true, IsRequired=true, IsStatic=false, Name="PeerGroupId", PropertyType=typeof(System.UInt64), Selector="peerGroupID")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxTransferRate", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxTransferRate", PropertyType=typeof(System.UInt64), Selector="maxTransferRate")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="location", IsProperty=true, IsRequired=true, IsStatic=false, Name="Location", PropertyType=typeof(Metal.MTLDeviceLocation), Selector="location")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="locationNumber", IsProperty=true, IsRequired=true, IsStatic=false, Name="LocationNumber", PropertyType=typeof(System.UIntPtr), Selector="locationNumber")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="shouldMaximizeConcurrentCompilation", IsProperty=true, IsRequired=true, IsStatic=false, Name="ShouldMaximizeConcurrentCompilation", PropertyType=typeof(System.Boolean), Selector="shouldMaximizeConcurrentCompilation", SetterSelector="setShouldMaximizeConcurrentCompilation:")>]
type IMTLDevice = interface
    interface INativeObject
    interface IDisposable
[<Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V76) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V77) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V11) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V78) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V12) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V76) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")>]
type IMTLDevice = interface
    interface INativeObject
    interface IDisposable
[<Foundation.Protocol(Name="MTLDevice", WrapperType=typeof(Metal.MTLDeviceWrapper))>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapTextureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapTextureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapBufferSizeAndAlignWithLength", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapBufferSizeAndAlignWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateHeap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLHeapDescriptor) }, ReturnType=typeof(Metal.IMTLHeap), Selector="newHeapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithMaxCommandBufferCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytes:length:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBufferNoCopy", ParameterBlockProxy=new System.Type[] { null, null, null, typeof(ObjCRuntime.Trampolines+NIDMTLDeallocator) }, ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLDeallocator) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithBytesNoCopy:length:options:deallocator:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDepthStencilState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLDepthStencilDescriptor) }, ReturnType=typeof(Metal.IMTLDepthStencilState), Selector="newDepthStencilStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTexture", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor), typeof(IOSurface.IOSurface), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newTextureWithDescriptor:iosurface:plane:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureDescriptor) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedTexture", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedTextureHandle) }, ReturnType=typeof(Metal.IMTLTexture), Selector="newSharedTextureWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSamplerState", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSamplerDescriptor) }, ReturnType=typeof(Metal.IMTLSamplerState), Selector="newSamplerStateWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibrary")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithFile:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(CoreFoundation.DispatchData), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithData:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, false, true }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithSource:options:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDefaultLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSBundle), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newDefaultLibraryWithBundle:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithFunction:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLComputePipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLComputePipelineState), Selector="newComputePipelineStateWithDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewComputePipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLComputePipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler) }, Selector="newComputePipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFence", ReturnType=typeof(Metal.IMTLFence), Selector="newFence")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFeatureSet", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLFeatureSet) }, ReturnType=typeof(System.Boolean), Selector="supportsFeatureSet:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsTextureSampleCount", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsTextureSampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumLinearTextureAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumLinearTextureAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetMinimumTextureBufferAlignment", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLPixelFormat) }, ReturnType=typeof(System.UIntPtr), Selector="minimumTextureBufferAlignmentForPixelFormat:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetDefaultSamplePositions", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.UIntPtr) }, Selector="getDefaultSamplePositions:count:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLArgumentDescriptor[]) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithArguments:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateIndirectCommandBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLIndirectCommandBufferDescriptor), typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions) }, ReturnType=typeof(Metal.IMTLIndirectCommandBuffer), Selector="newIndirectCommandBufferWithDescriptor:maxCommandCount:options:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateEvent", ReturnType=typeof(Metal.IMTLEvent), Selector="newEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEvent")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateSharedEvent", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSharedEventHandle) }, ReturnType=typeof(Metal.IMTLSharedEvent), Selector="newSharedEventWithHandle:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithTileDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTileRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithTileDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsVertexAmplification", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsVertexAmplificationCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(System.Boolean), Selector="supportsRasterizationRateMapWithLayerCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRasterizationRateMap", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLRasterizationRateMapDescriptor) }, ReturnType=typeof(Metal.IMTLRasterizationRateMap), Selector="newRasterizationRateMapWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparseTileRegions", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(System.UIntPtr) }, Selector="convertSparseTileRegions:toPixelRegions:withTileSize:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=false, IsStatic=false, Name="ConvertSparsePixelRegions", ParameterByRef=new System.Boolean[] { false, false, false, false, false }, ParameterType=new System.Type[] { typeof(System.IntPtr), typeof(System.IntPtr), typeof(Metal.MTLSize), typeof(Metal.MTLSparseTextureRegionAlignmentMode), typeof(System.UIntPtr) }, Selector="convertSparsePixelRegions:toTileRegions:withTileSize:alignmentMode:numRegions:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsFamily", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLGpuFamily) }, ReturnType=typeof(System.Boolean), Selector="supportsFamily:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterSampleBuffer", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSampleBufferDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLCounterSampleBuffer), Selector="newCounterSampleBufferWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSampleTimestamps", ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(System.UIntPtr) }, Selector="sampleTimestamps:gpuTimestamp:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="SupportsCounterSampling", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCounterSamplingPoint) }, ReturnType=typeof(System.Boolean), Selector="supportsCounterSampling:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.IMTLLibrary), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibrary:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateDynamicLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLDynamicLibrary), Selector="newDynamicLibraryWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBinaryArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLBinaryArchiveDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLBinaryArchive), Selector="newBinaryArchiveWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructureSizes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLAccelerationStructureSizes), Selector="accelerationStructureSizesWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateAccelerationStructure", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.IMTLAccelerationStructure), Selector="newAccelerationStructureWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLibrary), Selector="newLibraryWithStitchedDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLAccelerationStructureDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetHeapAccelerationStructureSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(System.UIntPtr) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="heapAccelerationStructureSizeAndAlignWithSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentEncoder", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLBufferBinding) }, ReturnType=typeof(Metal.IMTLArgumentEncoder), Selector="newArgumentEncoderWithBufferBinding:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterByRef=new System.Boolean[] { false, false, true, true }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLRenderPipelineReflection), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLRenderPipelineState), Selector="newRenderPipelineStateWithMeshDescriptor:options:reflection:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDMTLNewRenderPipelineStateWithReflectionCompletionHandler) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLMeshRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler) }, Selector="newRenderPipelineStateWithMeshDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSizeInBytes", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytesForSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSparseTileSize", ParameterByRef=new System.Boolean[] { false, false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLTextureType), typeof(Metal.MTLPixelFormat), typeof(System.UIntPtr), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.MTLSize), Selector="sparseTileSizeWithTextureType:pixelFormat:sampleCount:sparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetNewLogState", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLLogStateDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLLogState), Selector="newLogStateWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandQueue", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLCommandQueueDescriptor) }, ReturnType=typeof(Metal.IMTLCommandQueue), Selector="newCommandQueueWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateResidencySet", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResidencySetDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLResidencySet), Selector="newResidencySetWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensorSizeAndAlign", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor) }, ReturnType=typeof(Metal.MTLSizeAndAlign), Selector="tensorSizeAndAlignWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTensor", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLTensorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTensor), Selector="newTensorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithFunction:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocator")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandAllocator", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandAllocatorDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandAllocator), Selector="newCommandAllocatorWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueue")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateMTL4CommandQueue", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CommandQueueDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CommandQueue), Selector="newMTL4CommandQueueWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCommandBuffer", ReturnType=typeof(Metal.IMTL4CommandBuffer), Selector="newCommandBuffer")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArgumentTable", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4ArgumentTableDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4ArgumentTable), Selector="newArgumentTableWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateTextureViewPool", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTLResourceViewPoolDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTLTextureViewPool), Selector="newTextureViewPoolWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCompiler", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CompilerDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Compiler), Selector="newCompilerWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateArchive", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Foundation.NSUrl), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4Archive), Selector="newArchiveWithURL:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreatePipelineDataSetSerializer", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4PipelineDataSetSerializerDescriptor) }, ReturnType=typeof(Metal.IMTL4PipelineDataSetSerializer), Selector="newPipelineDataSetSerializerWithDescriptor:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateBuffer", ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.UIntPtr), typeof(Metal.MTLResourceOptions), typeof(Metal.MTLSparsePageSize) }, ReturnType=typeof(Metal.IMTLBuffer), Selector="newBufferWithLength:options:placementSparsePageSize:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateCounterHeap", ParameterByRef=new System.Boolean[] { false, true }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapDescriptor), typeof(Foundation.NSError) }, ReturnType=typeof(Metal.IMTL4CounterHeap), Selector="newCounterHeapWithDescriptor:error:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="GetSizeOf", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.MTL4CounterHeapType) }, ReturnType=typeof(System.UIntPtr), Selector="sizeOfCounterHeapEntry:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateFunctionHandle", ParameterByRef=new System.Boolean[] { false }, ParameterType=new System.Type[] { typeof(Metal.IMTL4BinaryFunction) }, ReturnType=typeof(Metal.IMTLFunctionHandle), Selector="functionHandleWithBinaryFunction:")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="name", IsProperty=true, IsRequired=true, IsStatic=false, Name="Name", PropertyType=typeof(System.String), Selector="name")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadsPerThreadgroup", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadsPerThreadgroup", PropertyType=typeof(Metal.MTLSize), Selector="maxThreadsPerThreadgroup")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="recommendedMaxWorkingSetSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="RecommendedMaxWorkingSetSize", PropertyType=typeof(System.UInt64), Selector="recommendedMaxWorkingSetSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="readWriteTextureSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ReadWriteTextureSupport", PropertyType=typeof(Metal.MTLReadWriteTextureTier), Selector="readWriteTextureSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="argumentBuffersSupport", IsProperty=true, IsRequired=true, IsStatic=false, Name="ArgumentBuffersSupport", PropertyType=typeof(Metal.MTLArgumentBuffersTier), Selector="argumentBuffersSupport")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areRasterOrderGroupsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="RasterOrderGroupsSupported", PropertyType=typeof(System.Boolean), Selector="rasterOrderGroupsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxThreadgroupMemoryLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxThreadgroupMemoryLength", PropertyType=typeof(System.UIntPtr), Selector="maxThreadgroupMemoryLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxArgumentBufferSamplerCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxArgumentBufferSamplerCount", PropertyType=typeof(System.UIntPtr), Selector="maxArgumentBufferSamplerCount")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="areProgrammableSamplePositionsSupported", IsProperty=true, IsRequired=true, IsStatic=false, Name="ProgrammableSamplePositionsSupported", PropertyType=typeof(System.Boolean), Selector="programmableSamplePositionsSupported")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maxBufferLength", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaxBufferLength", PropertyType=typeof(System.UIntPtr), Selector="maxBufferLength")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="registryID", IsProperty=true, IsRequired=true, IsStatic=false, Name="RegistryId", PropertyType=typeof(System.UInt64), Selector="registryID")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="currentAllocatedSize", IsProperty=true, IsRequired=true, IsStatic=false, Name="CurrentAllocatedSize", PropertyType=typeof(System.UIntPtr), Selector="currentAllocatedSize")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="sparseTileSizeInBytes", IsProperty=true, IsRequired=true, IsStatic=false, Name="SparseTileSizeInBytes", PropertyType=typeof(System.UIntPtr), Selector="sparseTileSizeInBytes")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="hasUnifiedMemory", IsProperty=true, IsRequired=true, IsStatic=false, Name="HasUnifiedMemory", PropertyType=typeof(System.Boolean), Selector="hasUnifiedMemory")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsShaderBarycentricCoordinates", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsShaderBarycentricCoordinates", PropertyType=typeof(System.Boolean), Selector="supportsShaderBarycentricCoordinates")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="counterSets", IsProperty=true, IsRequired=true, IsStatic=false, Name="CounterSets", PropertyType=typeof(Metal.IMTLCounterSet[]), Selector="counterSets")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitFloatFiltering", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitFloatFiltering", PropertyType=typeof(System.Boolean), Selector="supports32BitFloatFiltering")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supports32BitMSAA", IsProperty=true, IsRequired=true, IsStatic=false, Name="Supports32BitMsaa", PropertyType=typeof(System.Boolean), Selector="supports32BitMSAA")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsBCTextureCompression", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsBCTextureCompression", PropertyType=typeof(System.Boolean), Selector="supportsBCTextureCompression")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPullModelInterpolation", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPullModelInterpolation", PropertyType=typeof(System.Boolean), Selector="supportsPullModelInterpolation")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracing", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracing", PropertyType=typeof(System.Boolean), Selector="supportsRaytracing")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointers", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointers", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointers")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsQueryTextureLOD", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsQueryTextureLod", PropertyType=typeof(System.Boolean), Selector="supportsQueryTextureLOD")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRenderDynamicLibraries", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRenderDynamicLibraries", PropertyType=typeof(System.Boolean), Selector="supportsRenderDynamicLibraries")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsRaytracingFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsRaytracingFromRender", PropertyType=typeof(System.Boolean), Selector="supportsRaytracingFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsPrimitiveMotionBlur", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsPrimitiveMotionBlur", PropertyType=typeof(System.Boolean), Selector="supportsPrimitiveMotionBlur")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="supportsFunctionPointersFromRender", IsProperty=true, IsRequired=true, IsStatic=false, Name="SupportsFunctionPointersFromRender", PropertyType=typeof(System.Boolean), Selector="supportsFunctionPointersFromRender")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="architecture", IsProperty=true, IsRequired=true, IsStatic=false, Name="Architecture", PropertyType=typeof(Metal.MTLArchitecture), Selector="architecture")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="queryTimestampFrequency", IsProperty=true, IsRequired=true, IsStatic=false, Name="QueryTimestampFrequency", PropertyType=typeof(System.UInt64), Selector="queryTimestampFrequency")>]
[<Foundation.ProtocolMember(ArgumentSemantic=ObjCRuntime.ArgumentSemantic.None, GetterSelector="maximumConcurrentCompilationTaskCount", IsProperty=true, IsRequired=true, IsStatic=false, Name="MaximumConcurrentCompilationTaskCount", PropertyType=typeof(System.UIntPtr), Selector="maximumConcurrentCompilationTaskCount")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V76) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(System.String), typeof(Metal.MTLCompileOptions), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithSource:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V77) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(System.Action<Metal.IMTLRenderPipelineState,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateRenderPipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V11) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLRenderPipelineDescriptor), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLRenderPipelineState,Metal.MTLRenderPipelineReflection,Foundation.NSError>) }, Selector="newRenderPipelineStateWithDescriptor:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V78) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(System.Action<Metal.IMTLComputePipelineState,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateComputePipelineState", ParameterBlockProxy=new System.Type[] { null, null, typeof(ObjCRuntime.Trampolines+NIDActionArity3V12) }, ParameterByRef=new System.Boolean[] { false, false, false }, ParameterType=new System.Type[] { typeof(Metal.IMTLFunction), typeof(Metal.MTLPipelineOption), typeof(System.Action<Metal.IMTLComputePipelineState,Metal.MTLComputePipelineReflection,Foundation.NSError>) }, Selector="newComputePipelineStateWithFunction:options:completionHandler:")>]
[<Foundation.ProtocolMember(IsProperty=false, IsRequired=true, IsStatic=false, Name="CreateLibrary", ParameterBlockProxy=new System.Type[] { null, typeof(ObjCRuntime.Trampolines+NIDActionArity2V76) }, ParameterByRef=new System.Boolean[] { false, false }, ParameterType=new System.Type[] { typeof(Metal.MTLStitchedLibraryDescriptor), typeof(System.Action<Metal.IMTLLibrary,Foundation.NSError>) }, Selector="newLibraryWithStitchedDescriptor:completionHandler:")>]
type IMTLDevice = interface
    interface INativeObject
    interface IDisposable
Attributes
Implements

Properties

Name Description
Architecture
ArgumentBuffersSupport

Returns the argument buffer support tier.

BarycentricCoordsSupported
CounterSets
CurrentAllocatedSize

Gets the size, in bytes, of all the resources that the device has allocated.

Depth24Stencil8PixelFormatSupported
Handle

Handle (pointer) to the unmanaged object representation.

(Inherited from INativeObject)
HasUnifiedMemory
Headless
Location
LocationNumber
LowPower
MaxArgumentBufferSamplerCount
MaxBufferLength
MaximumConcurrentCompilationTaskCount
MaxThreadgroupMemoryLength

Gets the largest available length of memory for threadgroups.

MaxThreadsPerThreadgroup

Returns the number of threads per threadgroup on the device.

MaxTransferRate
Name
PeerCount
PeerGroupId
PeerIndex
ProgrammableSamplePositionsSupported

Returns a Boolean value that tells whether programmable sample positions are supported.

QueryTimestampFrequency
RasterOrderGroupsSupported

Returns a Boolean value that tells whether raster order groups are supported.

ReadWriteTextureSupport

Gets the texture read-write support tier.

RecommendedMaxWorkingSetSize
RegistryId

Gets the registry ID.

Removable
ShouldMaximizeConcurrentCompilation
SparseTileSizeInBytes
Supports32BitFloatFiltering
Supports32BitMsaa
SupportsBCTextureCompression
SupportsDynamicLibraries
SupportsFunctionPointers
SupportsFunctionPointersFromRender
SupportsPrimitiveMotionBlur
SupportsPullModelInterpolation
SupportsQueryTextureLod
SupportsRaytracing
SupportsRaytracingFromRender
SupportsRenderDynamicLibraries
SupportsShaderBarycentricCoordinates

Methods

Name Description
ConvertSparsePixelRegions(IntPtr, IntPtr, MTLSize, MTLSparseTextureRegionAlignmentMode, UIntPtr)
ConvertSparseTileRegions(IntPtr, IntPtr, MTLSize, UIntPtr)
CreateAccelerationStructure(MTLAccelerationStructureDescriptor)
CreateAccelerationStructure(UIntPtr)
CreateAccelerationStructureSizes(MTLAccelerationStructureDescriptor)
CreateArchive(NSUrl, NSError)
CreateArgumentEncoder(IMTLBufferBinding)
CreateArgumentEncoder(MTLArgumentDescriptor[])

Creates an encoder for the specified array of arguments.

CreateArgumentTable(MTL4ArgumentTableDescriptor, NSError)
CreateBinaryArchive(MTLBinaryArchiveDescriptor, NSError)
CreateBuffer(IntPtr, UIntPtr, MTLResourceOptions)
CreateBuffer(UIntPtr, MTLResourceOptions, MTLSparsePageSize)
CreateBuffer(UIntPtr, MTLResourceOptions)
CreateBufferNoCopy(IntPtr, UIntPtr, MTLResourceOptions, MTLDeallocator)

Creates and returns a new buffer that is wrapped around the specified data, and runs an optional deallocator when the memory is deallocated.

CreateCommandAllocator()
CreateCommandAllocator(MTL4CommandAllocatorDescriptor, NSError)
CreateCommandBuffer()
CreateCommandQueue()
CreateCommandQueue(MTLCommandQueueDescriptor)
CreateCommandQueue(UIntPtr)
CreateCompiler(MTL4CompilerDescriptor, NSError)
CreateComputePipelineState(IMTLFunction, Action<IMTLComputePipelineState,NSError>)
CreateComputePipelineState(IMTLFunction, MTLPipelineOption, Action<IMTLComputePipelineState,MTLComputePipelineReflection,NSError>)
CreateComputePipelineState(IMTLFunction, MTLPipelineOption, MTLComputePipelineReflection, NSError)
CreateComputePipelineState(IMTLFunction, NSError)
CreateComputePipelineState(MTLComputePipelineDescriptor, MTLPipelineOption, MTLComputePipelineReflection, NSError)

Creates a new pipeline state from the specified compute pipeline descriptor, options, and completion handler, and stores reflection information in the reflectionout parameter.

CreateComputePipelineState(MTLComputePipelineDescriptor, MTLPipelineOption, MTLNewComputePipelineStateWithReflectionCompletionHandler)

Creates a new pipeline state from the specified compute pipeline descriptor, options, and completion handler.

CreateCounterHeap(MTL4CounterHeapDescriptor, NSError)
CreateCounterSampleBuffer(MTLCounterSampleBufferDescriptor, NSError)
CreateDefaultLibrary()
CreateDefaultLibrary(NSBundle, NSError)

Creates and returns a new library from the functions in the specified bundle.

CreateDepthStencilState(MTLDepthStencilDescriptor)
CreateDynamicLibrary(IMTLLibrary, NSError)
CreateDynamicLibrary(NSUrl, NSError)
CreateEvent()
CreateFence()

Creates and returns a new fence for tracking and managing dependencies between command encoders.

CreateFunctionHandle(IMTL4BinaryFunction)
CreateFunctionHandle(IMTLFunction)
CreateHeap(MTLHeapDescriptor)

Creates and returns a new heap.

CreateIndirectCommandBuffer(MTLIndirectCommandBufferDescriptor, UIntPtr, MTLResourceOptions)
CreateLibrary(DispatchData, NSError)
CreateLibrary(MTLStitchedLibraryDescriptor, Action<IMTLLibrary,NSError>)
CreateLibrary(MTLStitchedLibraryDescriptor, NSError)
CreateLibrary(NSUrl, NSError)

Creates and returns a new library from the functions at the specified URL.

CreateLibrary(String, MTLCompileOptions, Action<IMTLLibrary,NSError>)
CreateLibrary(String, MTLCompileOptions, NSError)
CreateLibrary(String, NSError)
CreateLibraryAsync(MTLStitchedLibraryDescriptor)
CreateLibraryAsync(String, MTLCompileOptions)
CreateMTL4CommandQueue()
CreateMTL4CommandQueue(MTL4CommandQueueDescriptor, NSError)
CreatePipelineDataSetSerializer(MTL4PipelineDataSetSerializerDescriptor)
CreateRasterizationRateMap(MTLRasterizationRateMapDescriptor)
CreateRenderPipelineState(MTLMeshRenderPipelineDescriptor, MTLPipelineOption, MTLNewRenderPipelineStateWithReflectionCompletionHandler)
CreateRenderPipelineState(MTLMeshRenderPipelineDescriptor, MTLPipelineOption, MTLRenderPipelineReflection, NSError)
CreateRenderPipelineState(MTLRenderPipelineDescriptor, Action<IMTLRenderPipelineState,NSError>)
CreateRenderPipelineState(MTLRenderPipelineDescriptor, MTLPipelineOption, Action<IMTLRenderPipelineState,MTLRenderPipelineReflection,NSError>)
CreateRenderPipelineState(MTLRenderPipelineDescriptor, MTLPipelineOption, MTLRenderPipelineReflection, NSError)
CreateRenderPipelineState(MTLRenderPipelineDescriptor, NSError)
CreateRenderPipelineState(MTLTileRenderPipelineDescriptor, MTLPipelineOption, MTLNewRenderPipelineStateWithReflectionCompletionHandler)
CreateRenderPipelineState(MTLTileRenderPipelineDescriptor, MTLPipelineOption, MTLRenderPipelineReflection, NSError)
CreateResidencySet(MTLResidencySetDescriptor, NSError)
CreateSamplerState(MTLSamplerDescriptor)
CreateSharedEvent()
CreateSharedEvent(MTLSharedEventHandle)
CreateSharedTexture(MTLSharedTextureHandle)
CreateSharedTexture(MTLTextureDescriptor)
CreateTensor(MTLTensorDescriptor, NSError)
CreateTensorSizeAndAlign(MTLTensorDescriptor)
CreateTexture(MTLTextureDescriptor, IOSurface, UIntPtr)

Creates a Metal texture with the specified values.

CreateTexture(MTLTextureDescriptor)
CreateTextureViewPool(MTLResourceViewPoolDescriptor, NSError)
GetDefaultSamplePositions(IntPtr, UIntPtr)

Provides the default sample positions for the specified sample count.

GetHeapAccelerationStructureSizeAndAlign(MTLAccelerationStructureDescriptor)
GetHeapAccelerationStructureSizeAndAlign(UIntPtr)
GetHeapBufferSizeAndAlignWithLength(UIntPtr, MTLResourceOptions)
GetHeapTextureSizeAndAlign(MTLTextureDescriptor)

Gets the size and alignment of a texture with specified description, when allocated from a heap.

GetMinimumLinearTextureAlignment(MTLPixelFormat)

Gets the minimum alignment required for a linear texture in the given pixel format.

GetMinimumTextureBufferAlignment(MTLPixelFormat)
GetNewLogState(MTLLogStateDescriptor, NSError)
GetSampleTimestamps(UIntPtr, UIntPtr)
GetSizeOf(MTL4CounterHeapType)
GetSparseTileSize(MTLTextureType, MTLPixelFormat, UIntPtr, MTLSparsePageSize)
GetSparseTileSize(MTLTextureType, MTLPixelFormat, UIntPtr)
GetSparseTileSizeInBytes(MTLSparsePageSize)
SupportsCounterSampling(MTLCounterSamplingPoint)
SupportsFamily(MTLGpuFamily)
SupportsFeatureSet(MTLFeatureSet)
SupportsRasterizationRateMap(UIntPtr)
SupportsTextureSampleCount(UIntPtr)

Returns a Boolean value that tells whether the device supports the specified texture count.

SupportsVertexAmplification(UIntPtr)

Extension Methods

Name Description
ConvertSparsePixelRegions(IMTLDevice, MTLRegion[], MTLRegion[], MTLSize, MTLSparseTextureRegionAlignmentMode, UIntPtr)
ConvertSparsePixelRegions(IMTLDevice, IntPtr, IntPtr, MTLSize, MTLSparseTextureRegionAlignmentMode, UIntPtr)
ConvertSparseTileRegions(IMTLDevice, MTLRegion[], MTLRegion[], MTLSize, UIntPtr)
ConvertSparseTileRegions(IMTLDevice, IntPtr, IntPtr, MTLSize, UIntPtr)
CreateAccelerationStructure(IMTLDevice, MTLAccelerationStructureDescriptor)
CreateAccelerationStructure(IMTLDevice, UIntPtr)
CreateAccelerationStructureSizes(IMTLDevice, MTLAccelerationStructureDescriptor)
CreateArgumentEncoder(IMTLDevice, IMTLBufferBinding)
CreateBuffer<T>(IMTLDevice, T[], MTLResourceOptions)

Creates and returns a new buffer with a copy of the specified data.

CreateLibraryAsync(IMTLDevice, MTLStitchedLibraryDescriptor)
CreateLibraryAsync(IMTLDevice, String, MTLCompileOptions)
CreateRasterizationRateMap(IMTLDevice, MTLRasterizationRateMapDescriptor)
CreateRenderPipelineState(IMTLDevice, MTLMeshRenderPipelineDescriptor, MTLPipelineOption, MTLNewRenderPipelineStateWithReflectionCompletionHandler)
CreateRenderPipelineState(IMTLDevice, MTLMeshRenderPipelineDescriptor, MTLPipelineOption, MTLRenderPipelineReflection, NSError)
GetArchitecture(IMTLDevice)
GetDefaultSamplePositions(IMTLDevice, MTLSamplePosition[], UIntPtr)

Provides the default sample positions for the specified sample count.

GetHeapAccelerationStructureSizeAndAlign(IMTLDevice, MTLAccelerationStructureDescriptor)
GetHeapAccelerationStructureSizeAndAlign(IMTLDevice, UIntPtr)
GetMaximumConcurrentCompilationTaskCount(IMTLDevice)
GetShouldMaximizeConcurrentCompilation(IMTLDevice)
GetSparseTileSize(IMTLDevice, MTLTextureType, MTLPixelFormat, UIntPtr, MTLSparsePageSize)
GetSparseTileSize(IMTLDevice, MTLTextureType, MTLPixelFormat, UIntPtr)
GetSparseTileSizeInBytes(IMTLDevice, MTLSparsePageSize)
GetSparseTileSizeInBytes(IMTLDevice)
GetSupports32BitFloatFiltering(IMTLDevice)
GetSupports32BitMsaa(IMTLDevice)
GetSupportsFunctionPointers(IMTLDevice)
GetSupportsFunctionPointersFromRender(IMTLDevice)
GetSupportsPrimitiveMotionBlur(IMTLDevice)
GetSupportsQueryTextureLod(IMTLDevice)
GetSupportsRaytracing(IMTLDevice)
GetSupportsRaytracingFromRender(IMTLDevice)
GetSupportsShaderBarycentricCoordinates(IMTLDevice)
SetShouldMaximizeConcurrentCompilation(IMTLDevice, Boolean)
SupportsRasterizationRateMap(IMTLDevice, UIntPtr)
SupportsVertexAmplification(IMTLDevice, UIntPtr)
GetHandle(INativeObject)
GetNonNullHandle(INativeObject, String)

Applies to