This Specification is protected by copyright laws and contains materialproprietary to Khronos. Except as described by these terms, it or anycomponents may not be reproduced, republished, distributed, transmitted,displayed, broadcast or otherwise exploited in any manner without theexpress prior written permission of Khronos.
Khronos grants a conditional copyright license to use and reproduce theunmodified Specification for any purpose, without fee or royalty, EXCEPT nolicenses to any patent, trademark or other intellectual property rights aregranted under these terms.
Khronos makes no, and expressly disclaims any, representations orwarranties, express or implied, regarding this Specification, including,without limitation: merchantability, fitness for a particular purpose,non-infringement of any intellectual property, correctness, accuracy,completeness, timeliness, and reliability. Under no circumstances willKhronos, or any of its Promoters, Contributors or Members, or theirrespective partners, officers, directors, employees, agents orrepresentatives be liable for any damages, whether direct, indirect, specialor consequential damages for lost revenues, lost profits, or otherwise,arising from or in connection with these materials.
This document contains extensions which are not ratified by Khronos, and assuch is not a ratified Specification, though it contains text from (and is asuperset of) the ratified Vulkan Specification. The ratified versionsof the Vulkan Specification can be found at (core only)and -khr-extensions/html/vkspec.html (core with all ratified extensions).
Some parts of this Specification are purely informative and so are EXCLUDEDthe Scope of this Specification. The Document Conventions section ofthe Introduction defines how these parts of the Specification areidentified.
Where this Specification uses technical terminology, defined in the Glossary or otherwise,that refer to enabling technologies that are not expressly set forth in thisSpecification, those enabling technologies are EXCLUDED from the Scope ofthis Specification. For clarity, enabling technologies not disclosed withparticularity in this Specification (e.g. semiconductor manufacturingtechnology, hardware architecture, processor architecture ormicroarchitecture, memory architecture, compiler technology, object orientedtechnology, basic operating system technology, compression technology,algorithms, and so on) are NOT to be considered expressly set forth; onlythose application program interfaces and data structures disclosed withparticularity are included in the Scope of this Specification.
For purposes of the Khronos Intellectual Property Rights Policy as itrelates to the definition of Necessary Patent Claims, all recommended oroptional features, behaviors and functionality set forth in thisSpecification, if implemented, are considered to be included as CompliantPortions.
Where this Specification identifies specific sections of externalreferences, only those specifically identified sections definenormativefunctionality. The Khronos Intellectual Property Rights Policy excludesexternal references to materials and associated enabling technology notcreated by Khronos from the Scope of this Specification, and any licensesthat may be required to implement such referenced materials and associatedtechnologies must be obtained separately and may involve royalty payments.
Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark ofThe Khronos Group Inc. OpenCL is a trademark of Apple Inc., used underlicense by Khronos. OpenGL is a registered trademark and the OpenGL ES logois a trademark of Hewlett Packard Enterprise, used under license by Khronos.ASTC is a trademark of ARM Holdings PLC. All other product names,trademarks, and/or company names are used solely for identification andbelong to their respective owners.
The canonical version of the Specification is available in the officialVulkan Registry( ).The source files used to generate the Vulkan specification are stored in theVulkan Documentation Repository( -Docs).
The Vulkan specification is intended for use by both implementors of the APIand application developers seeking to make use of the API, forming acontract between these parties.Specification text may address either party; typically the intended audiencecan be inferred from context, though some sections are defined to addressonly one of these parties.(For example, Valid Usage sections only address applicationdevelopers).Any requirements, prohibitions, recommendations or options defined bynormative terminology are imposedonly on the audience of that text.
Structure and enumerated types defined in extensions that were promoted tocore in a later version of Vulkan are now defined in terms of the equivalentVulkan core interfaces.This affects the Vulkan Specification, the Vulkan header files, and thecorresponding XML Registry.
All Vulkan core versions and KHR extensions (including provisionalspecifications) are ratified, as are some multi-vendor EXT extensions.Ratification status of extensions is described in the Layers &Extensions (Informative) appendix.
These key words are highlighted in the specification for clarity.In text addressing application developers, their use expresses requirementsthat apply to application behavior.In text addressing implementors, their use expresses requirements that applyto implementations.
There is an important distinction between cannot and must not, as usedin this Specification.Cannot means something the application literally is unable to express oraccomplish through the API, while must not means something that theapplication is capable of expressing through the API, but that theconsequences of doing so are undefined and potentially unrecoverable forthe implementation (see Valid Usage).
The Vulkan Specification makes use of common engineering and graphics termssuch as Pipeline, Shader, and Host to identify and describe Vulkan APIconstructs and their attributes, states, and behaviors.The Glossary defines the basic meanings of these terms in thecontext of the Specification.The Specification text provides fuller definitions of the terms and mayelaborate, extend, or clarify the Glossary definitions.When a term defined in the Glossary is used in normativelanguage within the Specification, the definitions within the Specificationgovern and supersede any meanings the terms may have in other technicalcontexts (i.e. outside the Specification).
References to external documents are considered normative references if theSpecification uses any of the normative terms defined inNormative Terminology to refer to them or theirrequirements, either as a whole or in part.
This chapter introduces fundamental concepts including the Vulkanarchitecture and execution model, API syntax, queues, pipelineconfigurations, numeric representation, state and state queries, and thedifferent types of objects and shaders.It provides a framework for interpreting more specific descriptions ofcommands and behavior in the remainder of the Specification.
Since a variety of data types and structures in Vulkan may be accessible byboth host and physical device operations, the implementation should be ableto access such data efficiently in both paths in order to facilitate writingportable and performant applications.
Vulkan exposes one or more devices, each of which exposes one or morequeues which may process work asynchronously to one another.The set of queues supported by a device is partitioned into families.Each family supports one or more types of functionality and may containmultiple queues with similar characteristics.Queues within a single family are considered compatible with one another,and work produced for a family of queues can be executed on any queuewithin that family.This specification defines the following types of functionality that queuesmay support: graphics, compute,video decode,video encode,protected memory management,sparse memory management,and transfer.
A single device may report multiple similar queue families rather than, oras well as, reporting multiple members of one or more of those families.This indicates that while members of those families have similarcapabilities, they are not directly compatible with one another.
Device memory is explicitly managed by the application.Each device may advertise one or more heaps, representing different areasof memory.Memory heaps are either device-local or host-local, but are always visibleto the device.Further detail about memory heaps is exposed via memory types available onthat heap.Examples of memory areas that may be available on an implementationinclude:
Vulkan queues provide an interface to the execution engines of a device.Commands for these execution engines are recorded into command buffers aheadof execution time, and then submitted to a queue for execution.Once submitted to a queue, command buffers will begin and complete executionwithout further application intervention, though the order of this executionis dependent on a number of implicit and explicitordering constraints.
Work is submitted to queues using queue submission commands that typicallytake the form vkQueue* (e.g. vkQueueSubmit, vkQueueBindSparse), and can take a list of semaphores upon which to wait before work beginsand a list of semaphores to signal once work has completed.The work itself, as well as signaling and waiting on the semaphores are allqueue operations.Queue submission commands return control to the application once queueoperations have been submitted - they do not wait for completion.
There are no implicit ordering constraints between queue operations ondifferent queues, or between queues and the host, so these may operate inany order with respect to each other.Explicit ordering constraints between different queues or with the host canbe expressed with semaphores andfences.
7fc3f7cf58