<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>Development Notes</title>
  <link rel="stylesheet" type="text/css" href="mesa.css">
</head>
<body>

<div class="header">
  <h1>The Mesa 3D Graphics Library</h1>
</div>

<iframe src="contents.html"></iframe>
<div class="content">

<h1>Development Notes</h1>


<ul>
<li><a href="#style">Coding Style</a>
<li><a href="#submitting">Submitting Patches</a>
<li><a href="#release">Making a New Mesa Release</a>
<li><a href="#extensions">Adding Extensions</a>
</ul>


<h2 id="style">Coding Style</h2>

<p>
Mesa is over 20 years old and the coding style has evolved over time.
Some old parts use a style that's a bit out of date.
If the guidelines below don't cover something, try following the format of
existing, neighboring code.
</p>

<p>
Basic formatting guidelines
</p>

<ul>
<li>3-space indentation, no tabs.
<li>Limit lines to 78 or fewer characters.  The idea is to prevent line
wrapping in 80-column editors and terminals.  There are exceptions, such
as if you're defining a large, static table of information.
<li>Opening braces go on the same line as the if/for/while statement.
For example:
<pre>
   if (condition) {
      foo;
   } else {
      bar;
   }
</pre>

<li>Put a space before/after operators.  For example, <tt>a = b + c;</tt>
and not <tt>a=b+c;</tt>

<li>This GNU indent command generally does the right thing for formatting:
<pre>
   indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
</pre>

<li>Use comments wherever you think it would be helpful for other developers.
Several specific cases and style examples follow.  Note that we roughly
follow <a href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a> conventions.
<br>
<br>
Single-line comments:
<pre>
   /* null-out pointer to prevent dangling reference below */
   bufferObj = NULL;
</pre>
Or,
<pre>
   bufferObj = NULL;  /* prevent dangling reference below */
</pre>
Multi-line comment:
<pre>
   /* If this is a new buffer object id, or one which was generated but
    * never used before, allocate a buffer object now.
    */
</pre>
We try to quote the OpenGL specification where prudent:
<pre>
   /* Page 38 of the PDF of the OpenGL ES 3.0 spec says:
    *
    *     "An INVALID_OPERATION error is generated for any of the following
    *     conditions:
    *
    *     * <length> is zero."
    *
    * Additionally, page 94 of the PDF of the OpenGL 4.5 core spec
    * (30.10.2014) also says this, so it's no longer allowed for desktop GL,
    * either.
    */
</pre>
Function comment example:
<pre>
   /**
    * Create and initialize a new buffer object.  Called via the
    * ctx->Driver.CreateObject() driver callback function.
    * \param  name  integer name of the object
    * \param  type  one of GL_FOO, GL_BAR, etc.
    * \return  pointer to new object or NULL if error
    */
   struct gl_object *
   _mesa_create_object(GLuint name, GLenum type)
   {
      /* function body */
   }
</pre>

