[HOW-TO] llvmpipe - kompleksowe wsparcie dla niewspieranych układów graficznych SIS, VIA etc.

Awatar użytkownika
makson
Redaktor
Redaktor
Posty: 1541
Rejestracja: 23 mar 2009, 07:10
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Xfce
Architektura: x86_64

[HOW-TO] llvmpipe - kompleksowe wsparcie dla niewspieranych układów graficznych SIS, VIA etc.

Post autor: makson » 14 mar 2011, 22:08

Od pewnego czasu słowo ‘llvmpipe’ elektryzuje społeczność zaintersowaną sterownikami dla grafiki. Ten fork projektu softpipe oparty o llvm [Low Level Virtual Machine] i Gallium3D okazał się być zaskakująco wydajny. Umożliwia on liczenie grafiki na procesorze (w zależności od modelu procesora) około 10x szybciej, niż domyślny w Ubuntu - Software Resterizer.

Niestety jak do tej pory po llvmpipe nie ma ani śladu w repozytoriach Ubuntu (nawet 11.04), ani nawet w repozytoriach xorg-edgers, mimo iż w np. Fedora 15 alpha jest to nawet domyślny sterownik w przypadku braku sterownika Mesy do danej karty graficznej. Informacje w internecie o samodzielnym zastosowaniu llvmpipe są bardzo fragmentaryczne, a jest to dość trudna procedura.

Ten tutorial będzie miał zastosowanie do przypadków, gdy nie ma sensownych sterowników dla posiadanej karty graficznej - dotyczy to głównie producentów SIS i VIA, lub też uszkodzonych kart graficznych, co uniemożliwia ich prawidłowe działanie.

Należy pamiętać, że aktualne sterowniki open-source dla kart Intel, ATI, NVIDIA są znacząco wydajniejsze niż llvmpipe.

Jeżeli wynik komendy:

Kod: Zaznacz cały

glxinfo | grep OpenGL
daje następujący rezultat:

Kod: Zaznacz cały

OpenGL vendor string: Mesa Project
OpenGL renderer string: Software Rasterizer
OpenGL version string: 1.4 (2.1 Mesa 7.7.1)
OpenGL extensions:
to warto zainteresować się tym tutorialem.

Uwaga 1. Sterownik llvmpipe nie rozwiąże problemu niskiej rozdzielczości na kartach SIS. W tym celu trzeba przygotować odpowiedni moduł xorga zgodnie z tym tutorialem. Dopiero po tym zabiegu można znacząco poprawić wydajność grafiki na komputerach z układami SIS stosując llvmpipe z niniejszego przewodnika.

Uwaga 2. Jakkolwiek autor tutorialu za wszelką cenę spróbuje uprościć proces instalacji sterownika llvmpipe, to jednak jest on dość skomplikowany i wymaga głębokich zmian w systemie. Osoby podejmujące się tego wyzwania powinny znać obsługę Ubuntu i kompilację z polecenia ‘make’, przynajmniej w stopniu podstawowym. Jeżeli nie wiesz co robisz, to nie rób tego! Autor nie ponosi odpowiedzialności, za wszelkie szkody wynikające ze stosowania niniejszego tutorialu.

Sposób ten został wypróbowany na laptopie z kartą SIS Mirage 3, procesorem Intel Core 2 Duo i Ubuntu 10.04 64bit podnosząc wydajność grafiki 10 krotnie.

W związku z tym, że llvmpipe w najnowszej Mesie (7.10) dostało sporego przyśpieszenia. Warto skorzystać właśnie z tej Mesy. Dlatego tutorial dzielę na 3 części. Użytkownicy Ubuntu 10.04 i 10.10 powinni wykonać wszystkie 3 kroki. Użytkownicy Ubuntu 11.04 mogą od razu przejść do kroku trzeciego. Ten tutorial nie ma zastosowania dla użytkowników innych wersji Ubuntu.

1. Instalacja najnowszego jądra systemu 2.6.38 - wymaganego przez najnowszą Mesę
2. Instalacja Mesa 7.10.1
3. Kompilacja i przygotowanie sterownika llvmpipe.

1. Instalacja kernela 2.6.38

