I've made a roadmap to getting hardware accel 3d support using a Voodoo3
under XFree-4. I've attached it in case anyone is interested.

However, recently simple_lock and friends seem to have disappeared, and the
kernel modules make some use of them (although there is still reference
to it in machine/smptests.h)

It looked like I could replace them with calls to mtx_* stuff
Removing the calls to simple_lock etc sure made it run a lot faster though,
but, I think I'd rather have the safety.

What are the 'new' corresponding structures and calls for simple_lock ?

This is a roadmap for getting a native 3d Accelerated XFree 4 under FreeBSD.
The XFree4 port changes fairly regularly so patches might have proven
difficult (and I don't want to maintain a patchset for every revision). 
The instructions here can be followed with any tree even if stuff moves.

These won't work for a -current after the beginning of January
2001, since the simple_lock stuff has gone away in anticipation
of SMPng I assume.

I've only done this using a PCI Voodoo 3 2000 Card, but, I'd assume if your
card is working correctly then this will probably also work for you with
some minor modifications.

If you're using a 3dfx card, you'll need to grab the Glide SDK and install
the headers. And you'll need to grab the source for Glide 3 and install the
libraries. It compiled ok here, so I don't anticipate too many problems.

Glide Libraries:

to install;
rpm2cpio Glide3x_devel-2.2-2.i386.rpm | cpio -i -d
cp -r usr/include/glide3 /usr/include

to install;
rpm2cpio Glide_V3-DRI-3.10-6.src.rpm | cpio -i
You'll get a Glide3.10.tar.gz
unpack that in a new directory;
mkdir glide3
cd glide3
tar zxvf ../Glide3.10.tar.gz
make -f makefile.linux
look in the lib directory
some of the symlinks are hosed, and will need to be fixed
cp the glide3 libraries to /usr/lib


This is for XFree-4.0.1 port revision 9 through to (so far)
            XFree-4.0.2 port revision 5

cd /usr/ports/x11/XFree-4
make extract
make patch
make configure (answer the questions).

edit work/xc/config/cf/FreeBSD.cf

and add;

#define BuildXF86DRM YES
#define BuildXF86DRI YES
#define HasGlide3    YES

At the bottom before the 

#include <bsdLib.rules>

cd work/xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel

Someone fell asleep at the wheel here over at VA-Linux, I assume it
was a CVS snapshot that was half finished... but, other than this
thing, good work :-)

Basically you want to change all references to SYSCTL_HANDLER_ARGS

edit tdfx/tdfx_drv.c and change
callout_init(&dev->timer) to

go back to the top of your XFree-4 tree and do;
make install (if you already have XFree 4 installed you can probably
skip this and continue on from here to get the kernel modules you need).

Now you have to wander back down to  

copy drm.ko to /usr/local/modules (or somewhere else convenient).
and copy tdfx/tdfx.ko to /usr/local/modules/tdfx_drm.ko (this clashes
with an existing native tdfx module for 'older' hardware). If this
wasn't built automatically just type make in the tdfx directory and it
should be built for you.

kldload drm.ko
this requires the agp module to load, even if you don't have an agp card.

kldload tdfx_drm.ko

You should see similar to this;
drm0: <3Dfx Voodoo 3 graphics accelerator> port 0xdc00-0xdcff mem 
0xe8000000-0xe9ffffff,0xee000000-0xefffffff irq 0 at device 14.0 on pci0
info: [drm] Initialized tdfx 1.0.0 19991009 on minor 0

If all goes well make an entry in /usr/local/etc/rc.d that loads your
local modules on boot (or edit your /boot/ files if you're really game).

I have this in /usr/local/etc/rc.d/3dfx.sh

case $1 in
        [ -d /usr/local/modules ] && (
        [ -x /usr/local/modules/drm.ko ] && (
                kldload /usr/local/modules/drm.ko
        [ -x /usr/local/modules/tdfx_drm.ko ] && (
                kldload /usr/local/modules/tdfx_drm.ko
        echo -n ' XF86-DRI'
        kldunload tdfx_drm.ko
        kldunload drm.ko
        echo "usage: `basename $0` {start|stop}" >&2
        exit 64


In your /etc/X11/XF86Config you need to also have

Load "glx"
Load "dri"

If you have an existing libGL.so.14 in /usr/X11R6/lib
mv it to libGL.so.14.old and symlink libGL.so.14 to libGL.so.1 
(ports requiring Mesa check for libGL.so.14, and will link to the hardware 
accelerated version).

3D acceleration only works in 16bpp mode, so make sure you're running
with your depth set to 16 when you start your XFree 4.

You should see drm entries in /var/log/XFree86.0.log;

(0): [drm] created "tdfx" driver at busid "PCI:0:14:0"
(0): [drm] added 4096 byte SAREA at 0xce95e000
(0): [drm] mapped SAREA 0xce95e000 to 0x1826d000
(0): [drm] framebuffer handle = 0xe8000000
(0): [drm] added 1 reserved context for kernel

and later...
(0): [DRI] installation complete
(II) TDFX(0): direct rendering enabled

(0) is the card number, if you have more than one you should get the same
comments with (1) (2) etc.

You'll probably also want to fix GiveConsole in your xdm config
to give permissions to /dev/dri/card*

Finally when running a GL program that dumps the GL stuff, if you see

GL_VENDOR: Precision Insight, Inc.
GL_RENDERER: Mesa DRI Voodoo3 20000616
GL_VERSION: 1.2 Mesa 3.3 beta

or in this format with glxinfo

OpenGL vendor string: VA Linux Systems, Inc.
OpenGL renderer string: Mesa DRI Voodoo3 20001101
OpenGL version string: 1.2 Mesa 3.4

Then it's hardware accelerated, otherwise its linked to an older software

Strange things:
glplanet only gives a white globe, no texture map (from xscreensaver)
Having stuff like nuq-glx (latest standalone quake) running and then going 
to a fullscreen GL app (ala screen saver kicks in) and then back does weird 
things with the modes (so don't leave windowed gl applications running :-)
Quitting the GL application generally gets you back to normal (that's if
you can actually quit the application).

Totally Holistic Enterprises Internet|  P:+61 7 3870 0066   | Andrew Milton
The Internet (Aust) Pty Ltd          |  F:+61 7 3870 4477   | 
ACN: 082 081 472 ABN: 83 082 081 472 |  M:+61 416 022 411   | Carpe Daemon
PO Box 837 Indooroopilly QLD 4068    |[EMAIL PROTECTED]| 

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to