Brian Paul | 4a54ace | 2004-05-20 22:27:59 +0000 | [diff] [blame] | 1 | <html> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 2 | |
| 3 | <TITLE>Mesa fbdev/DRI Environment</TITLE> |
| 4 | |
Brian Paul | 36da045 | 2005-01-20 03:55:10 +0000 | [diff] [blame] | 5 | <link rel="stylesheet" type="text/css" href="mesa.css"></head> |
| 6 | |
| 7 | <BODY> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 8 | |
| 9 | <center><H1>Mesa fbdev/DRI Drivers</H1></center> |
| 10 | |
| 11 | |
| 12 | <H1>1. Introduction</H1> |
| 13 | |
| 14 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 15 | The fbdev/DRI environment supports hardware-accelerated 3D rendering without |
| 16 | the X window system. This is typically used for embedded applications. |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 17 | </p> |
| 18 | |
| 19 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 20 | Contributors to this project include Jon Smirl, Keith Whitwell and Dave Airlie. |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 21 | </p> |
| 22 | |
| 23 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 24 | Applications in the fbdev/DRI environment use |
| 25 | the <a href="MiniGXL.html"> MiniGLX</a> interface to choose pixel |
| 26 | formats, create rendering contexts, etc. It's a subset of the GLX and |
| 27 | Xlib interfaces allowing some degree of application portability between |
| 28 | the X and X-less environments. |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 29 | </p> |
| 30 | |
Brian | f2d9a07 | 2007-09-27 10:35:37 -0600 | [diff] [blame] | 31 | <p> |
| 32 | Some of the files needed for building this configuration are not included |
| 33 | in the normal Mesa releases so you'll need to get the latest sources |
| 34 | sources from the <a href="repository.html">git repository</a>. |
| 35 | </p> |
| 36 | |
Brian | 27028fc | 2007-11-27 10:31:05 -0700 | [diff] [blame^] | 37 | <p> |
| 38 | This fbdev/DRI environment isn't well supported. |
| 39 | Code and documentation updates/patches are welcomed. |
| 40 | </p> |
| 41 | |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 42 | |
| 43 | <h1>2. Compilation</h1> |
| 44 | |
| 45 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 46 | You'll need the DRM and pciaccess libraries. Check with: |
Brian Paul | 4a54ace | 2004-05-20 22:27:59 +0000 | [diff] [blame] | 47 | </p> |
| 48 | <pre> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 49 | pkg-config --modversion libdrm |
| 50 | pkg-config --modversion pciaccess |
Brian Paul | 4a54ace | 2004-05-20 22:27:59 +0000 | [diff] [blame] | 51 | </pre> |
| 52 | |
| 53 | <p> |
Brian | 62ef001 | 2007-05-09 08:17:57 -0600 | [diff] [blame] | 54 | You can get them from the git repository with: |
| 55 | </p> |
| 56 | <pre> |
| 57 | git clone git://anongit.freedesktop.org/git/mesa/drm |
| 58 | git clone git://anongit.freedesktop.org/git/xorg/lib/libpciaccess |
| 59 | </pre> |
| 60 | |
| 61 | <p> |
| 62 | See the README files in those projects for build/install instructions. |
| 63 | </p> |
| 64 | |
| 65 | |
| 66 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 67 | You'll need fbdev header files. Check with: |
Brian Paul | 4a54ace | 2004-05-20 22:27:59 +0000 | [diff] [blame] | 68 | </p> |
| 69 | <pre> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 70 | ls -l /usr/include/linux/fb.h |
Brian Paul | 4a54ace | 2004-05-20 22:27:59 +0000 | [diff] [blame] | 71 | </pre> |
| 72 | |
| 73 | <p> |
Brian | 27028fc | 2007-11-27 10:31:05 -0700 | [diff] [blame^] | 74 | You'll need to get Mesa from git (see above). |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 75 | Compile Mesa with the 'linux-solo' configuration: |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 76 | </p> |
| 77 | <pre> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 78 | make linux-solo |
| 79 | </pre> |
| 80 | |
| 81 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 82 | When complete you should have the following: |
Brian Paul | f4b909b | 2004-04-18 20:17:14 +0000 | [diff] [blame] | 83 | </p> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 84 | <ul> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 85 | <li>lib/libGL.so - the GL library which applications link with |
| 86 | <li>lib/*_dri_so - DRI drivers |
| 87 | <li>lib/miniglx.conf - sample MiniGLX config file |
| 88 | <li>progs/miniglx/* - several MiniGLX sample programs |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 89 | </ul> |
| 90 | |
| 91 | |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 92 | |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 93 | <h1>3. Using fbdev/DRI</h1> |
| 94 | |
| 95 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 96 | If an X server currently running, exit/stop it so you're working from |
| 97 | the console. |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 98 | </p> |
| 99 | |
| 100 | |
Brian Paul | 4a54ace | 2004-05-20 22:27:59 +0000 | [diff] [blame] | 101 | <h2>3.1 Load Kernel Modules</h2> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 102 | |
| 103 | <p> |
Brian Paul | 4a54ace | 2004-05-20 22:27:59 +0000 | [diff] [blame] | 104 | You'll need to load the kernel modules specific to your graphics hardware. |
| 105 | Typically, this consists of the agpgart module, an fbdev driver module |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 106 | and the DRM kernel module. |
| 107 | </p> |
| 108 | <p> |
| 109 | As root, the kernel modules can be loaded as follows: |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 110 | </p> |
| 111 | |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 112 | <p> |
| 113 | If you have Intel i915/i945 hardware: |
| 114 | </p> |
| 115 | <pre> |
| 116 | modprobe agpgart # the AGP GART module |
| 117 | modprobe intelfb # the Intel fbdev driver |
| 118 | modprobe i915 # the i915/945 DRI kernel module |
| 119 | </pre> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 120 | |
| 121 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 122 | If you have ATI Radeon/R200 hardware: |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 123 | </p> |
| 124 | <pre> |
| 125 | modprobe agpgart # the AGP GART module |
| 126 | modprobe radeonfb # the Radeon fbdev driver |
| 127 | modprobe radeon # the Radeon DRI kernel module |
| 128 | </pre> |
| 129 | |
| 130 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 131 | If you have ATI Rage 128 hardware: |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 132 | </p> |
| 133 | <pre> |
| 134 | modprobe agpgart # the AGP GART module |
| 135 | modprobe aty128fb # the Rage 128 fbdev driver |
| 136 | modprobe r128 # the Rage 128 DRI kernel module |
| 137 | </pre> |
| 138 | |
| 139 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 140 | If you have Matrox G200/G400 hardware: |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 141 | </p> |
| 142 | <pre> |
| 143 | modprobe agpgart # the AGP GART module |
| 144 | modprobe mgafb # the Matrox fbdev driver |
| 145 | modprobe mga # the Matrox DRI kernel module |
| 146 | </pre> |
| 147 | |
| 148 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 149 | To verify that the agpgart, fbdev and drm modules are loaded: |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 150 | </p> |
| 151 | <pre> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 152 | ls -l /dev/agpgart /dev/fb* /dev/dri |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 153 | </pre> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 154 | <p> |
| 155 | Alternately, use lsmod to inspect the currently installed modules. |
| 156 | If you have problems, look at the output of dmesg. |
| 157 | </p> |
Brian Paul | 70dacab | 2004-02-13 18:29:42 +0000 | [diff] [blame] | 158 | |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 159 | |
| 160 | <h2>3.2 Configuration File</h2> |
| 161 | |
| 162 | <p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 163 | Copy the sample miniglx.conf to /etc/miniglx.conf and review/edit its contents. |
| 164 | Alternately, the MINIGLX_CONF environment variable can be used to |
| 165 | indicate the location of miniglx.conf |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 166 | </p> |
| 167 | |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 168 | To determine the pciBusID value, run lspci and examine the output. |
| 169 | For example: |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 170 | </p> |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 171 | <pre> |
| 172 | /sbin/lspci: |
| 173 | 00:02.0 VGA compatible controller: Intel Corporation 82915G/GV/910GL Express Chipset Family Graphics Controller (rev 04) |
| 174 | </pre> |
| 175 | <p> |
| 176 | 00:02.0 indicates that pciBusID should be PCI:0:2:0 |
| 177 | </p> |
| 178 | |
| 179 | |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 180 | |
| 181 | |
| 182 | <h2>3.3 Running fbdev/DRI Programs</h2> |
| 183 | |
| 184 | <p> |
| 185 | Make sure your LD_LIBRARY_PATH environment variable is set to the |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 186 | location of the libGL.so library. You may need to append other paths |
| 187 | to LD_LIBRARY_PATH if libpciaccess.so is in a non-standard location, |
| 188 | for example. |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 189 | </p> |
| 190 | |
| 191 | <p> |
Brian Paul | f4b909b | 2004-04-18 20:17:14 +0000 | [diff] [blame] | 192 | Change to the <code>Mesa/progs/miniglx/</code> directory and |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 193 | start the sample_server program in the background: |
| 194 | </p> |
| 195 | <pre> |
Brian | 62ef001 | 2007-05-09 08:17:57 -0600 | [diff] [blame] | 196 | ./sample_server & |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 197 | </pre> |
| 198 | |
| 199 | <p> |
| 200 | Then try running the <code>miniglxtest</code> program: |
| 201 | </p> |
| 202 | <pre> |
| 203 | ./miniglxtest |
| 204 | </pre> |
| 205 | <p> |
| 206 | You should see a rotating quadrilateral which changes color as it rotates. |
| 207 | It will exit automatically after a bit. |
| 208 | </p> |
| 209 | |
| 210 | <p> |
| 211 | If you run other tests in the miniglx/ directory, you may want to run |
| 212 | them from a remote shell so that you can stop them with ctrl-C. |
| 213 | </p> |
| 214 | |
| 215 | |
| 216 | |
| 217 | <h1>4.0 Troubleshooting</h1> |
| 218 | |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 219 | <ol> |
| 220 | <li> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 221 | If you try to run miniglxtest and get the following: |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 222 | <br> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 223 | <pre> |
| 224 | [miniglx] failed to probe chipset |
| 225 | connect: Connection refused |
| 226 | server connection lost |
| 227 | </pre> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 228 | It means that the sample_server process is not running. |
Brian | e75fbd3 | 2007-05-04 18:26:41 -0600 | [diff] [blame] | 229 | <br> |
| 230 | <br> |
| 231 | </li> |
Brian | 91948f9 | 2007-05-04 18:32:02 -0600 | [diff] [blame] | 232 | </ol> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 233 | |
| 234 | |
| 235 | <h1>5.0 Programming Information</h1> |
| 236 | |
| 237 | <p> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 238 | OpenGL/Mesa is interfaced to fbdev via the <a href="MiniGLX.html">MiniGLX</a> |
| 239 | interface. |
| 240 | MiniGLX is a subset of Xlib and GLX API functions which provides just |
| 241 | enough functionality to setup OpenGL rendering and respond to simple |
| 242 | input events. |
| 243 | </p> |
| 244 | |
| 245 | <p> |
| 246 | Since MiniGLX is a subset of the usual Xlib and GLX APIs, programs written |
| 247 | to the MiniGLX API can also be run on full Xlib/GLX implementations. |
| 248 | This allows some degree of flexibility for software development and testing. |
| 249 | </p> |
| 250 | |
Brian Paul | e082348 | 2003-09-03 23:10:31 +0000 | [diff] [blame] | 251 | <p> |
| 252 | However, the MiniGLX API is not binary-compatible with full Xlib/GLX. |
| 253 | Some of the structures are different and some macros/functions work |
| 254 | differently. |
| 255 | See the <code>GL/miniglx.h</code> header file for details. |
| 256 | </p> |
Brian Paul | 56e9efa | 2003-09-03 23:04:02 +0000 | [diff] [blame] | 257 | |
| 258 | |
| 259 | </body> |
| 260 | </html> |