Merge branch 'master' into i915-unification
[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
32 <h1>2. Compilation</h1>
33
34 <p>
35 You'll need the DRM and pciaccess libraries. Check with:
36 </p>
37 <pre>
38 pkg-config --modversion libdrm
39 pkg-config --modversion pciaccess
40 </pre>
41
42 <p>
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>
56 You'll need fbdev header files. Check with:
57 </p>
58 <pre>
59 ls -l /usr/include/linux/fb.h
60 </pre>
61
62 <p>
63 Compile Mesa with the 'linux-solo' configuration:
64 </p>
65 <pre>
66 make linux-solo
67 </pre>
68
69 <p>
70 When complete you should have the following:
71 </p>
72 <ul>
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
77 </ul>
78
79
80
81 <h1>3. Using fbdev/DRI</h1>
82
83 <p>
84 If an X server currently running, exit/stop it so you're working from
85 the console.
86 </p>
87
88
89 <h2>3.1 Load Kernel Modules</h2>
90
91 <p>
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
94 and the DRM kernel module.
95 </p>
96 <p>
97 As root, the kernel modules can be loaded as follows:
98 </p>
99
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>
108
109 <p>
110 If you have ATI Radeon/R200 hardware:
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>
119 If you have ATI Rage 128 hardware:
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>
128 If you have Matrox G200/G400 hardware:
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>
137 To verify that the agpgart, fbdev and drm modules are loaded:
138 </p>
139 <pre>
140 ls -l /dev/agpgart /dev/fb* /dev/dri
141 </pre>
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>
146
147
148 <h2>3.2 Configuration File</h2>
149
150 <p>
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
154 </p>
155
156 To determine the pciBusID value, run lspci and examine the output.
157 For example:
158 </p>
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
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
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.
177 </p>
178
179 <p>
180 Change to the <code>Mesa/progs/miniglx/</code> directory and
181 start the sample_server program in the background:
182 </p>
183 <pre>
184 ./sample_server &amp;
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
207 <ol>
208 <li>
209 If you try to run miniglxtest and get the following:
210 <br>
211 <pre>
212 [miniglx] failed to probe chipset
213 connect: Connection refused
214 server connection lost
215 </pre>
216 It means that the sample_server process is not running.
217 <br>
218 <br>
219 </li>
220 </ol>
221
222
223 <h1>5.0 Programming Information</h1>
224
225 <p>
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
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>
245
246
247 </body>
248 </html>