Rendu Compiz fluide sous Ubuntu (Feisty, Gutsy, Hardy) avec pilote Nvidia propriétaire

Cette petite astuce est probablement valable pour la plupart des distributions du moment. Une conjonction de négligeances assez peu compréhensibles (surtout au vu de la qualité, de la robustesse et de la vocation d'accessibilité non usurpée de la distribution) mènent à un rendu désastreux, par défaut, lorsque les effets visuels, en l'occurrence Compiz Fusion, sont activés, en particuliers avec les cartes Nvidia.

J'ai posé la question sur le forum nvidia, sans réponse franchement probante, cf. Why does it take 6 steps to get nvidia + compiz running smooth, fast and not torn ?

Ce qui ne va pas par défaut

L'animation est lente et saccadée, les animations sont "déchiquetées" (effet "tearing", ou encore, "non synchronisation à la VBL").

Les causes sont les suivantes

Les options de Compiz par défaut sont mauvaises : pas de détection de la fréquence de rafraîchissement, pas de synchronisation à la VBL (l'image est modifiée dans la mémoire de la carte graphique alors qu'elle est en train d'être affichée).

Les options du pilote nvidia par défaut sont mauvaises : pas de synchronisation à la VBL. De plus, Nvidia utilise une astuce pour différencier plusieurs modes écrans aux mêmes caractéristiques sur plusieurs affichages (si j'ai bien compris) et renvoie (via xrandr) une fréquence incorrecte qui correspond à un identifiant "virtuel". Enfin, les réglages utilisateurs ne sont pas restaurés automatiquement, il faut lancer manuellement nvidia-settings au démarrage de session.

Les options du serveur X par défaut sont inadaptées : pas de triple buffering (qui nécessite cependant plus de mémoire vidéo...).

Comment s'en sortir, en 6 étapes
  1. Ajouter manuellement l'option : Option "TripleBuffer" "True" dans son fichier /etc/X11/xorg.conf
  2. Ajouter également Option "DynamicTwinView" "false" dans xorg.conf (carte nvidia seulement)
  3. Installer le paquet ccsm via Synaptic (advanced desktop effects settings)
  4. Exécuter le programme fraîchement installé, dans les réglages généraux, onglet affichage, cocher la synchronisation à la VBL et la détection de la fréquence de l'écran
  5. Installer le paquet nvidia-settings
  6. Exécuter nvidia-settings. Cochet l'option Sync to VBlank pour les applications OpenGL
  7. Sous Gnome, dans les préférences Sessions, ajouter au démarrage la ligne de commande nvidia-settings -l pour appliquer le réglage précédent à chaque démarrage
Remarques pour les utilisateurs de deux écrans X distincts

Je ne suis plus dans les conditions de vérifier l'utilité de cette astuce sous Hardy Heron. En tout cas avec les versions précédentes, déclarer deux écrans X distincts (pour une même carte vidéo) avec Compiz pose des problèmes. Je ne parle pas du cas d'un écran splitté (Xinerama - Twinview).

J'avais contourné le problème de la façon suivante :
Toutefois j'imagine que ce problème n'est plus d'actualité. Il était dû à des erreurs de jeunesse du projet ;)

Conclusion

Rien de franchement sorcier là-dedans. Mais il y a clairement un manque de maturité / concertation / finition concernant Compiz. Certains problèmes s'expliquent par le fait que les valeurs par défaut ne doivent pas porter préjudice aux personnes disposant de petites configurations. Mais alors, pourquoi les distributions activent-elles désormais Compiz par défaut, si elles ne prennent pas les mesures nécessaires pour qu'il fonctionne convenablement ? Les gens ne remarquent-ils pas l'animation affreuse ?

Certains de ces problèmes ne concernent que les utilisateurs de cartes nvidia (pilotes propriétaires, ce qui peut expliquer les problèmes de cohérence / intégration ?) et il est vraisembable que certaines distributions (je pense à Mandriva) configurent correctement par défaut le serveur X...

Finalement, je n'utilise pas Compiz :)

15/05/08