Assorted miniglx updates.
[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'll need fbdev header files. Check with:
44 </p>
45 <pre>
46 ls -l /usr/include/linux/fb.h
47 </pre>
48
49 <p>
50 Compile Mesa with the 'linux-solo' configuration:
51 </p>
52 <pre>
53 make linux-solo
54 </pre>
55
56 <p>
57 When complete you should have the following:
58 </p>
59 <ul>
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
64 </ul>
65
66
67
68 <h1>3. Using fbdev/DRI</h1>
69
70 <p>
71 If an X server currently running, exit/stop it so you're working from
72 the console.
73 </p>
74
75
76 <h2>3.1 Load Kernel Modules</h2>
77
78 <p>
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
81 and the DRM kernel module.
82 </p>
83 <p>
84 As root, the kernel modules can be loaded as follows:
85 </p>
86
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>
95
96 <p>
97 If you have ATI Radeon/R200 hardware:
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>
106 If you have ATI Rage 128 hardware:
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>
115 If you have Matrox G200/G400 hardware:
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>
124 To verify that the agpgart, fbdev and drm modules are loaded:
125 </p>
126 <pre>
127 ls -l /dev/agpgart /dev/fb* /dev/dri
128 </pre>
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>
133
134
135 <h2>3.2 Configuration File</h2>
136
137 <p>
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
141 </p>
142
143 To determine the pciBusID value, run lspci and examine the output.
144 For example:
145 </p>
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
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
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.
164 </p>
165
166 <p>
167 Change to the <code>Mesa/progs/miniglx/</code> directory and
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
194 <ol>
195 <li>
196 If you try to run miniglxtest and get the following:
197 <br>
198 <pre>
199 [miniglx] failed to probe chipset
200 connect: Connection refused
201 server connection lost
202 </pre>
203 It means that the sample_server process is not running.
204 <br>
205 <br>
206 </li>
207
208
209
210 <h1>5.0 Programming Information</h1>
211
212 <p>
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
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>
232
233
234 </body>
235 </html>