禁用glxgears的垂直同步

时间:2013-06-19 16:09:39

标签: linux 3d glx

有时您需要检查Linux 3D加速是否真的有效(除glxinfo输出外)。这可以通过glxgears工具快速完成。然而,FPS通常限于显示器垂直刷新率(即60fps)。因此,该工具或多或少变得无用,因为即使是软件渲染也可以在现代CPU上轻松生成60FPS的glxgears。

我发现很难找到一个快速简单的解决方案,我回答了我自己的问题。希望它可以节省您的时间。

7 个答案:

答案 0 :(得分:101)

vblank_mode环境变量可以解决问题。然后,您应该在现代硬件上获得数百FPS。现在,您可以将结果与其他人进行比较。

$>   vblank_mode=0 glxgears

答案 1 :(得分:60)

如果您使用的是NVIDIA闭源驱动程序,则可以使用__GL_SYNC_TO_VBLANK environment variable即时改变垂直同步模式:

~$ __GL_SYNC_TO_VBLANK=1 glxgears
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
299 frames in 5.0 seconds = 59.631 FPS

~$ __GL_SYNC_TO_VBLANK=0 glxgears
123259 frames in 5.0 seconds = 24651.678 FPS

这对我来说在Ubuntu 14.04上使用346.46 NVIDIA驱动程序。

答案 2 :(得分:26)

适用于英特尔显卡和AMD / ATI开源图形驱动程序

查找/etc/X11/xorg.conf的“设备”部分,其中包含以下指令之一:

  • Driver "intel"
  • Driver "radeon"
  • Driver "fglrx"

并在该部分添加以下行:

Option     "SwapbuffersWait"       "false"

vblank_mode环境变量设置为0的情况下运行您的应用程序:

$ vblank_mode=0 glxgears

对于使用专有Nvidia驱动程序的Nvidia图形

$ echo "0/SyncToVBlank=0" >> ~/.nvidia-settings-rc

通过取消选中nvidia-settings处的选项,可以在X Screen 0 / OpenGL Settings / Sync to VBlank GUI中进行相同的更改。或者,如果您只是在不修改~/.nvidia-settings-rc文件的情况下测试设置,则可以执行以下操作:

$ nvidia-settings --load-config-only --assign="SyncToVBlank=0"  # disable vertical sync
$ glxgears  # test it out
$ nvidia-settings --load-config-only  # restore your original vertical sync setting

答案 3 :(得分:6)

在nvidia-settings(OpenGL设置选项卡)中禁用“同步到VBlank”复选框对我来说非常有用。

答案 4 :(得分:4)

我找到了一个可以使用Bumblebee在intel卡和nvidia卡中运行的解决方案。

  

>   export vblank_mode = 0
  用glxgears
  ...
  optirun glxgears
  ...
  export vblank_mode = 1

答案 5 :(得分:3)

将所有其他答案放在一起,这是一个可行的命令行:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

这具有为Mesa和NVidia驱动程序工作的优点,并且不需要对配置文件进行任何更改。

答案 6 :(得分:2)

对于英特尔司机,还有this method

  

禁用垂直同步(VSYNC)

     

英特尔驱动程序使用三重缓冲进行垂直同步,这样可以实现全面的性能并避免撕裂。要关闭垂直同步(例如,用于基准测试),请在主目录中使用此.drirc:

<device screen="0" driver="dri2">
    <application name="Default">
        <option name="vblank_mode" value="0"/>
    </application>
</device>