X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=docs%2Fdevinfo.html;h=8ebf80f40e8019f85124f7e2ad2a58eab3022cec;hb=12dc89d8440691d29c5b1b13fa8eb67149910c2b;hp=b2a242b6030526168222a1dc29044a9ea04e7a7f;hpb=abb1c847ac9d9fa14ba6f786a205446957d45827;p=mesa.git diff --git a/docs/devinfo.html b/docs/devinfo.html index b2a242b6030..8ebf80f40e8 100644 --- a/docs/devinfo.html +++ b/docs/devinfo.html @@ -7,222 +7,627 @@ +
+

The Mesa 3D Graphics Library

+
+ + +
+

Development Notes

-

Adding Extentions

+ + + +

Coding Style

-To add a new GL extension to Mesa you have to do at least the following. +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. +

+ +

+Basic formatting guidelines +

+

Submitting patches

-

Coding Style

+

+The basic guidelines for submitting patches are: +

+ + + +

Patch formatting

-Mesa's code style has changed over the years. Here's the latest. +The basic rules for patch formatting are:

+ + + + +

Testing Patches

+

-Comment your code! It's extremely important that open-source code be -well documented. Also, strive to write clean, easily understandable code. +It should go without saying that patches must be tested. In general, +do whatever testing is prudent.

-3-space indentation +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.

-If you use tabs, set them to 8 columns +Whenever possible and applicable, test the patch with +Piglit to +check for regressions.

+ +

Mailing Patches

+

-Line width: the preferred width to fill comments and code in Mesa is 78 -columns. Exceptions are sometimes made for clarity (e.g. tabular data is -sometimes filled to a much larger width so that extraneous carriage returns -don't obscure the table). +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.

-Brace example: +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.

-
-	if (condition) {
-	   foo;
-	}
-	else {
-	   bar;
-	}
 
-	switch (condition) {
-	case 0:
-	   foo();
-	   break;
+

+When submitting follow-up patches you should also login to +patchwork and change the +state of your old patches to Superseded. +

- case 1: { - ... - break; - } +

Reviewing Patches

- default: - ... - break; - } +

+When you've reviewed a patch on the mailing list, please be unambiguous +about your review. That is, state either +

+    Reviewed-by: Joe Hacker <jhacker@foo.com>
+
+or +
+    Acked-by: Joe Hacker <jhacker@foo.com>
 
+Rather than saying just "LGTM" or "Seems OK". +

-Here's the GNU indent command which will best approximate my preferred style: -(Note that it won't format switch statements in the preferred way) -

+If small changes are suggested, it's OK to say something like:
-	indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
+   With the above fixes, Reviewed-by: Joe Hacker <jhacker@foo.com>
 
+which tells the patch author that the patch can be committed, as long +as the issues are resolved first. +

+ + +

Marking a commit as a candidate for a stable branch

+ +

+If you want a commit to be applied to a stable branch, +you should add an appropriate note to the commit message. +

+ +

+Here are some examples of such a note: +

+ + +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 +Mesa Stable Queue +page. + +

Criteria for accepting patches to the stable branch

+ +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: +git cherry-pick -x <commit>. The -x 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: + + +

Making a New Mesa Release

+

-Local variable name example: localVarName (no underscores) +These are the instructions for making a new Mesa release.

+

Get latest source files

-Constants and macros are ALL_UPPERCASE, with _ between words +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.

+

Perform basic testing

-Global variables are not allowed. +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.

-Function name examples: +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:

+ +
+LIBGL_ALWAYS_SOFTWARE=1
+
+ +And Gallium vs. non-Gallium software drivers can be obtained by using the +following configure flags on separate builds: +
-	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
+--with-dri-drivers=swrast
+--with-gallium-drivers=swrast
 

-Places that are not directly visible to the GL API should prefer the use -of bool, true, and -false over GLboolean, GL_TRUE, and -GL_FALSE. In C code, this may mean that -#include <stdbool.h> needs to be added. The -try_emit_* methods in src/mesa/program/ir_to_mesa.cpp and -src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples. +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:

