学习Metal: 获取设备

Posted on
metal swift playground

使用Metal的第一件事, 就是要获取Metal的设备. 正如在OpenGL中, 需要首先获取到OpenGL的context.

为了便于调试, 我这里使用了Xcode的Playground, 操作系统是 OS X 10.13, Xcode版本是 10.0 Beta2.

最先需要引入Metal的Framework.

import Metal

var defaultDevice = MTLCreateSystemDefaultDevice()

如果系统上有多个GPU, 默认会获取到高性能的GPU.

我们定义一个函数来查看下设备的几个属性.

func showDevice(device: MTLDevice) {
    print("----------我们要展示一个Metal了-----------")
    print("设备名称:      \t\(device.name)")
    print("是否是低性能:   \t\(device.isLowPower  ? "是" : "否" )")
    print("是否接显示器:   \t\(device.isHeadless  ? "否" : "是" )")
    print("设置是否可移除: \t\(device.isRemovable ? "是" : "否" )")
    print("设备注册ID:    \t\(device.registryID)")
}

showDevice(device: device)

调用完之后, 我的输出是:

----------我们要展示一个Metal了-----------

设备名称: NVIDIA GeForce GT 750M

是否是低性能: 否

是否接显示器: 是

设置是否可移除: 否

设备注册ID: 4294968289

当然, 我们也可以获取到系统上所有的设备, 只需要调用 MTLCopyAllDevices .

// 当然我们也可以获取到所有的设备
let devices = MTLCopyAllDevices()

// 遍历所有设备
for device in devices {
    showDevice(device: device)
}

这次的输出是:

----------我们要展示一个Metal了-----------

设备名称: Intel Iris Pro Graphics

是否是低性能: 是

是否接显示器: 是

设置是否可移除: 否

设备注册ID: 4294968295

----------我们要展示一个Metal了-----------

设备名称: NVIDIA GeForce GT 750M

是否是低性能: 否

是否接显示器: 是

设置是否可移除: 否

设备注册ID: 4294968289

同样源码托管在github: https://github.com/young40/LearnMetal . 欢迎star, 感谢!