| <html> |
| |
| <TITLE>Mesa fbdev/DRI Environment</TITLE> |
| |
| <link rel="stylesheet" type="text/css" href="mesa.css"></head> |
| |
| <BODY> |
| |
| <center><H1>Mesa fbdev/DRI Drivers</H1></center> |
| |
| |
| <H1>1. Introduction</H1> |
| |
| <p> |
| The fbdev/DRI environment supports hardware-accelerated 3D rendering without |
| the X window system. This is typically used for embedded applications. |
| </p> |
| |
| <p> |
| Contributors to this project include Jon Smirl, Keith Whitwell and Dave Airlie. |
| </p> |
| |
| <p> |
| Applications in the fbdev/DRI environment use |
| the <a href="MiniGXL.html"> MiniGLX</a> 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. |
| </p> |
| |
| |
| <h1>2. Compilation</h1> |
| |
| <p> |
| You'll need the DRM and pciaccess libraries. Check with: |
| </p> |
| <pre> |
| pkg-config --modversion libdrm |
| pkg-config --modversion pciaccess |
| </pre> |
| |
| <p> |
| You can get them from the git repository with: |
| </p> |
| <pre> |
| git clone git://anongit.freedesktop.org/git/mesa/drm |
| git clone git://anongit.freedesktop.org/git/xorg/lib/libpciaccess |
| </pre> |
| |
| <p> |
| See the README files in those projects for build/install instructions. |
| </p> |
| |
| |
| <p> |
| You'll need fbdev header files. Check with: |
| </p> |
| <pre> |
| ls -l /usr/include/linux/fb.h |
| </pre> |
| |
| <p> |
| Compile Mesa with the 'linux-solo' configuration: |
| </p> |
| <pre> |
| make linux-solo |
| </pre> |
| |
| <p> |
| When complete you should have the following: |
| </p> |
| <ul> |
| <li>lib/libGL.so - the GL library which applications link with |
| <li>lib/*_dri_so - DRI drivers |
| <li>lib/miniglx.conf - sample MiniGLX config file |
| <li>progs/miniglx/* - several MiniGLX sample programs |
| </ul> |
| |
| |
| |
| <h1>3. Using fbdev/DRI</h1> |
| |
| <p> |
| If an X server currently running, exit/stop it so you're working from |
| the console. |
| </p> |
| |
| |
| <h2>3.1 Load Kernel Modules</h2> |
| |
| <p> |
| 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. |
| </p> |
| <p> |
| As root, the kernel modules can be loaded as follows: |
| </p> |
| |
| <p> |
| If you have Intel i915/i945 hardware: |
| </p> |
| <pre> |
| modprobe agpgart # the AGP GART module |
| modprobe intelfb # the Intel fbdev driver |
| modprobe i915 # the i915/945 DRI kernel module |
| </pre> |
| |
| <p> |
| If you have ATI Radeon/R200 hardware: |
| </p> |
| <pre> |
| modprobe agpgart # the AGP GART module |
| modprobe radeonfb # the Radeon fbdev driver |
| modprobe radeon # the Radeon DRI kernel module |
| </pre> |
| |
| <p> |
| If you have ATI Rage 128 hardware: |
| </p> |
| <pre> |
| modprobe agpgart # the AGP GART module |
| modprobe aty128fb # the Rage 128 fbdev driver |
| modprobe r128 # the Rage 128 DRI kernel module |
| </pre> |
| |
| <p> |
| If you have Matrox G200/G400 hardware: |
| </p> |
| <pre> |
| modprobe agpgart # the AGP GART module |
| modprobe mgafb # the Matrox fbdev driver |
| modprobe mga # the Matrox DRI kernel module |
| </pre> |
| |
| <p> |
| To verify that the agpgart, fbdev and drm modules are loaded: |
| </p> |
| <pre> |
| ls -l /dev/agpgart /dev/fb* /dev/dri |
| </pre> |
| <p> |
| Alternately, use lsmod to inspect the currently installed modules. |
| If you have problems, look at the output of dmesg. |
| </p> |
| |
| |
| <h2>3.2 Configuration File</h2> |
| |
| <p> |
| 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 |
| </p> |
| |
| To determine the pciBusID value, run lspci and examine the output. |
| For example: |
| </p> |
| <pre> |
| /sbin/lspci: |
| 00:02.0 VGA compatible controller: Intel Corporation 82915G/GV/910GL Express Chipset Family Graphics Controller (rev 04) |
| </pre> |
| <p> |
| 00:02.0 indicates that pciBusID should be PCI:0:2:0 |
| </p> |
| |
| |
| |
| |
| <h2>3.3 Running fbdev/DRI Programs</h2> |
| |
| <p> |
| 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. |
| </p> |
| |
| <p> |
| Change to the <code>Mesa/progs/miniglx/</code> directory and |
| start the sample_server program in the background: |
| </p> |
| <pre> |
| ./sample_server & |
| </pre> |
| |
| <p> |
| Then try running the <code>miniglxtest</code> program: |
| </p> |
| <pre> |
| ./miniglxtest |
| </pre> |
| <p> |
| You should see a rotating quadrilateral which changes color as it rotates. |
| It will exit automatically after a bit. |
| </p> |
| |
| <p> |
| 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. |
| </p> |
| |
| |
| |
| <h1>4.0 Troubleshooting</h1> |
| |
| <ol> |
| <li> |
| If you try to run miniglxtest and get the following: |
| <br> |
| <pre> |
| [miniglx] failed to probe chipset |
| connect: Connection refused |
| server connection lost |
| </pre> |
| It means that the sample_server process is not running. |
| <br> |
| <br> |
| </li> |
| </ol> |
| |
| |
| <h1>5.0 Programming Information</h1> |
| |
| <p> |
| OpenGL/Mesa is interfaced to fbdev via the <a href="MiniGLX.html">MiniGLX</a> |
| 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. |
| </p> |
| |
| <p> |
| 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. |
| </p> |
| |
| <p> |
| 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 <code>GL/miniglx.h</code> header file for details. |
| </p> |
| |
| |
| </body> |
| </html> |