+
+LIBGL_ALWAYS_SOFTWARE=1 glxinfo | grep "renderer string"
+
-

Making a New Mesa Release

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

Update version in file VERSION

-These are the instructions for making a new Mesa release. +Increment the version contained in the file VERSION at Mesa's top-level, then +commit this change.

-

Get latest source files

+

Create release notes for the new release

+

-Use git to get the latest Mesa files from the git repository, from whatever -branch is relevant. +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. +

+ +

+Two scripts are available to help generate portions of the release notes: + +

+	./bin/bugzilla_mesa.sh
+	./bin/shortlog_mesa.sh
+
+ +

+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.

+

+Commit these changes +

-

Verify and update version info

+

Make the release archives, signatures, and the release tag

+

+From inside the Mesa directory: +

+	./autogen.sh
+	make -j1 tarballs
+
-
-
configs/default
-
MESA_MAJOR, MESA_MINOR and MESA_TINY
-
Makefile.am
-
PACKAGE_VERSION
-
configure.ac
-
AC_INIT
-
src/mesa/main/version.h
-
MESA_MAJOR, MESA_MINOR, MESA_PATCH and MESA_VERSION_STRING
-
+

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

-Create a docs/relnotes-x.y.z.html file. -The bin/shortlog_mesa.sh script can be used to create a HTML-formatted list -of changes to include in the file. -Link the new docs/relnotes-x.y.z.html file into the main relnotes.html file. +It's important at this point to also verify that the constructed tar file +actually builds:

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

-Update docs/news.html. +Some touch testing should also be performed at this point, (run glxgears or +more involved OpenGL programs against the installed Mesa).

-Tag the files with the release name (in the form mesa-x.y) -with: git tag -a mesa-x.y -Then: git push origin mesa-x.y +Create detached GPG signatures for each of the archive files created above:

+
+	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
+
-

Make the tarballs

-Make the distribution files. From inside the Mesa directory: +Tag the commit used for the build: +

+
-	make tarballs
+	git tag -s mesa-X.Y.X -m "Mesa X.Y.Z release"
 

-After the tarballs are created, the md5 checksums for the files will -be computed. -Add them to the docs/relnotes-x.y.html file. +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.

+

Add the sha256sums to the release notes

+

-Copy the distribution files to a temporary directory, unpack them, -compile everything, and run some demos to be sure everything works. +Edit docs/relnotes/X.Y.Z.html to add the sha256sums printed as part of "make +tarballs" in the previous step. Commit this change.

-

Update the website and announce the release

+

Push all commits and the tag created above

+

-Follow the directions on SourceForge for creating a new "release" and -uploading the tarballs. +This is the first step that cannot easily be undone. The release is going +forward from this point:

+
+	git push origin X.Y --tags
+
+ +

Install the release files and signatures on the distribution server

+

-Basically, to upload the tarball files with: -
- -rsync -avP ssh Mesa*-X.Y.* USERNAME@frs.sourceforge.net:uploads/ - +The following commands can be used to copy the release archive files and +signatures to the freedesktop.org server: +

+ +
+	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* .
+
+ +

Back on mesa master, add the new release notes into the tree

+ +

+Something like the following steps will do the trick: +

+ +
+	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
+
+ +

+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: +

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

Update the mesa3d.org website

+ +

+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.

@@ -234,14 +639,74 @@ sftp USERNAME,mesa3d@web.sourceforge.net

+ +

Announce the release

Make an announcement on the mailing lists: -mesa-dev@lists.freedesktop.org, -mesa-users@lists.freedesktop.org +mesa-dev@lists.freedesktop.org, and -mesa-announce@lists.freedesktop.org +mesa-announce@lists.freedesktop.org + +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: + +

+	git shortlog mesa-X.Y.Z-1..mesa-X.Y.Z
+

+ +

Adding Extensions

+ +

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

+ + + + +