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