Guide de l'accélération 3D matérielle Donnie Berkholz Jorge Paulo Vincent Rubiolo Ce guide vous aidera à faire fonctionner l'accélération matérielle avec XFree-DRM et XFree86 sur Gentoo Linux. 1.0.2 20 décembre 2003 Introduction
Qu'est-ce que l'accélération 3D matérielle et pourquoi en voudrais-je ?

Avec l'accélération 3D matérielle, le rendu tri-dimensionnel utilise le processeur graphique de votre carte vidéo au lieu de consommer de précieuses ressources processeur pour afficher des images en 3D. On appelle également cela « accélération matérielle » par opposition à « accélération logicielle », car sans accélération matérielle, votre processeur est obligé de tout calculer lui-même en utilisant les bibliothèques de rendu Mesa, ce qui consomme une quantité non négligeable de puissance. Alors qu'XFree86 supporte de façon standard l'accélération matérielle 2D, il lui manque souvent son équivalent 3D. L'accélération 3D matérielle est appréciable dans des situations qui requièrent le rendu d'objets 3D comme les jeux, la CAO 3D ou la modélisation.

Comment disposer de l'accélération 3D matérielle ?

Dans de nombreux cas, il existe à la fois des pilotes binaires et des pilotes open-source. Les pilotes open-source sont préférables puisque nous utilisons Linux et que l'open-source est l'un de ses principes sous-jacents. Parfois, les pilotes binaires sont les seuls disponibles, comme pour les cartes nVidia. Les pilotes binaires sont media-video/nvidia-kernel et media-video/nvidia-glx pour les cartes nVidia, media-video/mgavideo pour les cartes Matrox et media-video/ati-drivers pour les cartes ATI. D'autres pilotes open-source sont media-video/kyro-kernel pour les cartes KyroII et media-video/ati-gatos qui essaie de supporter les capacités vidéo des cartes ATI de façon plus complète.

Qu'est-ce que DRI ?

L'Infrastructure de Rendu Direct (dri.sourceforge.net), aussi connu sous le nom de DRI (Direct Rendering Infrastructure) est un framework qui permet d'accéder aux fonctions matérielles des cartes graphiques de manière sûre et efficace. Il inclut des changements au serveur X, à plusieurs bibliothèques clientes et au noyau. La première grande utilisation de DRI est la création d'implémentations rapides d'OpenGL.

Qu'est-ce que XFree-DRM et quelle est sa relation avec l'XFree86 normal ?

XFree-DRM est une amélioration d'XFree86 qui ajoute l'accélération 3D aux cartes en fournissant le module noyau nécessaire au Rendu Direct.

Objectif

Ce guide est destiné aux personnes qui ne peuvent faire fonctionner le Rendu Direct avec seulement XFree. XFree-DRM fonctionne pour les pilotes 3dfx, gamma, i8x0, matrox, rage128, radeon, mach64 (pour xfree-drm-4.3.0-r7) et pour la série des sis300. Puisque le gestionnaire DRI (DRM - Direct Rendering Manager) des noyaux 2.4 ne supporte pas XFree 4.3, le paquet xfree-drm est requis. Si vous utilisez un noyau 2.6, son gestionnaire DRI supporte XFree 4.3 (le paquet XFree-DRM Gentoo ne fonctionne pas encore sur les noyaux 2.6). Visitez le site DRI pour plus d'informations et de documentation.

Retour d'expériences

Envoyez vos suggestions ou questions à Donnie Berkholz.

Installez XFree86 et configurez votre noyau
Installez XFree86
# emerge x11-base/xfree
Configurez votre noyau

Trouvez le nom/modèle de votre jeu de composants (chipset) et activez seulement celui-ci.

# emerge pciutils; lspci | grep AGP
# 00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
L'affichage sera probablement différent pour votre matériel.

La plupart des noyaux, sinon tous, devraient avoir ces options. Ceci a été configuré en utilisant gentoo-sources-2.4.20-r5.

# ls -l /usr/src/linux 
lrwxrwxrwx    1 root     root           22 May 29 18:20 /usr/src/linux -> linux-2.4.20-gentoo-r5
Faites en sorte que /usr/src/linux pointe vers votre noyau.
# cd /usr/src/linux
# make menuconfig
Processor type and features --->
<*> MTRR (Memory Type Range Register) support
Character devices --->
<M> /dev/agpgart (AGP Support)
[*] Intel 440LX/BX/GX and I815/I820/I830M/I830MP/I840/I845/I850/I860 support
Activez le support de votre jeu de composants au lieu de celui-ci.
[ ] Direct Rendering Manager (XFree86 DRI support)

