【发布时间】:2020-01-30 23:53:21
【问题描述】:
在具有多个 GPU 的机器上,是否可以通过编程方式告诉 CALayer 使用哪个 GPU?
我似乎无法在网上或 Apple 的文档中找到任何关于此的信息。如果无法选择,如何确定合适的 GPU?
【问题讨论】:
标签: objective-c swift macos gpu calayer
在具有多个 GPU 的机器上,是否可以通过编程方式告诉 CALayer 使用哪个 GPU?
我似乎无法在网上或 Apple 的文档中找到任何关于此的信息。如果无法选择,如何确定合适的 GPU?
【问题讨论】:
标签: objective-c swift macos gpu calayer
看起来您需要使用 Metal 在 CoreAnimation 中进行渲染。根据 Apple 的文档,您将通过引用直接从 CALayer. 继承的 CAMetalLayer 类对象来做到这一点。该信息在此处列出:
https://developer.apple.com/documentation/quartzcore/cametallayer
CAMetalLayer 公开了几个属性,例如preferredDevice,Apple 将其描述为:
在具有单个 GPU 的系统上,此方法返回默认设备对象;请参阅 MTLCreateSystemDefaultDevice()。在具有多个 GPU 的系统上,此方法返回最后用于合成和呈现 CAMetalLayer 的 MTLDevice。此设备对象通常对应于与显示图层的屏幕关联的 GPU。如果将层的设备属性设置为此设备对象,则可以减少 Core Animation 必须执行的跨 GPU 纹理副本的数量以在屏幕上呈现层的内容。
综上所述,我认为您需要直接查看 Metal 文档,该文档为与 GPU/eGPU 交互提供了一条相当不错的路径。可以在这里找到:
https://developer.apple.com/documentation/metal/mtldevice
该链接将带您了解与各种 GPU 设备交互的协议,它确实讨论了多个运行中的 GPU。祝你好运!
【讨论】: