Xcode日志:“启用Metal API验证”

39

我正在通过Xcode构建macOS应用程序。每次构建时,我都会得到以下日志输出:

启用了Metal API验证

据我所知,我的应用程序没有使用任何Metal功能。我没有使用硬件加速的3D图形、着色器、视频游戏功能或类似的东西。

为什么Xcode会打印Metal API日志输出?

我的应用程序是否在使用Metal?我可以或者应该禁用它吗?

如何禁用这个"启用了Metal API验证"的日志信息?

4个回答

59

通过 Xcode Scheme 切换 Metal API 验证:

Scheme > Edit Scheme... > Run > Diagnostics > Metal API Validation。

这是一个复选框,可能的选项为 EnabledDisabled

禁用会在您的 .xcscheme 文件中设置键 enableGPUValidationMode = 1

禁用后,Xcode 不再记录“Metal API Validation Enabled”日志消息。

注意:在 Xcode 11 及以下版本中,该选项出现在方案编辑器的“选项”选项卡中(而不是“诊断”选项卡)。


36
这是什么用途? - user5306470
Scheme > 编辑 Scheme... > 运行 > 选项 > Metal API 验证。 - Ravi Kumar

12

如何禁用消息:

在窗口顶部选择你的方案。在下拉菜单中点击编辑方案,进入诊断并取消选中Metal API 验证复选框。

我的应用程序是否正在使用 Metal?

是的,即使您的代码没有直接与 GPU 交互,许多高级框架也会这样做,特别是 Core ImageSpriteKitSceneKit。例如,我将我应用程序中讨厌的 "Metal API 验证已启用" 消息缩小到了这一行:

layer.backgroundColor = NSColor(patternImage: image).cgColor

我应该禁用Metal API验证吗?

启用验证会对每个Metal API调用进行检查,这会对CPU性能造成"小但可测量的影响。" 验证的目的是

检查调用Metal API时是否有代码错误,包括资源创建、编码Metal命令和其他常见任务中存在的错误。

苹果框架(如核心图像Core Image)很少会不正确地使用Metal API,因此如果您的应用程序仅使用那些高级别苹果框架,则可以放心禁用API验证。摆脱那烦人的输出消息值得冒险。


很好的细节,NSColor等API触发了日志记录。 - pkamb

1

我收到了完全相同的信息。

在scrollview闭包的末尾,我使用了.onDelete(perform: deleteLocations)

我将scrollview更改为列表,消息就消失了。


0

我最近开始为我的macOS应用程序更新工作。

它一直很好地运行着,没有出现错误,但是当我从一个旧的Xcode项目中添加了一个storyboard文件后,当我触发.loadWindow()时,在我的日志中看到了以下内容:

  • "Metal API Validation Enabled"
  • "fopen failed for data file: errno = 2 (No such file or directory)"

然后我查看了界面构建器,发现我的一个标签处于奇怪的位置。 所以我将该标签居中,并再次运行应用程序,"fopen failed for data file: errno = 2 (No such file or directory)"警告消失了。 每当我从.storyboard文件加载该窗口时,它仍然会显示"Metal API Validation Enabled",但这并不影响我。

因此,我认为这可能与操作系统如何绘制窗口和视图有关,或者可能与界面构建器版本差异有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接