Adding Direct Rendering Infrastructure (DRI) Support to XFree86
DRI installation depends on:
The DRI provides 3D graphics hardware acceleration for the XFree86
project.
These instructions were developed from the DRI Compilation Guide at
and modified for more recent versions of the DRI.
The DRI drivers generally work on systems with Intel or AMD CPUs.
However, there is limited support for Alpha and PowerPC support
underway.
DRI support is currently in beta status. The following video cards are
presently supported:
3dfx (Voodoo 5 5500, Voodoo4 4500, Voodoo3 3500 TV,
Voodoo3 3000 {AGP, PCI}, Voodoo3 2000 {AGP, PCI}, Voodoo Banshee,
Velocity 100/200)
Matrox (G200, G400)
Intel Motherboard Chipsets (i810, i810-dc100, i810e, i815,
i830)
ATI (Rage {128, Fury, Magnum}, XPERT {2000, 128, 99},
All-in-Wonder 128, Radeon {SDR AGP, DDR AGP, 32MB SDR PCI}
3Dlabs (Oxygen 2000) [No longer actively being
developed]
For 3dfx Voodoo3 hardware, you'll also need Glide3 headers and
runtime library. These can be obtained
from .
Updating the Kernel
In the kernel configuration "Character Devices" section,
if you havn't already done so, enable Direct Rendering
Manager. Also select the type of video card(s) that you want to support as
a module. This is necessary to ensure the kernel
has the proper linkages when the DRI code is compiled.
If necessary, recompile the kernel with
make dep &&
make bzImage&&
make modules &&
make modules_install
Copy /usr/src/linux/arch/i386/boot/bzImage and
/usr/src/linux/System.map to
/boot, edit /etc/lilo.conf
appropriately and run lilo.
Getting the DRI driver source code
Get the DRI sources by
cd /usr/src
mkdir DRI-CVS
cd DRI-CVS
cvs -d:pserver:anonymous@cvs.dri.sourceforge.net:/cvsroot/dri login
(hit ENTER when prompted for a password)
cvs -z3 -d:pserver:anonymous@cvs.dri.sourceforge.net:/cvsroot/dri co xc
The -z3 flag causes compression to be used in order to reduce the
download time.
Since, the DRI drivers are beta, you can update the sources by
cd /usr/src/DRI-CVS
cvs -z3 -d:pserver:anonymous@cvs.dri.sourceforge.net:/cvsroot/dri update -dA xc
There is no need to download or install the Mesa source files separately.
The download is about 99Mb and the build size 477Mb.
Building the DRI
DRI drivers will be built in a separate directory from the main XFree86
sources. To access the proper files, link the files to a build directoy:
cd /usr/src/DRI-CVS
ln -s xc XFree40
mkdir build
cd build
lndir -silent -ignorelinks ../XFree40
Now update the host.def file. The only change
necessary is to uncomment the BuildXF86DRM define.
Since DRI is still in Beta, changing the optimizations is not
recommended.
If you do not want to build all the drivers,
change XF86CardDrivers
and DriDrivers to eliminate those that
you don't want.
Ensure the Linux 2.4.x headers are available in
/usr/src/linux/include/linux.
You will also need to create modversions.h for the
drivers to compile correctly.
touch /lib/modules/2.4.19/build/include/linux/modversions.h
Of course you need to change the version 2.4.19 to your current kernel version
number.
Compiling the DRI
If you build XFree86 in a chroot environment, make sure the
kernel version of the base system and the target system are
the same.
Do not use -j option
for make
Build the system using:
cd xc &&
make World 2>&1 | tee World.log
Using less or an editor,
examine World.log for errors by searching for
the pattern ***. Also examine the
directory /usr/src/DRI-CVS/build/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/ for
the drivers you built:
For the 3dfx Voodoo, you should
see tdfx.o
For the Matrox G200/G400, you should
see mga.o
For the ATI Rage 128, you should
see r128.o
For the ATI Radeon, you should
see radeon.o
For the Intel i81x, you should
see i810.o
For the Intel i830, you should
see i830.o
Installing the DRI drivers
Copy the kernel module that for your video card
to /lib/modules/2.4.x/kernel/drivers/char/drm/
then run modprobe <module name>.
Some DRI modules require that the agpgart module be loaded first,
if it is not compiled into the kernel.
Now install the other portions of the DRI that were built and ensure the
libraries can be found correctly
make install &&
ldconfig
If you use X locale information, do the following
cd /usr/src/DRI-CVS/build/xc/nls
../config/util/xmkmf -a
make
make install
Configuring XFree86 for the DRI
On the DRI web site, ,
in the resources section, you'll find example XF86Config
files for a number of graphics cards. These configuration files also setup
DRI options so it's highly recommended that you look at these examples.
Generally you can start with your existing configuration file,
/etc/X11/XFConfig-4, but if you run into trouble
you may want to start with a new file as in the basic XFree86
installation.
Edit XF86Config-4 to ensure
the following sections are present
Section "Module"
...
# This loads the GLX module
Load "glx"
# This loads the DRI module
Load "dri"
EndSection
If you want all of the users on your system to be able to use
direct rendering, then use a simple DRI section like this:
Section "DRI"
Mode 0666
EndSection
Make any other changes for font paths, screen modes, etc., as needed
and save the configuration file.
DMA-based DRI drivers (that's most DRI drivers) cannot function
unless bus mastering is enabled for your graphics card. By default, some
systems don't having bus mastering on. You should enable it in your
BIOS.
Testing the DRI installation
Start (or restart) XFree86 with startx.
Check the XFree86 log file, /var/log/XFree86.0.log,
for a statements like
(II) R128(0): [drm] installed DRM signal handler
(II) R128(0): [DRI] installation complete
(II) R128(0): [drm] Added 128 16384 byte vertex/indirect buffers
(II) R128(0): [drm] Mapped 128 vertex/indirect buffers
(II) R128(0): Direct rendering enabled
From an xterm, run glxinfo.
The output should look something like:
name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
client glx vendor string: SGI
client glx version string: 1.2
client glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
GLX extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
OpenGL vendor string: VA Linux Systems, Inc.
OpenGL renderer string: Mesa DRI Rage128 20020221 Pro AGP 1x x86/MMX/SSE
OpenGL version string: 1.2 Mesa 4.0.2
OpenGL extensions:
GL_ARB_imaging, GL_ARB_multitexture, GL_ARB_texture_env_add,
GL_ARB_transpose_matrix, GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color,
GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_clip_volume_hint,
GL_EXT_convolution, GL_EXT_compiled_vertex_array, GL_EXT_histogram,
GL_EXT_packed_pixels, GL_EXT_polygon_offset, GL_EXT_rescale_normal,
GL_EXT_texture3D, GL_EXT_texture_env_add, GL_EXT_texture_object,
GL_EXT_vertex_array, GL_IBM_rasterpos_clip, GL_MESA_window_pos,
GL_NV_texgen_reflection, GL_SGI_color_matrix, GL_SGI_color_table
glu version: 1.3
glu extensions:
GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess
visual x bf lv rg d st colorbuffer ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a bf th cl r g b a ns b eat
----------------------------------------------------------------------
0x23 16 tc 0 16 0 r y . 5 6 5 0 0 16 0 0 0 0 0 0 0 None
0x24 16 tc 0 16 0 r y . 5 6 5 0 0 16 8 0 0 0 0 0 0 Slow
0x25 16 tc 0 16 0 r y . 5 6 5 0 0 16 0 16 16 16 0 0 0 Slow
0x26 16 tc 0 16 0 r y . 5 6 5 0 0 16 8 16 16 16 0 0 0 Slow
0x27 16 dc 0 16 0 r y . 5 6 5 0 0 16 0 0 0 0 0 0 0 None
0x28 16 dc 0 16 0 r y . 5 6 5 0 0 16 8 0 0 0 0 0 0 Slow
0x29 16 dc 0 16 0 r y . 5 6 5 0 0 16 0 16 16 16 0 0 0 Slow
0x2a 16 dc 0 16 0 r y . 5 6 5 0 0 16 8 16 16 16 0 0 0 Slow
Run ldd /usr/X11R6/bin/glxgears and look for
the libGL library. For example
libGL.so.1 => /usr/lib/libGL.so.1 (0x4001b000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40089000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40097000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40158000)
libm.so.6 => /lib/libm.so.6 (0x4016e000)
libc.so.6 => /lib/libc.so.6 (0x40192000)
libdl.so.2 => /lib/libdl.so.2 (0x402c6000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x402ca000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
You can also run the test program glxgears.
This program brings up a window with three gears turning. The
xterm will display how many frames were drawn every
five seconds so this is a reasonable benchmark. The window is scalable, and
the frames drawn per second is highly dependent on the size of
the window.
For troubleshooting problems, check the DRI Users Guide at
.