xenocara/xserver/hw/xfree86/doc/README.DRIcomp

552 lines
20 KiB
Plaintext
Raw Normal View History

2006-11-26 11:13:41 -07:00
DRI Compilation Guide
VA Linux Systems, Inc. Professional Services - Graphics.
21 April 2001
1. Preamble
1.1 Copyright
Copyright 2000-2001 by VA Linux Systems, Inc. All Rights Reserved.
Permission is granted to make and distribute verbatim copies of this document
provided the copyright notice and this permission notice are preserved on all
copies.
1.2 Trademarks
OpenGL is a registered trademark and SGI is a trademark of Silicon Graphics,
Inc. Unix is a registered trademark of The Open Group. The `X' device and X
Window System are trademarks of The Open Group. XFree86 is a trademark of
The XFree86 Project. Linux is a registered trademark of Linus Torvalds.
Intel is a registered trademark of Intel Corporation. 3Dlabs, GLINT, and
Oxygen are either registered trademarks or trademarks of 3Dlabs Inc. Ltd.
3dfx, Voodoo3, Voodoo4, and Voodoo5 are registered trademarks of 3dfx Inter-
active, Incorporated. Matrox is a registered trademark of Matrox Electronic
Systems Ltd. ATI Rage and Radeon is a registered trademark of ATI Technolo-
gies, Inc. All other trademarks mentioned are the property of their respec-
tive owners.
2. Introduction
This document describes how to download, compile and install the DRI. The
DRI provides 3D graphics hardware acceleration for the XFree86 project. This
information is intended for experienced Linux developers. Beginners are
probably better off installing precompiled packages.
Edits, corrections and updates to this document may be mailed to <brian@tung-
stengraphics.com>.
Last updated on 13 February 2002 by Brian Paul.
3. Prerequisites
You'll need the following:
o An installation of XFree86 4.1 or later. The DRI tree has been pruned
down to minimize its size. But in order to build the DRI tree you need
to have recent X header files, etc. already installed. If you don't
have XFree86 4.1 (or later) installed you can probably install it from
RPMs (or another package format). Or, you can download XFree86 as
sources and compile/install it yourself.
o At least 200MB of free disk space. If you compile for debugging (the -g
option) then you'll need about 600MB.
o GCC compiler and related tools.
o ssh (secure shell) if you're a DRI developer and don't want to use
anonymous CVS download.
o A 2.4.x Linux Kernel. See below for details.
o FreeBSD support is not currently being maintained and may not work.
The DRI 3D drivers generally work on systems with Intel or AMD CPUs. How-
ever, limited support for Alpha and PowerPC support is underway.
For 3dfx Voodoo hardware, you'll also need the Glide3 runtime library
(libglide3-v3.so for Voodoo3 or libglide3-v5.so for Voodoo4/5). These can be
downloaded from the DRI website. You can compile them yourself, but it's
often a painful process.
For Matrox G200/G400, Intel i810/i830 or ATI Rage128/Radeon hardware, you'll
also need AGP support in your Linux kernel, either built-in or as a loadable
module.
4. Linux Kernel Preparation
Only the Linux 2.4.x kernels are currently supported by the DRI hardware
drivers. 2.5.x kernels may work, but aren't tested.
Most of the DRI drivers require AGP support and using Intel Pentium III SSE
optimizations also requires an up-to-date Linux kernel. Configuring your
kernel correctly is very important, as features such as SSE optimizations
will be disabled if your kernel does not support them. Thus, if you have a
Pentium III processor, you must configure your kernel for the Pentium III
processor family.
Building a new Linux kernel can be difficult for beginners but there are
resources on the Internet to help. This document assumes experience with
configuring, building and installing Linux kernels.
Linux kernels can be downloaded from www.kernel.org
Here are the basic steps for kernel setup.
o Download the needed kernel and put it in /usr/src. Create a directory
for the source and unpack it. For example:
cd /usr/src
rm -f linux
mkdir linux-2.4.x
ln -s linux-2.4.x linux
bzcat linux-2.4.x.tar.bz2 | tar xf -
It is critical that /usr/src/linux point to your new kernel sources,
otherwise the kernel headers will not be used when building the DRI.
This will almost certainly cause compilation problems.
o Read /usr/src/linux/Documentation/Changes. This file lists the minimum
requirements for all software packages required to build the kernel.
You must upgrade at least gcc, make, binutils and modutils to at least
the versions specified in this file. The other packages may not be
needed. If you are upgrading from Linux 2.2.x you must upgrade your
modutils package for Linux 2.4.x.
o Configure your kernel. You might, for example, use make menuconfig and
do the following:
o Go to Code maturity level options
o Enable Prompt for development and/or incomplete code/drivers
o hit ESC to return to the top-level menu
o Go to Processor type and features
o Select your processor type from Processor Family
o hit ESC to return to the top-level menu
o Go to Character devices
o Disable Direct Rendering Manager (XFree86 DRI support) since we'll
use the DRI code from the XFree86/DRI tree and will compile it
there.
o Go to /dev/agpgart (AGP Support) (EXPERIMENTAL) (NEW)
o Hit SPACE twice to build AGP support into the kernel
o Enable all chipsets' support for AGP
o Configure the rest of the kernel as required for your system (i.e. Eth-
ernet, SCSI, etc)
o Exit, saving your kernel configuration.
o Edit your /etc/lilo.conf file. Make sure you have an image entry as
follows (or similar):
image=/boot/vmlinuz
label=linux.2.4.x
read-only
root=/dev/hda1
The important part is that you have /boot/vmlinuz without a trailing
version number. If this is the first entry in your /etc/lilo.conf AND
you haven't set a default, then this will be your default kernel.
o Compile the new kernel.
cd /usr/src/linux-2.4.x
make dep
make bzImage
make modules
make modules_install
make install
Note that last make command will automatically run lilo for you.
o Now reboot to use the new kernel.
5. CPU Architectures
In general, nothing special has to be done to use the DRI on different CPU
architectures. There are, however, a few optimizations that are CPU-depen-
dent. Mesa will determine at runtime which CPU-dependent optimizations
should be used and enable them where appropriate.
5.1 Intel Pentium III Features
The Pentium III SSE instructions are used in optimized vertex transformation
functions in the Mesa-based DRI drivers. On Linux, SSE requires a recent
kernel (such as 2.4.0-test11 or later) both at compile time and runtime.
5.2 AMD 3DNow! Features
AMD's 3DNow! instructions are used in optimized vertex transformation func-
tions in the Mesa-based DRI drivers. 3DNow! is supported in most versions of
Linux.
5.3 Alpha Features
On newer Alpha processors a significant performance increase can be seen with
the addition of the -mcpu= option to GCC. This option is dependent on the
architecture of the processor. For example, -mcpu=ev6 will build specifi-
cally for the EV6 based AXP's, giving both byte and word alignment access to
the DRI/Mesa drivers.
To enable this optimization edit your xc/config/host.def file and add the
line:
#define DefaultGcc2AxpOpt -O2 -mcpu=ev6
Additional speed improvements to 3D rendering can be achieved by installing
Compaq's Math Libraries (CPML) which can be obtained from http://www.sup-
port.compaq.com/alpha-tools/software/index.html
Once installed, you can add this line to your host.def to build with the CPML
libraries:
#define UseCompaqMathLibrary YES
The host.def file is explained below.
6. Downloading the XFree86/DRI CVS Sources
The DRI project is hosted by SourceForge. The DRI source code, which is a
subset of the XFree86 source tree, is kept in a CVS repository there.
The DRI CVS sources may be accessed either anonymously or as a registered
SourceForge user. It's recommended that you become a registered SourceForge
user so that you may submit non-anonymous bug reports and can participate in
the mailing lists.
6.1 Anonymous CVS download:
1. Create a directory to store the CVS files:
cd ~
mkdir DRI-CVS
You could put your CVS directory in a different place but we'll use
~/DRI-CVS/ here.
2. Check out the CVS sources:
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 down-
load time.
6.2 Registered CVS download:
1. Create a directory to store the CVS files:
cd ~
mkdir DRI-CVS
You could put your CVS directory in a different place but we'll use
~/DRI-CVS/ here.
2. Set the CVS_RSH environment variable:
setenv CVS_RSH ssh // if using csh or tcsh
export CVS_RSH=ssh // if using sh or bash
3. Check out the CVS sources:
cd ~/DRI-CVS
cvs -z3 -d:ext:YOURID@cvs.dri.sourceforge.net:/cvsroot/dri co xc
Replace YOURID with your CVS login name. You'll be prompted to enter
your sourceforge password.
The -z3 flag causes compression to be used in order to reduce the down-
load time.
6.3 Updating your CVS sources
In the future you'll want to occasionally update your local copy of the DRI
source code to get the latest changes. This can be done with:
cd ~/DRI-CVS
cvs -z3 update -dA xc
The -d flag causes any new subdirectories to be created and -A causes most
recent trunk sources to be fetched, not branch sources.
7. Mesa
Most of the DRI 3D drivers are based on Mesa (the free implementation of the
OpenGL API). The relevant files from Mesa are already included in the
XFree86/DRI source tree. There is no need to download or install the Mesa
source files separately.
Sometimes a newer version of Mesa will be available than the version included
in XFree86/DRI. Upgrading Mesa within XFree86/DRI is not always straightfor-
ward. It can be an error-prone undertaking, especially for beginners, and is
not generally recommended. The DRI developers will upgrade Mesa when appro-
priate.
8. Compiling the XFree86/DRI tree
8.1 Make a build tree
Rather than placing object files and library files right in the source tree,
they're instead put into a parallel build tree. The build tree is made with
the lndir command:
cd ~/DRI-CVS
ln -s xc XFree40
mkdir build
cd build
lndir -silent -ignorelinks ../XFree40
The build tree will be populated with symbolic links which point back into
the CVS source tree.
Advanced users may have several build trees for compiling and testing with
different options.
8.2 Edit the host.def file
The ~/DRI-CVS/build/xc/config/cf/host.def file is used to configure the
XFree86 build process. You can change it to customize your build options or
make adjustments for your particular system configuration
The default host.def file will look something like this:
#define DefaultCCOptions -Wall
(i386) #define DefaultGcc2i386Opt -O2
(Alpha) #define DefaultGcc2AxpOpt -O2 -mcpu=ev6 (or similar)
#define LibraryCDebugFlags -O2
#define BuildServersOnly YES
#define XF86CardDrivers vga tdfx mga ati i810
#define LinuxDistribution LinuxRedHat
#define DefaultCCOptions -ansi GccWarningOptions -pipe
#define BuildXF86DRI YES
/* Optionally turn these on for debugging */
/* #define GlxBuiltInTdfx YES */
/* #define GlxBuiltInMga YES */
/* #define GlxBuiltInR128 YES */
/* #define GlxBuiltInRadeon YES */
/* #define DoLoadableServer NO */
#define SharedLibFont NO
The ProjectRoot variable specifies where the XFree86 files will be installed.
We recommend installing the DRI files over your existing XFree86 installation
- it's generally safe to do and less error-prone. This policy is different
than what we used to recommend.
If XFree86 4.x is not installed in /usr/X11R6/ you'll have to add the follow-
ing to the host.def file:
#define ProjectRoot pathToYourXFree86installation
Note the XF86CardDrivers line to be sure your card's driver is listed.
If you want to enable 3DNow! optimizations in Mesa and the DRI drivers, you
should add the following:
#define MesaUse3DNow YES
You don't have to be using an AMD processor in order to enable this option.
The DRI will look for 3DNow! support and runtime and only enable it if appli-
cable.
If you want to enable SSE optimizations in Mesa and the DRI drivers, you must
upgrade to a Linux 2.4.x kernel. Mesa will verify that SSE is supported by
both your processor and your operating system, but to build Mesa inside the
DRI you need to have the Linux 2.4.x kernel headers in /usr/src/linux. If
you enable SSE optimizations with an earlier version of the Linux kernel in
/usr/src/linux, Mesa will not compile. You have been warned. If you do have
a 2.4.x kernel, you should add the following:
#define MesaUseSSE YES
If you want to build the DRM kernel modules as part of the full build pro-
cess, add the following:
#define BuildXF86DRM YES
Otherwise, you'll need to build them separately as described below.
8.3 Compilation
To compile the complete DRI tree:
cd ~/DRI-CVS/build/xc/
make World >& world.log
Or if you want to watch the compilation progress:
cd ~/DRI-CVS/build/xc/
make World >& world.log &
tail -f world.log
With the default compilation flags it's normal to get a lot of warnings dur-
ing compilation.
Building will take some time so you may want to go check your email or visit
slashdot.
WARNING: do not use the -j option with make. It's reported that it does not
work with XFree86/DRI.
8.4 Check for compilation errors
Using your text editor, examine world.log for errors by searching for the
pattern ***.
After fixing the errors, run make World again. Later, you might just compile
parts of the source tree but it's important that the whole tree will build
first.
If you edited your host.def file to enable automatic building of the DRI ker-
nel module(s), verify that they were built:
cd ~/DRI-CVS/build/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel
ls
Otherwise, build them now by running
cd ~/DRI-CVS/build/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel
make -f Makefile.linux
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 i810, you should see i810.o.
If the DRI kernel module(s) failed to build you should verify that you're
using the right version of the Linux kernel. The most recent kernels are not
always supported.
If your build machine is running a different version of the kernel than your
target machine (i.e. 2.2.x vs. 2.4.x), make will select the wrong kernel
source tree. This can be fixed by explicitly setting the value of LINUXDIR.
If the path to your kernel source is /usr/src/linux-2.4.x,
cd ~/DRI-CVS/build/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel
make -f Makefile.linux LINUXDIR=/usr/src/linux-2.4.x
or alternatively, edit Makefile.linux to set LINUXDIR before the ifndef LIN-
UXDIR line.
8.5 DRI kernel module installation
The DRI kernel modules will be in ~/DRI-CVS/build/xc/pro-
grams/Xserver/hw/xfree86/os-support/linux/drm/kernel/.
To load the appropriate DRM module in your running kernel you can either use
ismod and restart your X server or copy the kernel module to /lib/mod-
ules/2.4.x/kernel/drivers/char/drm/ then run depmod and restart your X
server.
Make sure you first unload any older DRI kernel modules that might be already
loaded.
Note that some DRM modules require that the agpgart module be loaded first.
9. Normal Installation and Configuration
Most users will want to install the new X server and use it in place of their
old X server. This section explains how to do that.
Developers, on the other hand, may just want to test the X server without
actually installing it as their default server. If you want to do that, skip
to the next section.
9.1 Installation
Here are the installation commands:
su
cd ~/DRI-CVS/build/xc
make install
9.2 Update the XF86Config File
You may need to edit your XF86Config file to enable the DRI. The config file
is usually installed as /etc/X11/XF86Config-4. See the DRI User Guide for
details, but basically, you need to load the "glx" and "dri" modules and add
a "DRI" section.
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.
The XFree86 4.x server can generate a basic configuration file itself. Sim-
ply do this:
cd /usr/X11R6/bin
./XFree86 -configure
A file named /root/XF86Config.new will be created. It should allow you to
try your X server but you'll almost certainly have to edit it. For example,
you should add HorizSync and VertRefresh options to the Monitor section and
Modes options to the Screen section. Also, the ModulePath option in the
Files section should be set to /usr/X11R6/lib/modules.
9.3 Start the New X Server
The new X server should be ready to use now. Start your X server in your
usual manner. Often times the startx command is used:
startx
10. Testing the Server Without Installing It
As mentioned at the start of section 9, developers may want to simply run the
X server without installing it. This can save some time and allow you to
keep a number of X servers available for testing.
10.1 Configuration
As described in the preceding section, you'll need to create a configuration
file for the new server. Put the XF86Config file in your ~/DRI-
CVS/build/xc/programs/Xserver directory.
Be sure the ModulePath option in your XF86Config file is set correctly.
10.2 A Startup Script
A simple shell script can be used to start the X server. Here's an example.
#!/bin/sh
export DISPLAY=:0
./XFree86 -xf86config XF86Config & \
sleep 2
fvwm2 &
xset b off
xmodmap -e "clear mod4"
xsetroot -solid "#00306f"
xterm -geometry 80x40+0+0
You might name this script start-dri. Put it in your ~/DRI-CVS/build/xc/pro-
grams/Xserver directory.
To test the server run the script:
cd ~/DRI-CVS/build/xc/programs/Xserver
./start-dri
For debugging, you may also want to capture the log messages printed by the
server in a file. If you're using the C-shell:
./start-dri >& log
11. Where To Go From Here
At this point your X server should be up and running with hardware-acceler-
ated direct rendering. Please read the DRI User Guide for information about
trouble shooting and how to use the DRI-enabled X server for 3D applications.
Generated from XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/DRIcomp.sgml,v 1.19 dawes Exp $