Soyez sûr que le gestionnaire DRI (DRM - Direct Rendering Manager) est désactivé. Le paquet XFree-DRM fournira le sien. En effet, celui du noyau 2.4 ne fonctionne qu'avec XFree 4.2.

Compilez et installez votre noyau
# make dep && make clean bzImage modules modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot

Si vous souhaitez nommer votre noyau autrement, faites en sorte de le copier vers /boot/VotreNom à la place. N'oubliez pas de configurer votre fichier grub.conf ou lilo.conf et de lancer /sbin/lilo ensuite si vous utilisez LILO.

Installez XFree-DRM et configurez le Rendu Direct
Installez XFree-DRM
# ACCEPT_KEYWORDS="~x86" emerge xfree-drm
Configurez XF86Config

Ouvrez /etc/X11/XF86Config et modifiez-le pour activer DRI et GLX.

...
Section "Module"
  Load "dri"
  Load "glx"
  ...
EndSection
...
Section "Device"
  Driver "radeon"
  ...
EndSection
...
Section "dri"
  Mode 0666
EndSection

Si vous utilisez un autre pilote, remplacez "radeon" par le vôtre.

Testez l'accélération 3D
Redémarrez avec votre nouveau noyau

Redémarrez avec votre nouveau noyau. Il est temps de voir si vous disposez du Rendu Direct et quel en est le bénéfice.

# startx
Inutile de charger les modules pour votre pilote ou pour agpgart si vous avez compilé agpgart comme module.
Ils seront chargés automatiquement.
# glxinfo | grep rendering
direct rendering: Yes
S'il est indiqué "No", vous ne disposez pas de l'accélération 3D.

# glxgears
Testez votre nombre de trames par secondes (FPS - Frames Per Second) pour la taille par défaut.
Le nombre devrait être significativement plus élevé qu'avant l'installation d'xfree-drm.
Faites ce test lorsque le processeur est en train de faire le moins de traitements possibles.
Utiliser les sources CVS
Ne faites pas cela si le paquet fonctionne bien. De par leur nature, les sources CVS changent constamment. Votre configuration peut ne pas être exactement comme celle indiquée ci-dessous.
Avez-vous besoin des sources CVS ?

En premier lieu, vous devez vérifier si le paquet xfree-drm fonctionne. Si ce n'est pas le cas et que vous avez regardé vos journaux (logs) pour vous assurer qu'il n'y a pas d'erreur de configuration, vous pouvez considérer l'utilisation des sources CVS. Il existe aussi des images quotidiennes des pilotes si vous ne souhaitez pas compiler tout le CVS.

Les sources CVS supportent-elles votre carte ?

Vérifiez la liste DRI des cartes supportées pour voir si le CVS supporte votre carte. Même si ce n'est pas le cas, mais qu'il supporte une carte similaire, essayez quand même.

