Przewodnik po sprzętowej akceleracji 3D
1.
Wprowadzenie
Sprzętowa akceleracja 3D - czym jest i po co?
Dzięki sprzętowemu przyspieszeniu 3D proces trójwymiarowego renderowania
wykorzystuje procesor graficzny na karcie graficznej do rysowania
trójwymiarowych obrazów zamiast zużywania cennych zasobów procesora głównego.
Nazywa się to "sprzętową akceleracją", w odróżnieniu od "akceleracji
programowej", ponieważ bez przyspieszenia 3D procesor główny musiałby rysować
wszystko samodzielnie używając bibliotek renderowania Mesa, co pochłania dużo
mocy obliczeniowej. Podczas gdy Xorg typowo obsługuje dwuwymiarową akcelerację
sprzętową, często nie ma sprzętowej akceleracji 3D. Trójwymiarowe sprzętowe
przyspieszenie jest cenne w sytuacjach wymagających przedstawiania
trójwymiarowych obiektów, np. w grach lub trójwymiarowym modelowaniu czy też
w 3D CAD.
Jak uruchomić sprzętową akcelerację 3D?
W wielu przypadkach istnieją zarówno sterowniki binarne, jak i o otwartym
źródle. Wypada preferować te drugie, skoro używamy Linuksa i otwartość
oprogramowania stanowi jedną z podstawowych zasad. Czasami jednak nie mamy
wyboru i musimy użyć sterowników binarnych, jak w przypadku kart nVidii.
Sterowniki binarne to na przykład x11-drivers/nvidia-drivers i dla kart
nVidia oraz x11-drivers/ati-drivers dla kart ATI.
Czym jest DRI?
Direct Rendering
Infrastructure), czyli Infrastruktura Bezpośredniego Odtwarzania, znana
jako DRI, jest szkieletem dla bezpośredniego dostępu do sprzętu graficznego w
sposób wydajny i bezpieczny. Zawiera modyfikacje dla serwera X, bibliotek
klient-serwer oraz jądra. Najważniejszym zastosowaniem DRI jest tworzenie
środowiska do szybkiej implementacji OpenGL.
Co to jest DRM i jaki ma związek z Xorg?
DRM (Direct Rendering Manager) jest rozszerzeniem Xorga, które dodaje
akcelerację 3D dla kart graficznych poprzez dołączenie do jądra systemu modułu
niezbędnego do bezpośredniego renderingu.
Do czego służy ten przewodnik
Przewodnik ten jest dla tych, którzy nie mogą uzyskać bezpośredniego renderingu
z samym serwerem Xorg. DRM działa z następującymi sterownikami:
- 3dfx
- intel
- matrox
- rage128
- radeon
- mach64
- sis300
- via
Więcej informacji można znaleźć na stronie DRI.
Pytania, sugestie, propozycje
Wszelkie pytania, sugestie i propozycje prosimy zgłaszać na
adres Donniego Berkholza.
2.
Instalowanie Xorg i konfiguracja jądra systemu
Instalowanie Xorg
Aby uruchomić Xorg, należy przeczytać Przewodnik po konfiguracji Xorg.
Konfiguracja jądra
Należy zaznaczyć odpowiednią dla posiadanego chipsetu opcję.
Listing 2.1: Sprawdzanie chipsetu AGP |
# emerge pciutils; lspci | grep AGP
# 00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
|
Jeżeli jądra nie jest w stanie obsługiwać chipsetu ciągle jest szansa
uruchomienia sprzętu poprzez użycie parametru agp=try_unsupported.
Spowoduje on użycie rdzennych algorytmów Intela do obsługi AGP. Aby dodać ten
parametr do konfiguracji jądra, należy wyedytować plik konfiguracyjny
bootloadera.
Poniższe opcje dotyczą większości, jeżeli nie wszystkich typów jądra systemu.
Zostały one skonfigurowane z użyciem standardowego jądra gentoo-sources.
Listing 2.2: Konfiguracja jądra systemu |
# ls -l /usr/src/linux
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
|
Listing 2.3: Opcje w make menuconfig |
Processor type and features --->
<*> MTRR (Memory Type Range Register) support
Device drivers --->
Character devices --->
<M> /dev/agpgart (AGP Support) --->
<M> Intel 440LX/BX/GX, I8xx and E7x05 support
<M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
<M>
|
Kompilowanie i instalacja jądra systemu
Listing 2.4: Kompilacja i instalacja jądra systemu |
# make && make modules_install
|
Należy pamiętać o ustawieniu grub.conf lub lilo.conf i
wykonaniu /sbin/lilo jeżeli używany jest LILO.
3.
Konfiguracja DRI
Konfigurowanie xorg.conf
Należy otworzyć /etc/X11/xorg.conf w edytorze tekstu i
dokonanie w nim zmian aktywujących DRI oraz GLX.
Listing 3.1: xorg.conf |
...
Section "Module"
Load "dri"
Load "glx"
...
EndSection
...
Section "Device"
Driver "radeon"
...
EndSection
...
Section "dri"
Mode 0666
EndSection
|
Ładowanie modułów poprzez autoload.d
Moduł będzie automatycznie ładowany przy każdym starcie systemu jeśli dodamy
jego nazwę do pliku /etc/modules.autoload.d/kernel-2.6.
Listing 3.2: Edytowanie /etc/modules.autoload.d/kernel-2.6 |
intel-agp
|
Uwaga:
Jeżeli agpgart zostało skompilowane jako moduł należy je również dodać do
/etc/modules.autoload.d/kernel-2.6.
|
4.
Testowanie akceleracji 3D
Ponowne uruchomienie systemu z użyciem nowego jądra
Po ponownym uruchomieniu systemu i zalogowaniu się na „normalnego” użytkownika
należy sprawdzić czy direct rendering został zainstalowany i czy dobrze działa.
glxinfo oraz glxgears są częścią pakietu mesa-progs zatem
upewnijcie się, że jest on zainstalowany przed użyciem tych komend.
Listing 4.1: Testowanie renderingu |
$ startx
$ glxinfo | grep rendering
direct rendering: Yes
$ glxgears
|
Uwaga:
FPS mogą być ograniczone przez wielkość odświeżania monitora, więc jeżeli
glxgears pokaże tylko około 70-100 FPS. games-fps/ut2004-demo
jest lepszym narzędziem do pomiaru, ponieważ może podać rzeczywiste osiągi.
|
5.
Ulepszanie działania
Przyspieszanie direct renderingu
Kilka odpowiednio ustawionych opcji może zwiększyć wydajność nawet o
30 procent. Ustawia się je w /etc/X11/xorg.conf. Jednakże najpierw
musimy się dowiedzieć czy wspierają je nasza płyta główna oraz karta graficzna.
Po pierwsze, sprawdzimy czy nasza karta graficzna wspiera fast write. Dokonamy
tego poprzez dogłębną analizę wyniku polecenia lspci, a zwłaszcza
informacji "VGA compatible controller".
Listing 5.1: Sprawdzanie karty graficznej |
# 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
|
Mimo, iż wypisywanych jest dużo informacji, obchodzi nas tylko FW w
podsekcji "Status" dla AGP "Capabilities". Jeżeli otrzymujemy FW+ oznacza
to, że nasza karta wspiera fast write. Możemy przystąpić zatem do sprawdzania,
czy poradzi z nim sobie nasza płyta główna.
Ważne:
Jeżeli zamiast FW+ otrzymujemy FW- nie możemy odblokować fast
write w xorg.conf, ponieważ nasza karta go nie obsługuje.
|
Teraz możemy sprawdzić czy płyta główna obsługuje fast write. Znów posłużymy
się poleceniem lspci, lecz tym razem należy zwrócić uwagę na sekcję "Host
bridge"
Listing 5.2: Sprawdzanie płyty głównej |
# 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
|
I tym razem należy przyjrzeć się opcji FW. Jeżeli zobaczymy FW+
oznacza to, iż nasza płyta główna wspiera technologię fast write.
Ważne:
Należy pamiętać, że zarówno informacja o karcie graficznej, jak i płycie
głównej, musi pokazywać dokładnie ten sam stan FW. Jeżeli którekolwiek z
urządzeń pokazuje FW- nie możemy uaktywnić fast write w naszym
xorg.conf
|
Reasumując, jeżeli nasza płyta główna oraz karta graficzna wspierają fast write,
możemy ustawić tę opcję w /etc/X11/xorg.conf i wyciągnąć to co
najlepsze z naszego sprzętu :).
Listing 5.3: xorg.conf |
Section "Device"
Option "AGPMode" "4"
Option "AGPFastWrite" "True"
Option "EnablePageFlip" "True"
...
EndSection
|
Ostrzeżenie:
Wybór opcji AGPFastWrite na chipsetach VIA może spowodować niespodziewane
zawieszanie się systemu. Dzieje się tak, ponieważ chipsety VIA nie współpracują
dobrze z fast write, zatem ustawiamy tę opcję na własne ryzyko.
|
Uwaga:
Należy pamiętać, że jeżeli chcemy aby fast write działał poprawnie musimy
odblokować odpowiednią opcję w BIOS-ie.
|
Aby poznać więcej opcji należy udać się pod adres tabeli możliwości na
stronie DRI lub przeczytać ich listę
na stronie Sourceforge.
6.
Rozwiązywanie problemów
Nie działa rendering, nie wiem dlaczego
Należy wykonać modprobe radeon przed wystartowaniem serwera X (no i
zamienić radeon na nazwę pożądanego sterownika). Spróbuj również wbudować
agpgart do kernela, zamiast ładować go jako moduł.
Po wpisaniu startx, wyskakuje błąd: "[drm] failed to load kernel module
agpgart"
Spowodowane jest to tym, że agpart został wkompilowany do jądra, zamiast być
użytym jako moduł. Jeśli nie występują inne problemy można spokojnie zignorować
ten komunikat.
Mam Radeona, chcę mieć TV-Out
Do drzewa zostały włączone sterowniki tworzone przez projekt GATOS. Dla TV-Out wystarczy zainstalować
x11-drivers/xf86-video-ati.
To nie działa. Moja karta jest bardzo nowa i w ogóle nie jest wspierana
Spróbuj sterowników binarnych. Dla ati-drivers, listę znajdziesz tu:
http://ati.amd.com/support/drivers/linux/linux-radeon.html (dla x86)
oraz http://ati.amd.com/support/drivers/linux64/linux64-radeon.html
(dla amd64). Jeżeli to nie pomoże, użyj fbdev. Jest powolny, ale działa.
Mam kartę PCI i nic nie działa. Pomocy!
Edytujemy /etc/X11/xorg.conf. W sekcji "Device" uruchamiamy
ForcePCIMode.
Listing 6.1: Enabling ForcePCIMode |
Option "ForcePCIMode" "True"
|
7.
Podziękowania
-
Dla Christophera Webbera za sugestię podpowiedzi na temat zmiany lub
rekompilacji kernela.
-
Dla Steve'a, za zwrócenie uwagi na wypadki dri oraz DRI w XF86Config.
8.
Przydatne adresy
- http://forums.gentoo.org/viewtopic.php?t=46681
- http://forums.gentoo.org/viewtopic.php?t=29264
- http://dri.freedesktop.org/
- http://www.retinalburn.net/linux/dri_status.html
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|