IMTLDevice Interface
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
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