linux - software - Deshabilitar la sincronización vertical para glxgears
glx xplorer (7)
Para gráficos Intel y controladores de gráficos opensource AMD / ATI
Busque la sección "Dispositivo" de /etc/X11/xorg.conf
que contiene una de las siguientes directivas:
-
Driver "intel"
-
Driver "radeon"
-
Driver "fglrx"
Y agrega la siguiente línea a esa sección:
Option "SwapbuffersWait" "false"
Y ejecute su aplicación con la variable de entorno vblank_mode
establecida en 0
:
$ vblank_mode=0 glxgears
Para gráficos Nvidia con el controlador Nvidia patentado
$ echo "0/SyncToVBlank=0" >> ~/.nvidia-settings-rc
El mismo cambio se puede realizar en la GUI de nvidia-settings
desactivando la opción en X Screen 0 / OpenGL Settings / Sync to VBlank
. O bien, si desea probar la configuración sin modificar el ~/.nvidia-settings-rc
, puede hacer algo como:
$ 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
A veces es necesario verificar si la aceleración 3D de Linux realmente está funcionando (además de la salida glxinfo
). Esto se puede hacer rápidamente con la herramienta glxgears
. Sin embargo, los FPS a menudo se limitan a la frecuencia de actualización vertical de las pantallas (es decir, 60 fps). Por lo tanto, la herramienta se vuelve más o menos inútil ya que incluso un software renderizado puede producir 60xPS fácilmente en CPUs modernas.
Me resultó bastante difícil encontrar una solución rápida y fácil para esto, respondo mi propia pregunta. Espero que te ahorre tiempo.
Desactivar la casilla de verificación Sincronizar a VBlank en nvidia-settings (pestaña de configuración de OpenGL) me sirve.
Encontré una solución que funciona en la tarjeta Intel y en la tarjeta nvidia usando Bumblebee.
> exportar vblank_mode = 0
glxgears
...
optirun glxgears
...
exportar vblank_mode = 1
La variable de entorno vblank_mode
hace el truco. Deberías obtener varios cientos de FPS en hardware moderno. Y ahora puede comparar los resultados con los demás.
$> vblank_mode=0 glxgears
Para los controladores de Intel, también existe este método
Deshabilitar la sincronización vertical (VSYNC)
El controlador de intel usa Triple Buffering para la sincronización vertical, esto permite un rendimiento completo y evita el rasgado. Para desactivar la sincronización vertical (por ejemplo, para la evaluación comparativa) use este .drirc en su directorio de inicio:
<device screen="0" driver="dri2">
<application name="Default">
<option name="vblank_mode" value="0"/>
</application>
</device>
Si está usando los controladores de fuente cerrada de NVIDIA, puede variar el modo de sincronización vertical sobre la marcha usando la variable de entorno __GL_SYNC_TO_VBLANK
:
~$ __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
Esto funciona para mí en Ubuntu 14.04 con los controladores NVIDIA 346.46.
Si unimos todo lo anterior, aquí hay una línea de comando que funcionará:
env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears
Esto tiene las ventajas de funcionar tanto para los controladores de Mesa como de NVidia, y no requiere ningún cambio en los archivos de configuración.
Josh