Metal-Viewing Your GPU Workload with the Metal Debugger

使用Metal调试器查看GPU工作负载

使用Xcode中的各种Metal工具在GPU上逐步检查应用程序的状态。


Overview

要了解计算机如何运行应用程序或调试问题,通常使用调试器。传统的调试器是通过在一个线程上暂停来工作的,但是对于Metal应用程序来说,这并不能很好地工作。Xcode通过其“帧捕获(frame capture)”工作流为Metal提供了一个调试器。

要使用Metal调试器调试Metal应用程序,可以捕获一个动画帧并检查应用程序生成的命令来创建它。

在本文中,您将通过Xcode的Metal调试器运行 Using a Render Pipeline to Render Primitives,了解如何在运行时检查Metal应用程序。

Enable the Metal Debugger in the Xcode Project

在Xcode项目中启用Metal调试器

在渲染示例中,到项目的build settings中,并更改Metal编译器选项,以便调试包括着色器源代码的信息。将调试的“Produce debugging information”设置为“Yes, include source code”。

20200904154301.png

发送给客户的应用程序不应该包含调试信息,所以将Release设置为No。

Capture a Frame

捕获帧

Metal调试器与Xcode的Metal帧捕获功能一起工作。要使用Metal调试器,首先使用以下步骤捕获帧。

构建并运行您的项目。在Using a Render Pipeline to Render Primitives示例中,应用程序将显示一个三角形。

20200904185101.png

在应用程序运行时,返回Xcode并单击调试工具栏上的摄像头图标:

20200928170401.png

个人笔记:
摄像头图标闪烁时触发绘制,如果未在Degug Navgator中显示调用过程的话,尝试重复触发绘制。

Inspect Your Draw Call

检查你的绘制调用

Using a Render Pipeline to Render Primitives通过调用drawPrimitives(type:vertexStart:vertexCount:)绘制一个三角形。Xcode捕获这个draw调用和您在框架中进行的所有其他函数调用,并在Debug navigator中显示这些调用,如下所示。

20200928170901.png

如果您的绘图调用以错误的颜色或屏幕位置呈现,则可以在捕获的帧中对其进行识别,以获取有关原因的更多信息。

MyRenderEncoder组显示Metal执行以创建三角形的命令。 Xcode记录您的调用,以设置视口,渲染管道状态,顶点函数的参数以及最后一个绘制三角形的命令。单击绘图调用将其选中。

20200928171801.png

在主视图中,Xcode向您显示绘制调用的详细信息,这些调用分为以下类别:“顶点Vertex”,“片段Fragment”和“附件Attachment”。


20200928172001.png

每一个都代表一个绘制调用的阶段。如以下各节所示,对这些阶段进行更详细的分析,以找出问题的原因。

Inspect Your Vertices in the Geometry Viewer

在几何查看器中检查顶点

顶点阶段显示一组与应用程序图元相对应的顶点,也称为网格(meshes)或几何(geometry)。若要以可视方式检查此数据是否存在任何问题,请双击“几何(Geometry)”。

Xcode在几何图形查看器中渲染顶点阶段输出的线框。在此之下,Xcode在表中列出相同的数据。单击线框中的一个顶点,然后Xcode在表中选择其对应的行。

20200928172901.png

通过以这种方式签出顶点信息,可以确保在视觉和数字上,顶点输出看起来正确。
If there were misplaced vertices on screen, it's possible the error lies in the data you provided to the vertex function. Bound Resources also lists your vertex stage inputs, so check there for any discrepancies by navigating back using the left-directional in the breadcrumb.
如果屏幕上的顶点放置不正确,则可能是您提供给顶点函数的数据存在错误。"Bound Resources "还会列出您的顶点阶段输入,因此请通过在面包屑中使用向左导航来检查那里的任何差异。

20200928173901.png

查看您对Xcode顶部列出的顶点函数的输入。

双击第一个顶点缓冲区,Xcode在表中显示缓冲区的内容。

2020092817420.png

每行标识一个顶点,包括其位置和颜色。 Xcode在顶点的数字颜色数据的右侧呈现颜色的预览。如果此表反映了您不期望的值,请在您的应用程序中调整代码或其他源,以向顶点函数提供数据以解决问题。

View Your Vertex Function in the Shader Debugger

在着色器调试器中查看您的顶点函数

如果应用程序的一个或多个顶点在不正确的位置或颜色上呈现,则问题可能是由应用程序的顶点着色器代码错误引起的。要检查这种可能性,请使用以下步骤在着色器调试器中打开顶点函数。选择一个顶点(下图中标注1标记),然后单击“调试”按钮(标注2标记)。

个人笔记:自己的Demo项目中Degug按钮为灰,不能点。

Xcode在其着色器调试器中显示顶点函数的源代码。

打开代码后,请确保它是您期望的着色器。否则,该问题表明您使用了错误的渲染管道,或者您配置了错误的渲染管道。因为您配置了包括着色器的渲染管道,所以您应该知道打算使用哪个着色器来处理所选的图元。

着色器调试器在每行代码旁边显示GPU执行该行时计算并存储的值。

单击计算值右侧的点。 Xcode向您显示多个标注的计算值。

这使您可以比较同一帧中所有顶点函数调用的结果。这样做可以揭示不一致之处,表明您的着色器代码或输入数据中存在错误。

View Your Fragment Function in the Shader Debugger

在着色器调试器中查看片段功能

您还可以查看片段功能如何处理特定片段。若要查看片段着色器中的每一行代码如何确定像素的输出颜色,请查看助手编辑器中显示的附件Xcode。

20200928183201.png

单击并按住鼠标,直到Xcode显示目标标线。移动鼠标选择一个像素。

20200928183401.png

单击‘Debug’按钮。

个人笔记:Xcode12没有Debug按钮,也可能是我哪一步失误了,导致没有出现按钮。

Xcode在着色器调试器中打开您的片段函数,其中的代码行带有对此像素的计算进行注释。

打开代码后,请确保它是您期望的着色器。否则,该问题表明您使用了错误的渲染管道,或者您配置了错误的渲染管道。因为您配置了包括着色器的渲染管线,所以您应该知道打算处理哪个着色器以选择像素。

单击计算值右侧的点,在下图中用标注1标记。 Xcode显示该像素为您的应用返回的颜色的可视化效果,在下图中用标注2标记。

如果“渲染”应用程序的片段着色器中有更多行,则可以类似的方式检查它们,以了解每行如何影响输出像素的颜色。

Metal提供了许多其他出色的工具,可用于调试和优化应用程序的性能和能耗。有关更多信息,请参见工具。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342