Dieser Fehler hab mich schon ein wenig genervt, weil er nicht so offensichtlich war. Nachdem ich aber einem Fehler in XBMC, einer sehr netten Mediacenter-App, nachgegangen bin, konnte ich schnell die Spur zu der eigentlichen Ursache verfolgen. Das Problem scheint, aufjedenfall mit propritären fglrx ATI-Treibern zusammen zu hängen.
Die Symptome
- OpenGL scheint auf dem Ubuntu Desktop eigentlich ohne Probleme benutzbar zu sein. Das bedeutet Desktop Effekt und compositing funktionieren ohne Probleme. Auch können Applikationen wie VLC oder Mplayer Videos Hardware-beschleunigt durch OpenGL und Libva wiedergeben.
- Gelegentlich tritt ein Flackern auf trotz des im ATI Control-Center aktiviertem Vsync ! Das nervt zwar an einigen Stellen etwas ist aber kein vollständiges K.O. Kriterium
- Andere Leute reporten das einige Spiele unter Wine nicht funktionieren und OpenGL-Fehler melden. Kann ich persönlich nicht testen da ich nur wenig Wine benutze und so gut wie gar keine Spiele
- XMBC verweigert ab Version 9.04 schlichtweg mit der Fehlermeldung, es sei kein ordentlicher OpenGL-fähiger Grafiktreiber installiert den Dienst.
Debugging und Beseitigung
Nachdem ich in einem XBMC-Forum den Tip bekommen habe, mal die OGL-Fähigkeiten meines Systems zu überprüfen, bin ich schnell auf eine neue Spur gekommen.
/> glxinfo | grep 'direct rendering' direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
Praktischerweise gibts bei der obigen Ausgabe gleich den Tip mal die Libgl zu einer geschwätzigeren Ausgabe zu überreden.
/> setenv LIBGL_DEBUG verbose
daraufhin offenbart sich das eigentliche Problem sobald man eine App startet die OpenGL benutzt.
/> glxgears libGL: OpenDriver: trying /usr/lib/fglrx/dri/tls/swrast_dri.so libGL: OpenDriver: trying /usr/lib/fglrx/dri/swrast_dri.so libGL error: dlopen /usr/lib/fglrx/dri/swrast_dri.so failed (/usr/lib/fglrx/dri/swrast_dri.so: cannot open shared object file: No such file or directory) libGL: OpenDriver: trying /usr/lib32/fglrx/dri/tls/swrast_dri.so libGL: OpenDriver: trying /usr/lib32/fglrx/dri/swrast_dri.so libGL error: dlopen /usr/lib32/fglrx/dri/swrast_dri.so failed (/usr/lib32/fglrx/dri/swrast_dri.so: cannot open shared object file: No such file or directory) libGL error: unable to load driver: swrast_dri.so libGL: OpenDriver: trying /usr/lib/fglrx/dri/tls/swrastg_dri.so libGL: OpenDriver: trying /usr/lib/fglrx/dri/swrastg_dri.so libGL error: dlopen /usr/lib/fglrx/dri/swrastg_dri.so failed (/usr/lib/fglrx/dri/swrastg_dri.so: cannot open shared object file: No such file or directory) libGL: OpenDriver: trying /usr/lib32/fglrx/dri/tls/swrastg_dri.so libGL: OpenDriver: trying /usr/lib32/fglrx/dri/swrastg_dri.so libGL error: dlopen /usr/lib32/fglrx/dri/swrastg_dri.so failed (/usr/lib32/fglrx/dri/swrastg_dri.so: cannot open shared object file: No such file or directory) libGL error: unable to load driver: swrastg_dri.so libGL error: reverting to indirect rendering
Die abhanden gekommen Fähigkeit Direct Rendering zu benutzen, ist also weniger ein Konfigurationsfehler sondern vielmehr die fehlende Bibliothek swrastg_dri. In einem Ubuntu-Forum bekommt man hierzu schnell den Tip mal eine bestimmte Mesa-Lib zu installieren. Vermutlich hat hier jemand bei ATI vergessen diese als Abhängigkeit bei den fglrx-Paketen zu definieren.
sudo apt-get install libgl1-mesa-swrast
und siehe da, plötzlich geht XBMC wieder ohne Probleme und andere OGL-Apps zeichnen Videos und 3D-Daten wieder glatt wie ein Baby-Popo auf den Desktop ohne ruckeln und flickern.
Genau die gleichen Symptome aber „sudo apt-get install libgl1-mesa-swrast“ installiert libgl1-mesa-swrx11 und „glxinfo | grep ‚direct rendering'“ gibt immer kein direkt rendering.
Idee ?
Danke,
Nicolas