web-dev-qa-db-fra.com

Désactiver la synchronisation verticale pour glxgears

Parfois, vous devez vérifier si votre accélération Linux 3D fonctionne réellement (en plus de la sortie glxinfo.). Ceci peut être rapidement fait avec l'outil glxgears. Cependant, les FPS sont souvent limités au taux de rafraîchissement vertical de l’affichage (c’est-à-dire 60 ips). Ainsi, l'outil devient plus ou moins inutile puisque même un rendu logiciel peut produire facilement 60FPS glxgears sur des processeurs modernes.

J'ai trouvé assez difficile d'obtenir une solution rapide et facile pour cela, je réponds à ma propre question. J'espère que cela vous fera gagner du temps.

75
mschmoock

Le vblank_mode La variable d'environnement fait l'affaire. Vous devriez alors obtenir plusieurs centaines de FPS sur du matériel moderne. Et vous pouvez maintenant comparer les résultats avec d’autres.

$>   vblank_mode=0 glxgears
102
mschmoock

Si vous utilisez les pilotes NVIDIA à source fermée, vous pouvez modifier le mode de synchronisation verticale à la volée à l'aide de la commande __GL_SYNC_TO_VBLANK variable d’environnement :

~$ __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

Cela fonctionne pour moi sur Ubuntu 14.04 en utilisant les pilotes NVIDIA 346.46.

62
ali_m

Pour les pilotes graphiques Intel et les pilotes graphiques opensource AMD/ATI

Trouvez la section "Device" de /etc/X11/xorg.conf qui contient l’une des directives suivantes:

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

Et ajoutez la ligne suivante à cette section:

Option     "SwapbuffersWait"       "false"

Et lancez votre application avec vblank_mode variable d’environnement définie sur 0:

$ vblank_mode=0 glxgears

Pour les graphiques Nvidia avec le pilote propriétaire Nvidia

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

Le même changement peut être effectué dans le nvidia-settings GUI en décochant l'option en X Screen 0 / OpenGL Settings / Sync to VBlank. Ou, si vous souhaitez simplement tester le paramètre sans modifier votre ~/.nvidia-settings-rc fichier vous pouvez faire quelque chose comme:

$ 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
26
nocnokneo

En mettant les autres réponses toutes ensemble, voici une ligne de commande qui fonctionnera:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

Cela présente les avantages de fonctionner avec les pilotes Mesa et NVidia et de ne nécessiter aucune modification des fichiers de configuration.

6
Krellan

Désactiver la case à cocher Synchroniser avec VBlank dans nvidia-settings (onglet Paramètres OpenGL) me convient parfaitement.

6
neutro

J'ai trouvé une solution qui fonctionne dans la carte Intel et dans la carte nvidia en utilisant Bumblebee.

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

4
olmerg

Pour les drivers intel, il y a aussi cette méthode

Désactiver la synchronisation verticale (VSYNC)

Le pilote intel utilise la technologie Triple Buffering pour la synchronisation verticale, ce qui permet des performances optimales et évite les déchirures. Pour désactiver la synchronisation verticale (par exemple, pour l’analyse comparative), utilisez le fichier .drirc de votre répertoire personnel:

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