Hardwarová 3D akcelerace Donnie Berkholz Jorge Paulo Anna Janáčková Tento dokument je návodem k "rozchození" 3d akcelerace za použití X11-DRM při Xorg v Gentoo Linuxu. 0.1 2006-08-19 Úvod
Co je hardwarová 3d akcelerace a proč ji chci?

Při použítí hardwarové 3d akcelerace se k vykreslování trojrozmerných obrazů využívá grafický procesor na vaší grafické kartě namísto drahocenných prostředků cpu. Také se jí říká "hardwarová akcelerace", oproti akceleraci softwarové, protože bez této 3d akcelerace je vaše cpu nuceno vykreslovat všechno samo, používajíc knihovny Mesa, což je poměrně náročné na výkon. Zatímco 2d hardwarová akcelerace je typicky v Xorg podporována, 3d akcelerace nikoliv. Trojrozměrná hardwarová akcelerace je neocenitelná při situacích, v nichž hlavní roli hraje renderování 3d objektů, například pří hrách, práci s 3d cadem či modelování.

Jak dostanu hardwarovou 3d akceleraci?

V mnoha případech existují jak binární, tak open-source ovladače. Otevřené ovladače jsou většinou vhodnější - koneckonců, používáme linux, jehož základním principem je právě open-source. Občas jsou ale binární ovladače jedinou možností, například u karet od nVidie. Binární ovladače zahrnují media-video/nvidia-kernel a media-video/nvidia-glx pro karty od nVidie, media-video/mgavideo pro karty od Matroxu a media-video/ati-drivers pro karty od ATI. Open-source ovladače zahrnují media-video/kyro-kernel pro karty KyroII a media-video/ati-gatos, jejichž cílem je plnější podpora schopností karet od ATI.

Co je DRI?

Direct Rendering Infrastructure, též známá jako DRI, je framework bezpečným a účelným způsobem umožňující přímý přístup ke grafickému hardwaru. Zahrnuje změny v X serveru, několika klientských knihovnách a kernelu. První a největší využítí pro DRI je vytvoření rychlé implementace OpenGL.

Co je X11-DRI a jaký je její vztah k obvyklému Xorg?

X11-DRM je rozšíření Xorg, které kartám přidává 3d akceleraci přidáním kernelového modulu nezbytného pro direct rendering.

Účel

Tento průvodce je určen lidem, kteří nemohou "rozchodit" direct rendering s pouhým Xorg. X11-DRM spolupracuje s ovladači řad 3dfx, gamma, i8x0, matrox, rage128, radeon, mach64 a sis300. Vlastníci karet VIA by místo x11-drm měli používat DRI poskytované přímo novějšími kernely (>2.6.13). Více na informací a dokumentace je k dispozici na domovské stránce DRI

Feedback

S návrhy, otázkami atd. se obracejte sem: Donnie Berkholz.

Nainstalujte Xorg a nakonfigurujte svůj kernel
Nainstalujte Xorg

Přečtěte si, prosím, naši Konfiguraci X serveru. Pomůže vám "rozběhat" Xorg.

Nakonfigurujte svůj kernel

Zjistěte svůj čipset a povolte pouze tento.

# emerge pciutils; lspci | grep AGP
# 00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
(Váš výstup nemusí odpovídat tomu výše uvedenému, neboť je velice pravděpodobné, že vlastníte jiný hardware.)

Jestliže váš čipset není kernelem podporován, můžete zkusit předat mu parametr agp=try_unsupported. Tento použije všeobecné rutiny Intelu pro podporu AGP. Tento parametr přidejte do konfiguračního souboru vašeho bootloaderu.

Většina, ne-li všechny kernely by měly tyto možnosti mít. Tento byl nakonfigurován používajíc 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
(Ujistěte se, že /usr/src/linux ukazuje na váš současný 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
(Místo toho výše uvedeného povolte svůj čipset.)
< > Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)

Ujistěte se, ze Direct Rendering Manager (DRM) je vypnut. Balík X11-DRM poskytne vlastní.

Zkompilujte a nainstalujte svůj kernel
(Toto je příklad pro kernel řady 2.4)
# make dep && make clean bzImage modules modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot

Pokud chcete pojmenovat svůj kernel jinak než bzImage, zkopírujte ho do /boot/vaše_jméno. Nezapomeňte nastavit grub.conf nebo lilo.conf a v případé, že používáte lilo, také spustit /sbin/lilo.

Nainstalujte X11-DRM a nastavte direct rendering
Instalace X11-DRM
# emerge x11-drm
Konfigurace Xorg.conf

