1e5c31af7Sopenharmony_ci// Copyright 2015-2021 The Khronos Group, Inc. 2e5c31af7Sopenharmony_ci// 3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: CC-BY-4.0 4e5c31af7Sopenharmony_ci 5e5c31af7Sopenharmony_ci 6e5c31af7Sopenharmony_ci[[introduction]] 7e5c31af7Sopenharmony_ci= Introduction 8e5c31af7Sopenharmony_ci 9e5c31af7Sopenharmony_ciThis document, referred to as the "`Vulkan Specification`" or just the 10e5c31af7Sopenharmony_ci"`Specification`" hereafter, describes the Vulkan Application Programming 11e5c31af7Sopenharmony_ciInterface (API). 12e5c31af7Sopenharmony_ciVulkan is a http://www.open-std.org/jtc1/sc22/wg14/www/standards[C99] API 13e5c31af7Sopenharmony_cidesigned for explicit control of low-level graphics and compute 14e5c31af7Sopenharmony_cifunctionality. 15e5c31af7Sopenharmony_ci 16e5c31af7Sopenharmony_ciThe canonical version of the Specification is available in the official 17e5c31af7Sopenharmony_cihttps://www.khronos.org/registry/vulkan/[Vulkan Registry] 18e5c31af7Sopenharmony_ci(https://www.khronos.org/registry/vulkan/). 19e5c31af7Sopenharmony_ciThe source files used to generate the Vulkan specification are stored in the 20e5c31af7Sopenharmony_cihttps://github.com/KhronosGroup/Vulkan-Docs[Vulkan Documentation Repository] 21e5c31af7Sopenharmony_ci(https://github.com/KhronosGroup/Vulkan-Docs). 22e5c31af7Sopenharmony_ciThe source repository additionally has a public issue tracker and allows the 23e5c31af7Sopenharmony_cisubmission of pull requests that improve the specification. 24e5c31af7Sopenharmony_ci 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ci[[introduction-conventions]] 27e5c31af7Sopenharmony_ci== Document Conventions 28e5c31af7Sopenharmony_ci 29e5c31af7Sopenharmony_ciThe Vulkan specification is intended for use by both implementors of the API 30e5c31af7Sopenharmony_ciand application developers seeking to make use of the API, forming a 31e5c31af7Sopenharmony_cicontract between these parties. 32e5c31af7Sopenharmony_ciSpecification text may address either party; typically the intended audience 33e5c31af7Sopenharmony_cican be inferred from context, though some sections are defined to address 34e5c31af7Sopenharmony_cionly one of these parties. 35e5c31af7Sopenharmony_ci(For example, <<fundamentals-validusage>> sections only address application 36e5c31af7Sopenharmony_cidevelopers). 37e5c31af7Sopenharmony_ciAny requirements, prohibitions, recommendations or options defined by 38e5c31af7Sopenharmony_ci<<introduction-normative-terminology, normative terminology>> are imposed 39e5c31af7Sopenharmony_cionly on the audience of that text. 40e5c31af7Sopenharmony_ci 41e5c31af7Sopenharmony_ci[NOTE] 42e5c31af7Sopenharmony_ci.Note 43e5c31af7Sopenharmony_ci==== 44e5c31af7Sopenharmony_ciStructure and enumerated types defined in extensions that were promoted to 45e5c31af7Sopenharmony_cicore in a later version of Vulkan are now defined in terms of the equivalent 46e5c31af7Sopenharmony_ciVulkan core interfaces. 47e5c31af7Sopenharmony_ciThis affects the Vulkan Specification, the Vulkan header files, and the 48e5c31af7Sopenharmony_cicorresponding XML Registry. 49e5c31af7Sopenharmony_ci==== 50e5c31af7Sopenharmony_ci 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_ci[[introduction-informative-language]] 53e5c31af7Sopenharmony_ci=== Informative Language 54e5c31af7Sopenharmony_ci 55e5c31af7Sopenharmony_ciSome language in the specification is purely informative, intended to give 56e5c31af7Sopenharmony_cibackground or suggestions to implementors or developers. 57e5c31af7Sopenharmony_ci 58e5c31af7Sopenharmony_ciIf an entire chapter or section contains only informative language, its 59e5c31af7Sopenharmony_cititle will be suffixed with "`(Informative)`". 60e5c31af7Sopenharmony_ci 61e5c31af7Sopenharmony_ciAll NOTEs are implicitly informative. 62e5c31af7Sopenharmony_ci 63e5c31af7Sopenharmony_ci 64e5c31af7Sopenharmony_ci[[introduction-normative-terminology]] 65e5c31af7Sopenharmony_ci=== Normative Terminology 66e5c31af7Sopenharmony_ci 67e5c31af7Sopenharmony_ciWithin this specification, the key words *must*, *required*, *should*, 68e5c31af7Sopenharmony_ci*recommended*, *may*, and *optional* are to be interpreted as described in 69e5c31af7Sopenharmony_cihttps://www.ietf.org/rfc/rfc2119.txt[RFC 2119 - Key words for use in RFCs to 70e5c31af7Sopenharmony_ciIndicate Requirement Levels] (https://www.ietf.org/rfc/rfc2119.txt). 71e5c31af7Sopenharmony_ciThe additional key word *optionally* is an alternate form of *optional*, for 72e5c31af7Sopenharmony_ciuse where grammatically appropriate. 73e5c31af7Sopenharmony_ci 74e5c31af7Sopenharmony_ciThese key words are highlighted in the specification for clarity. 75e5c31af7Sopenharmony_ciIn text addressing application developers, their use expresses requirements 76e5c31af7Sopenharmony_cithat apply to application behavior. 77e5c31af7Sopenharmony_ciIn text addressing implementors, their use expresses requirements that apply 78e5c31af7Sopenharmony_cito implementations. 79e5c31af7Sopenharmony_ci 80e5c31af7Sopenharmony_ciIn text addressing application developers, the additional key words *can* 81e5c31af7Sopenharmony_ciand *cannot* are to be interpreted as describing the capabilities of an 82e5c31af7Sopenharmony_ciapplication, as follows: 83e5c31af7Sopenharmony_ci 84e5c31af7Sopenharmony_ci*can*:: 85e5c31af7Sopenharmony_ciThis word means that the application is able to perform the action 86e5c31af7Sopenharmony_cidescribed. 87e5c31af7Sopenharmony_ci 88e5c31af7Sopenharmony_ci*cannot*:: 89e5c31af7Sopenharmony_ciThis word means that the API and/or the execution environment provide no 90e5c31af7Sopenharmony_cimechanism through which the application can express or accomplish the action 91e5c31af7Sopenharmony_cidescribed. 92e5c31af7Sopenharmony_ci 93e5c31af7Sopenharmony_ciThese key words are never used in text addressing implementors. 94e5c31af7Sopenharmony_ci 95e5c31af7Sopenharmony_ci[NOTE] 96e5c31af7Sopenharmony_ci.Note 97e5c31af7Sopenharmony_ci================== 98e5c31af7Sopenharmony_ciThere is an important distinction between *cannot* and *must not*, as used 99e5c31af7Sopenharmony_ciin this Specification. 100e5c31af7Sopenharmony_ci*Cannot* means something the application literally is unable to express or 101e5c31af7Sopenharmony_ciaccomplish through the API, while *must not* means something that the 102e5c31af7Sopenharmony_ciapplication is capable of expressing through the API, but that the 103e5c31af7Sopenharmony_ciconsequences of doing so are undefined: and potentially unrecoverable for 104e5c31af7Sopenharmony_cithe implementation (see <<fundamentals-validusage>>). 105e5c31af7Sopenharmony_ci================== 106e5c31af7Sopenharmony_ci 107e5c31af7Sopenharmony_ciUnless otherwise noted in the section heading, all sections and appendices 108e5c31af7Sopenharmony_ciin this document are normative. 109e5c31af7Sopenharmony_ci 110e5c31af7Sopenharmony_ci 111e5c31af7Sopenharmony_ci[[introduction-technical-terminology]] 112e5c31af7Sopenharmony_ci=== Technical Terminology 113e5c31af7Sopenharmony_ci 114e5c31af7Sopenharmony_ciThe Vulkan Specification makes use of common engineering and graphics terms 115e5c31af7Sopenharmony_cisuch as *Pipeline*, *Shader*, and *Host* to identify and describe Vulkan API 116e5c31af7Sopenharmony_ciconstructs and their attributes, states, and behaviors. 117e5c31af7Sopenharmony_ciThe <<glossary,Glossary>> defines the basic meanings of these terms in the 118e5c31af7Sopenharmony_cicontext of the Specification. 119e5c31af7Sopenharmony_ciThe Specification text provides fuller definitions of the terms and may 120e5c31af7Sopenharmony_cielaborate, extend, or clarify the <<glossary,Glossary>> definitions. 121e5c31af7Sopenharmony_ciWhen a term defined in the <<glossary,Glossary>> is used in normative 122e5c31af7Sopenharmony_cilanguage within the Specification, the definitions within the Specification 123e5c31af7Sopenharmony_cigovern and supersede any meanings the terms may have in other technical 124e5c31af7Sopenharmony_cicontexts (i.e. outside the Specification). 125e5c31af7Sopenharmony_ci 126e5c31af7Sopenharmony_ci 127e5c31af7Sopenharmony_ci[[introduction-normative-references]] 128e5c31af7Sopenharmony_ci=== Normative References 129e5c31af7Sopenharmony_ci 130e5c31af7Sopenharmony_ciReferences to external documents are considered normative references if the 131e5c31af7Sopenharmony_ciSpecification uses any of the normative terms defined in 132e5c31af7Sopenharmony_ci<<introduction-normative-terminology>> to refer to them or their 133e5c31af7Sopenharmony_cirequirements, either as a whole or in part. 134e5c31af7Sopenharmony_ci 135e5c31af7Sopenharmony_ciThe following documents are referenced by normative sections of the 136e5c31af7Sopenharmony_cispecification: 137e5c31af7Sopenharmony_ci 138e5c31af7Sopenharmony_ci[[ieee-754]] 139e5c31af7Sopenharmony_ciIEEE. 140e5c31af7Sopenharmony_ciAugust, 2008. 141e5c31af7Sopenharmony_ci_IEEE Standard for Floating-Point Arithmetic_. 142e5c31af7Sopenharmony_ciIEEE Std 754-2008. 143e5c31af7Sopenharmony_cihttps://dx.doi.org/10.1109/IEEESTD.2008.4610935 . 144e5c31af7Sopenharmony_ci 145e5c31af7Sopenharmony_ci[[data-format]] Andrew Garrard. 146e5c31af7Sopenharmony_ci_Khronos Data Format Specification, version 1.3_. 147e5c31af7Sopenharmony_cihttps://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html . 148e5c31af7Sopenharmony_ci 149e5c31af7Sopenharmony_ci[[spirv-extended]] John Kessenich. 150e5c31af7Sopenharmony_ci_SPIR-V Extended Instructions for GLSL, Version 1.00_ (February 10, 2016). 151e5c31af7Sopenharmony_cihttps://www.khronos.org/registry/spir-v/ . 152e5c31af7Sopenharmony_ci 153e5c31af7Sopenharmony_ci[[spirv-spec]] John Kessenich, Boaz Ouriel, and Raun Krisch. 154e5c31af7Sopenharmony_ci_SPIR-V Specification, Version 1.5, Revision 3, Unified_ (April 24, 2020). 155e5c31af7Sopenharmony_cihttps://www.khronos.org/registry/spir-v/ . 156e5c31af7Sopenharmony_ci 157e5c31af7Sopenharmony_ci[[vulkan-registry]] Jon Leech. 158e5c31af7Sopenharmony_ci_The Khronos Vulkan API Registry_. 159e5c31af7Sopenharmony_cihttps://www.khronos.org/registry/vulkan/specs/1.2/registry.html . 160e5c31af7Sopenharmony_ci 161e5c31af7Sopenharmony_ci[[vulkan-styleguide]] Jon Leech and Tobias Hector. 162e5c31af7Sopenharmony_ci_Vulkan Documentation and Extensions: Procedures and Conventions_. 163e5c31af7Sopenharmony_cihttps://www.khronos.org/registry/vulkan/specs/1.2/styleguide.html . 164e5c31af7Sopenharmony_ci 165e5c31af7Sopenharmony_ci[[LoaderInterfaceArchitecture]] 166e5c31af7Sopenharmony_ci_Architecture of the Vulkan Loader Interfaces_ (October, 2021). 167e5c31af7Sopenharmony_cihttps://github.com/KhronosGroup/Vulkan-Loader/blob/master/docs/LoaderInterfaceArchitecture.md 168e5c31af7Sopenharmony_ci. 169e5c31af7Sopenharmony_ci 170