【发布时间】:2013-06-19 16:09:38
【问题描述】:
有时您需要检查您的 Linux 3D 加速是否真的有效(除了glxinfo 输出)。这可以通过glxgears 工具快速完成。但是,FPS 通常受限于显示器的垂直刷新率(即 60 fps)。因此该工具或多或少变得无用,因为即使是软件渲染也可以在现代 CPU 上轻松生成 60FPS glxgears。
我发现很难找到一个快速简单的解决方案,我回答了我自己的问题。希望它能节省您的时间。
【问题讨论】:
有时您需要检查您的 Linux 3D 加速是否真的有效(除了glxinfo 输出)。这可以通过glxgears 工具快速完成。但是,FPS 通常受限于显示器的垂直刷新率(即 60 fps)。因此该工具或多或少变得无用,因为即使是软件渲染也可以在现代 CPU 上轻松生成 60FPS glxgears。
我发现很难找到一个快速简单的解决方案,我回答了我自己的问题。希望它能节省您的时间。
【问题讨论】:
vblank_mode 环境变量可以解决问题。然后,您应该在现代硬件上获得数百 FPS。您现在可以将结果与其他人进行比较。
$> vblank_mode=0 glxgears
【讨论】:
vblank_mode=0 我现在在运行 OpenBSD 5.6 的旧 Intel i965 视频驱动程序上获得 1375.257 FPS。
如果您使用的是 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 驱动程序。
【讨论】:
找到/etc/X11/xorg.conf 的“设备”部分,其中包含以下指令之一:
Driver "intel"Driver "radeon"Driver "fglrx"并将以下行添加到该部分:
Option "SwapbuffersWait" "false"
并在将vblank_mode 环境变量设置为0 的情况下运行您的应用程序:
$ vblank_mode=0 glxgears
$ echo "0/SyncToVBlank=0" >> ~/.nvidia-settings-rc
通过取消选中X Screen 0 / OpenGL Settings / Sync to VBlank 的选项,可以在nvidia-settings 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
【讨论】:
nvidia-settings --load-config-only --assign="SyncToVBlank=0" 来更改 X 显示器的设置(并避免修改配置文件或运行 GUI)。运行glxgears 后,您可以运行nvidia-settings --load-config-only 来恢复配置设置——您可能想要这样做,因为它是运行X 显示的持久设置(即不仅仅是shell)。
将其他答案放在一起,这是一个可行的命令行:
env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears
这具有适用于 Mesa 和 NVidia 驱动程序的优点,并且不需要对配置文件进行任何更改。
【讨论】:
禁用 nvidia-settings(OpenGL 设置选项卡)中的 Sync to VBlank 复选框对我有用。
【讨论】:
我找到了一个适用于英特尔卡和使用 Bumblebee 的 nvidia 卡的解决方案。
> 导出 vblank_mode=0
glxgears
...
optirun glxgears
...
导出 vblank_mode=1
【讨论】:
对于intel驱动,还有this method
禁用垂直同步 (VSYNC)
英特尔驱动程序使用三重缓冲进行垂直同步,这样可以充分发挥性能并避免撕裂。要关闭垂直同步(例如用于基准测试),请在您的主目录中使用此 .drirc:
<device screen="0" driver="dri2">
<application name="Default">
<option name="vblank_mode" value="0"/>
</application>
</device>
【讨论】: