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.
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
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.
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
$ 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
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.
Désactiver la case à cocher Synchroniser avec VBlank dans nvidia-settings (onglet Paramètres OpenGL) me convient parfaitement.
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
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>