• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Contributing to SPIR-V Tools
2
3## For users: Reporting bugs and requesting features
4
5We organize known future work in GitHub projects. See [Tracking SPIRV-Tools work
6with GitHub
7projects](https://github.com/KhronosGroup/SPIRV-Tools/blob/master/docs/projects.md)
8for more.
9
10To report a new bug or request a new feature, please file a GitHub issue. Please
11ensure the bug has not already been reported by searching
12[issues](https://github.com/KhronosGroup/SPIRV-Tools/issues) and
13[projects](https://github.com/KhronosGroup/SPIRV-Tools/projects). If the bug has
14not already been reported open a new one
15[here](https://github.com/KhronosGroup/SPIRV-Tools/issues/new).
16
17When opening a new issue for a bug, make sure you provide the following:
18
19*   A clear and descriptive title.
20    *   We want a title that will make it easy for people to remember what the
21        issue is about. Simply using "Segfault in spirv-opt" is not helpful
22        because there could be (but hopefully aren't) multiple bugs with
23        segmentation faults with different causes.
24*   A test case that exposes the bug, with the steps and commands to reproduce
25    it.
26    *   The easier it is for a developer to reproduce the problem, the quicker a
27        fix can be found and verified. It will also make it easier for someone
28        to possibly realize the bug is related to another issue.
29
30For feature requests, we use
31[issues](https://github.com/KhronosGroup/SPIRV-Tools/issues) as well. Please
32create a new issue, as with bugs. In the issue provide
33
34*   A description of the problem that needs to be solved.
35*   Examples that demonstrate the problem.
36
37## For developers: Contributing a patch
38
39Before we can use your code, you must sign the [Khronos Open Source Contributor
40License Agreement](https://cla-assistant.io/KhronosGroup/SPIRV-Tools) (CLA),
41which you can do online. The CLA is necessary mainly because you own the
42copyright to your changes, even after your contribution becomes part of our
43codebase, so we need your permission to use and distribute your code. We also
44need to be sure of various other things -- for instance that you'll tell us if
45you know that your code infringes on other people's patents. You don't have to
46sign the CLA until after you've submitted your code for review and a member has
47approved it, but you must do it before we can put your code into our codebase.
48
49See
50[README.md](https://github.com/KhronosGroup/SPIRV-Tools/blob/master/README.md)
51for instruction on how to get, build, and test the source. Once you have made
52your changes:
53
54*   Ensure the code follows the [Google C++ Style
55    Guide](https://google.github.io/styleguide/cppguide.html). Running
56    `clang-format -style=file -i [modified-files]` can help.
57*   Create a pull request (PR) with your patch.
58*   Make sure the PR description clearly identified the problem, explains the
59    solution, and references the issue if applicable.
60*   If your patch completely fixes bug 1234, the commit message should say
61    `Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/1234`
62    When you do this, the issue will be closed automatically when the commit
63    goes into master.  Also, this helps us update the [CHANGES](CHANGES) file.
64*   Watch the continuous builds to make sure they pass.
65*   Request a code review.
66
67The reviewer can either approve your PR or request changes. If changes are
68requested:
69
70*   Please add new commits to your branch, instead of amending your commit.
71    Adding new commits makes it easier for the reviewer to see what has changed
72    since the last review.
73*   Once you are ready for another round of reviews, add a comment at the
74    bottom, such as "Ready for review" or "Please take a look" (or "PTAL"). This
75    explicit handoff is useful when responding with multiple small commits.
76
77After the PR has been reviewed it is the job of the reviewer to merge the PR.
78Instructions for this are given below.
79
80## For maintainers: Reviewing a PR
81
82The formal code reviews are done on GitHub. Reviewers are to look for all of the
83usual things:
84
85*   Coding style follows the [Google C++ Style
86    Guide](https://google.github.io/styleguide/cppguide.html)
87*   Identify potential functional problems.
88*   Identify code duplication.
89*   Ensure the unit tests have enough coverage.
90*   Ensure continuous integration (CI) bots run on the PR. If not run (in the
91    case of PRs by external contributors), add the "kokoro:run" label to the
92    pull request which will trigger running all CI jobs.
93
94When looking for functional problems, there are some common problems reviewers
95should pay particular attention to:
96
97*   Does the code work for both Shader (Vulkan and OpenGL) and Kernel (OpenCL)
98    scenarios? The respective SPIR-V dialects are slightly different.
99*   Changes are made to a container while iterating through it. You have to be
100    careful that iterators are not invalidated or that elements are not skipped.
101*   For SPIR-V transforms: The module is changed, but the analyses are not
102    updated. For example, a new instruction is added, but the def-use manager is
103    not updated. Later on, it is possible that the def-use manager will be used,
104    and give wrong results.
105
106## For maintainers: Merging a PR
107
108We intend to maintain a linear history on the GitHub master branch, and the
109build and its tests should pass at each commit in that history. A linear
110always-working history is easier to understand and to bisect in case we want to
111find which commit introduced a bug.
112
113### Initial merge setup
114
115The following steps should be done exactly once (when you are about to merge a
116PR for the first time):
117
118*   It is assumed that upstream points to
119    [git@github.com](mailto:git@github.com):KhronosGroup/SPIRV-Tools.git or
120    https://github.com/KhronosGroup/SPIRV-Tools.git.
121
122*   Find out the local name for the main github repo in your git configuration.
123    For example, in this configuration, it is labeled `upstream`.
124
125    ```
126    git remote -v
127    [ ... ]
128    upstream https://github.com/KhronosGroup/SPIRV-Tools.git (fetch)
129    upstream https://github.com/KhronosGroup/SPIRV-Tools.git (push)
130    ```
131
132*   Make sure that the `upstream` remote is set to fetch from the `refs/pull`
133    namespace:
134
135    ```
136    git config --get-all remote.upstream.fetch
137    +refs/heads/*:refs/remotes/upstream/*
138    +refs/pull/*/head:refs/remotes/upstream/pr/*
139    ```
140
141*   If the line `+refs/pull/*/head:refs/remotes/upstream/pr/*` is not present in
142    your configuration, you can add it with the command:
143
144    ```
145    git config --local --add remote.upstream.fetch '+refs/pull/*/head:refs/remotes/upstream/pr/*'
146    ```
147
148### Merge workflow
149
150The following steps should be done for every PR that you intend to merge:
151
152*   Make sure your local copy of the master branch is up to date:
153
154    ```
155    git checkout master
156    git pull
157    ```
158
159*   Fetch all pull requests refs:
160
161    ```
162    git fetch upstream
163    ```
164
165*   Checkout the particular pull request you are going to review:
166
167    ```
168    git checkout pr/1048
169    ```
170
171*   Rebase the PR on top of the master branch. If there are conflicts, send it
172    back to the author and ask them to rebase. During the interactive rebase be
173    sure to squash all of the commits down to a single commit.
174
175    ```
176    git rebase -i master
177    ```
178
179*   **Build and test the PR.**
180
181*   If all of the tests pass, push the commit `git push upstream HEAD:master`
182
183*   Close the PR and add a comment saying it was push using the commit that you
184    just pushed. See https://github.com/KhronosGroup/SPIRV-Tools/pull/935 as an
185    example.
186