Některé čipsety vyžadují rekompilaci xorg-x11 s USE="insecure-drivers". Toto platí pro čipsety mach 64, unichrome a savage pod xorg-x11-6.8.2, a mach64 a unichrome pod xorg-x11-6.8.99.x. Uživatelé savage by se neměli pokoušet o xorg-x11-6.8.99.x - je to rozbitý.

(Pokud používáte některý z výše uvedených čipsetů, přidejte USE flag 
insecure-drivers)
# echo "x11-base/xorg-x11 insecure-drivers" >> /etc/portage/package.use

# emerge xorg-x11

Otevřete /etc/X11/xorg.conf ve svém oblíbeném textovém editoru a povolte podporu DRI a GLX.

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

Používáte-li jiný ovladač, nahraďte "radeon" názvem svého ovladače.

Změny v modules.autoload.d

Abyste se ujistili, že bude modul, který vaše karta používá, automaticky načten při bootu systému, přidejte jméno tohoto modulu do /etc/modules.autoload.d/kernel-2.6

(Změňte jméno modulu podle vašeho hardwaru.)
intel-agp
Pakliže jste zkompilovali agppart jako modul, též jej přidejte do /etc/modules.autoload.d/kernel-2.6.
Vyzkoušejte 3d akceleraci
Rebootujte s novým kernelem

Rebootuje počítač s novým kernelem a přihlašte se jako běžný uživatel. Je čas ověřit si, zda máte direct rendering, a jak je dobrý.

