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