Facebook发布Quest性能优化工具——RencerDoc独立分支
Oculus将维护自己的fork
(映维网 2020年09月07日)RenderDoc这个图形调试器允许你快速、简单地捕获单个帧,从而获取关于所有应用程序的详细信息。映维网早前已经分享过关于如何通过RenderDoc优化Quest的博文系列,有兴趣的读者请点击下面的延伸阅读:
延伸阅读:研发实战一:如何通过RenderDoc优化Quest应用
延伸阅读:研发实战二:如何通过RenderDoc优化Quest应用
延伸阅读:研发实战三:如何通过RenderDoc优化Quest应用
延伸阅读:研发实战四:如何通过RenderDoc优化Quest应用
对于这款工具,Oculus日前宣布将正式维护自己的fork。所述fork提供了来自Quest搭载的骁龙835芯片的底层GPU配置数据,特别是来自tile渲染器的信息(因为特定于设备的特性,upstream到主RenderDoc没有意义)。这为你获取Quest的配置分析信息开辟了新的可能性。作为说明,开源项目RenderDoc最初始于开发者巴尔杜尔·卡尔松(Baldur Karlsson),并逐渐发展成一个非常重要的VR开发工具。
因为这是RenderDoc的一个fork,所以你应该相当清楚它的UI。如果不熟悉RenderDoc,请查看这个页面。以这个UI作为基础,RenderDoc for Oculus提供了两个标准RenderDoc所不存在的分析功能:Render Stage Tracing(渲染阶段跟踪)和Draw Call Tracing(绘制调用跟踪)。对于Render Stage Tracing(渲染阶段跟踪),你可以以Tile Timeline的形式获取GPU工作的详细视图。对于Draw Call Tracing(绘制调用跟踪),你可以获取关于绘制调用的45个不同的底层度量。
1. Tile Timeline时间轴
新数据将以Tile Timeline视图的形式呈现,而你可以通过“Window”->“Tile Timeline”菜单打开。当成功完成渲染阶段跟踪后,系统将显示单个帧的时间轴视图。时间轴的第一行显示在帧期间连续渲染的每个表面,包括表面ID,表面尺寸,MSAA状态,bit color,Tile尺寸和Tile数量等等。
时间轴的第二行列出了给定表面的每个Tile的所有渲染阶段。这将为每个渲染阶段提供精确的计时(以微秒为单位),色键和标签指示渲染阶段的类型:
Binning:Binning阶段
LoadColor:当数据从系统内存读入GMEM时
Render:当Tile渲染器在GMEM中渲染原语时
StoreColor:将数据从GMEM写入系统内存中的渲染目标时
LoadDepth和StoreDepth的作用与LoadColor和StoreColor相同,但用于表面的深度读取和写入
Blit:Blit操作
Tile Timeline显示了大量的信息,所以你可以通过鼠标滚轮缩放时间轴的特定区域。你或许记得GPU Ststrace的渲染阶段;这里的渲染阶段信息与你从Ststrace获得的信息相同。RenderDoc的UI令渲染阶段捕获变得更为方便,但无法查看CPU-GPU的并发性。有关渲染阶段的详细说明,请访问这个文档。
绘制调用度量
除了渲染阶段跟踪之外,RenderDoc for Oculus现在允许你通过Vulkan API对应用程序执行绘制调用跟踪,并收集多达45个与绘制调用相关的底层度量。
Oculus已经对每个度量进行过详细的说明。
如何使用
当在RenderDoc选择一个Replay Context时,你将会在通常的Quest设备连接旁边看到一个新的Context;它称为“Oculus Quest Profiling Mode”,并且是你应该使用的Context。如果这是你第一次在设备安装RenderDoc,头显会提示你授予RenderDoc写入文件的权限。
单击Profiling Mode后,RenderDoc将在安装并在头显运行服务器,然后建立连接。Profiling Mode Replay Context将头显置于详细的GPU分析模式。为了换取精确的分析数据,这种模式会带来5-10%的GPU性能损失。所述模式同时强制头显GPU调至最大时钟,从而确保你获得精确的分析数据。如果你选择没有Profiling Mode后缀的常规Oculus Quest设备,所述分析功能将禁用。请注意,当你切换到非Profiling Replay Mode或退出RenderDoc时,头显将恢复到默认的非Profiling状态。
选择Profiling Mode后,请通过RenderDoc界面启动需要分析的应用程序。在Launch选项卡中,配置可执行路径以选择要在头显运行的应用APK,然后点击Launch按钮。
一旦启动目标应用,RenderDoc中的状态面板应该会显示检测到的API;然后你可以通过点击Capture Frame来捕获帧。
2. 渲染阶段跟踪
然后,打开Event Browser选项卡(如果尚未打开),单击渲染阶段跟踪按钮(上图中的Oculus图标)。接下来,RenderDoc将执行渲染阶段跟踪。头显的接近传感器将禁用数秒钟,这样RenderDoc就可以在你不佩戴头显的情况下执行跟踪;通常而言,只有在你需要确定什么时候点击Capture Frame按钮时才佩戴头显。
几秒钟后,Tile Timeline窗口将显示渲染阶段数据,而你可以通过鼠标滚轮进行放大和缩小。
由于RenderDoc在Replay期间插入了加载和存储操作(用于图形调试功能),你可能会注意到时间轴出现意外的颜色/深度存储。若要将出现意外渲染阶段的可能性降至最低,请尝试将Replay优化级别设置为Fastest,如这个页面所示。
3. Vulkan绘制调用(alpha)
要执行绘图调用跟踪,请选择Windows->Performance Conter Viewer
点击Capture counters
通过单击复选框选择所需的性能计数器,然后单击Sample counters
在头显放场景后,Performance Counter Viewer将显示一个度量表。每一行代表一个绘制调用,你可以双击一行以在Eevent Browser中选择相应的绘制调用。
4. 渲染通道计时
Oculus同时对stock RenderDoc计时系统进行了改动。对于默认的RenderDoc,你单击时钟按钮时系统会围绕绘制调用添加性能查询,但这对Tile渲染器(如Oculus Quest运行的渲染器)存在不利的地方。对于使用time_elapsed计时器查询的OpenGL而言,绘制调用计时器查询将增加开销,因为GPU现在需要在每个Tile中的绘制调用之间暂停以计算其总成本。对于只支持时间戳的Vulkan,围绕一个绘制调用放置两个时间戳没有多大意义,因为绘制调用不是按顺序执行,所以结果根本不具有代表性。
Oculus为Settings添加了一个新的Profiling选项卡,你可以选择只围绕每个渲染通道添加时间戳。
考虑到渲染通道是作为一个单独的工作单元在GPU执行,测量它们的时间没有任何开销,而这在Vulkan中具有实际意义。在播放时,RenderDoc现在将显示每个渲染通道时间:
如果将播放模式设置为Fast,则与实际应用相比,这应该不会产生任何开销。
5. 下一步
Oculus将继续维护和改进他们的fork。团队表示:“我们相信RenderDoc是一个优秀的图形调试工具,我们将努力使我们的fork成为一个高质量的应用开发工具。”