Guida all'accelerazione hardware 3d Donnie Berkholz Jorge Paulo Stefano Calzavara Stefano Rossi Cristiano Chiucchiolo Questa è una guida per far funzionare l'accelerazione 3d in Xorg sfruttando X11-DRM sotto Gentoo Linux. 1.2 2006-02-01 Introduzione
Cos'è l'accelerazione hardware 3d e perchè dovrei voler abilitarla?

Con l'accelerazione 3d hardware il rendering di immagini 3d usa il processore grafico della vostra scheda video invece di sfruttare preziose risorse della cpu nel disegnare. Si parla anche di accelerazione hardware piuttosto che di accelerazione software perchè, senza questa accelerazione 3d, la vostra CPU è obbligata a disegnare tutto da sola facendo uso delle librerie di rendering Mesa, ciò implica un considerevole consumo di risorse. Mentre Xorg di norma supporta l'accelerazione 2d hardware, spesso manca di quella 3d. L'accelerazione hardware 3d è apprezzabile in situazioni che richiedono il rendering di oggetti 3d come giochi, CAD 3D o la realizzazione di modelli.

Come attivo l'accelerazione 3d?

In molti casi, i driver esistono sia precompilati che opensource. I driver opensource son preferibili, perchè stiamo usando Linux e l'opensource è uno dei suoi principi chiave. A volte i precompilati sono però l'unica scelta, come per le schede Nvidia. I driver precompilati includono media-video/nvidia-kernel e media-video/nvidia-glx per le Nvidia, media-video/mgavideo per le Matrox e media-video/ati-driver per le ATI. Altri driver opensource sono media-video/kyro-kernel per le schede KyroII e media-video/ati-gatos ancora per le schede video ATI, essi mirano a sfruttare più a fondo le potenzialità video della scheda.

Cos'è il DRI?

Il Direct Rendering Infrastructure, abbreviato in DRI, è il meccanismo per effettuare l'accesso diretto alla scheda video in maniera sicura ed efficiente. Esso include cambiamenti al server X, a parecchie librerie ed al kernel. Lo scopo primario del DRI è quello di creare una veloce implementazione delle OpenGL.

Cos'è X11-DRM e cos'ha a che fare con Xorg?

X11-DRM è un miglioramento di Xorg che aggiunge l'accelerazione 3d per le schede aggiungendo il necessario modulo del kernel per il direct rendering.

Destinatari

Questa guida è per coloro che non riescono ad abilitare il direct rendering solamente con XFree. XFree-DRM funziona per i driver 3dfx, gamma, i8x0, matrox, rage128, radeon, mach64 e sis300. Rimandiamo al sito web di DRI per maggiori informazioni e per la documentazione ufficiale.

Contatti

Per suggerimenti, domanda ecc ecc mandate un e-mail a Donnie Berkholz.

Installare Xorg e configurare il kernel
Installare Xorg

Leggere Xorg Configuration Guide per installare e eseguire Xorg.

Configurare il kernel

Verificate qual è il vostro chipset ed abilitate il supporto solo per quello.

# emerge pciutils; lspci | grep AGP
# 00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
(Ovviamente il vostro output può essere diverso a causa del diverso
hardware.)

Se il vostro chipset non è supportato dal kernel, potete aggiungere agp=try_unsupported come un parametro del kernel. Saranno usate le procedure generiche di Intel per il supporto AGP. Per aggiungere questo parametro, modificate il file di configurazione del vostro bootloader!

La maggior parte dei kernel, se non tutti, dovrebbe avere queste opzioni. Nell'esempio si fa uso dei 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
(Assicuratevi che /usr/src/linux punti al vostro attuale kernel.)
# cd /usr/src/linux
# make menuconfig
Processor type and features --->
  <*> MTRR (Memory Type Range Register) support
Character devices --->
  <M> /dev/agpgart (AGP Support)
  [M] Intel 440LX/BX/GX and I815/I820/I830M/I830MP/I840/I845/I850/I860 support
