Gentoo Logo

Przewodnik po sprzętowej akceleracji 3D

Spis treści:

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)
(Wyniki sprawdzenia mogą być różne zależnie od sprzętu.)

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
(Należy się upewnić, że /usr/src/linux to link symboliczny do aktualnego kernela.)
# 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) --->
   (Opcja agppart jest niedostępna dla 64-bitowych jąder; należy wybrać tylko wsparcie dla własnego chipsetu.)
   <M> Intel 440LX/BX/GX, I8xx and E7x05 support
 (Należy wybrać swój chipset zamiast powyższego)
   <M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
     <M> (Należy wybrać posiadaną kartę z listy)

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"
  (Użytkownicy innych sterowników muszą odpowiednio zmodyfikować wpis "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

(Należy wpisać nazwę modułu, który ma być automatycznie wczytywany)
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
(Nie ma potrzeby ręcznego ładowania modułów dla agpart, powinny wczytać się automatycznie
$ glxinfo | grep rendering
direct rendering: Yes
(Jeżeli odpowiedź brzmi: "No", akcelaracja 3D nie została zainstalowana)
$ glxgears
(Test ilości ramek na sekundę (FPS) w domyślnej wielkości.  Liczba
powinna być znacząco wyższa niż przed instalacją DRI. Test należy wykonać w
czasie, kiedy procesor nie jest zajęty innymi zadaniami)

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"
  (Tak zwiększa się ilość FPS z 609 do 618.)
  Option     "AGPFastWrite" "True"
  (Ta opcja nie daje wymiernego efektu, za to może zdestabilizować system)
  (Może się okazać konieczne ustawienie jej również w BIOS-ie)
  Option     "EnablePageFlip" "True"
  (Ta opcja zwiększa ilość FPS z 618 do 702. Jej użycie jest również ryzykowne)
  ...
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

  1. Dla Christophera Webbera za sugestię podpowiedzi na temat zmiany lub rekompilacji kernela.
  2. Dla Steve'a, za zwrócenie uwagi na wypadki dri oraz DRI w XF86Config.

8.  Przydatne adresy

  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


Drukuj

Zaktualizowano 10 września 2007

Oryginalna wersja dokumentu nie jest już aktualizowana

Podsumowanie: Dokument ten ma pomóc włączyć akcelerację 3D z użyciem DRM na Gentoo z Xorg.

Donnie Berkholz
Autor

Jorge Paulo
Redaktor

Joshua Saddler
Redaktor

Krzysztof Smirnow
Tłumacz

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.