$ startx
(Není třeba nahrát moduly pro váš ovladač či agppart, pokud jste zkompiloval
agppart jako modul)
(Budou načteny automaticky.)
$ glxinfo | grep rendering
direct rendering: Yes
(Jestliže místo "Yes" vidíte "No", 3d akceleraci nemáte.)
$ glxgears
(Vyzkoušejte počet snímků za vteřinu (FPS) při defaultní velikosti. Číslo by mělo být podstatně větší, než před instalací x11-drm. Proveďte to ve chvíli, kdy je cpu vytěžováno co možná nejméně.
Použití zdrojových kódů z CVS
Toto nepodniketje, pokud vám předcházející postup fungoval.
Potřebujete CVS?

Nejdřív musíte zkontrolovat, zda balík x11-drm funguje. Pakliže ne, a kontrolou logů jste se přesvědčil, že se nejedná o chybu konfigurace, možná budete chtít zvážit použití zdrojových kódů z CVS. . Dostupné jsou také denní snapshoty ovladačů, pokud nechcete stavět celé CVS.

Podporují zdrojové kódy z CVS vaši kartu?

V seznamu karet podporujích DRI si ověřte, zda je vaše karta ve zdrojových kódech z CVS podporována. Pokud není podporována přímo vaše karta, ale existuje ovladač pro kartu podobnou té vaší, vyzkoušejte ho.

Řiďte se instrukcemi CVS

Projekt DRI má vlastní dokument o kompilovaní CVS. Přečtěte si, prosím, tento dokument a následujte instrukce až k části Installing for X.org.

Nainstalujte CVS

Ověřte si, že DRI moduly pro kernel byly postaveny:

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

Pro karty 3dfx Voodoo byste měl vidět tdfx.o, pro Matrox G200/G400 mga.o, pro ATI Rage 128 r128.o pro ATI Radeon radeon.o, pro Intel i810 i810.o. Pokud se nepodaří zkompilovat DRI modul pro kernel, ověřte si, zda používáte správnou verzi kernelu. Nejnovější verze kernelu nejsou vždy podporovány.

Nainstalujte Xorg přes stávající instalaci. Možná budete chtít zálohovat svůj xorg-x11.

# quickpkg xorg-x11
(Toto zálohuje váš balíček xorg-x11.)
# make install

Postupujte podle oddílu "Nainstalujte Xorg" výše.

Pro načtení příslušného DRM modulu do vašeho běžícího kernelu, zkopírujte modul do /lib/modules/`uname -r`/kernel/drivers/char/drm/, pak spusťte modules-update a restartujte svůj X server. Pokud v tuto chvíli neběží kernel, který budete používat, použitje jeho jméno namísto `uname -r`,.

Ujistěte se, že nejprve unloadujete starší DRI moduly, které by už mohly být načtené. Vezměte na vědomí, že některé DRM moduly vyžadují, aby byl nejdrřív naloadován modul agppart.
Pohrajte si s výkonností <!-- ????????????????????????????????????????????? -->
Dostaňte z direct renderingu co nejvíc

Několika volbami můžete zvýšit výkonnost oproti defaultnímu nastavení až o 30 procent (nebo víc). Nastavíte je v /etc/X11/corg.conf. Nejprve ovšem budete muset zkontrolovat, zda jsou podporovány vaší grafickou kartou a základní deskou.

Nejprve se podívejme, zda grafická karta podporuje fast writes. To uděláme podrobnější inspekcí výpisu lspci. Podívejme se výslovně na informace o "VGA compatible contoller".

# 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

Mezi spoustou vyprodukovaných informací hledáme FW v pododdílu "Status" oddílu "Capabilities". Pokud se na lince u "Status" nachází FW+, znamená to, že karta podporuje fast writes. Teď můžeme zkontrolovat, zda-li fast writes podporuje naše základní deska.

Pokud nevidíte FW+, ale FW-, nemůžete v xorg.conf fast writes povolit. Vaše karta je nepodporuje.

Nyní se ujistěme, že také naše základní deska podporuje fast writes. Tentokrát se ve výpisu lspci dívejte po oddílu "Host bridge".

# 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

Opět ověřte pododdíl "Status" oddílu "Capabilities" vašeho AGP. Hledejte FW. Pokud vidíte FW+, vaše deska podporuje fast writes.

Pamatujte, že informace jak o vaší grafické kartě, tak o vaší základní desce musí ukazovat tu samou FW vlastnost. Pokud některé ze zařízení ukazuje FW-, nemůžete fast writes v xorg.conf povolit.

Předpokládaje, že vše proběhlo dobře a základní deska i grafická karta podporují fast writes, povolme tuto možnost v /etc/X11/xorg.conf a dostaňme z vašeho hardware nejvyšší výkon.

Section "Device"
  Option     "AGPMode" "4"
  (Toto zvýšilo FPS z 609 na 618.)
  Option     "AGPFastWrite" "True"
  (Toto nemá žádný měřitelný efekt, ale může snížit stabilitu vašeho pčítače.)
  (Možná to bute muset nastavit též v BIOSu.)
  Option     "EnablePageFlip" "True"
  (Toto vylepšilo FPS z 618 na 702. Je to taktéž "riskantní", avšak jen pár lidí oznámilo problém.)
  ...
EndSection
Povolení AGPFastWrite na čipsetech VIA s velkou pravděpodobností váš stroj. Čipsety VIA se s rychlými zápisy moc nekamarádí, takže použivání tohoto nastavení je na vaše vlastní nebezpečí. Pamatujte, že pokud chcete, aby fast writes fungovaly správně, musíte nejprve povolit příslušnou možnost v BIOSu.

Chcete-li nastavit ještě více vlastností, podívejte se na matici vlastností na webových stránkách DRI nebo seznam vlastností na Sourceforge.

Problémy
Nefunguje to. Právě jsem překompiloval kernel a přepnul na nový. <!-- přepnul? wtf?? -->

Pokaždé, když překompilujete kernel nebo vyměníte za nový, budete muset překompilovat i modul pro kernel. Vezměte v potaz, že remergovat xorg-x11 není potřeba, x11-drm však ano.

Nefunguje to. Nemám direct rendering a nedokážu říci proč.

Zkuste insmod radeon než nastartujete X server. Také zkuste zkompilovat agppart jako součást kernelu místo jako modul.

Když spustím startx, dostanu tuto chybu: "[drm] failed to load kernel module agpgart"

Toto se děje, přotože jste zkompiloval agppart jako součást kernelu místo jako modul. Pokud nemáte problémy, ignorujte to.

Direct rendering nefunguje, v /var/log/Xorg.0.log se píše cosi o chybě týkající se příliš nízké verze ovadačů.

Nepoužíváte ovladač x11-drm. Zkontrolujte, zda jste DRM a ovladač zkompiloval přímo do kernelu; to jste totiž měl.

Mám Radeon a chci TV-Out.

Vyzkoušejte ovladače ati-gatos. emerge -s gatos.

Nefunguje to. Moje karta je tak neuvěřitelně nová a "kůl", že není podporována vůbec.

Vyzkoušejte binární ovladače. Seznam pro ati-drivers ne nachází na http://www.schneider-digital.de/html/download_ati.php. Jestliže ji tyto nepodporují, zkuste fbdev. Je to pomalé, ale funguje.

Mám PCI kartu a nefunguje to. POMOOC!

V sekci "Device" povolte ForcePCIMode.

Option "ForcePCIMode" "True"
Přiznání
  1. Christopher Webber k návrhu a vyřešení otázky týkající se změny nebo rekompilace kernelu
  2. Steve k navrhnutí shody ve velikosti písma (dri a DRI) v XF86Config
Odkazy
  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