在 MacOS 上使用 OpenGL 的 GPU 时序
Posted
技术标签:
【中文标题】在 MacOS 上使用 OpenGL 的 GPU 时序【英文标题】:GPU Timings with OpenGL on MacOSX 【发布时间】:2012-02-06 14:57:15 【问题描述】:我需要处理 gpu 端的一组绘图调用所需的时间跨度。 OpenGL 3.2+ 有“GL_ARB_timer_query”扩展。不幸的是,MacOSX 仍然不支持该扩展。
你如何能够在 gpu 端测量时间,必须有一种老式的方式或不同的方式来做到这一点。
【问题讨论】:
ARB_timer_query
甚至不需要 GL 3.2(无论如何,它不是扩展,而是核心的一部分)。我什至在我的 2.1-only 7850GT 上安装了它,但它不是 Mac ;)
你能评价更多吗?据我所知,该扩展程序完全不可用...
就像说的那样,我不知道 MacOSX 的情况,因为我从未使用过它。我只是想说,ARB_timer_query
扩展不需要 GL 3.2 硬件或驱动程序,只要硬件和驱动程序支持与 GL 3.2 完全分离的扩展(无论如何它都不是扩展) ,而是一个核心功能)。
【参考方案1】:
你如何能够在 gpu 端测量时间,必须有一种老式的方式或不同的方式来做到这一点。
为什么一定要有一个?事实上,ARB_timer_query 的存在是因为从来没有一种方法来为 GPU 操作计时。这就是它的用途,它是 OpenGL 必须做到的唯一准确机制。
一直有通用的分析技术,例如更改分辨率以测试您是否受“填充率”限制等等。但是除了 ARB_timer_query 之外,没有办法在 OpenGL 中实际测量 GPU 处理时间。
【讨论】:
【参考方案2】:glFinish()
不能与主机端计时器一起工作吗?
【讨论】:
好吧,当绘制调用不是您想要执行的最后一个操作时,或者当您只是不想停止整个管道或阻塞整个 CPU 应用程序时,它至少会成为一个问题。但是,好吧,对于专门的测试运行,也许吧。 那么我将不得不在单独的线程中运行 glFinish 和主机端计时器,因为否则我会强制在主线程和 gpu 之间建立另一个同步点,如果我这么想的话。我需要 gpu 将下一帧定时不在同一帧上,所以这个同步点是不必要的。我可能应该事先提到这一点...... 您也可以尝试使用主机端计时器的 ARB_sync。虽然这可能更棘手。 @ronag 与 glFinish 相同的问题,它强制同步点 @niktehpui:不一定。您只需要查询围栏状态,而不是等待它。设置栅栏,glFlush 然后轮询状态。以上是关于在 MacOS 上使用 OpenGL 的 GPU 时序的主要内容,如果未能解决你的问题,请参考以下文章