使用 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
更多信息:
在 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
更多信息: