启用 GPU 帧捕获
Posted
技术标签:
【中文标题】启用 GPU 帧捕获【英文标题】:Enabling GPU Frame Capture 【发布时间】:2019-05-20 13:50:52 【问题描述】:我正在尝试构建一个 Metal 计算应用程序。我写了我的第一个内核,现在我想看看它是计算着色器的输出。但是,XCode 中禁用了“GPU 帧捕获”选项。 我正在使用 XCode 9.2。我已经在我正在运行的方案中启用了 GPU 帧捕获。 关于为什么会发生这种情况的任何提示?
【问题讨论】:
由于您实际上并没有呈现帧,Xcode 不知道什么构成了“帧”。您将必须添加程序化的开始和结束范围标记。您可以为此使用MTLCaptureManager
和MTLCaptureScope
。
FWIW:我在这方面从未真正取得过成功。我能让 GPU Frame Capture 用于计算内核的唯一方法是同时使用 Metal 进行一些图形处理(例如显示 AVCapture 的预览层)。
@KenThomases 我厌倦了这样做。没用。不知何故,isCapturing
每次都是假的。我使用的是startCaptureWithDevice
和stopCapture
。不过,我并没有制作MTLCaptureScope
。我刚收到sharedCaptureManager
并调用了 startCapture。
@MatthijsHollemans 显然我也在使用 Metal APIs 进行一些渲染的应用程序中编写代码。但是那里没有使用计算的输出,这可能就是我无法捕获帧的原因。
您可以尝试在创建MTLCommandBuffer
之前设置断点,然后编辑断点并选择添加操作-> 捕获GPU 帧。请注意,它往往只在第二次计算调度后才起作用......
【参考方案1】:
显然您无法在 XCode 9.2 上调试计算着色器。我迁移到 Xcode 10.2,并且能够使用 GPU 帧捕获来调试我的计算内核。
P.S 我不确定这是否是记录在案的限制,但这就是我所经历的。
【讨论】:
以上是关于启用 GPU 帧捕获的主要内容,如果未能解决你的问题,请参考以下文章
MacOS Metal:无法从命令行应用程序捕获 GPU 帧
为啥 xcode 编辑方案中的 GPU 帧捕获中没有 GLES 选项