The fbdev/DRI environment supports hardware-accelerated 3D rendering without the X window system. This is typically used for embedded applications.
Contributors to this project include Jon Smirl, Keith Whitwell and Dave Airlie.
Applications in the fbdev/DRI environment use the MiniGLX interface to choose pixel formats, create rendering contexts, etc. It's a subset of the GLX and Xlib interfaces allowing some degree of application portability between the X and X-less environments.
Some of the files needed for building this configuration are not included in the normal Mesa releases so you'll need to get the latest sources sources from the git repository.
This fbdev/DRI environment isn't well supported. Code and documentation updates/patches are welcomed.
You'll need the DRM and pciaccess libraries. Check with:
pkg-config --modversion libdrm pkg-config --modversion pciaccess
You can get them from the git repository with:
git clone git://anongit.freedesktop.org/git/mesa/drm git clone git://anongit.freedesktop.org/git/xorg/lib/libpciaccess
See the README files in those projects for build/install instructions.
You'll need fbdev header files. Check with:
ls -l /usr/include/linux/fb.h
You'll need to get Mesa from git (see above). Compile Mesa with the 'linux-solo' configuration:
make linux-solo
When complete you should have the following:
If an X server currently running, exit/stop it so you're working from the console.
You'll need to load the kernel modules specific to your graphics hardware. Typically, this consists of the agpgart module, an fbdev driver module and the DRM kernel module.
As root, the kernel modules can be loaded as follows:
If you have Intel i915/i945 hardware:
modprobe agpgart # the AGP GART module modprobe intelfb # the Intel fbdev driver modprobe i915 # the i915/945 DRI kernel module
If you have ATI Radeon/R200 hardware:
modprobe agpgart # the AGP GART module modprobe radeonfb # the Radeon fbdev driver modprobe radeon # the Radeon DRI kernel module
If you have ATI Rage 128 hardware:
modprobe agpgart # the AGP GART module modprobe aty128fb # the Rage 128 fbdev driver modprobe r128 # the Rage 128 DRI kernel module
If you have Matrox G200/G400 hardware:
modprobe agpgart # the AGP GART module modprobe mgafb # the Matrox fbdev driver modprobe mga # the Matrox DRI kernel module
To verify that the agpgart, fbdev and drm modules are loaded:
ls -l /dev/agpgart /dev/fb* /dev/dri
Alternately, use lsmod to inspect the currently installed modules. If you have problems, look at the output of dmesg.
Copy the sample miniglx.conf to /etc/miniglx.conf and review/edit its contents. Alternately, the MINIGLX_CONF environment variable can be used to indicate the location of miniglx.conf
To determine the pciBusID value, run lspci and examine the output. For example:/sbin/lspci: 00:02.0 VGA compatible controller: Intel Corporation 82915G/GV/910GL Express Chipset Family Graphics Controller (rev 04)
00:02.0 indicates that pciBusID should be PCI:0:2:0
Make sure your LD_LIBRARY_PATH environment variable is set to the location of the libGL.so library. You may need to append other paths to LD_LIBRARY_PATH if libpciaccess.so is in a non-standard location, for example.
Change to the Mesa/progs/miniglx/
directory and
start the sample_server program in the background:
./sample_server &
Then try running the miniglxtest
program:
./miniglxtest
You should see a rotating quadrilateral which changes color as it rotates. It will exit automatically after a bit.
If you run other tests in the miniglx/ directory, you may want to run them from a remote shell so that you can stop them with ctrl-C.
[miniglx] failed to probe chipset connect: Connection refused server connection lostIt means that the sample_server process is not running.
OpenGL/Mesa is interfaced to fbdev via the MiniGLX interface. MiniGLX is a subset of Xlib and GLX API functions which provides just enough functionality to setup OpenGL rendering and respond to simple input events.
Since MiniGLX is a subset of the usual Xlib and GLX APIs, programs written to the MiniGLX API can also be run on full Xlib/GLX implementations. This allows some degree of flexibility for software development and testing.
However, the MiniGLX API is not binary-compatible with full Xlib/GLX.
Some of the structures are different and some macros/functions work
differently.
See the GL/miniglx.h
header file for details.