// Copyright 2020-2023 The Khronos Group Inc.
// SPDX-License-Identifier: CC-BY-4.0

= Contributing

Contributions to the Vulkan-Docs repository are welcome.

Contributions may be in the form of Issues proposing a change, or Pull
Requests containing fixes for, or additions to:

  * Specification text and other documentation
  * XML API Registry
  * Specification scripting / build toolchains and related infrastructure

Please keep contributions focused on solving a single issue or bug.

== Copyright Notice and License Template

If you are adding a new file, it must be under one of the following
licenses:

  * Creative Commons Attribution 4.0 International, for specification text
    (for example, link:vkspec.adoc[`vkspec.adoc`])
  * Apache 2.0, for all other changes (for example,
    link:scripts/reg.py[`reg.py`])
  * Apache 2.0 OR MIT, for source-like files that may need to used in GPL
    projects (for example, link:xml/vk.xml[`vk.xml`])

We use a short license in each file consisting of just the copyright
statement and the SPDX license identifier of the license applying to that
file, and link to the full license text from
link:LICENSE.adoc[`LICENSE.adoc`].

== Contributor License Agreement

When you propose a pull request on Vulkan-Docs you must execute the link:https://www.khronos.org/legal/Khronos_mixed_repository_CLA[Khronos
Mixed Repository Contributor License Agreement], to confirm you own your work
and are granting Khronos the necessary permissions to redistribute it under
our licenses.
