使用 Xcode 调试 Metal 计算着色器

Debugging Metal compute shaders with Xcode

在 Apple 的 2018 年 WWDC session“Metal Shader 调试和分析”中,演讲者详细介绍了当时新的 Metal 调试工作流程。然而,他们并没有在演示中对计算着色器走得太远,只是简单地提到了调试计算内核时会出现的选项,并专注于顶点和片段着色器调试。

当我们仅将工作发送到 GPU 一次而不是每帧时,我们如何调试计算着色器? 请将我转到您推荐的其他 WWDC sessions,涵盖此主题并使用 MTLCaptureManager

要调试您的 Metal Compute Kernel 函数,您需要创建一个 CaptureScope

您不自己分配作用域,而是从 MTLCaptureManager:

中检索它
let sharedCapturer = MTLCaptureManager.shared()
let customScope = sharedCapturer.makeCaptureScope(device: device)
// Add a label if you want to capture it from XCode's debug bar
customScope.label = "Pls debug me"
// If you want to set this scope as the default debug scope, assign it to MTLCaptureManager's defaultCaptureScope
sharedCapturer.defaultCaptureScope = customScope

使自定义范围起作用的关键步骤:

  • 在计算循环之外创建范围。
  • 当范围处于活动状态时,您需要保持对它的强引用。

我上面说的,但是在代码中:

customScope?.begin()
let commandBuffer = commandQueue.makeCommandBuffer()!
// Perform your metal computing here
commandBuffer.commit()
customScope?.end()

一些相关的 WWDC:

WWDC 2019 - Delivering Optimized Metal Apps and Games

更多信息:

Developer Guide - Frame Capture Debugging Tools