Ponieważ kernel 2.6.38 będzie zastosowany w Ubuntu 11.04, to można pójść na łatwiznę i ściągnąć ze strony Ubuntu Package od razu jądro przygotowane dla Ubuntu (natty).
Pobieramy pliki:
linux-image-2.6.38-6-generic.deb
linux-headers-2.6.38-6.deb
linux-headers-2.6.38-6-generic.deb
dla naszej architektury (i386 - 32 bity, amd64 - 64 bity).
Pakiety instalujemy następnie dwuklikiem.

Jeżeli wszystko się udało, to wypada zrestartować komputer. W menu GRUB należy wybrać jądro 2.6.38 (domyślnie będzie zaznaczone). Uruchomić na nim system i sprawdzić, czy wszystko stabilnie działa. Jeżeli tak to sprawdzamy wynik komendy:

Kod: Zaznacz cały

uname -a
, który powinien być zbliżony do tego

Kod: Zaznacz cały

Linux komputer 2.6.38-6-generic #44~lucid1-Ubuntu SMP Tue Jan 25 19:17:25 UTC 2011 x86_64 GNU/Linux
Jeżeli wszystko się zgadza to gratuluję posiadania najnowszego kernela i zachęcam do przejścia do punktu drugiego.

2. Instalacja Mesa 7.10.1

I w tym przypadku też możemy pójść na łatwiznę i użyć Mesa 7.10.1 z Ubuntu 11.04. W tym celu pobieramy ze strony Ubuntu Package następujące pakiety:
libgl1-mesa-dri.deb
libgl1-mesa-glx.deb
libglu1-mesa.deb
mesa-utils.deb

libdrm-intel1.deb
libdrm-radeon1.deb
libdrm-nouveau1a.deb

plymouth.deb
libplymouth2.deb
libncursesw5

Uwaga tym razem spotkamy się z pewnymi problemami z zależnościami, ale spróbujemy z nich sprytnie wybrnąć. Najnowsza Mesa ma w wymaganiach najnowsze sterowniki drm dla kart ATI, Intel i NVIDIA. Zaczynamy więc od instalacji tych paczek. libdrm-intel1.deb i libdrm-radeon1.deb powinny się zainstalować bez żadnego problemu dwuklikiem. Niesty libdrm-novueau1a.deb nie może istnieć, jednocześnie z obecnym już w Ubuntu 10.04 libdrm-novueau1, a próba odinstalowania tego drugiego z zależnościami spowoduje odinstalowanie prawie całego systemu. Dlatego należy odinstalować libdrm-novueau1 bez sprawdzania zależności komedną:

Kod: Zaznacz cały

sudo dpkg -r xserver-xorg-video-all
sudo dpkg -r libdrm-novueau1
Następnie bez sprawdzania zależności trzeba doinstalować pobrany libdrm-novueau1a.deb poleceniem:

Kod: Zaznacz cały

