Patches to intel-gpu-tools are very much welcome, we really want this to be the
universal set of low-level tools and testcases for the Intel kernel gfx driver
on Linux and similar platforms. So please bring on porting patches, bugfixes,
improvements for documentation and new tools and testcases.

A short list of contribution guidelines:

- Please submit patches formatted with git send-email/git format-patch or
  equivalent to:

    Development mailing list for IGT GPU Tools <igt-dev@lists.freedesktop.org>

  For a transition period patches are accepted on both the igt-dev mailing list
  and the former intel-gfx mailing list (with the appropriate patch
  subjectprefix, see below).

  During the transition period, feel free to send patches to both lists if you
  have a need to do so, as they will get deduplicated so they only appear and
  are tested in one Patchwork instance.

    Intel GFX discussion <intel-gfx@lists.freedesktop.org>

  Please use --subject-prefix="PATCH i-g-t" so IGT patches are easily
  identified in the massive amount mails on intel-gfx. To ensure this is always
  done, meson.sh (and autogen.sh) will run:

    git config format.subjectprefix "PATCH i-g-t"

  on its first invocation.

- intel-gpu-tools is MIT licensed and we require contributions to follow the
  developer's certificate of origin: http://developercertificate.org/

- When submitting new testcases please follow the naming conventions documented
  in the generated documentation. Also please make full use of all the helpers
  and convenience macros provided by the igt library. The semantic patch
  lib/igt.cocci can help with the more automatic conversions.

- Patches need to be reviewed on the mailing list. Exceptions only apply for
  testcases and tooling for drivers with just a single contributor (e.g. vc4).
  In this case patches must still be submitted to the mailing list first.
  Testcase should preferably be cross-reviewed by the same people who write and
  review the kernel feature itself.

- When patches from new contributors (without commit access) are stuck, for
  anything related to the regular releases, issues with packaging and
  integrating platform support or any other intel-gpu-tools issues, please
  contact one of the maintainers (listed in the MAINTAINERS file) and cc the
  igt-dev mailing list.

- Changes to the testcases are automatically tested. Take the results into
  account before merging.

Happy hacking!
