适用于Linux的开源OpenGL分析器

时间:2010-07-13 09:37:13

标签: linux opengl performance

标题很好地总结了我的问题:是否有适用于Linux的开源 OpenGL分析器?

我唯一能找到的是gDEBugger,但它只有7天的试用期,并且是非常封闭的来源。我会免费使用(如在自由中)软件开发,因此付费不是一种选择,尽管我可能会考虑接受免费(如在啤酒中)但关闭应用程序的答案。如果它适用于开源驱动程序(我的主计算机具有集成的英特尔图形卡),则可获得奖励积分。

5 个答案:

答案 0 :(得分:9)

感谢@ cypheon的回答,我检查了BuGLe。这太棒了,但我不得不花一点时间来获得有用的分析输出。我想将此添加为对该答案的评论,但我确实需要粘贴完整的代码示例,以便我开始一个新的答案。

正如他所建议的那样,stats_calltimes过滤器适合分析 - 不理想(因为它不显示调用堆栈信息),但通过一些工作,它可以显示总的平坦时间每帧每个GL功能。

您需要同时修改~/.bugle/filters~/.bugle/statistics个文件。首先,将此链添加到filters

的末尾
chain showcalltimes
{
    filterset stats_calls
    filterset stats_calltimes
    filterset showstats
    {
        show "average time per call"
    }
}

现在使用以下命令运行程序:

BUGLE_CHAIN=showcalltimes LD_PRELOAD=libbugle.so <your-program>

这将打印每帧每个GL功能所花费的平均时间。这本身并不是非常有用,因为对于像glVertex这样的调用,每帧调用数千次,即使累积时间非常重要,它也可能显示为0.00ms。因此,请向statistics添加新条目:

"total time per call" = d("calls:*") / d("calls:*") * d("calltimes:*") / d("frames") * 1000
{
    precision 3
    label "* (ms)"
}

我使用与“每帧调用”统计数据相同的技巧:乘以d("calls:*")乘以导致从未调用的任何函数的除零错误,以避免显示所有的无关的功能。

现在,返回我们添加到showcalltimes的{​​{1}}链,并将filters更改为"average time per call"

"total time per call"

现在我们将看到每帧每个功能花费的总时间的有用统计数据。如果您想要在多个帧中平均这些统计数据,请取消注释上面的chain showcalltimes { filterset stats_calls filterset stats_calltimes filterset showstats { show "total time per call" #key_accumulate "A" #key_noaccumulate "I" } } 行,然后您可以点击“A”(或将其重新映射到您选择的键)以开始累积。随着时间的推移,你会看到统计数据停止跳动,因为它们在很多帧上平均。

您还可以使用此链将这些统计信息记录到输出文件中:

key_accumulate

这很难理解,因为它只是将每个帧的各个统计数据一个接一个地放在一起,而且我还没有找到一种方法来对它们进行平均。因此,我首选的读取统计数据的方法是chain logcalltimes { filterset stats_calls filterset stats_calltimes filterset log { filename "bugle.log" } filterset logstats { show "total time per call" } } 链,并且累加器已打开。

答案 1 :(得分:6)

答案 2 :(得分:1)

答案 3 :(得分:1)

答案 4 :(得分:-1)

我也很喜欢vogl--请在https://github.com/ValveSoftware/vogl

查看

它具有分析,捕获和重放 - 但杀手功能是帧捕获,您可以通过重放捕获的状态来检查所有缓冲区,着色器变量等。