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 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 .