(Selezionate il vostro chipset, non quello dell'esempio.)
  [ ] Direct Rendering Manager (XFree86 4.1.0 e superiore DRI support)

Assicuratevi che il Direct Rendering Manager (DRM) sia disattivato. Penserà a tutto il pacchetto X11-DRM.

Compilare ed installare il kernel
(Questo esempio è per kernel 2.4)
# make dep && make clean bzImage modules modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot

Se volete che il vostro kernel si chiami in modo diverso da bzImage, assicuratevi di copiarlo in /boot/nomekernel. Non dimenticatevi di aggiornare grub.conf o lilo.conf e di di lanciare /sbin/lilo se usate LILO.

Installare X11-DRM ed abilitare il direct rendering
Installare X11-DRM
# emerge x11-drm
Configurare Xorg.conf

Alcuni chipset richiedono di compilare xorg-x11 con USE="insecure-drivers". Si applica ai chipset mach64, unichrome e savage su xorg-x11-6.8.2, e a mach64 e unichrome su org-x11-6.8.99.x. Gli utenti Savage non dovrebbero provare xorg-x11-6.8.99.x poichè il supporto per savage è rotto.

(Aggiungere la flag USE insecure-drivers se si usa uno dei chipset sopra
menzionati)
# echo "x11-base/xorg-x11 insecure-drivers" >> /etc/portage/package.use

# emerge xorg-x11

Aprite /etc/X11/xorg.conf con il vostro editor preferito e modificatelo per abilitare DRI e GLX.

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

Se state usando un altro driver, sostituite "radeon" con la voce appropriata.

Modifiche a modules.autoload.d

Dovrete aggiungere il nome del modulo usato dalla vostra scheda in /etc/modules.autoload.d/kernel-2.6, per essere sicuri che il modulo sia caricato automaticamente all'avvio del sistema.

(Cambiare il nome del modulo come richiesto.)
intel-agp
Verificare il funzionamento dell'accelerazione 3d
Riavviare con il nuovo kernel

Riavviate il sistema con il nuovo kernel, è ora di vedere se il direct rendering è attivo e se funziona bene.

# startx
(Nessun bisogno di caricare moduli per il vostro driver o agpgart,) 
(se si è compilato agpgart come modulo.)
(Saranno caricati in automatico.)
# glxinfo | grep rendering
direct rendering: Yes
(Se c'è scritto "No", l'accelerazione non è abilitata.)
# glxgears
(Verificate i frames per secondo (FPS). Il numero dovrebbe essere) 
(significativamente più alto rispetto a prima dell'installazione di x11-drm.) 
(Fatelo con la cpu al minimo sforzo possibile.)
Usare i sorgenti del CVS
Non fatelo se è stato sufficiente xfree-drm.
Vi serve davvero il CVS?

Prima di tutto dovete controllare se il pacchetto x11-drm funziona. Se non lo fa e avete controllato i log per verificare che non è un errore di configurazione, potete prendere in considerazione il cvs. Ci sono anche driver snapshot giornalieri disponibili se non desiderate costruire il completo CVS.

Il CVS supporta la vostra scheda?

Controllate sul sito del DRI la lista dell'hardware supportato per vedere se il cvs supporta la vostra scheda. Anche se non lo fa, ma ne supporta una simile, provatelo.

Seguire le istruzioni del CVS

Il progetto DRI ha un documento sulla compilazione dal CVS. Leggete questo documento, e seguite le istruzioni per Installazione per X.org.

Installare il CVS

Verificate che i moduli del kernel per il DRI del vostro sistema siano stati compilati:

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

Per le 3dFX Voodoo, il file interessato è tdfx.o. Per le Matrox G200/G400, dovrete cercare mga.o. Per le ATI Rage 128, invece, r128.o. Per le ATI Radeon vi servirà radeon.o. Per le Intel i810, infine, è necessario i810.o. Se i moduli del kernel per il DRI non si son compilati, controllate di usare la giusta versione del kernel di Linux. I kernel più recenti non sono sempre supportati.

Installate sopra la vostra installazione di X.org. Potreste voler fare un backup di xorg-x11.

# quickpkg xorg-x11
(Questo fa il back up del vostro pacchetto Xorg-X11.)
# make install

Seguite la sezione "Configurare Xorg"

Per caricare il modulo appropriato per il kernel in uso, copiatelo in /lib/modules/`uname -r`/kernel/drivers/char/drm/, quindi lanciate modules-update e riavviate il server X. Se non state utilizzando il kernel che utilizzerete in futuro, invece di `uname -r`, usate la versione di quel kernel.

Assicuratevi che prima abbiate disattivato ogni vecchio modulo kernel DRI che potrebbe essere caricato. Attenzione che alcuni moduli DRM richiedono prima il caricamento del modulo agpgart.
Migliorare le prestazioni
Ottenere il massimo dal direct rendering

Alcune opzioni possono aumentare le prestazioni del 30 percento (e perfino di più). Attivatele in /etc/X11/xorg.conf.

Section "Device"
     Option     "AGPMode" "4"
(Questo ha aumentato i FPS da 609 a 618.)
     Option     "AGPFastWrite" "True"
(Questo non ha avuto effetti misurabili, ma può aumentare
l'instabilità del sistema.)
(Può anche essere necessario attivarlo nel BIOS)
     Option     "EnablePageFlip" "True"
(Questo ha aumentato i FPS da 618 a 702. E' anche un po' rischioso, ma
poche persone han riportato problemi.)
     ...
EndSection

Se volete altre opzioni, date un'occhiata a feature matrix sul sito del DRI o features listing su Sourceforge.

Risoluzione dei problemi
Non funziona, ho ricompilato il mio kernel o lo ho cambiato con uno nuovo.

Ogni volta che ricompilate il kernel o lo cambiate, dovrete ricompilare il modulo. Notate che non avete bisogno di riemergere xorg-x11, ma avrete bisogno di riemergere x11-drm.

Non funziona il direct rendering e non so perchè.

Provate insmod radeon prima di avviare X. Provate anche a compilare agpgart nel kernel anzichè come modulo.

Quando lancio startx, ricevo questo errore: "[drm] failed to load kernel module agpgart"

E' perchè avete compilato agpgart nel kernel anzichè come modulo, ignoratelo a meno che non avete problemi.

Il direct rendering non funziona ed in /var/log/Xorg.0.log c'è un'errore sulla versione troppo vecchia dei driver.

Non state usando x11-drm, controllate di aver compilato DRM ed i driver adeguati nel kernel, probabilmente non l'avete fatto.

Ho una Radeon e voglio l'uscita TV

Provate i driver gatos. emerge -s gatos.

Non funziona, la mia scheda è così nuova e potente che non è supportata...

Provate i driver precompilati. Per quelli ati, una lista si trova su http://www.schneider-digital.de/html/download_ati.php. Se non funzionano neanche quelli, usate fbdev, son lenti, ma funzionano.

Ho una scheda PCI e non funziona! Aiuto!

Nella sezione "Device" attivate ForcePCIMode.

Option "ForcePCIMode" "True"
Ringraziamenti
  1. Christopher Webber per il suggerimento di una domanda sul cambiare o ricompilare i kernel
  2. Steve, per il suggerimento tra i casi dri e DRI in XF86Config
Riferimenti
  1. http://forums.gentoo.org/viewtopic.php?t=46681
  2. http://forums.gentoo.org/viewtopic.php?t=29264
  3. http://dri.freedesktop.org/
  4. http://www.retinalburn.net/linux/dri_status.html