Hardware 3D acceleration on an ATI Radeon 9600 mobile
UPDATE (2010-08-25): This article describes how to configure Ubuntu 8.04 LTS (Hardy Heron) for stable 3D-acceleration and desktop-effects with ATI R300 series (Radeon Mobility 9600 and similar) GPUs. On recent Ubuntu versions (such as 10.04 LTS) this should work out of the box, and making modifications to xorg.conf may actually introduce unwanted artefacts. Therefore if you upgrade from 8.04 LTS to 10.04 LTS you should remove your customised settings. See the description at the bottom of the article for more details...
One of the things that has really frustrated me over the last couple of years is the apparent inability of ATI to properly support their own hardware under Linux. My laptop has an ATI Radeon Mobility 9600 (RV350 M10) on board, which works fine under Windows with 3D acceleration and under Linux without 3D acceleration. However, as soon as I try to use ATI's own closed-source fgrlx driver, everything becomes unstable, and my laptop experiences random lockups, reboots, garbled screens and other nasty things.
NVIDIA seems to have learned their lesson some time ago, their linux drivers may also be closed-source, but at least they're fast, up-to-date, complete and stable. And they boast a wonderful configuration tool, nvidia-settings.
I had hoped that ATI would have fixed things for Ubuntu Hardy (8.04), so I could at least run Compiz and other OpenGL applications like Google Earth. Alas, although ATI did add AIGLX support to their latest fglrx driver, it basically sucks. It's slow, causes flickering with OpenGL apps and video playback and has managed to make my laptop even more unstable than before.
So I decided to give up on fglrx and try the open-source radeon driver from Xorg instead. Theoretically it should work out of the box, as the driver claims to support 3D direct rendering on R300 chips, including the RV350. Of course, in practice it doesn't.
To cut a long story short, I had to spend a full day googling and experimenting to get it to work. Here's what I found:
- The driver basically works. With the default settings it already enables direct-rendering and AIGLX. However, both the driver and glxinfo produce some misleading messages, that can keep you busy for a few hours... :-/ You can safely ignore these messages in /var/log/Xorg.0.log:
drmOpenDevice: node name is /dev/dri/card0 drmOpenDevice: open result is -1, (No such device or address) drmOpenDevice: open result is -1, (No such device or address) drmOpenDevice: Open failed ... (II) RADEON(0): Render acceleration unsupported on Radeon 9500/9700 and newer. (II) RADEON(0): Render acceleration disabled ... (--) RandR disabled ... (WW) AIGLX: 3D driver claims to not support visual 0x23 (WW) AIGLX: 3D driver claims to not support visual 0x24 (WW) AIGLX: 3D driver claims to not support visual 0x25 (WW) AIGLX: 3D driver claims to not support visual 0x26 (WW) AIGLX: 3D driver claims to not support visual 0x27 (WW) AIGLX: 3D driver claims to not support visual 0x28 (WW) AIGLX: 3D driver claims to not support visual 0x29 (WW) AIGLX: 3D driver claims to not support visual 0x2a (WW) AIGLX: 3D driver claims to not support visual 0x2b (WW) AIGLX: 3D driver claims to not support visual 0x2c (WW) AIGLX: 3D driver claims to not support visual 0x2d (WW) AIGLX: 3D driver claims to not support visual 0x2e (WW) AIGLX: 3D driver claims to not support visual 0x2f (WW) AIGLX: 3D driver claims to not support visual 0x30 (WW) AIGLX: 3D driver claims to not support visual 0x31 (WW) AIGLX: 3D driver claims to not support visual 0x32
As long as you have these:
(II) RADEON(0): [dri] Found DRI library version 1.3.0 and kernel module version 1.28.0 ... (II) RADEON(0): Direct rendering enabled ... (II) RADEON(0): RandR 1.2 enabled, ignore the following RandR disabled message. ... (II) AIGLX: Loaded and initialized /usr/lib/dri/r300_dri.so (II) GLX: Initialized DRI GL provider for screen 0
As for glxinfo, its output is somewhat broken. Only pay attention to the line that says:
direct rendering: Yes
If it says No, run LIBGL_DEBUG=verbose glxinfo and check for error messages. If it produces the following error, chances are that you still have the fglrx driver installed:
libGL: OpenDriver: trying /usr/lib/dri/r300_dri.so libGL error: dlopen /usr/lib/dri/r300_dri.so failed (/usr/lib/dri/r300_dri.so: undefined symbol: _glapi_get_dispatch)
The presence of fglrx interferes with the open-source driver, even if you're not using it. Uninstall the package xorg-driver-fglrx using Synaptic, and try again.
googleearth from a terminal, you get this message:*********************************WARN_ONCE********************************* File r300_render.c function r300Fallback line 471 Software fallback:ctx->Line.SmoothFlag ***************************************************************************
Luckily you can change this fallback behaviour on a per-application-basis by installing the package driconf and setting disable low-impact fallback for the application googleearth-bin. See this Ubuntu forum-post by dinxter for more details.
If you're using Google Earth 4.3 and things are really slow even with hardware rendering, try switching off sky rendering in the view menu.
compiz wrapper script gives up. If I ran compiz --replace from a terminal, I got this message:Checking for Xgl: not present. Found laptop using radeon driver. aborting and using fallback: /usr/bin/metacity
I could however make it work by bypassing the wrapper script and running compiz.real directly: LIBGL_ALWAYS_INDIRECT=1 compiz.real --replace --sm-disable ccp &
Luckily there is also a more elegant way. You can tell the compiz script to ignore any errors by adding the line SKIP_CHECKS=yes to the configuration file ~/.config/compiz/compiz-manager:
mkdir -p ~/.config/compiz; echo SKIP_CHECKS=yes >> ~/.config/compiz/compiz-manager
After doing that you should be able to enable the desktop effects the usual way, using the somewhat hidden "Visual Effects" tab in the System->Preferences->Appearance configuration dialog.
*********************************WARN_ONCE********************************* File r300_mem.c function r300_mem_alloc line 225 Ran out of GART memory (for 1048576)! Please consider adjusting GARTSize option. ***************************************************************************
The solution is to increase the GART memory size to 32 or 64 Mb, by adding Option "GARTSize" "64" to the Device section of your /etc/X11/xorg.conf file.
It may also help to decrease the bit-depth of your display from 24 to 16 bpp. This has the added advantage of speeding up Compiz and screen updates in general, at the cost of some minor colour quantisation artefacts. Just edit /etc/X11/xorg.conf, add a 16-bit display to the "Screen" section, and change the Defaultdepth to 16. Something like this:
Defaultdepth 16
SubSection "Display"
Depth 16
Virtual 1024 768
Modes "1024x768"
EndSubSection
On the other hand, a 16 bpp display sometimes breaks Xv video playback, due to bug #13924 in the radeon driver. If Xv gives you troubles, VLC and Mplayer allow OpenGL playback. Or you might simply want to keep a 24 bpp display in that case. :-)
So all's well that ends well. I'm now happily running my laptop with the open-source radeon drivers and full hardware 3D acceleration. It's completely stable, a lot faster than it ever used to be under metacity, and of course has visual effects that beat the crap out of Vista with half the minimum hardware specifications. ;-)
UPDATE (2010-08-25):
After upgrading my laptop from Hardy 8.04 LTS to Lucid 10.04 LTS, I experienced some screen corruption problems when fading (e.g. with notifications and gksu password entry dialogs) and in QT4 apps (only with "-graphicssystem raster", which I need to speed up Kile). If this happens, first try running Xorg with default settings by moving your xorg.conf out of the way: sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.hardysettings
Then log out of your X-session and log back in to restart Xorg with default settings. The radeon driver in Lucid Lynx has been much improved since Hardy times, so chances are that it will work best with "out of the box" settings... However, if you still experience corruption issues after removing the xorg.conf, you could try switching to the cutting edge Xorg drivers by adding this PPA: https://launchpad.net/~xorg-edgers/+archive/ppa Note however that this is at your own risk. And if you do use this PPA, don't forget to install the ppa-purge package and run sudo ppa-purge ppa:xorg-edgers/ppa before attempting to do a distribution upgrade, or you'll risk breaking your system!
References
- http://dri.freedesktop.org/wiki/R300_Portal
- https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/48029
- http://ubuntuforums.org/showthread.php?t=710220
- http://gentoo-wiki.com/Talk:HOWTO_compiz-fusion#Misc_Fixes_and_bugs
- http://wiki.compiz-fusion.org/Hardware/Blacklist
- http://forum.compiz-fusion.org/showthread.php?t=7170
- http://tirdc.livejournal.com/16670.html?thread=26910
- https://bugs.freedesktop.org/show_bug.cgi?id=12612
- https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-ati/+bug/15...

Comments