在 Metal Debugger 中捕获精确的帧

Capture exact frame in Metal Debugger

假设我有一个仅在某些情况发生时才执行的金属着色器(内核)。我该如何调试它?当条件为真且带有着色器的命令缓冲区已提交时,我尝试在 commandBuffer.waitUntilIsScheduled() 之后放置断点但未成功,但是当我捕获帧时命令缓冲区没有出现...

有什么提示吗?

金属捕获的范围在设备或队列上。如果您在包含您的“帧”的命令缓冲区已经被安排时尝试开始捕获,那么您就太晚了。

参考这篇文章Capturing GPU Command Data Programmatically从您的代码中设置捕获,以便您可以更好地控制它。

虽然如果你只知道编码帧后的条件,你将不得不寻找不同的方法。例如,在开始对帧进行编码之前尝试确定条件是否为真。或者更早开始捕获并在条件为真时停止捕获,因此最后编码的命令缓冲区将是您感兴趣的缓冲区(尽管捕获大小每帧都会显着增加)。