Andreas Boll | ecd5c7c | 2012-06-12 09:05:03 +0200 | [diff] [blame] | 1 | <!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 Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 9 | |
Andreas Boll | b5da52a | 2012-09-18 18:57:02 +0200 | [diff] [blame] | 10 | <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 Boll | ecd5c7c | 2012-06-12 09:05:03 +0200 | [diff] [blame] | 17 | <h1>Development Notes</h1> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 18 | |
| 19 | |
Brian Paul | 5183061 | 2004-08-17 14:08:59 +0000 | [diff] [blame] | 20 | <ul> |
Brian Paul | 98f2f47 | 2015-05-25 09:13:09 -0600 | [diff] [blame] | 21 | <li><a href="#style">Coding Style</a> |
| 22 | <li><a href="#submitting">Submitting Patches</a> |
| 23 | <li><a href="#release">Making a New Mesa Release</a> |
| 24 | <li><a href="#extensions">Adding Extensions</a> |
Brian Paul | 5183061 | 2004-08-17 14:08:59 +0000 | [diff] [blame] | 25 | </ul> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 26 | |
| 27 | |
Brian Paul | 98f2f47 | 2015-05-25 09:13:09 -0600 | [diff] [blame] | 28 | <h2 id="style">Coding Style</h2> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 29 | |
| 30 | <p> |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 31 | Mesa is over 20 years old and the coding style has evolved over time. |
| 32 | Some old parts use a style that's a bit out of date. |
| 33 | If the guidelines below don't cover something, try following the format of |
| 34 | existing, neighboring code. |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 35 | </p> |
| 36 | |
| 37 | <p> |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 38 | Basic formatting guidelines |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 39 | </p> |
| 40 | |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 41 | <ul> |
| 42 | <li>3-space indentation, no tabs. |
| 43 | <li>Limit lines to 78 or fewer characters. The idea is to prevent line |
| 44 | wrapping in 80-column editors and terminals. There are exceptions, such |
| 45 | as if you're defining a large, static table of information. |
| 46 | <li>Opening braces go on the same line as the if/for/while statement. |
| 47 | For example: |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 48 | <pre> |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 49 | if (condition) { |
| 50 | foo; |
| 51 | } else { |
| 52 | bar; |
| 53 | } |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 54 | </pre> |
| 55 | |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 56 | <li>Put a space before/after operators. For example, <tt>a = b + c;</tt> |
| 57 | and not <tt>a=b+c;</tt> |
| 58 | |
| 59 | <li>This GNU indent command generally does the right thing for formatting: |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 60 | <pre> |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 61 | indent -br -i3 -npcs --no-tabs infile.c -o outfile.c |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 62 | </pre> |
| 63 | |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 64 | <li>Use comments wherever you think it would be helpful for other developers. |
| 65 | Several specific cases and style examples follow. Note that we roughly |
| 66 | follow <a href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a> conventions. |
| 67 | <br> |
| 68 | <br> |
| 69 | Single-line comments: |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 70 | <pre> |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 71 | /* null-out pointer to prevent dangling reference below */ |
| 72 | bufferObj = NULL; |
| 73 | </pre> |
| 74 | Or, |
| 75 | <pre> |
| 76 | bufferObj = NULL; /* prevent dangling reference below */ |
| 77 | </pre> |
| 78 | Multi-line comment: |
| 79 | <pre> |
| 80 | /* If this is a new buffer object id, or one which was generated but |
| 81 | * never used before, allocate a buffer object now. |
| 82 | */ |
| 83 | </pre> |
| 84 | We try to quote the OpenGL specification where prudent: |
| 85 | <pre> |
| 86 | /* Page 38 of the PDF of the OpenGL ES 3.0 spec says: |
| 87 | * |
| 88 | * "An INVALID_OPERATION error is generated for any of the following |
| 89 | * conditions: |
| 90 | * |
| 91 | * * <length> is zero." |
| 92 | * |
| 93 | * Additionally, page 94 of the PDF of the OpenGL 4.5 core spec |
| 94 | * (30.10.2014) also says this, so it's no longer allowed for desktop GL, |
| 95 | * either. |
| 96 | */ |
| 97 | </pre> |
| 98 | Function comment example: |
| 99 | <pre> |
| 100 | /** |
| 101 | * Create and initialize a new buffer object. Called via the |
| 102 | * ctx->Driver.CreateObject() driver callback function. |
| 103 | * \param name integer name of the object |
| 104 | * \param type one of GL_FOO, GL_BAR, etc. |
| 105 | * \return pointer to new object or NULL if error |
| 106 | */ |
| 107 | struct gl_object * |
| 108 | _mesa_create_object(GLuint name, GLenum type) |
| 109 | { |
| 110 | /* function body */ |
| 111 | } |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 112 | </pre> |
| 113 | |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 114 | <li>Put the function return type and qualifiers on one line and the function |
| 115 | name and parameters on the next, as seen above. This makes it easy to use |
| 116 | <code>grep ^function_name dir/*</code> to find function definitions. Also, |
| 117 | the opening brace goes on the next line by itself (see above.) |
| 118 | |
| 119 | <li>Function names follow various conventions depending on the type of function: |
| 120 | <pre> |
| 121 | glFooBar() - a public GL entry point (in glapi_dispatch.c) |
| 122 | _mesa_FooBar() - the internal immediate mode function |
| 123 | save_FooBar() - retained mode (display list) function in dlist.c |
| 124 | foo_bar() - a static (private) function |
| 125 | _mesa_foo_bar() - an internal non-static Mesa function |
| 126 | </pre> |
| 127 | |
| 128 | <li>Constants, macros and enumerant names are ALL_UPPERCASE, with _ between |
| 129 | words. |
| 130 | <li>Mesa usually uses camel case for local variables (Ex: "localVarname") |
| 131 | while gallium typically uses underscores (Ex: "local_var_name"). |
| 132 | <li>Global variables are almost never used because Mesa should be thread-safe. |
| 133 | |
| 134 | <li>Booleans. Places that are not directly visible to the GL API |
| 135 | should prefer the use of <tt>bool</tt>, <tt>true</tt>, and |
Kai Wasserbäch | dbec3a5 | 2011-08-23 10:48:58 +0200 | [diff] [blame] | 136 | <tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and |
| 137 | <tt>GL_FALSE</tt>. In C code, this may mean that |
Kai Wasserbäch | e106d4c | 2011-08-27 17:51:47 +0200 | [diff] [blame] | 138 | <tt>#include <stdbool.h></tt> needs to be added. The |
Kai Wasserbäch | dbec3a5 | 2011-08-23 10:48:58 +0200 | [diff] [blame] | 139 | <tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and |
Kai Wasserbäch | e106d4c | 2011-08-27 17:51:47 +0200 | [diff] [blame] | 140 | src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples. |
Brian Paul | c6184f8 | 2015-05-25 10:18:35 -0600 | [diff] [blame] | 141 | |
| 142 | </ul> |
Kai Wasserbäch | dbec3a5 | 2011-08-23 10:48:58 +0200 | [diff] [blame] | 143 | |
Brian Paul | 98f2f47 | 2015-05-25 09:13:09 -0600 | [diff] [blame] | 144 | |
| 145 | <h2 id="submitting">Submitting patches</h2> |
Timothy Arceri | 2382011 | 2013-09-05 02:54:00 -0600 | [diff] [blame] | 146 | |
| 147 | <p> |
Brian Paul | d959885 | 2015-05-25 09:42:04 -0600 | [diff] [blame] | 148 | The basic guidelines for submitting patches are: |
| 149 | </p> |
| 150 | |
| 151 | <ul> |
| 152 | <li>Patches should be sufficiently tested before submitting. |
| 153 | <li>Code patches should follow Mesa coding conventions. |
| 154 | <li>Whenever possible, patches should only effect individual Mesa/Gallium |
| 155 | components. |
| 156 | <li>Patches should never introduce build breaks and should be bisectable (see |
| 157 | <code>git bisect</code>.) |
| 158 | <li>Patches should be properly formatted (see below). |
| 159 | <li>Patches should be submitted to mesa-dev for review using |
| 160 | <code>git send-email</code>. |
| 161 | <li>Patches should not mix code changes with code formatting changes (except, |
| 162 | perhaps, in very trivial cases.) |
| 163 | </ul> |
| 164 | |
| 165 | <h3>Patch formatting</h3> |
| 166 | |
| 167 | <p> |
| 168 | The basic rules for patch formatting are: |
| 169 | </p> |
| 170 | |
| 171 | <ul> |
| 172 | <li>Lines should be limited to 75 characters or less so that git logs |
| 173 | displayed in 80-column terminals avoid line wrapping. Note that git |
| 174 | log uses 4 spaces of indentation (4 + 75 < 80). |
| 175 | <li>The first line should be a short, concise summary of the change prefixed |
| 176 | with a module name. Examples: |
| 177 | <pre> |
| 178 | mesa: Add support for querying GL_VERTEX_ATTRIB_ARRAY_LONG |
| 179 | |
| 180 | gallium: add PIPE_CAP_DEVICE_RESET_STATUS_QUERY |
| 181 | |
| 182 | i965: Fix missing type in local variable declaration. |
| 183 | </pre> |
| 184 | <li>Subsequent patch comments should describe the change in more detail, |
| 185 | if needed. For example: |
| 186 | <pre> |
| 187 | i965: Remove end-of-thread SEND alignment code. |
| 188 | |
| 189 | This was present in Eric's initial implementation of the compaction code |
| 190 | for Sandybridge (commit 077d01b6). There is no documentation saying this |
| 191 | is necessary, and removing it causes no regressions in piglit on any |
| 192 | platform. |
| 193 | </pre> |
| 194 | <li>A "Signed-off-by:" line is not required, but not discouraged either. |
| 195 | <li>If a patch address a bugzilla issue, that should be noted in the |
| 196 | patch comment. For example: |
| 197 | <pre> |
| 198 | Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89689 |
| 199 | </pre> |
| 200 | <li>If there have been several revisions to a patch during the review |
| 201 | process, they should be noted such as in this example: |
| 202 | <pre> |
| 203 | st/mesa: add ARB_texture_stencil8 support (v4) |
| 204 | |
| 205 | if we support stencil texturing, enable texture_stencil8 |
| 206 | there is no requirement to support native S8 for this, |
| 207 | the texture can be converted to x24s8 fine. |
| 208 | |
| 209 | v2: fold fixes from Marek in: |
| 210 | a) put S8 last in the list |
| 211 | b) fix renderable to always test for d/s renderable |
| 212 | fixup the texture case to use a stencil only format |
| 213 | for picking the format for the texture view. |
| 214 | v3: hit fallback for getteximage |
| 215 | v4: put s8 back in front, it shouldn't get picked now (Ilia) |
| 216 | </pre> |
| 217 | <li>If someone tested your patch, document it with a line like this: |
| 218 | <pre> |
| 219 | Tested-by: Joe Hacker <jhacker@foo.com> |
| 220 | </pre> |
| 221 | <li>If the patch was reviewed (usually the case) or acked by someone, |
| 222 | that should be documented with: |
| 223 | <pre> |
| 224 | Reviewed-by: Joe Hacker <jhacker@foo.com> |
| 225 | Acked-by: Joe Hacker <jhacker@foo.com> |
| 226 | </pre> |
| 227 | </ul> |
| 228 | |
| 229 | |
| 230 | |
| 231 | <h3>Testing Patches</h3> |
| 232 | |
| 233 | <p> |
| 234 | It should go without saying that patches must be tested. In general, |
| 235 | do whatever testing is prudent. |
| 236 | </p> |
| 237 | |
| 238 | <p> |
| 239 | You should always run the Mesa test suite before submitting patches. |
| 240 | The test suite can be run using the 'make check' command. All tests |
Timothy Arceri | 2382011 | 2013-09-05 02:54:00 -0600 | [diff] [blame] | 241 | must pass before patches will be accepted, this may mean you have |
| 242 | to update the tests themselves. |
| 243 | </p> |
| 244 | |
| 245 | <p> |
Brian Paul | d959885 | 2015-05-25 09:42:04 -0600 | [diff] [blame] | 246 | Whenever possible and applicable, test the patch with |
Timothy Arceri | 2ce2b80 | 2015-06-19 13:03:36 +1000 | [diff] [blame^] | 247 | <a href="http://piglit.freedesktop.org">Piglit</a> to |
Brian Paul | d959885 | 2015-05-25 09:42:04 -0600 | [diff] [blame] | 248 | check for regressions. |
| 249 | </p> |
| 250 | |
| 251 | |
| 252 | <h3>Mailing Patches</h3> |
| 253 | |
| 254 | <p> |
Timothy Arceri | 2382011 | 2013-09-05 02:54:00 -0600 | [diff] [blame] | 255 | Patches should be sent to the Mesa mailing list for review. |
| 256 | When submitting a patch make sure to use git send-email rather than attaching |
| 257 | patches to emails. Sending patches as attachments prevents people from being |
| 258 | able to provide in-line review comments. |
| 259 | </p> |
| 260 | |
| 261 | <p> |
| 262 | When submitting follow-up patches you can use --in-reply-to to make v2, v3, |
| 263 | etc patches show up as replies to the originals. This usually works well |
| 264 | when you're sending out updates to individual patches (as opposed to |
| 265 | re-sending the whole series). Using --in-reply-to makes |
| 266 | it harder for reviewers to accidentally review old patches. |
| 267 | </p> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 268 | |
Timothy Arceri | 2ce2b80 | 2015-06-19 13:03:36 +1000 | [diff] [blame^] | 269 | <p> |
| 270 | When submitting follow-up patches you should also login to |
| 271 | <a href="https://patchwork.freedesktop.org">patchwork</a> and change the |
| 272 | state of your old patches to Superseded. |
| 273 | </p> |
| 274 | |
Brian Paul | 2ab0ca3 | 2015-05-26 11:30:22 -0600 | [diff] [blame] | 275 | <h3>Reviewing Patches</h3> |
| 276 | |
| 277 | <p> |
| 278 | When you've reviewed a patch on the mailing list, please be unambiguous |
| 279 | about your review. That is, state either |
| 280 | <pre> |
| 281 | Reviewed-by: Joe Hacker <jhacker@foo.com> |
| 282 | </pre> |
| 283 | or |
| 284 | <pre> |
| 285 | Acked-by: Joe Hacker <jhacker@foo.com> |
| 286 | </pre> |
| 287 | Rather than saying just "LGTM" or "Seems OK". |
| 288 | </p> |
| 289 | |
| 290 | <p> |
| 291 | If small changes are suggested, it's OK to say something like: |
| 292 | <pre> |
| 293 | With the above fixes, Reviewed-by: Joe Hacker <jhacker@foo.com> |
| 294 | </pre> |
| 295 | which tells the patch author that the patch can be committed, as long |
| 296 | as the issues are resolved first. |
| 297 | </p> |
| 298 | |
| 299 | |
Brian Paul | 98f2f47 | 2015-05-25 09:13:09 -0600 | [diff] [blame] | 300 | <h3>Marking a commit as a candidate for a stable branch</h3> |
Andreas Boll | f07784d | 2012-10-02 13:37:34 +0200 | [diff] [blame] | 301 | |
| 302 | <p> |
| 303 | If you want a commit to be applied to a stable branch, |
| 304 | you should add an appropriate note to the commit message. |
| 305 | </p> |
| 306 | |
| 307 | <p> |
| 308 | Here are some examples of such a note: |
| 309 | </p> |
| 310 | <ul> |
Carl Worth | d6c8365 | 2013-12-12 23:07:26 -0800 | [diff] [blame] | 311 | <li>CC: <mesa-stable@lists.freedesktop.org></li> |
| 312 | <li>CC: "9.2 10.0" <mesa-stable@lists.freedesktop.org></li> |
| 313 | <li>CC: "10.0" <mesa-stable@lists.freedesktop.org></li> |
Andreas Boll | f07784d | 2012-10-02 13:37:34 +0200 | [diff] [blame] | 314 | </ul> |
| 315 | |
Carl Worth | d6c8365 | 2013-12-12 23:07:26 -0800 | [diff] [blame] | 316 | Simply adding the CC to the mesa-stable list address is adequate to nominate |
| 317 | the commit for the most-recently-created stable branch. It is only necessary |
| 318 | to specify a specific branch name, (such as "9.2 10.0" or "10.0" in the |
| 319 | examples above), if you want to nominate the commit for an older stable |
| 320 | branch. And, as in these examples, you can nominate the commit for the older |
| 321 | branch in addition to the more recent branch, or nominate the commit |
| 322 | exclusively for the older branch. |
| 323 | |
| 324 | This "CC" syntax for patch nomination will cause patches to automatically be |
| 325 | copied to the mesa-stable@ mailing list when you use "git send-email" to send |
| 326 | patches to the mesa-dev@ mailing list. Also, if you realize that a commit |
Nathan Kidd | 0691b37 | 2014-01-03 16:44:00 -0700 | [diff] [blame] | 327 | should be nominated for the stable branch after it has already been committed, |
Carl Worth | d6c8365 | 2013-12-12 23:07:26 -0800 | [diff] [blame] | 328 | you can send a note directly to the mesa-stable@lists.freedesktop.org where |
| 329 | the Mesa stable-branch maintainers will receive it. Be sure to mention the |
| 330 | commit ID of the commit of interest (as it appears in the mesa master branch). |
Andreas Boll | 1f38fb2 | 2012-10-02 13:55:53 +0200 | [diff] [blame] | 331 | |
Carl Worth | 4546b70 | 2014-04-30 16:27:03 -0700 | [diff] [blame] | 332 | The latest set of patches that have been nominated, accepted, or rejected for |
| 333 | the upcoming stable release can always be seen on the |
Carl Worth | 399b4e2 | 2014-08-21 09:46:57 -0700 | [diff] [blame] | 334 | <a href="http://cworth.org/~cworth/mesa-stable-queue/">Mesa Stable Queue</a> |
Carl Worth | 4546b70 | 2014-04-30 16:27:03 -0700 | [diff] [blame] | 335 | page. |
| 336 | |
Brian Paul | 98f2f47 | 2015-05-25 09:13:09 -0600 | [diff] [blame] | 337 | <h3>Criteria for accepting patches to the stable branch</h3> |
Andreas Boll | 1f38fb2 | 2012-10-02 13:55:53 +0200 | [diff] [blame] | 338 | |
Carl Worth | 399b4e2 | 2014-08-21 09:46:57 -0700 | [diff] [blame] | 339 | Mesa has a designated release manager for each stable branch, and the release |
| 340 | manager is the only developer that should be pushing changes to these |
| 341 | branches. Everyone else should simply nominate patches using the mechanism |
| 342 | described above. |
| 343 | |
| 344 | The stable-release manager will work with the list of nominated patches, and |
| 345 | for each patch that meets the crtieria below will cherry-pick the patch with: |
| 346 | <code>git cherry-pick -x <commit></code>. The <code>-x</code> option is |
| 347 | important so that the picked patch references the comit ID of the original |
| 348 | patch. |
| 349 | |
| 350 | The stable-release manager may at times need to force-push changes to the |
| 351 | stable branches, for example, to drop a previously-picked patch that was later |
| 352 | identified as causing a regression). These force-pushes may cause changes to |
| 353 | be lost from the stable branch if developers push things directly. Consider |
| 354 | yourself warned. |
| 355 | |
| 356 | The stable-release manager is also given broad discretion in rejecting patches |
| 357 | that have been nominated for the stable branch. The most basic rule is that |
| 358 | the stable branch is for bug fixes only, (no new features, no |
| 359 | regressions). Here is a non-exhaustive list of some reasons that a patch may |
| 360 | be rejected: |
| 361 | |
| 362 | <ul> |
| 363 | <li>Patch introduces a regression. Any reported build breakage or other |
| 364 | regression caused by a particular patch, (game no longer work, piglit test |
| 365 | changes from PASS to FAIL), is justification for rejecting a patch.</li> |
| 366 | |
| 367 | <li>Patch is too large, (say, larger than 100 lines)</li> |
| 368 | |
| 369 | <li>Patch is not a fix. For example, a commit that moves code around with no |
| 370 | functional change should be rejected.</li> |
| 371 | |
| 372 | <li>Patch fix is not clearly described. For example, a commit message |
| 373 | of only a single line, no description of the bug, no mention of bugzilla, |
| 374 | etc.</li> |
| 375 | |
| 376 | <li>Patch has not obviously been reviewed, For example, the commit message |
| 377 | has no Reviewed-by, Signed-off-by, nor Tested-by tags from anyone but the |
| 378 | author.</li> |
| 379 | |
| 380 | <li>Patch has not already been merged to the master branch. As a rule, bug |
| 381 | fixes should never be applied first to a stable branch. Patches should land |
| 382 | first on the master branch and then be cherry-picked to a stable |
| 383 | branch. (This is to avoid future releases causing regressions if the patch |
| 384 | is not also applied to master.) The only things that might look like |
| 385 | exceptions would be backports of patches from master that happen to look |
| 386 | significantly different.</li> |
| 387 | |
| 388 | <li>Patch depends on too many other patches. Ideally, all stable-branch |
| 389 | patches should be self-contained. It sometimes occurs that a single, logical |
| 390 | bug-fix occurs as two separate patches on master, (such as an original |
| 391 | patch, then a subsequent fix-up to that patch). In such a case, these two |
| 392 | patches should be squashed into a single, self-contained patch for the |
| 393 | stable branch. (Of course, if the squashing makes the patch too large, then |
| 394 | that could be a reason to reject the patch.)</li> |
| 395 | |
| 396 | <li>Patch includes new feature development, not bug fixes. New OpenGL |
| 397 | features, extensions, etc. should be applied to Mesa master and included in |
| 398 | the next major release. Stable releases are intended only for bug fixes. |
| 399 | |
| 400 | Note: As an exception to this rule, the stable-release manager may accept |
| 401 | hardware-enabling "features". For example, backports of new code to support |
| 402 | a newly-developed hardware product can be accepted if they can be reasonably |
| 403 | determined to not have effects on other hardware.</li> |
| 404 | |
| 405 | <li>Patch is a performance optimization. As a rule, performance patches are |
| 406 | not candidates for the stable branch. The only exception might be a case |
| 407 | where an application's performance was recently severely impacted so as to |
| 408 | become unusable. The fix for this performance regression could then be |
| 409 | considered for a stable branch. The optimization must also be |
| 410 | non-controversial and the patches still need to meet the other criteria of |
| 411 | being simple and self-contained</li> |
| 412 | |
| 413 | <li>Patch introduces a new failure mode (such as an assert). While the new |
| 414 | assert might technically be correct, for example to make Mesa more |
| 415 | conformant, this is not the kind of "bug fix" we want in a stable |
| 416 | release. The potential problem here is that an OpenGL program that was |
| 417 | previously working, (even if technically non-compliant with the |
| 418 | specification), could stop working after this patch. So that would be a |
| 419 | regression that is unaacceptable for the stable branch.</li> |
| 420 | </ul> |
Andreas Boll | 1f38fb2 | 2012-10-02 13:55:53 +0200 | [diff] [blame] | 421 | |
Brian Paul | 98f2f47 | 2015-05-25 09:13:09 -0600 | [diff] [blame] | 422 | |
| 423 | <h2 id="release">Making a New Mesa Release</h2> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 424 | |
| 425 | <p> |
| 426 | These are the instructions for making a new Mesa release. |
| 427 | </p> |
| 428 | |
Andreas Boll | 210a27d | 2012-06-12 09:05:36 +0200 | [diff] [blame] | 429 | <h3>Get latest source files</h3> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 430 | <p> |
Brian Paul | 84c5e48 | 2009-06-23 19:21:04 -0600 | [diff] [blame] | 431 | Use git to get the latest Mesa files from the git repository, from whatever |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 432 | branch is relevant. This document uses the convention X.Y.Z for the release |
| 433 | being created, which should be created from a branch named X.Y. |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 434 | </p> |
| 435 | |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 436 | <h3>Perform basic testing</h3> |
Brian Paul | 65b7905 | 2004-11-22 17:49:15 +0000 | [diff] [blame] | 437 | <p> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 438 | The release manager should, at the very least, test the code by compiling it, |
| 439 | installing it, and running the latest piglit to ensure that no piglit tests |
| 440 | have regressed since the previous release. |
Brian Paul | 65b7905 | 2004-11-22 17:49:15 +0000 | [diff] [blame] | 441 | </p> |
| 442 | |
| 443 | <p> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 444 | The release manager should do this testing with at least one hardware driver, |
| 445 | (say, whatever is contained in the local development machine), as well as on |
| 446 | both Gallium and non-Gallium software drivers. The software testing can be |
| 447 | performed by running piglit with the following environment-variable set: |
Andreas Boll | b347bb5 | 2012-06-25 21:53:06 +0200 | [diff] [blame] | 448 | </p> |
| 449 | |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 450 | <pre> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 451 | LIBGL_ALWAYS_SOFTWARE=1 |
| 452 | </pre> |
| 453 | |
| 454 | And Gallium vs. non-Gallium software drivers can be obtained by using the |
| 455 | following configure flags on separate builds: |
| 456 | |
| 457 | <pre> |
| 458 | --with-dri-drivers=swrast |
| 459 | --with-gallium-drivers=swrast |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 460 | </pre> |
| 461 | |
| 462 | <p> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 463 | Note: If both options are given in one build, both swrast_dri.so drivers will |
| 464 | be compiled, but only one will be installed. The following command can be used |
| 465 | to ensure the correct driver is being tested: |
| 466 | </p> |
| 467 | |
| 468 | <pre> |
| 469 | LIBGL_ALWAYS_SOFTWARE=1 glxinfo | grep "renderer string" |
| 470 | </pre> |
| 471 | |
| 472 | If any regressions are found in this testing with piglit, stop here, and do |
| 473 | not perform a release until regressions are fixed. |
| 474 | |
| 475 | <h3>Update version in file VERSION</h3> |
| 476 | |
| 477 | <p> |
| 478 | Increment the version contained in the file VERSION at Mesa's top-level, then |
| 479 | commit this change. |
| 480 | </p> |
| 481 | |
| 482 | <h3>Create release notes for the new release</h3> |
| 483 | |
| 484 | <p> |
| 485 | Create a new file docs/relnotes/X.Y.Z.html, (follow the style of the previous |
| 486 | release notes). Note that the sha256sums section of the release notes should |
| 487 | be empty at this point. |
Brian Paul | 65b7905 | 2004-11-22 17:49:15 +0000 | [diff] [blame] | 488 | </p> |
| 489 | |
| 490 | <p> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 491 | Two scripts are available to help generate portions of the release notes: |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 492 | |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 493 | <pre> |
| 494 | ./bin/bugzilla_mesa.sh |
| 495 | ./bin/shortlog_mesa.sh |
| 496 | </pre> |
| 497 | |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 498 | <p> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 499 | The first script identifies commits that reference bugzilla bugs and obtains |
| 500 | the descriptions of those bugs from bugzilla. The second script generates a |
| 501 | log of all commits. In both cases, HTML-formatted lists are printed to stdout |
| 502 | to be included in the release notes. |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 503 | </p> |
| 504 | |
| 505 | <p> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 506 | Commit these changes |
| 507 | </p> |
| 508 | |
| 509 | <h3>Make the release archives, signatures, and the release tag</h3> |
| 510 | <p> |
| 511 | From inside the Mesa directory: |
| 512 | <pre> |
| 513 | ./autogen.sh |
| 514 | make -j1 tarballs |
| 515 | </pre> |
| 516 | |
| 517 | <p> |
| 518 | After the tarballs are created, the sha256 checksums for the files will |
| 519 | be computed and printed. These will be used in a step below. |
| 520 | </p> |
| 521 | |
| 522 | <p> |
| 523 | It's important at this point to also verify that the constructed tar file |
| 524 | actually builds: |
| 525 | </p> |
| 526 | |
| 527 | <pre> |
| 528 | tar xjf MesaLib-X.Y.Z.tar.bz2 |
| 529 | cd Mesa-X.Y.Z |
| 530 | ./configure --enable-gallium-llvm |
| 531 | make -j6 |
| 532 | make install |
| 533 | </pre> |
| 534 | |
| 535 | <p> |
| 536 | Some touch testing should also be performed at this point, (run glxgears or |
| 537 | more involved OpenGL programs against the installed Mesa). |
| 538 | </p> |
| 539 | |
| 540 | <p> |
| 541 | Create detached GPG signatures for each of the archive files created above: |
| 542 | </p> |
| 543 | |
| 544 | <pre> |
| 545 | gpg --sign --detach MesaLib-X.Y.Z.tar.gz |
| 546 | gpg --sign --detach MesaLib-X.Y.Z.tar.bz2 |
| 547 | gpg --sign --detach MesaLib-X.Y.Z.zip |
| 548 | </pre> |
| 549 | |
| 550 | <p> |
| 551 | Tag the commit used for the build: |
| 552 | </p> |
| 553 | |
| 554 | <pre> |
| 555 | git tag -s mesa-X.Y.X -m "Mesa X.Y.Z release" |
| 556 | </pre> |
| 557 | |
| 558 | <p> |
| 559 | Note: It would be nice to investigate and fix the issue that causes the |
| 560 | tarballs target to fail with multiple build process, such as with "-j4". It |
| 561 | would also be nice to incorporate all of the above commands into a single |
| 562 | makefile target. And instead of a custom "tarballs" target, we should |
| 563 | incorporate things into the standard "make dist" and "make distcheck" targets. |
| 564 | </p> |
| 565 | |
| 566 | <h3>Add the sha256sums to the release notes</h3> |
| 567 | |
| 568 | <p> |
| 569 | Edit docs/relnotes/X.Y.Z.html to add the sha256sums printed as part of "make |
| 570 | tarballs" in the previous step. Commit this change. |
| 571 | </p> |
| 572 | |
Thomas Helland | 8d813d1 | 2015-05-26 12:14:00 -0600 | [diff] [blame] | 573 | <h3>Push all commits and the tag created above</h3> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 574 | |
| 575 | <p> |
| 576 | This is the first step that cannot easily be undone. The release is going |
| 577 | forward from this point: |
| 578 | </p> |
| 579 | |
| 580 | <pre> |
| 581 | git push origin X.Y --tags |
| 582 | </pre> |
| 583 | |
| 584 | <h3>Install the release files and signatures on the distribution server</h3> |
| 585 | |
| 586 | <p> |
| 587 | The following commands can be used to copy the release archive files and |
| 588 | signatures to the freedesktop.org server: |
| 589 | </p> |
| 590 | |
| 591 | <pre> |
| 592 | scp MesaLib-X.Y.Z* people.freedesktop.org: |
| 593 | ssh people.freedesktop.org |
| 594 | cd /srv/ftp.freedesktop.org/pub/mesa |
| 595 | mkdir X.Y.Z |
| 596 | cd X.Y.Z |
| 597 | mv ~/MesaLib-X.Y.Z* . |
| 598 | </pre> |
| 599 | |
Thomas Helland | 8d813d1 | 2015-05-26 12:14:00 -0600 | [diff] [blame] | 600 | <h3>Back on mesa master, add the new release notes into the tree</h3> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 601 | |
| 602 | <p> |
| 603 | Something like the following steps will do the trick: |
| 604 | </p> |
| 605 | |
| 606 | <pre> |
| 607 | cp docs/relnotes/X.Y.Z.html /tmp |
| 608 | git checkout master |
| 609 | cp /tmp/X.Y.Z.html docs/relnotes |
| 610 | git add docs/relnotes/X.Y.Z.html |
| 611 | </pre> |
| 612 | |
| 613 | <p> |
| 614 | Also, edit docs/relnotes.html to add a link to the new release notes, and edit |
| 615 | docs/index.html to add a news entry. Then commit and push: |
| 616 | </p> |
| 617 | |
| 618 | <pre> |
| 619 | git commit -a -m "docs: Import X.Y.Z release notes, add news item." |
| 620 | git push origin |
| 621 | </pre> |
| 622 | |
| 623 | <h3>Update the mesa3d.org website</h3> |
| 624 | |
| 625 | <p> |
| 626 | NOTE: The recent release managers have not been performing this step |
| 627 | themselves, but leaving this to Brian Paul, (who has access to the |
| 628 | sourceforge.net hosting for mesa3d.org). Brian is more than willing to grant |
| 629 | the permission necessary to future release managers to do this step on their |
| 630 | own. |
Brian Paul | 84c5e48 | 2009-06-23 19:21:04 -0600 | [diff] [blame] | 631 | </p> |
| 632 | |
| 633 | <p> |
Brian Paul | 65b7905 | 2004-11-22 17:49:15 +0000 | [diff] [blame] | 634 | Update the web site by copying the docs/ directory's files to |
Brian Paul | 84c5e48 | 2009-06-23 19:21:04 -0600 | [diff] [blame] | 635 | /home/users/b/br/brianp/mesa-www/htdocs/ with: |
| 636 | <br> |
| 637 | <code> |
| 638 | sftp USERNAME,mesa3d@web.sourceforge.net |
| 639 | </code> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 640 | </p> |
| 641 | |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 642 | |
| 643 | <h3>Announce the release</h3> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 644 | <p> |
Brian Paul | efe5671 | 2003-03-19 19:15:28 +0000 | [diff] [blame] | 645 | Make an announcement on the mailing lists: |
Ian Romanick | 8f32c64 | 2010-06-16 14:28:08 -0700 | [diff] [blame] | 646 | |
Kenneth Graunke | 7d24d1b | 2013-07-25 11:42:38 -0700 | [diff] [blame] | 647 | <em>mesa-dev@lists.freedesktop.org</em>, |
Brian Paul | efe5671 | 2003-03-19 19:15:28 +0000 | [diff] [blame] | 648 | and |
Kenneth Graunke | 7d24d1b | 2013-07-25 11:42:38 -0700 | [diff] [blame] | 649 | <em>mesa-announce@lists.freedesktop.org</em> |
Carl Worth | 619505a | 2014-08-21 10:44:35 -0700 | [diff] [blame] | 650 | |
| 651 | Follow the template of previously-sent release announcements. The following |
| 652 | command can be used to generate the log of changes to be included in the |
| 653 | release announcement: |
| 654 | |
| 655 | <pre> |
| 656 | git shortlog mesa-X.Y.Z-1..mesa-X.Y.Z |
| 657 | </pre> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 658 | </p> |
| 659 | |
Brian Paul | 98f2f47 | 2015-05-25 09:13:09 -0600 | [diff] [blame] | 660 | |
| 661 | <h2 id="extensions">Adding Extensions</h2> |
| 662 | |
| 663 | <p> |
| 664 | To add a new GL extension to Mesa you have to do at least the following. |
| 665 | |
| 666 | <ul> |
| 667 | <li> |
| 668 | If glext.h doesn't define the extension, edit include/GL/gl.h and add |
| 669 | code like this: |
| 670 | <pre> |
| 671 | #ifndef GL_EXT_the_extension_name |
| 672 | #define GL_EXT_the_extension_name 1 |
| 673 | /* declare the new enum tokens */ |
| 674 | /* prototype the new functions */ |
| 675 | /* TYPEDEFS for the new functions */ |
| 676 | #endif |
| 677 | </pre> |
| 678 | </li> |
| 679 | <li> |
| 680 | In the src/mapi/glapi/gen/ directory, add the new extension functions and |
| 681 | enums to the gl_API.xml file. |
| 682 | Then, a bunch of source files must be regenerated by executing the |
| 683 | corresponding Python scripts. |
| 684 | </li> |
| 685 | <li> |
| 686 | Add a new entry to the <code>gl_extensions</code> struct in mtypes.h |
| 687 | </li> |
| 688 | <li> |
| 689 | Update the <code>extensions.c</code> file. |
| 690 | </li> |
| 691 | <li> |
| 692 | From this point, the best way to proceed is to find another extension, |
| 693 | similar to the new one, that's already implemented in Mesa and use it |
| 694 | as an example. |
| 695 | </li> |
| 696 | <li> |
| 697 | If the new extension adds new GL state, the functions in get.c, enable.c |
| 698 | and attrib.c will most likely require new code. |
| 699 | </li> |
| 700 | <li> |
| 701 | The dispatch tests check_table.cpp and dispatch_sanity.cpp |
| 702 | should be updated with details about the new extensions functions. These |
| 703 | tests are run using 'make check' |
| 704 | </li> |
| 705 | </ul> |
| 706 | |
| 707 | |
| 708 | |
| 709 | |
Andreas Boll | b5da52a | 2012-09-18 18:57:02 +0200 | [diff] [blame] | 710 | </div> |
Brian Paul | 0b27ace | 2003-03-08 17:38:57 +0000 | [diff] [blame] | 711 | </body> |
| 712 | </html> |