在没有探查器的情况下分析图形渲染

时间:2011-07-14 06:34:36

标签: opengl profiling rendering

现在我们拥有非常先进的工具来消除渲染,允许看到不同的阶段,绘制调用所花费的时间等等。但是如果没有它们,当了解内部发生的事情时,图形管道就是一个黑盒子。

假设由于某种原因你没有这样的工具或非常有限的工具。无论如何,你会如何衡量渲染中的时间?

我知道丢弃绘制调用以查看CPU时间,设置1x1视口以查看几何体成本,使用哑片段着色器突出显示填充率等技巧...它们已经很有用但只能给出粗略的关于发生了什么的想法,并且没有说明并行度的水平。

另外,每次绘制调用每个阶段花费的时间似乎很难,尤其是考虑到测量时由于噪声导致的精度不足。

当你的背包几乎是空的并且你还需要描绘你的渲染时,你会使用什么技巧?你的个人瑞士军刀是什么?

2 个答案:

答案 0 :(得分:4)

帧时间渲染时间

小代码/阶段/等花费的绝对时间。并不是那么相关,因为GPU驱动程序优化/批处理/并行/版本使得几乎不可能在没有GPU计数器的情况下进行精确的代码测量。 (如果您使用供应商库,则可以获得)

您可以轻松衡量的是每个代码更改的影响。你只会受到相对影响,而这正是你真正需要的。那只是使用帧渲染时间。

理想情况下,您应该能够在运行时编辑着色器或管道代码,并且可以直接检查整个典型场景的影响,例如只比较几个代码路径之间的图形。 (注意静态场景,否则你将以高度优化的静态视图结束,但动态场景表现不佳)

这是瑞士军刀名单:

  • 场景状态加载器
  • 使用场景状态的场景记录器(摄像机路径/添加 - 删除实体,纹理,网格,虚假输入等)。
  • 场景状态保护程序
  • 场景帧时间记录器(不仅仅是最终平均值,而是每帧渲染时间)
  • 即时着色器代码重新加载
  • 动态代码路径切换
  • 帧时间日志阅读器+图表+统计框架

请注意,场景状态加载/保存/记录对于很多其他事情都很方便,从调试到撤消/重做到动态重新加载,更不用说存储游戏了。 添加屏幕截图接受者+图像差异,您也可以对图形代码进行单元测试。

如果可以,请将其添加到CI服务器,以免影响巨大的代码影响。 (帮助艺术家办理登记资产时,不评估渲染影响) 必须阅读相关的CI图形测试工作:http://aras-p.info/blog/2011/06/17/testing-graphics-code-4-years-later/

答案 1 :(得分:1)

注意:我正在回答这个问题:“使用分析器分析图形渲染”,因为我正在寻找的东西;)

我主要在Mac上工作,而且我正在使用多种工具:

  • gDebugger版本5.8可在Windows和Mac上使用(此工具已由AMD购买,v6版本仅限Windows)。它为您提供有关状态更改,纹理使用,绘制调用等的统计信息。它还可用于调试纹理映射,并逐步查看场景的绘制方式。
  • PVRUniSCoEditor这是一个着色编辑器。它可以即时编译,并为您提供有关估计周期和寄存器使用情况的宝贵详细信息。
  • Instruments(来自XCode Utilities,仅限OSX),它从OpenGL驱动程序获取信息,因为您可以跟踪100%使用GPU的哪个部分(tiler,渲染器,纹理单元等),因此很容易找到瓶颈。 ..)
  • Adreno Profiler Windows工具,用于分析基于Adreno的移动设备。 (如果您使用Android应用程序,这是非常好的工具;))

关于“愚蠢的碎片着色器突出填充物”的诀窍是什么? (绘制一个简单的颜色?或更先进的东西?)