« Linux 2.4 ne supporte pas l'AGP 8x. J'ai donc dû trouver une adaptation rétroapplicable (backport). Elle marche... elle ne patche pas très correctement et elle requiert la version 2.4.21 (j'ai seulement réussi à la faire marcher avec les sources vanilla, directement depuis l'archive tarball (pas depuis l'ebuild)). D'abord, allez récupérer le patch 2.4.20-2.4.21 sur kernel.org... Ensuite trouvez le patch : il était sur une liste de diffusion quelque part. Il ne patche pas proprement - un fichier est refusé, pci_ids.h - mais si vous regardez le fichier et la liste des rejets, il est très facile de régler le problème. Le pilote se charge cependant et me donne du 1600x1200 avec la video (même si c'est un peu lent à cause du manque de dga) et xfree-drm. » (SanityInAnarchy sur #gentoo) Le patch est un peu compliqué à faire fonctionner, mais voici le lien. Si vous pouvez désactiver l'AGP 8X dans votre BIOS, réglez-le à 4X et vous n'aurez peut-être pas besoin du patch.
Installez les sources CVS

Suivez ce guide jusqu'à « Compilez et installez votre noyau ». Continuez ensuite ici, nous suivons l'étape 6 du guide de compilation du DRI. Enfin, allez jusqu'au point 8.3.

Téléchargement CVS anonyme

Créez un répertoire pour stocker les fichiers CVS.

# cd ~
# mkdir DRI-CVS

Sortez les sources du CVS (checkout).

# cd ~/DRI-CVS
# cvs -d:pserver:anonymous@cvs.dri.sourceforge.net:/cvsroot/dri login
(appuyez sur ENTRÉE lorsqu'un mot de passe vous est demandé)
# cvs -z3 -d:pserver:anonymous@cvs.dri.sourceforge.net:/cvsroot/dri co xc
L'option -z3 fait en sorte que la compression soit utilisée pour réduire le temps de téléchargement.
Mettez vos sources CVS à jour

Plus tard, vous voudrez sans doute mettre à jour votre copie locale des sources DRI pour obtenir les dernières modifications Ce peut être fait grâce à :

# cd ~/DRI-CVS
# cvs -z3 update -dA xc
L'option -d fait en sorte que les sous-répertoires soient créés.
L'option -A fait en sorte que les sources principales soient téléchargées, pas les branches.
Créez une arborescence de compilation

Plutôt que de mettre les fichiers objets et les bibliothèques directement dans l'arborescence des sources, ils sont en réalité mis dans une arborescence de compilation. Celle-ci est créée avec la commande lndir.

# cd ~/DRI-CVS
# ln -s xc XFree40
# mkdir build; cd build
# lndir -silent -ignorelinks ../XFree40

L'arborescence de compilation sera remplie avec des liens symboliques qui pointent vers l'arborescence des sources CVS. Les utilisateurs avancés peuvent ainsi avoir plusieurs arborescences pour compiler et tester avec des options différentes.

Modification du fichier host.def

Le fichier ~/DRI-CVS/build/xc/config/cf/host.def est utilisé pour configurer la compilaton de XFree86. Vous pouvez le changer pour adapter vos options de compilation ou faire des ajustements spécifiques à votre configuration système. Le fichier host.def par défaut ressemble à ceci :

#define DefaultCCOptions -Wall
Pour i386:
#define DefaultGcc2i386Opt -O2
Pour Alpha:
#define DefaultGcc2AxpOpt -O2 -mcpu=ev6 (ou similaire)
Pour toutes les architectures
#define LibraryCDebugFlags -O2
#define BuildServersOnly YES
#define XF86CardDrivers vga tdfx mga ati i810
#define LinuxDistribution LinuxRedHat
#define DefaultCCOptions -ansi GccWarningOptions -pipe
#define BuildXF86DRI YES
/* Optionally turn these on for debugging */
/* #define GlxBuiltInTdfx YES */
/* #define GlxBuiltInMga YES */
/* #define GlxBuiltInR128 YES */
/* #define GlxBuiltInRadeon YES */
/* #define DoLoadableServer NO */
#define SharedLibFont NO
Regardez la ligne XF86CardDrivers pour être sûr que votre carte est listée.
Si vous souhaitez activer les optimisations 3DNow! dans Mesa et
dans les pilotes DRI, vous devriez ajouter ceci :
#define MesaUse3DNow YES
Vous ne devez pas forcément utiliser un processeur AMD
pour pouvoir activer cette option.
Le DRI regardera si le support du 3DNow! est disponible
au moment de l'exécution et l'activera si possible.

Si vous souhaitez activer les optimisations SSE dans Mesa et dans DRI, vous devez mettre à jour votre noyau vers la version 2.4.x. Mesa vérifiera si SSE est supporté par votre processeur et votre système d'exploitation, mais, pour compiler Mesa à l'intérieur de DRI, vous devez avoir les en-têtes du noyau Linux 2.4.x dans /usr/src/linux. Si vous activez les optimisations SSE avec une version plus ancienne du noyau Linux dans /usr/src/linux, Mesa ne compilera pas. Vous aurez été prévenu. Si vous avez bien un noyau 2.4.x, vous devriez ajouter ceci :

#define MesaUseKatmai YES
Compilez l'arborescence XFree86-DRI

Pour compiler l'arborescence DRI complète, faites :

# cd ~/DRI-CVS/build/xc/
# make World >& world.log

Il sera peut-être nécessaire de faire ce qui suit en fonction de ce que vous avez mis dans host.def :

# cd ~/DRI-CVS/build/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel
# make -f Makefile.linux radeon.o
Remplacez radeon par votre pilote.

Avec les options de compilation par défaut, il est normal de voir beaucoup d'avertissements pendant la compilation. La compilation prendra du temps ; vous voudrez peut-être regarder vos mails ou visiter slashdot (Ndt : ou bien linuxfr :-).

N'utilisez pas l'option -j avec make (c-à-d. n'utilisez pas distcc). Il a été rapporté qu'il ne fonctionne pas avec XFree86/DRI.

Avec votre éditeur de texte, cherchez des erreurs dans le fichier world.log indiquées par la chaîne « *** ».

Installez les modules CVS

Vérifiez que le(s) module(s) DRI du noyau ont été compilés :

# cd ~/DRI-CVS/build/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel; ls

Pour la Voodoo 3dfx, vous devriez trouver tdfx.o. Pour les Matrox G200/G400, il s'agit de mga.o. Pour les ATI Rage128, le pilote est r128.o. Pour les ATI Radeon, c'est radeon.o. Pour l'Intel i810, vous devriez trouver i810.o. Si la compilation du(es) module(s) DRI du noyau a échoué, vous devriez vérifier que vous utilisez la bonne arborescence du noyau Linux. Les noyaux les plus récents ne sont pas toujours supportés.

Installez par-dessus votre installation XFree86 existante. Vous voudrez sans doute faire une sauvegarde de XFree.

# quickpkg xfree
Ceci sauvegarde votre paquet XFree86.
# make install

Suivez la section "Configurez XF86Config" précédemment décrite.

Pour charger le module DRM approprié dans votre noyau, copiez le module dans /lib/modules/`uname -r`/kernel/drivers/char/drm/, lancez modules-update, puis redémarrez votre serveur X. Si vous ne voulez pas charger le module dans le noyau en cours d'exécution, utilisez le nom du noyau plutôt que uname -r.

Faites attention de bien retirer les anciens modules noyau DRI qui pourraient être déjà chargés. Notez que certains modules DRM requièrent que le module agpgart soit chargé en premier.
Ajustez vos réglages
Obtenez le maximum du Rendu Direct

Quelques options peuvent améliorer les performances jusqu'à 30% (voire plus) par rapport aux réglages par défaut. Réglez-les dans /etc/X11/XF86Config.

Section "Device"
  Option     "AGPMode" "4"
  Ceci a augmenté les trames par seconde (FPS) de 609 à 618.
  Option     "AGPFastWrite" "True"
  Ceci n'a pas eu d'effet mesurable, mais peut accroître l'instabilité de votre ordinateur.
  Vous pourriez avoir également besoin de le régler dans votre BIOS.
  Option     "EnablePageFlip" "True"
  Ceci a augmenté les trames par seconde (FPS) de 618 à 702.
  C'est également "risqué" mais peu de personnes ont eu des problèmes.
  ...
EndSection

Si vous souhaitez régler encore plus de détails, regardez la liste des possibilités sur le site du DRI.

Dépannage
Cela ne fonctionne pas. J'ai juste recompilé mon noyau ou en ai pris un nouveau.

A chaque fois que vous recompilez votre noyau ou en prenez un nouveau, vous devez recompiler le module noyau. Notez que vous n'avez pas besoin d'installer à nouveau xfree mais vous devez par contre réinstaller xfree-drm.

Cela ne fonctionne pas. Je n'ai pas de DRI et ne peux expliquer pourquoi.

Essayez insmod radeon avant de démarrer le serveur X. Essayez aussi de compiler agpgart directement dans le noyau au lieu d'un module.

Quand je lance <c>startx</c>, j'ai cette erreur : « [drm] failed to load kernel module agpgart »

C'est parce que vous avez compilé agpgart dans le noyau au lieu de le mettre en module. Ignorez ce message sauf si vous avez des problèmes.

Le Rendu Direct ne marche pas et j'ai une erreur dans <path>/var/log/XFree86.0.log</path> à propos d'une version de pilote trop ancienne.

Vous n'êtes pas en train d'utiliser le pilote xfree-drm. Vérifiez si vous avez compilé DRM et le pilote dans le noyau ; vous ne devriez pas.

J'ai une Radeon et je veux la sortie TV.

Jetez un œil aux pilotes ati-gatos (emerge -s gatos) .

Cela ne fonctionne pas. Ma carte est tellement nouvelle qu'elle n'est pas supportée du tout !

Essayez les pilotes binaires. Pour les pilotes ati-drivers, une liste est disponible sur http://www.schneider-digital.de/html/download_ati.html. S'ils ne supportent pas votre carte, utilisez fbdev. C'est lent, mais ça marche.

J'ai une carte PCI et cela ne fonctionne pas. A l'aide !

Dans la section « Device », activez ForcePCIMode.

Option "ForcePCIMode" "True"
Remerciements
  1. Christopher Webber qui a suggéré une question de dépannage à propos du changement et de la recompilation des noyaux.
  2. Steve qui a suggéré la consistance entre dri et DRI dans XF86Config.
Références
  1. http://forums.gentoo.org/viewtopic.php?t=46681
  2. http://forums.gentoo.org/viewtopic.php?t=29264
  3. http://dri.sourceforge.net/
  4. http://www.retinalburn.net/linux/dri_status.html