| // Copyright 2015-2021 The Khronos Group, Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| |
| [[introduction]] |
| = Introduction |
| |
| This document, referred to as the "`Vulkan Specification`" or just the |
| "`Specification`" hereafter, describes the Vulkan Application Programming |
| Interface (API). |
| Vulkan is a http://www.open-std.org/jtc1/sc22/wg14/www/standards[C99] API |
| designed for explicit control of low-level graphics and compute |
| functionality. |
| |
| The canonical version of the Specification is available in the official |
| https://www.khronos.org/registry/vulkan/[Vulkan Registry] |
| (https://www.khronos.org/registry/vulkan/). |
| The source files used to generate the Vulkan specification are stored in the |
| https://github.com/KhronosGroup/Vulkan-Docs[Vulkan Documentation Repository] |
| (https://github.com/KhronosGroup/Vulkan-Docs). |
| The source repository additionally has a public issue tracker and allows the |
| submission of pull requests that improve the specification. |
| |
| |
| [[introduction-conventions]] |
| == Document Conventions |
| |
| The Vulkan specification is intended for use by both implementors of the API |
| and application developers seeking to make use of the API, forming a |
| contract between these parties. |
| Specification text may address either party; typically the intended audience |
| can be inferred from context, though some sections are defined to address |
| only one of these parties. |
| (For example, <<fundamentals-validusage>> sections only address application |
| developers). |
| Any requirements, prohibitions, recommendations or options defined by |
| <<introduction-normative-terminology, normative terminology>> are imposed |
| only on the audience of that text. |
| |
| [NOTE] |
| .Note |
| ==== |
| Structure and enumerated types defined in extensions that were promoted to |
| core in a later version of Vulkan are now defined in terms of the equivalent |
| Vulkan core interfaces. |
| This affects the Vulkan Specification, the Vulkan header files, and the |
| corresponding XML Registry. |
| ==== |
| |
| |
| [[introduction-informative-language]] |
| === Informative Language |
| |
| Some language in the specification is purely informative, intended to give |
| background or suggestions to implementors or developers. |
| |
| If an entire chapter or section contains only informative language, its |
| title will be suffixed with "`(Informative)`". |
| |
| All NOTEs are implicitly informative. |
| |
| |
| [[introduction-normative-terminology]] |
| === Normative Terminology |
| |
| Within this specification, the key words *must*, *required*, *should*, |
| *recommended*, *may*, and *optional* are to be interpreted as described in |
| https://www.ietf.org/rfc/rfc2119.txt[RFC 2119 - Key words for use in RFCs to |
| Indicate Requirement Levels] (https://www.ietf.org/rfc/rfc2119.txt). |
| The additional key word *optionally* is an alternate form of *optional*, for |
| use where grammatically appropriate. |
| |
| These key words are highlighted in the specification for clarity. |
| In text addressing application developers, their use expresses requirements |
| that apply to application behavior. |
| In text addressing implementors, their use expresses requirements that apply |
| to implementations. |
| |
| In text addressing application developers, the additional key words *can* |
| and *cannot* are to be interpreted as describing the capabilities of an |
| application, as follows: |
| |
| *can*:: |
| This word means that the application is able to perform the action |
| described. |
| |
| *cannot*:: |
| This word means that the API and/or the execution environment provide no |
| mechanism through which the application can express or accomplish the action |
| described. |
| |
| These key words are never used in text addressing implementors. |
| |
| [NOTE] |
| .Note |
| ================== |
| There is an important distinction between *cannot* and *must not*, as used |
| in this Specification. |
| *Cannot* means something the application literally is unable to express or |
| accomplish through the API, while *must not* means something that the |
| application is capable of expressing through the API, but that the |
| consequences of doing so are undefined: and potentially unrecoverable for |
| the implementation (see <<fundamentals-validusage>>). |
| ================== |
| |
| Unless otherwise noted in the section heading, all sections and appendices |
| in this document are normative. |
| |
| |
| [[introduction-technical-terminology]] |
| === Technical Terminology |
| |
| The Vulkan Specification makes use of common engineering and graphics terms |
| such as *Pipeline*, *Shader*, and *Host* to identify and describe Vulkan API |
| constructs and their attributes, states, and behaviors. |
| The <<glossary,Glossary>> defines the basic meanings of these terms in the |
| context of the Specification. |
| The Specification text provides fuller definitions of the terms and may |
| elaborate, extend, or clarify the <<glossary,Glossary>> definitions. |
| When a term defined in the <<glossary,Glossary>> is used in normative |
| language within the Specification, the definitions within the Specification |
| govern and supersede any meanings the terms may have in other technical |
| contexts (i.e. outside the Specification). |
| |
| |
| [[introduction-normative-references]] |
| === Normative References |
| |
| References to external documents are considered normative references if the |
| Specification uses any of the normative terms defined in |
| <<introduction-normative-terminology>> to refer to them or their |
| requirements, either as a whole or in part. |
| |
| The following documents are referenced by normative sections of the |
| specification: |
| |
| [[ieee-754]] |
| IEEE. |
| August, 2008. |
| _IEEE Standard for Floating-Point Arithmetic_. |
| IEEE Std 754-2008. |
| https://dx.doi.org/10.1109/IEEESTD.2008.4610935 . |
| |
| [[data-format]] Andrew Garrard. |
| _Khronos Data Format Specification, version 1.3_. |
| https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html . |
| |
| [[spirv-extended]] John Kessenich. |
| _SPIR-V Extended Instructions for GLSL, Version 1.00_ (February 10, 2016). |
| https://www.khronos.org/registry/spir-v/ . |
| |
| [[spirv-spec]] John Kessenich, Boaz Ouriel, and Raun Krisch. |
| _SPIR-V Specification, Version 1.5, Revision 3, Unified_ (April 24, 2020). |
| https://www.khronos.org/registry/spir-v/ . |
| |
| [[vulkan-registry]] Jon Leech. |
| _The Khronos Vulkan API Registry_. |
| https://www.khronos.org/registry/vulkan/specs/1.2/registry.html . |
| |
| [[vulkan-styleguide]] Jon Leech and Tobias Hector. |
| _Vulkan Documentation and Extensions: Procedures and Conventions_. |
| https://www.khronos.org/registry/vulkan/specs/1.2/styleguide.html . |
| |
| [[LoaderInterfaceArchitecture]] |
| _Architecture of the Vulkan Loader Interfaces_ (October, 2021). |
| https://github.com/KhronosGroup/Vulkan-Loader/blob/master/docs/LoaderInterfaceArchitecture.md |
| . |
| |