sudo dpkg -i /sciezka/do/pobranego/libdrm-novueau1a.deb
Popsuje to niestety zależności w plymoth :(.
Można sobie z tym poradzić instalując plymoth z Ubuntu 11.04 poleceniem:

Kod: Zaznacz cały

sudo dpkg -i /sciezka/do/pobranego/plymoth.deb
sudo dpkg -i /sciezka/do/pobranego/libplymoth2.deb
sudo dpkg -i /sciezka/do/pobranego/libncursesw5.deb
Następnie należy uruchomić Synaptic i sprawdzić, czy wszystkie zależności są rozwiązane. U mnie było już wszystko ok. Jeżeli nadal pozostaje jednak jakiś problem z pakietem, to poradzenie sobie z nim pozostawiam już inwencji użytkownika.

Teraz instalacja samej Mesy nie powinna stanowić problemu. Wystarczy dwuklik na pliki libgl1-mesa-dri.deb, libglu1-mesa.deb, libgl-mesa-glx.deb, mesa-utils.deb wcześniej pobrane. Następnie restartujemy komputer (uruchamiamy oczywiście na jądrze 2.6.38 ) i w terminalu wpisujemy:

Kod: Zaznacz cały

glxinfo | grep OpenGL
powinniśmy otrzymać następujący wynik:

Kod: Zaznacz cały

OpenGL vendor string: Mesa Project
OpenGL renderer string: Software Rasterizer
OpenGL version string: 1.4 (2.1 Mesa 7.10.1)
OpenGL extensions:
Jeżeli wersja Mesy się zgadza to możemy przejść do punktu trzeciego.

3. Kompilacja i przygotowanie sterownika llvmpipe

Próżno jest szukać llvmpipe w jakimkolwiek repozytorium Ubuntu. Ten sterownik niestety trzeba będzie sobie samemu skompilować.
Najpierw trzeba przygotować komputer do kompilacji, po przez instalację niezbędnych bibliotek komendą:

Kod: Zaznacz cały

sudo apt-get install build-essential autoconf libxt-dev libxi-dev libxmu-dev llvm llvm-dev libffi-dev xutils-dev
Wymagane jest na pewno o wiele więcej bibliotek, ale nie jestem w stanie ich wszystkich spamiętać. Jeżeli komendy ‘./configure’ skończą się niepowodzeniem to będzie napisane jakiej biblioteki brakuje. Należy pobrać bibliotekę o tej nazwie i z dopiskiem ‘-dev’ z Synaptica i powtórzyć komendę ‘./configure’, i tak aż do skutku.

llvmpipe wymaga też nieobecnego w Synapticu udis86. Pobieramy z tej strony udis86-1.7.tar.gz.
Rozpakowujemy pobrane archiwum. Uruchamiamy termial, przechodzimy do katalogu z rozpakowanym udis86-1.7 i wykonujemy komendy:

Kod: Zaznacz cały

./configure
make
sudo make install
Jeżeli ten etap mamy już za sobą to możemy przejść do pobrania źródeł MesaLib-7.10.1.tar.bz2 z tej strony.
Archiwum rozpakowujemy, przechodzimy w terminalu do katalogu z rozpakowaną Mesą i wykonujemy polecenia:

Kod: Zaznacz cały

./configure
make realclean
make linux-llvm
Dokładnie trzeba sprawdzić, czy wszystkie operacje zakończyły się powodzeniem. Jeżeli tak, to w katalogu z rozpakowaną Mesą powinien znajdować się katalog lib, a w nim katalog gallium, a z kolei w tym katalogu szereg nowo-skompilowanych bibliotek.

Ostatnią rzeczą, jaka nam pozostaje jest ustawienie nowo-skompilowanego sterownika llvmpipe jako domyślnego sterownika. W tym celu należy edytować plik ‘/etc/ld.so.conf’ komendą:

Kod: Zaznacz cały

sudo gedit /etc/ld.so.conf
i w pierwszej linijce wpisać ścieżkę do nowego katalogu gallium. Powinno to wyglądać mniej-więcej tak:

Kod: Zaznacz cały

’/home/uzytkownik/Pobrane/Mesa/lib/gallium/’
include /etc/ld.so.conf.d/*.conf
Po zapisaniu pliku przeładowujemy sterowniki komendą:

Kod: Zaznacz cały

sudo ldconfig
Następnie sprawdzamy czy wszystko jest ok. Wpisując komendę:

Kod: Zaznacz cały

glxinfo | grep OpenGL
Powinniśmy otrzymać wynik:

Kod: Zaznacz cały

OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe
OpenGL version string: 2.1 Mesa 7.10.1
OpenGL extensions:
Gratuluję! Od tej pory twój komputer działa na wydajnym i nowoczesnym sterowniku llvmpipe. Co prawda brakuje mu jeszcze rozszerzenia GLX_EXT_texture_from_pixmap, przez co nie zadziała na nim Compiz/Unity3D/GNOME3 Shell, ale wiele innych aplikacji 2D i 3D powinno jakoś działać.

Tutorial był pisany z pamięci. Podczas tworzenia tego tekstu mogło mi coś umknąć. Wszelkie uwagi proszę przesyłać na priva, a będę na bieżąco aktualizował ten poradnik.
Miałem Linuksa, zanim stało się to modne.
ODPOWIEDZ

Wróć do „Hardware-Multimedia”