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