mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-23 10:14:13 +08:00
a096d41094
This also adds the ability to link directly to it: https://mesa3d.org/submittingpatches.html#fixes Signed-off-by: Eric Engestrom <eric@engestrom.ch> Reviewed-by: Eric Anholt <eric@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5378>
378 lines
13 KiB
ReStructuredText
378 lines
13 KiB
ReStructuredText
Submitting Patches
|
|
==================
|
|
|
|
Basic guidelines
|
|
----------------
|
|
|
|
- Patches should not mix code changes with code formatting changes
|
|
(except, perhaps, in very trivial cases.)
|
|
- Code patches should follow Mesa `coding
|
|
conventions <codingstyle.rst>`__.
|
|
- Whenever possible, patches should only affect individual Mesa/Gallium
|
|
components.
|
|
- Patches should never introduce build breaks and should be bisectable
|
|
(see ``git bisect``.)
|
|
- Patches should be properly `formatted <#formatting>`__.
|
|
- Patches should be sufficiently `tested <#testing>`__ before
|
|
submitting.
|
|
- Patches should be `submitted <#submit>`__ via a merge request for
|
|
`review <#reviewing>`__.
|
|
|
|
.. _formatting:
|
|
|
|
Patch formatting
|
|
----------------
|
|
|
|
- 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 < 80).
|
|
- The first line should be a short, concise summary of the change
|
|
prefixed with a module name. Examples:
|
|
|
|
::
|
|
|
|
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.
|
|
|
|
- Subsequent patch comments should describe the change in more detail,
|
|
if needed. For example:
|
|
|
|
::
|
|
|
|
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.
|
|
|
|
- A "Signed-off-by:" line is not required, but not discouraged either.
|
|
- If a patch addresses an issue in gitlab, use the Closes: tag For
|
|
example:
|
|
|
|
::
|
|
|
|
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/1
|
|
|
|
Prefer the full url to just ``Closes: #1``, since the url makes it
|
|
easier to get to the bug page from ``git log``
|
|
|
|
**Do not use the ``Fixes:`` tag for this!** Mesa already uses
|
|
``Fixes:`` for something else.
|
|
See `below <#fixes>`__.
|
|
|
|
- If there have been several revisions to a patch during the review
|
|
process, they should be noted such as in this example:
|
|
|
|
::
|
|
|
|
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)
|
|
|
|
- If someone tested your patch, document it with a line like this:
|
|
|
|
::
|
|
|
|
Tested-by: Joe Hacker <jhacker@foo.com>
|
|
|
|
- If the patch was reviewed (usually the case) or acked by someone,
|
|
that should be documented with:
|
|
|
|
::
|
|
|
|
Reviewed-by: Joe Hacker <jhacker@foo.com>
|
|
Acked-by: Joe Hacker <jhacker@foo.com>
|
|
|
|
- When updating a merge request add all the tags (``Acked-by:``, ``Reviewed-by:``,
|
|
``Fixes:``, ``Cc: mesa-stable`` and/or other) to the commit messages.
|
|
This provides reviewers with quick feedback if the patch has already
|
|
been reviewed.
|
|
|
|
.. _fixes:
|
|
|
|
The ``Fixes:`` tag
|
|
------------------
|
|
|
|
If a patch addresses a issue introduced with earlier commit, that
|
|
should be noted in the commit message. For example::
|
|
|
|
Fixes: d7b3707c612 "util/disk_cache: use stat() to check if entry is a directory"
|
|
|
|
You can produce those fixes lines by running this command once::
|
|
|
|
git config --global alias.fixes "show -s --pretty='format:Fixes: %h (\"%s\")'"
|
|
|
|
After that, using ``git fixes <sha1>`` will print the full line for you.
|
|
|
|
.. _testing:
|
|
|
|
Testing Patches
|
|
---------------
|
|
|
|
It should go without saying that patches must be tested. In general, do
|
|
whatever testing is prudent.
|
|
|
|
You should always run the Mesa test suite before submitting patches. The
|
|
test suite can be run using the 'meson test' command. All tests must
|
|
pass before patches will be accepted, this may mean you have to update
|
|
the tests themselves.
|
|
|
|
Whenever possible and applicable, test the patch with
|
|
`Piglit <https://piglit.freedesktop.org>`__ and/or
|
|
`dEQP <https://android.googlesource.com/platform/external/deqp/>`__ to
|
|
check for regressions.
|
|
|
|
As mentioned at the beginning, patches should be bisectable. A good way
|
|
to test this is to make use of the \`git rebase\` command, to run your
|
|
tests on each commit. Assuming your branch is based off
|
|
``origin/master``, you can run:
|
|
|
|
::
|
|
|
|
$ git rebase --interactive --exec "meson test -C build/" origin/master
|
|
|
|
replacing ``"meson test"`` with whatever other test you want to run.
|
|
|
|
.. _submit:
|
|
|
|
Submitting Patches
|
|
------------------
|
|
|
|
Patches are submitted to the Mesa project via a
|
|
`GitLab <https://gitlab.freedesktop.org/mesa/mesa>`__ Merge Request.
|
|
|
|
Add labels to your MR to help reviewers find it. For example:
|
|
|
|
- Mesa changes affecting all drivers: mesa
|
|
- Hardware vendor specific code: amd, intel, nvidia, ...
|
|
- Driver specific code: anvil, freedreno, i965, iris, radeonsi, radv,
|
|
vc4, ...
|
|
- Other tag examples: gallium, util
|
|
|
|
Tick the following when creating the MR. It allows developers to rebase
|
|
your work on top of master.
|
|
|
|
::
|
|
|
|
Allow commits from members who can merge to the target branch
|
|
|
|
If you revise your patches based on code review and push an update to
|
|
your branch, you should maintain a **clean** history in your patches.
|
|
There should not be "fixup" patches in the history. The series should be
|
|
buildable and functional after every commit whenever you push the
|
|
branch.
|
|
|
|
It is your responsibility to keep the MR alive and making progress, as
|
|
there are no guarantees that a Mesa dev will independently take interest
|
|
in it.
|
|
|
|
Some other notes:
|
|
|
|
- Make changes and update your branch based on feedback
|
|
- After an update, for the feedback you handled, close the feedback
|
|
discussion with the "Resolve Discussion" button. This way the
|
|
reviewers know which feedback got handled and which didn't.
|
|
- Old, stale MR may be closed, but you can reopen it if you still want
|
|
to pursue the changes
|
|
- You should periodically check to see if your MR needs to be rebased
|
|
- Make sure your MR is closed if your patches get pushed outside of
|
|
GitLab
|
|
- Please send MRs from a personal fork rather than from the main Mesa
|
|
repository, as it clutters it unnecessarily.
|
|
|
|
.. _reviewing:
|
|
|
|
Reviewing Patches
|
|
-----------------
|
|
|
|
To participate in code review, you can monitor the GitLab Mesa `Merge
|
|
Requests <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests>`__
|
|
page, and/or register for notifications in your gitlab settings.
|
|
|
|
When you've reviewed a patch, 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".
|
|
|
|
If small changes are suggested, it's OK to say something like:
|
|
|
|
::
|
|
|
|
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.
|
|
|
|
These Reviewed-by, Acked-by, and Tested-by tags should also be amended
|
|
into commits in a MR before it is merged.
|
|
|
|
When providing a Reviewed-by, Acked-by, or Tested-by tag in a gitlab MR,
|
|
enclose the tag in backticks:
|
|
|
|
::
|
|
|
|
`Reviewed-by: Joe Hacker <jhacker@example.com>`
|
|
|
|
This is the markdown format for literal, and will prevent gitlab from
|
|
hiding the < and > symbols.
|
|
|
|
Review by non-experts is encouraged. Understanding how someone else goes
|
|
about solving a problem is a great way to learn your way around the
|
|
project. The submitter is expected to evaluate whether they have an
|
|
appropriate amount of review feedback from people who also understand
|
|
the code before merging their patches.
|
|
|
|
Nominating a commit for a stable branch
|
|
---------------------------------------
|
|
|
|
There are several ways to nominate a patch for inclusion in the stable
|
|
branch and release. In order or preference:
|
|
|
|
- By adding the ``Fixes:`` tag in the commit message as described above, if you are fixing
|
|
a specific commit.
|
|
- By adding the ``Cc: mesa-stable`` tag in the commit message as described below.
|
|
- By submitting a merge request against the ``staging/year.quarter``
|
|
branch on gitlab.
|
|
|
|
Please **DO NOT** send patches to mesa-stable@lists.freedesktop.org, it
|
|
is not monitored actively and is a historical artifact.
|
|
|
|
If you are not the author of the original patch, please Cc: them in your
|
|
nomination request.
|
|
|
|
The current patch status can be observed in the `staging
|
|
branch <releasing.rst#stagingbranch>`__.
|
|
|
|
The stable tag
|
|
~~~~~~~~~~~~~~
|
|
|
|
If you want a commit to be applied to a stable branch, you should add an
|
|
appropriate note to the commit message.
|
|
|
|
Using a ``Fixes:`` tag as described in `Patch formatting <#formatting>`__
|
|
is the preferred way to nominate a commit that should be backported.
|
|
There are scripts that will figure out which releases to apply the patch
|
|
to automatically, so you don't need to figure it out.
|
|
|
|
Alternatively, you may use a "CC:" tag. Here are some examples of such a
|
|
note:
|
|
|
|
::
|
|
|
|
CC: 20.0 19.3 <mesa-stable>
|
|
|
|
Using the CC tag **should** include the stable branches you want to
|
|
nominate the patch to. If you do not provide any version it is nominated
|
|
to all active stable branches.
|
|
|
|
.. _criteria:
|
|
|
|
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 nominate patches using the
|
|
mechanism described above. The following rules define which patches are
|
|
accepted and which are not. The stable-release manager is also given
|
|
broad discretion in rejecting patches that have been nominated.
|
|
|
|
- Patch must conform with the `Basic guidelines <#guidelines>`__
|
|
- Patch must have landed in master first. In case where the original
|
|
patch is too large and/or otherwise contradicts with the rules set
|
|
within, a backport is appropriate.
|
|
- It must not introduce a regression - be that build or runtime wise.
|
|
|
|
.. note::
|
|
If the regression is due to faulty piglit/dEQP/CTS/other test
|
|
the latter must be fixed first. A reference to the offending test(s)
|
|
and respective fix(es) should be provided in the nominated patch.
|
|
|
|
- Patch cannot be larger than 100 lines.
|
|
- Patches that move code around with no functional change should be
|
|
rejected.
|
|
- Patch must be a bug fix and not a new feature.
|
|
|
|
.. note::
|
|
An exception to this rule, are hardware-enabling "features". For
|
|
example, `backports <#backports>`__ of new code to support a
|
|
newly-developed hardware product can be accepted if they can be
|
|
reasonably determined not to have effects on other hardware.
|
|
|
|
- Patch must be reviewed, For example, the commit message has
|
|
Reviewed-by, Signed-off-by, or Tested-by tags from someone but the
|
|
author.
|
|
- Performance patches are considered only if they provide information
|
|
about the hardware, program in question and observed improvement. Use
|
|
numbers to represent your measurements.
|
|
|
|
If the patch complies with the rules it will be
|
|
`cherry-picked <releasing.rst#pickntest>`__. Alternatively the release
|
|
manager will reply to the patch in question stating why the patch has
|
|
been rejected or would request a backport. 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.
|
|
|
|
.. _backports:
|
|
|
|
Sending backports for the stable branch
|
|
---------------------------------------
|
|
|
|
By default merge conflicts are resolved by the stable-release manager.
|
|
The release maintainer should resolve trivial conflicts, but for complex
|
|
conflicts they should ask the original author to provide a backport or
|
|
de-nominate the patch.
|
|
|
|
For patches that either need to be nominated after they've landed in
|
|
master, or that are known ahead of time to not not apply cleanly to a
|
|
stable branch (such as due to a rename), using a gitlab MR is most
|
|
appropriate. The MR should be based on and target the
|
|
staging/year.quarter branch, not on the year.quarter branch, per the
|
|
stable branch policy. Assigning the MR to release maintainer for said
|
|
branch or mentioning them is helpful, but not required.
|
|
|
|
Git tips
|
|
--------
|
|
|
|
- ``git rebase -i ...`` is your friend. Don't be afraid to use it.
|
|
- Apply a fixup to commit FOO.
|
|
|
|
.. code-block:: console
|
|
|
|
git add ...
|
|
git commit --fixup=FOO
|
|
git rebase -i --autosquash ...
|
|
|
|
- Test for build breakage between patches e.g last 8 commits.
|
|
|
|
.. code-block:: console
|
|
|
|
git rebase -i --exec="ninja -C build/" HEAD~8
|