blob: 4c1099c5e324e69f0ca16b3617d33b0d7fb32616 [file] [log] [blame]
Andreas Bollecd5c7c2012-06-12 09:05:03 +02001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html lang="en">
3<head>
4 <meta http-equiv="content-type" content="text/html; charset=utf-8">
5 <title>Development Notes</title>
6 <link rel="stylesheet" type="text/css" href="mesa.css">
7</head>
8<body>
Brian Paul0b27ace2003-03-08 17:38:57 +00009
Andreas Bollb5da52a2012-09-18 18:57:02 +020010<div class="header">
11 <h1>The Mesa 3D Graphics Library</h1>
12</div>
13
14<iframe src="contents.html"></iframe>
15<div class="content">
16
Andreas Bollecd5c7c2012-06-12 09:05:03 +020017<h1>Development Notes</h1>
Brian Paul0b27ace2003-03-08 17:38:57 +000018
19
Andreas Bollecd5c7c2012-06-12 09:05:03 +020020<h2>Adding Extentions</h2>
Brian Paul0b27ace2003-03-08 17:38:57 +000021
22<p>
Brian Paul51830612004-08-17 14:08:59 +000023To add a new GL extension to Mesa you have to do at least the following.
Brian Paul0b27ace2003-03-08 17:38:57 +000024
Brian Paul51830612004-08-17 14:08:59 +000025<ul>
26<li>
27 If glext.h doesn't define the extension, edit include/GL/gl.h and add
28 code like this:
29 <pre>
30 #ifndef GL_EXT_the_extension_name
31 #define GL_EXT_the_extension_name 1
32 /* declare the new enum tokens */
33 /* prototype the new functions */
34 /* TYPEDEFS for the new functions */
35 #endif
36 </pre>
37</li>
38<li>
Timothy Arceri37f9e0e2013-08-02 21:57:50 +100039 In the src/mapi/glapi/gen/ directory, add the new extension functions and
Brian Paul51830612004-08-17 14:08:59 +000040 enums to the gl_API.xml file.
41 Then, a bunch of source files must be regenerated by executing the
42 corresponding Python scripts.
43</li>
44<li>
Brian Paulbb086292006-09-21 22:53:15 +000045 Add a new entry to the <code>gl_extensions</code> struct in mtypes.h
46</li>
47<li>
48 Update the <code>extensions.c</code> file.
49</li>
50<li>
51 From this point, the best way to proceed is to find another extension,
52 similar to the new one, that's already implemented in Mesa and use it
53 as an example.
Brian Paul51830612004-08-17 14:08:59 +000054</li>
55<li>
Brian Paul65b79052004-11-22 17:49:15 +000056 If the new extension adds new GL state, the functions in get.c, enable.c
Brian Paul51830612004-08-17 14:08:59 +000057 and attrib.c will most likely require new code.
58</li>
59</ul>
Brian Paul0b27ace2003-03-08 17:38:57 +000060
61
62
Andreas Boll210a27d2012-06-12 09:05:36 +020063<h2>Coding Style</h2>
Brian Paul0b27ace2003-03-08 17:38:57 +000064
65<p>
66Mesa's code style has changed over the years. Here's the latest.
67</p>
68
69<p>
70Comment your code! It's extremely important that open-source code be
71well documented. Also, strive to write clean, easily understandable code.
72</p>
73
74<p>
753-space indentation
76</p>
77
78<p>
79If you use tabs, set them to 8 columns
80</p>
81
82<p>
Paul Berry43968262011-08-16 14:09:32 -070083Line width: the preferred width to fill comments and code in Mesa is 78
84columns. Exceptions are sometimes made for clarity (e.g. tabular data is
85sometimes filled to a much larger width so that extraneous carriage returns
86don't obscure the table).
87</p>
88
89<p>
Brian Paul0b27ace2003-03-08 17:38:57 +000090Brace example:
91</p>
92<pre>
93 if (condition) {
94 foo;
95 }
96 else {
97 bar;
98 }
Paul Berry43968262011-08-16 14:09:32 -070099
100 switch (condition) {
101 case 0:
102 foo();
103 break;
104
105 case 1: {
106 ...
107 break;
108 }
109
110 default:
111 ...
112 break;
113 }
Brian Paul0b27ace2003-03-08 17:38:57 +0000114</pre>
115
116<p>
117Here's the GNU indent command which will best approximate my preferred style:
Paul Berry43968262011-08-16 14:09:32 -0700118(Note that it won't format switch statements in the preferred way)
Brian Paul0b27ace2003-03-08 17:38:57 +0000119</p>
120<pre>
Brian Paule3f41ce2006-03-31 23:10:21 +0000121 indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
Brian Paul0b27ace2003-03-08 17:38:57 +0000122</pre>
123
124
125<p>
126Local variable name example: localVarName (no underscores)
127</p>
128
129<p>
130Constants and macros are ALL_UPPERCASE, with _ between words
131</p>
132
133<p>
Brian Paul65b79052004-11-22 17:49:15 +0000134Global variables are not allowed.
Brian Paul0b27ace2003-03-08 17:38:57 +0000135</p>
136
137<p>
138Function name examples:
139</p>
140<pre>
Chia-I Wu27d260b42010-02-24 11:20:14 +0800141 glFooBar() - a public GL entry point (in glapi_dispatch.c)
Brian Paul0b27ace2003-03-08 17:38:57 +0000142 _mesa_FooBar() - the internal immediate mode function
143 save_FooBar() - retained mode (display list) function in dlist.c
144 foo_bar() - a static (private) function
145 _mesa_foo_bar() - an internal non-static Mesa function
146</pre>
147
Kai Wasserbächdbec3a52011-08-23 10:48:58 +0200148<p>
149Places that are not directly visible to the GL API should prefer the use
150of <tt>bool</tt>, <tt>true</tt>, and
151<tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and
152<tt>GL_FALSE</tt>. In C code, this may mean that
Kai Wasserbäche106d4c2011-08-27 17:51:47 +0200153<tt>#include &lt;stdbool.h&gt;</tt> needs to be added. The
Kai Wasserbächdbec3a52011-08-23 10:48:58 +0200154<tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and
Kai Wasserbäche106d4c2011-08-27 17:51:47 +0200155src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples.
Kai Wasserbächdbec3a52011-08-23 10:48:58 +0200156</p>
157
Brian Paul0b27ace2003-03-08 17:38:57 +0000158
Andreas Bollf07784d2012-10-02 13:37:34 +0200159<h2>Marking a commit as a candidate for a stable branch</h2>
160
161<p>
162If you want a commit to be applied to a stable branch,
163you should add an appropriate note to the commit message.
164</p>
165
166<p>
167Here are some examples of such a note:
168</p>
169<ul>
170 <li>NOTE: This is a candidate for the 9.0 branch.</li>
171 <li>NOTE: This is a candidate for the 8.0 and 9.0 branches.</li>
172 <li>NOTE: This is a candidate for the stable branches.</li>
173</ul>
174
Andreas Boll1f38fb22012-10-02 13:55:53 +0200175
176<h2>Cherry-picking candidates for a stable branch</h2>
177
178<p>
179Please use <code>git cherry-pick -x &lt;commit&gt;</code> for cherry-picking a commit
180from master to a stable branch.
181</p>
182
Andreas Boll210a27d2012-06-12 09:05:36 +0200183<h2>Making a New Mesa Release</h2>
Brian Paul0b27ace2003-03-08 17:38:57 +0000184
185<p>
186These are the instructions for making a new Mesa release.
187</p>
188
Andreas Boll210a27d2012-06-12 09:05:36 +0200189<h3>Get latest source files</h3>
Brian Paul0b27ace2003-03-08 17:38:57 +0000190<p>
Brian Paul84c5e482009-06-23 19:21:04 -0600191Use git to get the latest Mesa files from the git repository, from whatever
192branch is relevant.
Brian Paul0b27ace2003-03-08 17:38:57 +0000193</p>
194
Brian Paul0b27ace2003-03-08 17:38:57 +0000195
Emil Velikov488b3ed2013-07-25 23:45:45 +0100196<h3>Verify and update version info in VERSION</h3>
Brian Paul65b79052004-11-22 17:49:15 +0000197
198<p>
Emil Velikov5fd3b3b2013-04-12 12:41:49 +0100199Create a docs/relnotes/x.y.z.html file.
Andreas Bolldf012012013-04-17 18:45:15 +0200200The bin/bugzilla_mesa.sh and bin/shortlog_mesa.sh scripts can be used to
201create the HTML-formatted lists of bugfixes and changes to include in the file.
Emil Velikov5fd3b3b2013-04-12 12:41:49 +0100202Link the new docs/relnotes/x.y.z.html file into the main <a href="relnotes.html">relnotes.html</a> file.
Brian Paul65b79052004-11-22 17:49:15 +0000203</p>
204
205<p>
Andreas Boll7b092542012-09-18 18:59:33 +0200206Update <a href="index.html">docs/index.html</a>.
Andreas Bollb347bb52012-06-25 21:53:06 +0200207</p>
208
209<p>
210Tag the files with the release name (in the form <b>mesa-x.y</b>)
Andreas Bolld59bd612013-01-30 22:35:58 +0100211with: <code>git tag -s mesa-x.y -m "Mesa x.y Release"</code>
Andreas Bollb347bb52012-06-25 21:53:06 +0200212Then: <code>git push origin mesa-x.y</code>
Brian Paul65b79052004-11-22 17:49:15 +0000213</p>
214
215
Andreas Boll210a27d2012-06-12 09:05:36 +0200216<h3>Make the tarballs</h3>
Brian Paul65b79052004-11-22 17:49:15 +0000217<p>
Brian Paul0b27ace2003-03-08 17:38:57 +0000218Make the distribution files. From inside the Mesa directory:
219<pre>
Andreas Bolld59bd612013-01-30 22:35:58 +0100220 ./autogen.sh
Brian Paul9cef3ef2004-10-02 15:43:14 +0000221 make tarballs
Brian Paul0b27ace2003-03-08 17:38:57 +0000222</pre>
223
224<p>
Brian Paul65b79052004-11-22 17:49:15 +0000225After the tarballs are created, the md5 checksums for the files will
226be computed.
Emil Velikov5fd3b3b2013-04-12 12:41:49 +0100227Add them to the docs/relnotes/x.y.html file.
Brian Paul65b79052004-11-22 17:49:15 +0000228</p>
229
230<p>
Brian Paul0b27ace2003-03-08 17:38:57 +0000231Copy the distribution files to a temporary directory, unpack them,
232compile everything, and run some demos to be sure everything works.
233</p>
234
Andreas Boll210a27d2012-06-12 09:05:36 +0200235<h3>Update the website and announce the release</h3>
Brian Paul0b27ace2003-03-08 17:38:57 +0000236<p>
Andreas Bolld59bd612013-01-30 22:35:58 +0100237Make a new directory for the release on annarchy.freedesktop.org with:
238<br>
239<code>
240mkdir /srv/ftp.freedesktop.org/pub/mesa/x.y
241</code>
Brian Paul0b27ace2003-03-08 17:38:57 +0000242</p>
243
244<p>
Brian Paul84c5e482009-06-23 19:21:04 -0600245Basically, to upload the tarball files with:
246<br>
247<code>
Andreas Bolld59bd612013-01-30 22:35:58 +0100248rsync -avP -e ssh MesaLib-x.y.* USERNAME@annarchy.freedesktop.org:/srv/ftp.freedesktop.org/pub/mesa/x.y/
Brian Paul84c5e482009-06-23 19:21:04 -0600249</code>
250</p>
251
252<p>
Brian Paul65b79052004-11-22 17:49:15 +0000253Update the web site by copying the docs/ directory's files to
Brian Paul84c5e482009-06-23 19:21:04 -0600254/home/users/b/br/brianp/mesa-www/htdocs/ with:
255<br>
256<code>
257sftp USERNAME,mesa3d@web.sourceforge.net
258</code>
Brian Paul0b27ace2003-03-08 17:38:57 +0000259</p>
260
261<p>
Brian Paulefe56712003-03-19 19:15:28 +0000262Make an announcement on the mailing lists:
Ian Romanick8f32c642010-06-16 14:28:08 -0700263
Kenneth Graunke7d24d1b2013-07-25 11:42:38 -0700264<em>mesa-dev@lists.freedesktop.org</em>,
265<em>mesa-users@lists.freedesktop.org</em>
Brian Paulefe56712003-03-19 19:15:28 +0000266and
Kenneth Graunke7d24d1b2013-07-25 11:42:38 -0700267<em>mesa-announce@lists.freedesktop.org</em>
Brian Paul0b27ace2003-03-08 17:38:57 +0000268</p>
269
Andreas Bollb5da52a2012-09-18 18:57:02 +0200270</div>
Brian Paul0b27ace2003-03-08 17:38:57 +0000271</body>
272</html>