Tiler Utilization统计数据在iPhone OpenGL ES仪器中意味着什么?

Bra*_*son 25 iphone opengl-es instruments

我一直试图执行一些OpenGL ES性能优化,试图增加我能够在我的iPhone应用程序中呈现的每秒三角形数量,但我已经碰到了一堵砖墙.我已经尝试将我的OpenGL ES数据类型从固定点转换为浮点(根据Apple的推荐),交错我的顶点缓冲区对象,并最大限度地减少绘图状态的变化,但这些变化都没有对渲染速度产生影响.无论如何,我似乎无法在运行3.0操作系统的iPhone 3G上将我的应用程序推到320,000三角形以上.根据这个基准测试,我应该能够使用我正在使用的平滑阴影在这个硬件上达到687,000个三角形/秒.

在我的测试中,当我在Instruments中运行OpenGL ES性能工具对运行的设备时,我看到统计"Tiler利用率"在渲染我的基准测试时达到接近100%,但"渲染器利用率"仅达到约30 %.这可能提供了关于显示过程中瓶颈是什么的线索,但我不知道这些值是什么意思,我没有找到任何关于它们的文档.有人对iPhone OpenGL ES仪器中的这个和其他统计数据有什么好的描述吗?我知道iPhone 3G中的PowerVR MBX Lite是基于图块的延迟渲染器,但我不确定渲染器和Tiler在该架构中的区别.

如果它有任何帮助,如果您想自己下载和测试,可以使用此应用程序的(BSD许可的)源代码.在当前配置中,每次加载新的分子结构并将三角形输出到控制台时,它会启动一个小基准.

Piv*_*vot 26

Tiler利用率和渲染器利用率百分比分别测量顶点和片段处理硬件的占空比.在MBX上,Tiler利用率通常随着发送到GPU的顶点数据量(根据顶点的数量和每个顶点发送的属性的大小)进行缩放,并且片段利用率通常随着透支和纹理采样而增加.

在您的情况下,最好的方法是减少您发送的每个顶点的大小.对于初学者,我会尝试按颜色对原子和键进行分级,并使用恒定颜色而不是数组发送每个分区.我还建议调查短裤是否适合您的位置和法线,给予适当的缩放.在这种情况下,您可能还必须按位置进行分区,如果缩放以提供足够的精度,则不会覆盖您需要的范围.这些类型的技术可能需要额外的绘制调用,但我怀疑顶点吞吐量的改善将超过额外的每次绘制调用CPU开销.

请注意,确保每个顶点属性在32位边界上开始通常是有益的(在MBX和其他地方),这意味着如果将它们切换为短路,则应将位置和法线填充到4个组件.MBX平台的特性也使得在这种情况下你想要在glVertexPointer的调用中实际包含该位置的W分量.

您也可以考虑为您的多边形数据(尤其是球体)采用DOT3等替代照明方法,但这需要特别注意确保您不会使渲染片段受限,或者无意中发送比以前更多的顶点数据.

  • @Andrew Garrison:在这种情况下,它意味着对某种类型的物品进行分组.当他说"按颜色对原子和键进行分类"时,他的意思是我应该为所有共享相同颜色的项目分组顶点,然后只为那种颜色提交一次这些项目.这避免了必须为每个顶点指定颜色,从而减小了要发送的几何体的大小. (3认同)
  • 这与我第一次提出问题以来的经验是一致的.我将顶点和普通数据缩减为短路,使用附加组件填充以获得32位边界,并将渲染性能提高30%.剔除背面并调整深度测试又增加了10%.我将看看颜色分级,看看它有什么效果.感谢您的详细回复. (2认同)
  • 作为另一个后续,我终于开始为我的分子渲染实现颜色分级.它导致传递给GPU的几何体尺寸缩小了约20%,我观察到每个OpenGL ES帧的渲染速度提高了17%.我称之为胜利. (2认同)

Ros*_*one 6

很棒的答案,@ Pivot!作为参考,此Apple文档定义了以下术语:

  • 渲染器利用率%.GPU花费在执行片段处理上的时间百分比.
  • Tiler利用率%.GPU花费在执行顶点处理和平铺上的时间百分比.
  • 设备利用率%.GPU花费在任何平铺或渲染工作上的时间百分比.