Guida all'accelerazione hardware 3d Donnie Berkholz Jorge Paulo Joshua Saddler Stefano Calzavara Stefano Pacella Cristiano Chiucchiolo Marco Leogrande Questa è una guida per far funzionare l'accelerazione 3d in Xorg sfruttando DRM sotto Gentoo Linux. 1.8 2007-04-25 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 x11-drivers/nvidia-drivers e x11-drivers/nvidia-legacy-drivers per le Nvidia e x11-drivers/ati-drivers per le ATI. Altri driver opensource sono media-video/ati-gatos per le schede video ATI, che 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'è DRM e cos'ha a che fare con Xorg?

DRM (Direct Rendering Manager) è 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 soltanto con Xorg. DRM funziona con i seguenti driver:

  • 3dfx
  • i8x0
  • matrox
  • rage128
  • radeon
  • mach64
  • sis300
  • via

Rimandiamo al sito web di DRI per maggiori informazioni e per la documentazione ufficiale.

Contatti

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

Installare Xorg e configurare il kernel
Installare Xorg

Leggere la Xorg Configuration Guide per installare ed 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 di un kernel gentoo-sources standard.

# ls -l /usr/src/linux 
(Assicuratevi che /usr/src/linux punti al vostro kernel attuale.)
lrwxrwxrwx 1 root root 22 2007-02-14 20:12 /usr/src/linux -> linux-2.6.18-gentoo-r4
# cd /usr/src/linux
# make menuconfig
Processor type and features --->
  <*> MTRR (Memory Type Range Register) support
Device drivers --->
  Character devices --->
  (L'opzione agpgart non è presente sui kernel a 64-bit;)
  (in tal caso basta scegliere il supporto per il vostro chipset.)
  <M> /dev/agpgart (AGP Support)
  (Selezionate il vostro chipset, non quello dell'esempio.)
  <M> Intel 440LX/BX/GX, I8xx and E7x05 support
  <M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
Compilare ed installare il kernel
# make && make modules_install

Non dimenticatevi di aggiornare grub.conf o lilo.conf e di lanciare /sbin/lilo se usate LILO.

Configurare il direct rendering
Configurare Xorg.conf

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"
     (Sostituite radeon con il nome del vostro driver.)
     Driver "radeon"
     ...
EndSection
...
Section "dri"
     Mode 0666
EndSection
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
Se avete compilato agpgart come modulo, dovrete aggiungere anch'esso a /etc/modules.autoload.d/kernel-2.6.
Verificare il funzionamento dell'accelerazione 3d
Riavviare con il nuovo kernel

Riavviate il sistema con il nuovo kernel e fate il login come utente normale. È giunta ora di vedere se il direct rendering è attivo e se funziona bene. glxinfo e glxgears fanno parte del pacchetto mesa-progs, accertatevi quindi che esso sia installato prima di lanciare questi comandi.

$ startx
(Nessun bisogno di caricare moduli per il vostro driver o agpgart,) 
(anche se li avete compilati come moduli.)
(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 della configurazione di DRM.) 
(Fatelo con la cpu al minimo sforzo possibile.)
Considerate anche che gli FPS potrebbero essere limitati dalla frequenza di aggiornamento del vostro schermo, se glxgears visualizza un valore di 70-100 FPS. games-fps/ut2004-demo è un migliore strumento di benchmark, dato che riesce a dare dei risultati più realistici.
Migliorare le prestazioni
Ottenere il massimo dal direct rendering

Alcune opzioni potrebbero aumentare le prestazioni del 30 percento (o più) rispetto alla norma. Potete configurarle in /etc/X11/xorg.conf. Prestate solo attenzione a controllare che la vostra scheda madre e la vostra scheda video supportino queste opzioni.

Prima di tutto, verificate se la vostra scheda video permette le scritture rapide (fast writes in inglese). Per fare questo, analizzate l'output di lspci. In particolare, cercate informazioni su "VGA compatible controller".

# lspci -vv
01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility M6 LY (prog-if 00 [VGA])
. . .
Capabilities: [58] AGP version 2.0
    Status: RQ=48 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW+ AGP3- Rate=x1,x2,x4

Nonostante lspci visualizzi un gran numero di informazioni, cercate la sigla FW nella sottosezione "Status" nella sezione AGP "Capabilities". Se trovate FW+ nella riga "Status", allora la scheda supporta le scritture rapide. Adesso possiamo controllare se anche la scheda madre le supporta.

Se non trovate FW+, ma invece FW-, non potrete abilitare le scritture rapide in xorg.conf, in quanto la vostra scheda video non le supporta.

Adesso controlliamo la scheda madre. Questa volta, cercate nella sezione "Host bridge" dell'output di lspci.

# lspci -vv
00:00.0 Host bridge: Intel Corporation 82830 830 Chipset Host Bridge (rev 02)
. . .
Capabilities: [a0] AGP version 2.0
    Status: RQ=32 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW+ AGP3- Rate=x1,x2,x4

Nuovamente, esaminate la sottosezione "Status" nella sezione AGP "Capabilities". Cercate la sigla FW: se trovate FW+, la vostra scheda madre supporta le scritture rapide.

Ricordate che sia le informazioni sulla scheda video, sia quelle della scheda madre devono indicare FW+. Se anche solo uno dei due dispositivi mostra la sigla FW- nella riga "Status", allora non potrete abilitare le scritture rapide in xorg.conf.

Assumendo che tutto sia andato bene e che sia la vostra scheda madre, sia la vostra scheda video supportino le scritture rapide, abilitate l'apposita opzione in /etc/X11/xorg.conf per ottenere il massimo delle prestazioni dal vostro hardware.

Section "Device"
(Questo ha aumentato i FPS da 609 a 618.)
     Option     "AGPMode" "4"
(Questo non ha avuto effetti misurabili, ma può aumentare
l'instabilità del sistema.)
(Può anche essere necessario attivarlo nel BIOS)
     Option     "AGPFastWrite" "True"
(Questo ha aumentato i FPS da 618 a 702. E' anche un po' rischioso, ma
poche persone han riportato problemi.)
     Option     "EnablePageFlip" "True"
     ...
EndSection
Abilitare AGPFastWrite su un chipset VIA chipset molto probabilmente bloccherà il vostro computer. I chipset VIA non lavorano piacevolmente con le scritture rapide: usate questa impostazione a vostro rischio. Ricordate, se volete che le scritture rapide funzionino a dovere, dovrete prima abilitare l'apposita opzione nel BIOS.

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

Risoluzione dei problemi
Non funziona il direct rendering e non so perchè.

Provate modprobe radeon prima di avviare X (sostituite radeon con il nome del vostro driver). Inoltre, 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.

Ho una Radeon e voglio l'uscita TV

Provate i driver gatos. Installatelo con emerge -av ati-gatos.

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

Provate i driver precompilati. Per gli ati-drivers, una lista si trova su http://ati.amd.com/support/drivers/linux/linux-radeon.html (per x86) e su http://ati.amd.com/support/drivers/linux64/linux64-radeon.html (per amd64). Se non funzionano neanche quelli, usate fbdev: sono lenti, ma funzionano.

Ho una scheda PCI e non funziona! Aiuto!

Modificate /etc/X11/xorg.conf. 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 sulla consistenza nell'uso delle maiuscole per 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