Les cartes 3D sous Linux : Configuration de GL

     Il existe donc de multiples façons d'installer les drivers sous Linux en fonction de la carte 3D utilisée. Je ne parlerai pas des anciennes cartes 3Dfx Voodoo 1 et 2 maintenant largement obsolètes et pour lesquelles il existe un HOWTO. Je vais simplement commencer par lister les drivers disponibles en fonction du type de carte. Je précise pour ceux qui n'auraient pas remarqué le sujet de l'article que je ne parle ici que du support de l'accélération 3D :-)

Carte \ DriverUtah-GLX XFree 3DRI XFree 4NVidia XFree 4
3Dfx Voodoo3 et Voodoo5Oui
ATI Rage/Rage Pro/XPertOui
ATI 128/XPert 2000/Rage FuryOui
ATI RadeonBientôt...
Intel i810OuiOui
Matrox G200, G400, G400MaxOuiOui (pas au point)
Nvidia Riva/TNT/TNT2Oui (limité)Oui
Nvidia GeForce 256/II GTS/II MX/Quadro /2Oui
S3 ViRGEOui
S3 Savage3DOui
SiS 6326OuiOui


Je ne donne ce tableau qu'a titre indicatif. Merci de ne pas m'écrire pour me demander si la carte "Bidule Anihilator Twin Turbo de la mort" est supportée. Je n'en sais rien et je ne connais pas les noms commerciaux tous plus ridicules les uns que les autres de toutes les cartes 3D du marché ! Pour trouver la réponse : lisez la doc de votre carte, trouvez quelle est la puce utilisée par cette carte et consultez le tableau ci-dessus. Si je ne l'indique pas, c'est probablement que ça ne marche pas... Je répondrai à toute demande d'information sur le sujet par l'URL de cette page :-)


Quel driver choisir...

     Je vais peu parler ici des drivers DRI pour XFree 4. Leur configuration est simple par contre je ne les conseille définitivement pas dans leur version actuelle (XFree 4.01) pour les cartes Matrox : support limité des cartes G400, forte limitation en résolution pour les G200 et instabilité globale. Si vous avez une carte Matrox : utilisez Utah-GLX et XFree86 3.3.6 !

Pour les autres chipsets supportés à la fois par Utah GLX et DRI (i810, Sis), je ne suis pas en mesure de vous conseiller. Si quelqu'un a fait des comparaisons, je suis intéressé par l'information.

Si vous avez une carte NVidia, c'est simple : Utilisez le driver Nvidia !. L'équipe Utah-GLX n'a jamais pu avoir toutes les informations nécessaires sur les puces Nvidia, le driver Utah-GLX pour NVidia est donc très limité et lent (pas de support des transferts DMA ni AGP).


Configuration DRI XFree 4

     La documentation officielle d'installation DRI décrit déjà très bien la procédure donc je ne vais pas dupliquer ces informations dans cet article. Disons simplement pour résumer que vous devez installer le noyau Linux 2.4 (pas encore définitif à la date de rédaction de cet article) pour les cartes Matrox ou Intel i810 avec le module adapté à votre carte.

Une fois que XFRee 4 est configuré en 2D pour votre carte, vérifiez que dans la section "Module" du fichier /etc/X11/XF86Config-4, vous ayez bien quelque chose de la forme :

Section "Module"
...
# This loads the GLX module
Load       "glx"
# This loads the DRI module
Load       "dri"
EndSection

et c'est tout. Simple non ?


