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