blob: 8eb329ee28efbe24cd009344156b2cb3fdeb07ea [file] [log] [blame] [view]
Karl Schultzb0b3cac2016-03-09 12:48:04 -07001## How to Contribute to Vulkan Source Repositories
2
Mark Lobodzinski437e1172018-01-04 14:55:26 -07003### **The Repository**
Karl Schultzb0b3cac2016-03-09 12:48:04 -07004
Mark Lobodzinski437e1172018-01-04 14:55:26 -07005The source code for The Vulkan-LoaderAndValidationLayer components is sponsored by Khronos and LunarG.
Karl Schultzb0b3cac2016-03-09 12:48:04 -07006* [Khronos Vulkan-LoaderAndValidationLayers](https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers)
Karl Schultzb0b3cac2016-03-09 12:48:04 -07007
Karl Schultz2f21c0c2016-02-26 15:42:57 -07008
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -06009### **The Vulkan Ecosystem Needs Your Help**
Karl Schultzdf03b952016-05-05 08:30:53 -060010
11The Vulkan validation layers are one of the larger and more important components in this repository.
12While there are often active and organized development efforts underway to improve their coverage,
13there are always opportunities for anyone to help by contributing additional validation layer checks
14and tests for these validation checks.
15If you desire to help in this area, please examine the
16[issues list](https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues)
Mark Lobodzinski437e1172018-01-04 14:55:26 -070017in this repository and look for any issues that are of interest to you.
Karl Schultzdf03b952016-05-05 08:30:53 -060018Of course, if you have your own work in mind, please open an issue to describe it and assign it to yourself.
19Finally, please feel free to contact any of the developers that are actively contributing should you
20wish to coordinate further.
21Please see the [section about Validation Layers](#special-considerations-for-validation-layers)
22later on this page.
23
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -060024Repository Issue labels:
25
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -060026* _Bug_: These issues refer to invalid or broken functionality and are the highest priority.
Mark Lobodzinski437e1172018-01-04 14:55:26 -070027* _Incomplete_: These issues refer to missing validation checks that users have encountered during application
28development that would have been directly useful, and are high priority.
29* _Enhancement_: These issues refer to ideas for extending or improving the loader, demos, or validation layers.
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -060030
Mark Lobodzinski437e1172018-01-04 14:55:26 -070031It is the mainainers goal for all issues to be assigned within one business day of their submission. If you choose
32to work on an issue that is assigned, simply coordinate with the current assignee.
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -060033
Karl Schultz2f21c0c2016-02-26 15:42:57 -070034### **How to Submit Fixes**
35
Karl Schultzb0b3cac2016-03-09 12:48:04 -070036* **Ensure that the bug was not already reported or fixed** by searching on GitHub under Issues
37 and Pull Requests.
Karl Schultz2f21c0c2016-02-26 15:42:57 -070038* Use the existing GitHub forking and pull request process.
39 This will involve [forking the repository](https://help.github.com/articles/fork-a-repo/),
40 creating a branch with your commits, and then [submitting a pull request](https://help.github.com/articles/using-pull-requests/).
Mark Lobodzinski437e1172018-01-04 14:55:26 -070041* Please read and adhere to the style and process [guidelines](#coding conventions and formatting) enumerated below.
Karl Schultz2f21c0c2016-02-26 15:42:57 -070042* Please base your fixes on the master branch. SDK branches are generally not updated except for critical fixes needed to repair an SDK release.
Karl Schultz2f21c0c2016-02-26 15:42:57 -070043
44
45#### **Coding Conventions and Formatting**
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -060046* Use the **[Google style guide](https://google.github.io/styleguide/cppguide.html)** for source code with the following exceptions:
Jeremy Hayes46ec9f72017-01-19 14:10:18 -070047 * The column limit is 132 (as opposed to the default value 80). The clang-format tool will handle this. See below.
Mark Lobodzinski93704892017-01-25 07:56:21 -070048 * The indent is 4 spaces instead of the default 2 spaces. Again, the clang-format tool will handle this.
Mark Lobodzinski437e1172018-01-04 14:55:26 -070049 * If you can justify a reason for violating a rule in the guidelines, then you are free to do so. Be prepared to defend your
50decision during code review. This should be used responsibly. An example of a bad reason is "I don't like that rule." An example of
51a good reason is "This violates the style guide, but it improves type safety."
Jeremy Hayes46ec9f72017-01-19 14:10:18 -070052
Mark Lobodzinski437e1172018-01-04 14:55:26 -070053* Run **clang-format** on your changes to maintain consistent formatting
54 * There are `.clang-format files` present in the repository to define clang-format settings
Karl Schultz2f21c0c2016-02-26 15:42:57 -070055 which are found and used automatically by clang-format.
Karl Schultz2f21c0c2016-02-26 15:42:57 -070056 * A sample git workflow may look like:
57
58> # Make changes to the source.
Karl Schultz41ee1a02016-04-28 14:20:13 -060059> $ git add -u .
60> $ git clang-format --style=file
Karl Schultz2f21c0c2016-02-26 15:42:57 -070061> # Check to see if clang-format made any changes and if they are OK.
Karl Schultz41ee1a02016-04-28 14:20:13 -060062> $ git add -u .
Karl Schultz2f21c0c2016-02-26 15:42:57 -070063> $ git commit
64
Mark Lobodzinski437e1172018-01-04 14:55:26 -070065* **Commit Messages**
66 * Limit the subject line to 50 characters -- this allows the information to display correctly in git/Github logs
67 * Begin subject line with a one-word component description followed by a colon (e.g. loader, layers, tests, etc.)
68 * Separate subject from body with a blank line
69 * Wrap the body at 72 characters
70 * Capitalize the subject line
71 * Do not end the subject line with a period
72 * Use the body to explain what and why vs. how
73 * Use the imperative mode in the subject line. This just means to write it as a command (e.g. Fix the sprocket)
74
75Strive for commits that implement a single or related set of functionality, using as many commits as is necessary (more is better).
76That said, please ensure that the repository compiles and passes tests without error for each commit in your pull request. Note
77that to be accepted into the repository, the pull request must [pass all tests](#testing your changes) on all supported platforms
78-- the automatic Github Travis and AppVeyor continuous integration features will assist in enforcing this requirement.
Jeremy Hayes46ec9f72017-01-19 14:10:18 -070079
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -060080#### **Testing Your Changes**
81* Run the existing tests in the repository before and after each if your commits to check for any regressions.
Karl Schultzb0b3cac2016-03-09 12:48:04 -070082 There are some tests that appear in all repositories.
Karl Schultz2f21c0c2016-02-26 15:42:57 -070083 These tests can be found in the following folders inside of your target build directory:
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -060084
Karl Schultz2f21c0c2016-02-26 15:42:57 -070085 (These instructions are for Linux)
86* In the `demos` directory, run:
87
88> cube
89> cube --validate
Karl Schultz2f21c0c2016-02-26 15:42:57 -070090> smoke
91> smoke --validate
92> vulkaninfo
93
94* In the `tests` directory, run:
95
96> run_all_tests.sh
97
Mark Lobodzinski437e1172018-01-04 14:55:26 -070098* On Windows, a quick sanity check can be run from inside Visual Studio -- just run the `vk_layer_validation_tests` project,
99or you can run `run_all_tests.ps1` from a PowerShell window
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -0600100
Karl Schultz2f21c0c2016-02-26 15:42:57 -0700101* Note that some tests may fail with known issues or driver-specific problems.
102 The idea here is that your changes shouldn't change the test results, unless that was the intent of your changes.
Karl Schultzb0b3cac2016-03-09 12:48:04 -0700103* Run tests that explicitly exercise your changes.
Karl Schultz2f21c0c2016-02-26 15:42:57 -0700104* Feel free to subject your code changes to other tests as well!
105
Mark Lobodzinski437e1172018-01-04 14:55:26 -0700106
Karl Schultz43f4e6d2016-04-28 13:55:42 -0600107#### **Special Considerations for Validation Layers**
Mark Lobodzinski437e1172018-01-04 14:55:26 -0700108* **Validation Tests** If you are submitting a change that adds a new validation check, you should also construct a "negative" test function.
Karl Schultz43f4e6d2016-04-28 13:55:42 -0600109The negative test function purposely violates the validation rule that the new validation check is looking for.
110The test should cause your new validation check to identify the violation and issue a validation error report.
111And finally, the test should check that the validation error report is generated and consider the test as "passing"
112if the report is received. Otherwise, the test should indicate "failure".
113This new test should be added to the validation layer test program in the `tests` directory and contributed
Mark Lobodzinski5ce91da2017-05-11 13:54:52 -0600114at the same time as the new validation check itself, along with appropriate updates to `layers\vk_validation_error_database.txt`.
Karl Schultz43f4e6d2016-04-28 13:55:42 -0600115There are many existing validation tests in this directory that can be used as a starting point.
Mark Lobodzinski437e1172018-01-04 14:55:26 -0700116* **Validation Checks** The majority of validation checks are carried out by the Core Validation layer. In general, this layer
117contains checks that require some amount of application state to carry out. In contrast, the parameter validation layer contains
118checks that require (mostly) no state at all. Please inquire if you are unsure of the location for your contribution. The other
119layers (threading, object_tracker, unique_objects) are more special-purpose and are mostly code-generated from the specification.
Karl Schultz43f4e6d2016-04-28 13:55:42 -0600120
121
Karl Schultz2f21c0c2016-02-26 15:42:57 -0700122### **Contributor License Agreement (CLA)**
123
Karl Schultzdf03b952016-05-05 08:30:53 -0600124You'll be prompted with a one-time "click-through" CLA dialog as part of submitting your pull request
125or other contribution to GitHub.
Karl Schultzb0b3cac2016-03-09 12:48:04 -0700126
127### **License and Copyrights**
128
129All contributions made to the Vulkan-LoaderAndValidationLayers repository are Khronos branded and as such,
Jon Ashburn43b53e82016-04-19 11:30:31 -0600130any new files need to have the Khronos license (Apache 2.0 style) and copyright included.
Karl Schultzb0b3cac2016-03-09 12:48:04 -0700131Please see an existing file in this repository for an example.
132
Jon Ashburn43b53e82016-04-19 11:30:31 -0600133All contributions made to the LunarG repositories are to be made under the Apache 2.0 license
Karl Schultzb0b3cac2016-03-09 12:48:04 -0700134and any new files need to include this license and any applicable copyrights.
135
136You can include your individual copyright after any existing copyrights.