Configuration NVidia XFree 4

     Nvidia a publié une bonne documentation sur l'installation qu'il suffit de suivre. Je vais surtout insister sur les points qui posent souvent des problèmes lors de l'installation :

  • Installer le module NVidia pour le noyau. Soit directement via le package NVIDIA_kernel-0.9-5.i386.rpm, soit en tapant make dans le répertoire extrait de l'archive NVIDIA_kernel-0.9-5.tar.gz

  • Vérifier que les devices nécessaires sont bien présents dans /dev ou les créer si nécessaire avec le script makedevices.sh contenu dans le répertoire NVIDIA_kernel-0.9-5 :
    # ls -l /dev/nvidia*
    crw-rw-rw- 1 root root 195,   0 Apr 24 18:46 /dev/nvidia0
    crw-rw-rw- 1 root root 195,   1 Apr 24 18:46 /dev/nvidia1
    crw-rw-rw- 1 root root 195,   2 Apr 24 18:46 /dev/nvidia2
    crw-rw-rw- 1 root root 195,   3 Apr 24 18:46 /dev/nvidia3
    crw-rw-rw- 1 root root 195, 255 Apr 24 18:46 /dev/nvidiactl
  • Installer les librairies GLX NVidia. Soit directement via le package NVIDIA_GLX-0.9-5.i386.rpm, soit en tapant make dans le répertoire extrait de l'archive NVIDIA_GLX-0.9-5.tar.gz

  • Modifier le fichier de configuration de XFree (/etc/X11/XF86Config-4) pour remplacer dans la ligne
    Driver "nv"
    par
    Driver "nvidia"
  • Dans ce même fichier, il faut désactiver le chargement des modules DRI et GLcore puisque le driver NVidia n'utilise pas l'architecture DRI standard. La section "Module" devrait ressembler à ça :
    Section  "Module"
     Load  "dbe"
     Load  "extmod"
    # DGA est buggué dans la version actuelle du driver NVidia
     SubSection  "extmod"
      Option  "omit xfree86-dga"
     EndSubSection
     Load  "/usr/X11R6/lib/modules/extensions/libglx.so"
     Load  "pex5"
     Load  "record"
     Load  "xie"
     Load  "freetype"
     Load  "type1"
     Load  "speedo"
    EndSection
    
  • Enlever la version de libGL provenant de l'installation de Mesa. Vérifiez bien que vous n'avez que les fichiers et liens suivants dans /usr/lib :
    # ls -l /usr/lib/*GL*
    /usr/lib/libGL.a
    /usr/lib/libGL.la
    /usr/lib/libGL.so -> libGL.so.1.0.5
    /usr/lib/libGL.so.1 -> libGL.so.1.0.5
    /usr/lib/libGL.so.1.0.5
    /usr/lib/libGLU.a
    /usr/lib/libGLU.la
    /usr/lib/libGLU.so -> libGLU.so.1.2.030300
    /usr/lib/libGLU.so.1 -> libGLU.so.1.2.030300
    /usr/lib/libGLU.so.1.2.030300
    /usr/lib/libGLU.so.3 -> /usr/lib/libGLU.so.1
    /usr/lib/libGLcore.so.1 -> libGLcore.so.1.0.5
    /usr/lib/libGLcore.so.1.0.5
    
    Le package Mesa-3.3-5 installé avec une RedHat 7.0 par exemple comporte la librairie /usr/lib/libGL.so.1.2.030300 qu'il faut détruire, sinon, vos applications ne seront pas accélérées et continueront d'utiliser le moteur Mesa pour le rendu 3D logiciel.

Note importante pour les utilisateurs de machine multiprocesseurs :

Le driver NVidia peut utiliser le bus AGP de 2 façons : soit via le module agpgart développé initialement pour le projet Utah-GLX et présent par exemple dans le noyau fourni avec la RedHat 7, soit via le driver AGP intégré au driver NVidia lui même.

J'ai rencontré de nombreux problèmes de crashs en utilisant agpgart (Kernel panic: agpgart: timed out waiting for the other CPUs!) et aucun ennui en utilisant le driver AGP NVidia. Je vous conseille donc de désactiver le module agpgart sur une machine multi processeurs avec une carte NVidia. Ceci évoluera peut-être avec de futures versions du module agpgart ou du driver NVidia...


Configuration Utah-GLX XFree 3

     Terminons par le moins simple à installer :-) Comme Utah-GLX est toujours en développement, il faut en récupérer les sources via CVS et le recompiler soi même. Si votre noyau ne comporte pas le module agpgart, il faudra aussi patcher le noyau Linux et le recompiler avec ce module. Je vous conseille de suivre la documentation d'installation. En résumé, il faut :

  • Si votre distribution Linux toute moderne venait avec XFree 4.01, pas de chance, vous devrez le désinstaller et réinstaller ce bon vieux XFree 3.3.6 :-) Utah-GLX ne supporte QUE XFree86 3.3.6.

  • Si nécessaire, patcher et recompiler le noyau Linux avec le module agpgart. Si nécessaire, créer un device approprié : mknod /dev/agpgart c 10 175

  • Récupérer via CVS les sources de Utah-GLX et de Mesa 3.2 (ça ne marchera pas avec des versions plus récentes de Mesa).

  • Pour éviter tout conflit, désinstaller toute version courante des librairies Mesa

  • Créer dans le répertoire Utah-GLX un lien symbolique pointant vers les sources Mesa et recompiler puis installer Utah-GLX par un ./autogen.sh --enable-extra ; make ; make install

  • Modifier le fichier de config de XFree 3.3.6 /etc/X11/XF86Config pour y rajouter la section suivante :
    Section "Module"
     Load "/usr/local/lib/glx.so"
    EndSection
    
    Par la même occasion, lire et adapter le fichier de config /etc/X11/glx.conf

  • Dans le cas des cartes Matrox G400 et G400Max, la carte reste à sa fréquence de boot qui est bien inférieure à sa fréquence optimale (CPU à 82 MHz contre 126 MHz pour une G400 et 150 MHz pour une G400Max). Il faut récupérer l'utilitaire mgaclock ou l'utilitaire graphique gmgaclock. Vous pourrez alors faire tourner votre carte à la bonne fréquence.
    Par exemple, avec mgaclock, rajoutez dans vos procédures de démarrage un appel à cette commande sous la forme suivante :
    mgaclock preset "g400"
    pour une Matrox G400 et
    mgaclock preset "g400max" 
    pour une Matrox G400Max.

    Attention a bien lire la documentation et à agir en conaissance de cause. Si vous tentez de faire tourner votre G400 à la fréquence d'une G400Max, vous grillerez votre carte !!!.

  • Et... c'est tout, simple non :*)

Page suivante : Tests Quake III

Table des matières :

Projet Mesa 3D Projet Utah-GLX DRI pour XFree86 Site officiel OpenGL Drivers Linux Nvidia