Merge branch 'master' of git+ssh://joukj@git.freedesktop.org/git/mesa/mesa
[mesa.git] / docs / fbdev-dri.html
1 <html>
2
3 <TITLE>Mesa fbdev/DRI Environment</TITLE>
4
5 <link rel="stylesheet" type="text/css" href="mesa.css"></head>
6
7 <BODY>
8
9 <center><H1>Mesa fbdev/DRI Drivers</H1></center>
10
11
12 <H1>1. Introduction</H1>
13
14 <p>
15 The fbdev/DRI environment supports hardware-accelerated 3D rendering without
16 the X window system. This is typically used for embedded applications.
17 </p>
18
19 <p>
20 Contributors to this project include Jon Smirl, Keith Whitwell and Dave Airlie.
21 </p>
22
23 <p>
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.
29 </p>
30
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
37
38 <h1>2. Compilation</h1>
39
40 <p>
41 You'll need the DRM and pciaccess libraries. Check with:
42 </p>
43 <pre>
44 pkg-config --modversion libdrm
45 pkg-config --modversion pciaccess
46 </pre>
47
48 <p>
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>
62 You'll need fbdev header files. Check with:
63 </p>
64 <pre>
65 ls -l /usr/include/linux/fb.h
66 </pre>
67
68 <p>
69 Compile Mesa with the 'linux-solo' configuration:
70 </p>
71 <pre>
72 make linux-solo
73 </pre>
74
75 <p>
76 When complete you should have the following:
77 </p>
78 <ul>
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
83 </ul>
84
85
86
87 <h1>3. Using fbdev/DRI</h1>
88
89 <p>
90 If an X server currently running, exit/stop it so you're working from
91 the console.
92 </p>
93
94
95 <h2>3.1 Load Kernel Modules</h2>
96
97 <p>
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
100 and the DRM kernel module.
101 </p>
102 <p>
103 As root, the kernel modules can be loaded as follows:
104 </p>
105
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>
114
115 <p>
116 If you have ATI Radeon/R200 hardware:
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>
125 If you have ATI Rage 128 hardware:
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>
134 If you have Matrox G200/G400 hardware:
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>
143 To verify that the agpgart, fbdev and drm modules are loaded:
144 </p>
145 <pre>
146 ls -l /dev/agpgart /dev/fb* /dev/dri
147 </pre>
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>
152
153
154 <h2>3.2 Configuration File</h2>
155
156 <p>
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
160 </p>
161
162 To determine the pciBusID value, run lspci and examine the output.
163 For example:
164 </p>
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
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
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.
183 </p>
184
185 <p>
186 Change to the <code>Mesa/progs/miniglx/</code> directory and
187 start the sample_server program in the background:
188 </p>
189 <pre>
190 ./sample_server &amp;
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
213 <ol>
214 <li>
215 If you try to run miniglxtest and get the following:
216 <br>
217 <pre>
218 [miniglx] failed to probe chipset
219 connect: Connection refused
220 server connection lost
221 </pre>
222 It means that the sample_server process is not running.
223 <br>
224 <br>
225 </li>
226 </ol>
227
228
229 <h1>5.0 Programming Information</h1>
230
231 <p>
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
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>
251
252
253 </body>
254 </html>