/*!
@brief 返回对首选系统默认Metal设备的引用。
@discussion 在Mac OS X系统上支持自动图形切换,调用这种获得Metal器件的API将使系统切换到高功率GPU。在支持多个GPU的其他系统上,它将返回GPU与主显示相关联。*/
@available(iOS 8.0, *)
public func MTLCreateSystemDefaultDevice() -> MTLDevice?
/*!
@brief 返回系统中的所有Metal设备。
@discussion 这个API不会导致系统切换设备,并根据它认为合适的标准来决定使用哪个GPU来使用应用程序。
*/
@available(iOS 8.0, *)
public enum MTLFeatureSet : UInt {
@available(iOS 8.0, *)
case iOS_GPUFamily1_v1
@available(iOS 8.0, *)
case iOS_GPUFamily2_v1
@available(iOS 9.0, *)
case iOS_GPUFamily1_v2
@available(iOS 9.0, *)
case iOS_GPUFamily2_v2
@available(iOS 9.0, *)
case iOS_GPUFamily3_v1
@available(iOS 10.0, *)
case iOS_GPUFamily1_v3
@available(iOS 10.0, *)
case iOS_GPUFamily2_v3
@available(iOS 10.0, *)
case iOS_GPUFamily3_v2
}
/*!
@enum MTLPipelineOption
@abstract 控制管道(pipeline)的创建
*/
@available(iOS 8.0, *)
public struct MTLPipelineOption : OptionSet {
public init(rawValue: UInt)
public static var argumentInfo: MTLPipelineOption { get }
public static var bufferTypeInfo: MTLPipelineOption { get }
}
/*!
@abstract 表示内存大小和字节对齐。
*/
public struct MTLSizeAndAlign {
public var size: Int
public var align: Int
public init()
public init(size: Int, align: Int)
}
/* Convenience typedef,它可以很容易地声明某些返回类型的存储。 */
public typealias MTLAutoreleasedRenderPipelineReflection = MTLRenderPipelineReflection
public typealias MTLAutoreleasedComputePipelineReflection = MTLComputePipelineReflection
public typealias MTLNewLibraryCompletionHandler = (MTLLibrary?, Error?) -> Swift.Void
public typealias MTLNewRenderPipelineStateCompletionHandler = (MTLRenderPipelineState?, Error?) -> Swift.Void
public typealias MTLNewRenderPipelineStateWithReflectionCompletionHandler = (MTLRenderPipelineState?, MTLRenderPipelineReflection?, Error?) -> Swift.Void
public typealias MTLNewComputePipelineStateCompletionHandler = (MTLComputePipelineState?, Error?) -> Swift.Void
public typealias MTLNewComputePipelineStateWithReflectionCompletionHandler = (MTLComputePipelineState?, MTLComputePipelineReflection?, Error?) -> Swift.Void
/*!
@protocol MTLDevice
@abstract MTLDevice 表示能够进行数据并行计算的处理器
*/
@available(iOS 8.0, *)
public protocol MTLDevice : NSObjectProtocol {
/*!
@property name
@abstract 供应商设备的全名。
*/
public var name: String? { get }
/*!
@property maxThreadsPerThreadgroup
@abstract 每个维度上的最大线程数。
*/
@available(iOS 9.0, *)
public var maxThreadsPerThreadgroup: MTLSize { get }
/*!
@method newCommandQueue
@brief 创建并返回一个新的命令队列。通过此方法创建的命令队列只允许64个未完成的命令缓冲区。
@return 新的命令队列对象
*/
public func makeCommandQueue() -> MTLCommandQueue
/*!
@method newCommandQueueWithMaxCommandBufferCount
@brief 创建并返回一个包含未完成的命令缓冲区的新命令队列。
@return 新的命令队列对象
*/
public func makeCommandQueue(maxCommandBufferCount: Int) -> MTLCommandQueue
/*!
@method heapTextureSizeAndAlignWithDescriptor:
@abstract 当从堆中分配时,确定纹理的字节大小。
@discussion 此方法可用于帮助确定所需的堆大小。
*/
@available(iOS 10.0, *)
public func heapTextureSizeAndAlign(descriptor desc: MTLTextureDescriptor) -> MTLSizeAndAlign
/*!
@method heapBufferSizeAndAlignWithLength:options:
@abstract 从堆中分配子分配时,确定缓冲区的字节大小。
@discussion 此方法可用于帮助确定所需的堆大小。
*/
@available(iOS 10.0, *)
public func heapBufferSizeAndAlign(length: Int, options: MTLResourceOptions = []) -> MTLSizeAndAlign
/*!
@method newHeapWithDescriptor:
@abstract 创建带有给定描述符的新堆。
*/
@available(iOS 10.0, *)
public func makeHeap(descriptor: MTLHeapDescriptor) -> MTLHeap
/*!
@method newBufferWithLength:options:
@brief Create a buffer by allocating new memory.
*/
public func makeBuffer(length: Int, options: MTLResourceOptions = []) -> MTLBuffer
/*!
@method newBufferWithBytes:length:options:
@brief 通过分配新的内存创建缓冲区。
*/
public func makeBuffer(bytes pointer: UnsafeRawPointer, length: Int, options: MTLResourceOptions = []) -> MTLBuffer
/*!
@method newBufferWithBytesNoCopy:length:options:deallocator:
@brief 通过封装地址空间的现有部分来创建缓冲区。
*/
public func makeBuffer(bytesNoCopy pointer: UnsafeMutableRawPointer, length: Int, options: MTLResourceOptions = [], deallocator: ((UnsafeMutableRawPointer, Int) -> Swift.Void)? = nil) -> MTLBuffer
/*!
@method newDepthStencilStateWithDescriptor:
@brief 创建一个深度/模板测试状态对象。
*/
public func makeDepthStencilState(descriptor: MTLDepthStencilDescriptor) -> MTLDepthStencilState
/*!
@method newTextureWithDescriptor:
@abstract 使用私有存储分配新纹理。
*/
public func makeTexture(descriptor: MTLTextureDescriptor) -> MTLTexture
/*!
@method newSamplerStateWithDescriptor:
@abstract 创建一个新的取样器。
*/
public func makeSamplerState(descriptor: MTLSamplerDescriptor) -> MTLSamplerState
/*!
@method newDefaultLibrary
@abstract 返回主包的默认库。
@discussion 使用newDefaultLibraryWithBundle:错误:得到一个NSError在失败的情况下。
*/
public func newDefaultLibrary() -> MTLLibrary?
/*
@method newDefaultLibraryWithBundle:error:
@abstract 返回给定bundle的默认库
@return 一个指向库的指针,如果出现错误,则为nil。
*/
@available(iOS 10.0, *)
public func makeDefaultLibrary(bundle: Bundle) throws -> MTLLibrary
/*!
@method newLibraryWithFile:
@abstract 从一个Metal库文件加载一个MTLLibrary。
*/
public func makeLibrary(filepath: String) throws -> MTLLibrary
/*!
@method newLibraryWithData:
@abstract 从dispatch_data_t加载一个MTLLibrary
@param data 已经以dispatch_data_t的形式加载的Metal库文件。
@param error 如果我们没有打开Metal库数据,会出现错误。
*/
public func makeLibrary(data: __DispatchData) throws -> MTLLibrary
/*!
@method newLibraryWithSource:options:error:
@abstract 从源装载一个MTLLibrary。
*/
public func makeLibrary(source: String, options: MTLCompileOptions?) throws -> MTLLibrary
/*!
@method newLibraryWithSource:options:completionHandler:
@abstract 从源装载一个MTLLibrary。
*/
public func makeLibrary(source: String, options: MTLCompileOptions?, completionHandler: @escaping Metal.MTLNewLibraryCompletionHandler)
/*!
@method newRenderPipelineStateWithDescriptor:error:
@abstract 同步创建和编译一个新的mtlrender管道对象。
*/
public func makeRenderPipelineState(descriptor: MTLRenderPipelineDescriptor) throws -> MTLRenderPipelineState
/*!
@method newRenderPipelineStateWithDescriptor:options:reflection:error:
@abstract 创建并编译一个新的mtlrender管线对象,并返回额外的反射信息。
*/
public func makeRenderPipelineState(descriptor: MTLRenderPipelineDescriptor, options: MTLPipelineOption, reflection: AutoreleasingUnsafeMutablePointer?) throws -> MTLRenderPipelineState
/*!
@method newRenderPipelineState:completionHandler:
@abstract 异步创建和编译一个新的mtlrender管线对象。
*/
public func makeRenderPipelineState(descriptor: MTLRenderPipelineDescriptor, completionHandler: @escaping Metal.MTLNewRenderPipelineStateCompletionHandler)
/*!
@method newRenderPipelineState:options:completionHandler:
@abstract 创建并编译一个新的mtlrender管线对象,并返回额外的反射信息
*/
public func makeRenderPipelineState(descriptor: MTLRenderPipelineDescriptor, options: MTLPipelineOption, completionHandler: @escaping Metal.MTLNewRenderPipelineStateWithReflectionCompletionHandler)
/*!
@method newComputePipelineStateWithDescriptor:error:
@abstract 同步创建和编译一个新的mtlcomputeUNK inestate对象。
*/
public func makeComputePipelineState(function computeFunction: MTLFunction) throws -> MTLComputePipelineState
/*!
@method newComputePipelineStateWithDescriptor:options:reflection:error:
@abstract 同步创建和编译一个新的mtlcomputeUNK inestate对象。
*/
public func makeComputePipelineState(function computeFunction: MTLFunction, options: MTLPipelineOption, reflection: AutoreleasingUnsafeMutablePointer?) throws -> MTLComputePipelineState
/*!
@method newComputePipelineStateWithDescriptor:completionHandler:
@abstract异步地创建和编译一个新的mtlcomputeUNK inestate对象。
*/
public func makeComputePipelineState(function computeFunction: MTLFunction, completionHandler: @escaping Metal.MTLNewComputePipelineStateCompletionHandler)
/*!
@method newComputePipelineStateWithDescriptor:options:completionHandler:
@abstract异步地创建和编译一个新的mtlcomputeUNK inestate对象。
*/
public func makeComputePipelineState(function computeFunction: MTLFunction, options: MTLPipelineOption, completionHandler: @escaping Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler)
/*!
@method newComputePipelineStateWithDescriptor:options:reflection:error:
@abstract 同步创建和编译一个新的mtlcomputeUNK inestate对象。
*/
@available(iOS 9.0, *)
public func makeComputePipelineState(descriptor: MTLComputePipelineDescriptor, options: MTLPipelineOption, reflection: AutoreleasingUnsafeMutablePointer?) throws -> MTLComputePipelineState
/*!
@method newComputePipelineStateWithDescriptor:options:completionHandler:
@abstract异步地创建和编译一个新的mtlcomputeUNK inestate对象。
*/
@available(iOS 9.0, *)
public func makeComputePipelineState(descriptor: MTLComputePipelineDescriptor, options: MTLPipelineOption, completionHandler: @escaping Metal.MTLNewComputePipelineStateWithReflectionCompletionHandler)
/*!
@method newFence
@abstract 创建一个新的MTLFence对象
*/
@available(iOS 10.0, *)
public func makeFence() -> MTLFence
/*!
@method supportsFeatureSet:
@abstract Returns TRUE if the feature set is supported by this MTLDevice.
*/
public func supportsFeatureSet(_ featureSet: MTLFeatureSet) -> Bool
/*!
@method supportsTextureSampleCount:
@brief 查询设备,如果它支持给定的sampleCount的纹理。
@return BOOL value. 如果是,设备支持给定的纹理样式。如果没有,设备不支持给定的sampleCount。
*/
@available(iOS 9.0, *)
public func supportsTextureSampleCount(_ sampleCount: Int) -> Bool
}