<li>Put the function return type and qualifiers on one line and the function
name and parameters on the next, as seen above.  This makes it easy to use
<code>grep ^function_name dir/*</code> to find function definitions.  Also,
the opening brace goes on the next line by itself (see above.)

<li>Function names follow various conventions depending on the type of function:
<pre>
   glFooBar()       - a public GL entry point (in glapi_dispatch.c)
   _mesa_FooBar()   - the internal immediate mode function
   save_FooBar()    - retained mode (display list) function in dlist.c
   foo_bar()        - a static (private) function
   _mesa_foo_bar()  - an internal non-static Mesa function
</pre>

<li>Constants, macros and enumerant names are ALL_UPPERCASE, with _ between
words.
<li>Mesa usually uses camel case for local variables (Ex: "localVarname")
while gallium typically uses underscores (Ex: "local_var_name").
<li>Global variables are almost never used because Mesa should be thread-safe.

<li>Booleans.  Places that are not directly visible to the GL API
should prefer the use of <tt>bool</tt>, <tt>true</tt>, and
<tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and
<tt>GL_FALSE</tt>.  In C code, this may mean that
<tt>#include &lt;stdbool.h&gt;</tt> needs to be added.  The
<tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and
src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples.

</ul>


<h2 id="submitting">Submitting patches</h2>

<p>
The basic guidelines for submitting patches are:
</p>

<ul>
<li>Patches should be sufficiently tested before submitting.
<li>Code patches should follow Mesa coding conventions.
<li>Whenever possible, patches should only effect individual Mesa/Gallium
components.
<li>Patches should never introduce build breaks and should be bisectable (see
<code>git bisect</code>.)
<li>Patches should be properly formatted (see below).
<li>Patches should be submitted to mesa-dev for review using
<code>git send-email</code>.
<li>Patches should not mix code changes with code formatting changes (except,
perhaps, in very trivial cases.)
</ul>

<h3>Patch formatting</h3>

<p>
The basic rules for patch formatting are:
</p>

<ul>
<li>Lines should be limited to 75 characters or less so that git logs
displayed in 80-column terminals avoid line wrapping.  Note that git
log uses 4 spaces of indentation (4 + 75 &lt; 80).
<li>The first line should be a short, concise summary of the change prefixed
with a module name.  Examples:
<pre>
    mesa: Add support for querying GL_VERTEX_ATTRIB_ARRAY_LONG

    gallium: add PIPE_CAP_DEVICE_RESET_STATUS_QUERY

    i965: Fix missing type in local variable declaration.
</pre>
<li>Subsequent patch comments should describe the change in more detail,
if needed.  For example:
<pre>
    i965: Remove end-of-thread SEND alignment code.
    
    This was present in Eric's initial implementation of the compaction code
    for Sandybridge (commit 077d01b6). There is no documentation saying this
    is necessary, and removing it causes no regressions in piglit on any
    platform.
</pre>
<li>A "Signed-off-by:" line is not required, but not discouraged either.
<li>If a patch address a bugzilla issue, that should be noted in the
patch comment.  For example:
<pre>
   Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89689
</pre>
<li>If there have been several revisions to a patch during the review
process, they should be noted such as in this example:
<pre>
    st/mesa: add ARB_texture_stencil8 support (v4)
    
    if we support stencil texturing, enable texture_stencil8
    there is no requirement to support native S8 for this,
    the texture can be converted to x24s8 fine.
    
    v2: fold fixes from Marek in:
       a) put S8 last in the list
       b) fix renderable to always test for d/s renderable
        fixup the texture case to use a stencil only format
        for picking the format for the texture view.
    v3: hit fallback for getteximage
    v4: put s8 back in front, it shouldn't get picked now (Ilia)
</pre>
<li>If someone tested your patch, document it with a line like this:
<pre>
    Tested-by: Joe Hacker &lt;jhacker@foo.com&gt;
</pre>
<li>If the patch was reviewed (usually the case) or acked by someone,
that should be documented with:
<pre>
    Reviewed-by: Joe Hacker &lt;jhacker@foo.com&gt;
    Acked-by: Joe Hacker &lt;jhacker@foo.com&gt;
</pre>
</ul>



<h3>Testing Patches</h3>

<p>
It should go without saying that patches must be tested.  In general,
do whatever testing is prudent.
</p>

<p>
You should always run the Mesa test suite before submitting patches.
The test suite can be run using the 'make check' command. All tests
must pass before patches will be accepted, this may mean you have
to update the tests themselves.
</p>

<p>
Whenever possible and applicable, test the patch with
<a href="http://piglit.freedesktop.org">Piglit</a> to
check for regressions.
</p>


<h3>Mailing Patches</h3>

<p>
Patches should be sent to the Mesa mailing list for review.
When submitting a patch make sure to use git send-email rather than attaching
patches to emails. Sending patches as attachments prevents people from being
able to provide in-line review comments.
</p>

<p>
When submitting follow-up patches you can use --in-reply-to to make v2, v3,
etc patches show up as replies to the originals. This usually works well
when you're sending out updates to individual patches (as opposed to
re-sending the whole series). Using --in-reply-to makes
it harder for reviewers to accidentally review old patches.
</p>

<p>
When submitting follow-up patches you should also login to
<a href="https://patchwork.freedesktop.org">patchwork</a> and change the
state of your old patches to Superseded.
</p>

<h3>Reviewing Patches</h3>

<p>
When you've reviewed a patch on the mailing list, please be unambiguous
about your review.  That is, state either
<pre>
    Reviewed-by: Joe Hacker &lt;jhacker@foo.com&gt;
</pre>
or
<pre>
    Acked-by: Joe Hacker &lt;jhacker@foo.com&gt;
</pre>
Rather than saying just "LGTM" or "Seems OK".
</p>

<p>
If small changes are suggested, it's OK to say something like:
<pre>
   With the above fixes, Reviewed-by: Joe Hacker &lt;jhacker@foo.com&gt;
</pre>
which tells the patch author that the patch can be committed, as long
as the issues are resolved first.
</p>


<h3>Marking a commit as a candidate for a stable branch</h3>

<p>
If you want a commit to be applied to a stable branch,
you should add an appropriate note to the commit message.
</p>

<p>
Here are some examples of such a note:
</p>
<ul>
  <li>CC: &lt;mesa-stable@lists.freedesktop.org&gt;</li>
  <li>CC: "9.2 10.0" &lt;mesa-stable@lists.freedesktop.org&gt;</li>
  <li>CC: "10.0" &lt;mesa-stable@lists.freedesktop.org&gt;</li>
</ul>

Simply adding the CC to the mesa-stable list address is adequate to nominate
the commit for the most-recently-created stable branch. It is only necessary
to specify a specific branch name, (such as "9.2 10.0" or "10.0" in the
examples above), if you want to nominate the commit for an older stable
branch. And, as in these examples, you can nominate the commit for the older
branch in addition to the more recent branch, or nominate the commit
exclusively for the older branch.

This "CC" syntax for patch nomination will cause patches to automatically be
copied to the mesa-stable@ mailing list when you use "git send-email" to send
patches to the mesa-dev@ mailing list. Also, if you realize that a commit
should be nominated for the stable branch after it has already been committed,
you can send a note directly to the mesa-stable@lists.freedesktop.org where
the Mesa stable-branch maintainers will receive it. Be sure to mention the
commit ID of the commit of interest (as it appears in the mesa master branch).

The latest set of patches that have been nominated, accepted, or rejected for
the upcoming stable release can always be seen on the
<a href="http://cworth.org/~cworth/mesa-stable-queue/">Mesa Stable Queue</a>
page.

<h3>Criteria for accepting patches to the stable branch</h3>

Mesa has a designated release manager for each stable branch, and the release
manager is the only developer that should be pushing changes to these
branches. Everyone else should simply nominate patches using the mechanism
described above.

The stable-release manager will work with the list of nominated patches, and
for each patch that meets the crtieria below will cherry-pick the patch with:
<code>git cherry-pick -x &lt;commit&gt;</code>. The <code>-x</code> option is
important so that the picked patch references the comit ID of the original
patch.

The stable-release manager may at times need to force-push changes to the
stable branches, for example, to drop a previously-picked patch that was later
identified as causing a regression). These force-pushes may cause changes to
be lost from the stable branch if developers push things directly. Consider
yourself warned.

The stable-release manager is also given broad discretion in rejecting patches
that have been nominated for the stable branch. The most basic rule is that
the stable branch is for bug fixes only, (no new features, no
regressions). Here is a non-exhaustive list of some reasons that a patch may
be rejected:

<ul>
  <li>Patch introduces a regression. Any reported build breakage or other
  regression caused by a particular patch, (game no longer work, piglit test
  changes from PASS to FAIL), is justification for rejecting a patch.</li>

  <li>Patch is too large, (say, larger than 100 lines)</li>

  <li>Patch is not a fix. For example, a commit that moves code around with no
  functional change should be rejected.</li>

  <li>Patch fix is not clearly described. For example, a commit message
  of only a single line, no description of the bug, no mention of bugzilla,
  etc.</li>

  <li>Patch has not obviously been reviewed, For example, the commit message
  has no Reviewed-by, Signed-off-by, nor Tested-by tags from anyone but the
  author.</li>

  <li>Patch has not already been merged to the master branch. As a rule, bug
  fixes should never be applied first to a stable branch. Patches should land
  first on the master branch and then be cherry-picked to a stable
  branch. (This is to avoid future releases causing regressions if the patch
  is not also applied to master.) The only things that might look like
  exceptions would be backports of patches from master that happen to look
  significantly different.</li>

  <li>Patch depends on too many other patches. Ideally, all stable-branch
  patches should be self-contained. It sometimes occurs that a single, logical
  bug-fix occurs as two separate patches on master, (such as an original
  patch, then a subsequent fix-up to that patch). In such a case, these two
  patches should be squashed into a single, self-contained patch for the
  stable branch. (Of course, if the squashing makes the patch too large, then
  that could be a reason to reject the patch.)</li>

  <li>Patch includes new feature development, not bug fixes. New OpenGL
  features, extensions, etc. should be applied to Mesa master and included in
  the next major release. Stable releases are intended only for bug fixes.

  Note: As an exception to this rule, the stable-release manager may accept
  hardware-enabling "features". For example, backports of new code to support
  a newly-developed hardware product can be accepted if they can be reasonably
  determined to not have effects on other hardware.</li>

  <li>Patch is a performance optimization. As a rule, performance patches are
  not candidates for the stable branch. The only exception might be a case
  where an application's performance was recently severely impacted so as to
  become unusable. The fix for this performance regression could then be
  considered for a stable branch. The optimization must also be
  non-controversial and the patches still need to meet the other criteria of
  being simple and self-contained</li>

  <li>Patch introduces a new failure mode (such as an assert). While the new
  assert might technically be correct, for example to make Mesa more
  conformant, this is not the kind of "bug fix" we want in a stable
  release. The potential problem here is that an OpenGL program that was
  previously working, (even if technically non-compliant with the
  specification), could stop working after this patch. So that would be a
  regression that is unaacceptable for the stable branch.</li>
</ul>


<h2 id="release">Making a New Mesa Release</h2>

<p>
These are the instructions for making a new Mesa release.
</p>

<h3>Get latest source files</h3>
<p>
Use git to get the latest Mesa files from the git repository, from whatever
branch is relevant. This document uses the convention X.Y.Z for the release
being created, which should be created from a branch named X.Y.
</p>

<h3>Perform basic testing</h3>
<p>
The release manager should, at the very least, test the code by compiling it,
installing it, and running the latest piglit to ensure that no piglit tests
have regressed since the previous release.
</p>

<p>
The release manager should do this testing with at least one hardware driver,
(say, whatever is contained in the local development machine), as well as on
both Gallium and non-Gallium software drivers. The software testing can be
performed by running piglit with the following environment-variable set:
</p>

<pre>
LIBGL_ALWAYS_SOFTWARE=1
</pre>

And Gallium vs. non-Gallium software drivers can be obtained by using the
following configure flags on separate builds:

<pre>
--with-dri-drivers=swrast
--with-gallium-drivers=swrast
</pre>

<p>
Note: If both options are given in one build, both swrast_dri.so drivers will
be compiled, but only one will be installed. The following command can be used
to ensure the correct driver is being tested:
</p>

<pre>
LIBGL_ALWAYS_SOFTWARE=1 glxinfo | grep "renderer string"
</pre>

If any regressions are found in this testing with piglit, stop here, and do
not perform a release until regressions are fixed.

<h3>Update version in file VERSION</h3>

<p>
Increment the version contained in the file VERSION at Mesa's top-level, then
commit this change.
</p>

<h3>Create release notes for the new release</h3>

<p>
Create a new file docs/relnotes/X.Y.Z.html, (follow the style of the previous
release notes). Note that the sha256sums section of the release notes should
be empty at this point.
</p>

<p>
Two scripts are available to help generate portions of the release notes:

<pre>
	./bin/bugzilla_mesa.sh
	./bin/shortlog_mesa.sh
</pre>

<p>
The first script identifies commits that reference bugzilla bugs and obtains
the descriptions of those bugs from bugzilla. The second script generates a
log of all commits. In both cases, HTML-formatted lists are printed to stdout
to be included in the release notes.
</p>

<p>
Commit these changes
</p>

<h3>Make the release archives, signatures, and the release tag</h3>
<p>
From inside the Mesa directory:
<pre>
	./autogen.sh
	make -j1 tarballs
</pre>

<p>
After the tarballs are created, the sha256 checksums for the files will
be computed and printed. These will be used in a step below.
</p>

<p>
It's important at this point to also verify that the constructed tar file
actually builds:
</p>

<pre>
	tar xjf MesaLib-X.Y.Z.tar.bz2
	cd Mesa-X.Y.Z
	./configure --enable-gallium-llvm
	make -j6
	make install
</pre>

<p>
Some touch testing should also be performed at this point, (run glxgears or
more involved OpenGL programs against the installed Mesa).
</p>

<p>
Create detached GPG signatures for each of the archive files created above:
</p>

<pre>
	gpg --sign --detach MesaLib-X.Y.Z.tar.gz
	gpg --sign --detach MesaLib-X.Y.Z.tar.bz2
	gpg --sign --detach MesaLib-X.Y.Z.zip
</pre>

<p>
Tag the commit used for the build:
</p>

<pre>
	git tag -s mesa-X.Y.X -m "Mesa X.Y.Z release"
</pre>

<p>
Note: It would be nice to investigate and fix the issue that causes the
tarballs target to fail with multiple build process, such as with "-j4". It
would also be nice to incorporate all of the above commands into a single
makefile target. And instead of a custom "tarballs" target, we should
incorporate things into the standard "make dist" and "make distcheck" targets.
</p>

<h3>Add the sha256sums to the release notes</h3>

<p>
Edit docs/relnotes/X.Y.Z.html to add the sha256sums printed as part of "make
tarballs" in the previous step. Commit this change.
</p>

<h3>Push all commits and the tag created above</h3>

<p>
This is the first step that cannot easily be undone. The release is going
forward from this point:
</p>

<pre>
	git push origin X.Y --tags
</pre>

<h3>Install the release files and signatures on the distribution server</h3>

<p>
The following commands can be used to copy the release archive files and
signatures to the freedesktop.org server:
</p>

<pre>
	scp MesaLib-X.Y.Z* people.freedesktop.org:
	ssh people.freedesktop.org
	cd /srv/ftp.freedesktop.org/pub/mesa
	mkdir X.Y.Z
	cd X.Y.Z
	mv ~/MesaLib-X.Y.Z* .
</pre>

<h3>Back on mesa master, add the new release notes into the tree</h3>

<p>
Something like the following steps will do the trick:
</p>

<pre>
	cp docs/relnotes/X.Y.Z.html /tmp
        git checkout master
        cp /tmp/X.Y.Z.html docs/relnotes
        git add docs/relnotes/X.Y.Z.html
</pre>

<p>
Also, edit docs/relnotes.html to add a link to the new release notes, and edit
docs/index.html to add a news entry. Then commit and push:
</p>

<pre>
	git commit -a -m "docs: Import X.Y.Z release notes, add news item."
        git push origin
</pre>

<h3>Update the mesa3d.org website</h3>

<p>
NOTE: The recent release managers have not been performing this step
themselves, but leaving this to Brian Paul, (who has access to the
sourceforge.net hosting for mesa3d.org). Brian is more than willing to grant
the permission necessary to future release managers to do this step on their
own.
</p>

<p>
Update the web site by copying the docs/ directory's files to 
/home/users/b/br/brianp/mesa-www/htdocs/ with:
<br>
<code>
sftp USERNAME,mesa3d@web.sourceforge.net
</code>
</p>


<h3>Announce the release</h3>
<p>
Make an announcement on the mailing lists:

<em>mesa-dev@lists.freedesktop.org</em>,
and
<em>mesa-announce@lists.freedesktop.org</em>

Follow the template of previously-sent release announcements. The following
command can be used to generate the log of changes to be included in the
release announcement:

<pre>
	git shortlog mesa-X.Y.Z-1..mesa-X.Y.Z
</pre>
</p>


<h2 id="extensions">Adding Extensions</h2>

<p>
To add a new GL extension to Mesa you have to do at least the following.

<ul>
<li>
   If glext.h doesn't define the extension, edit include/GL/gl.h and add
   code like this:
   <pre>
     #ifndef GL_EXT_the_extension_name
     #define GL_EXT_the_extension_name 1
     /* declare the new enum tokens */
     /* prototype the new functions */
     /* TYPEDEFS for the new functions */
     #endif
   </pre>
</li>
<li>
   In the src/mapi/glapi/gen/ directory, add the new extension functions and
   enums to the gl_API.xml file.
   Then, a bunch of source files must be regenerated by executing the
   corresponding Python scripts.
</li>
<li>
   Add a new entry to the <code>gl_extensions</code> struct in mtypes.h
</li>
<li>
   Update the <code>extensions.c</code> file.
</li>
<li>
   From this point, the best way to proceed is to find another extension,
   similar to the new one, that's already implemented in Mesa and use it
   as an example.
</li>
<li>
   If the new extension adds new GL state, the functions in get.c, enable.c
   and attrib.c will most likely require new code.
</li>
<li>
   The dispatch tests check_table.cpp and dispatch_sanity.cpp
   should be updated with details about the new extensions functions. These
   tests are run using 'make check'
</li>
</ul>




</div>
</body>
</html>
