// Copyright 2015-2021 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

// The asciidoc [glossary] template cannot contain subsections.
// The abbreviations and prefixes probably belong in the upcoming
// API/extension-writing-guidelines appendix, anyway.

[appendix]
[[lexicon]]
= Lexicon

This appendix defines terms, abbreviations, and API prefixes used in the
Specification.


[[glossary]]
== Glossary

The terms defined in this section are used consistently throughout the
Specification and may be used with or without capitalization.

Accessible (Descriptor Binding)::
    A descriptor binding is accessible to a shader stage if that stage is
    included in the pname:stageFlags of the descriptor binding.
    Descriptors using that binding can: only be used by stages in which they
    are accessible.

Acquire Operation (Resource)::
    An operation that acquires ownership of an image subresource or buffer
    range.

ifdef::VK_VALVE_mutable_descriptor_type[]
Active (Descriptor Type)::
    When a descriptor with _mutable_ type is updated with
    flink:vkUpdateDescriptorSets, the active descriptor type changes.
    When the descriptor is consumed by shaders, it is the active descriptor
    type which determines validity, i.e.
    sname:VkDescriptorSetLayoutBinding::pname:descriptorType is replaced
    with the active descriptor type.
    A mismatch in active descriptor type and consumption by shader is
    considered an undefined: descriptor.
endif::VK_VALVE_mutable_descriptor_type[]

ifdef::VK_EXT_transform_feedback[]
Active (Transform Feedback)::
    Transform feedback is made active after
    flink:vkCmdBeginTransformFeedbackEXT executes and remains active until
    flink:vkCmdEndTransformFeedbackEXT executes.
    While transform feedback is active, data written to variables in the
    output interface of the last
    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
    stage>> of the graphics pipeline are captured to the bound transform
    feedback buffers if those variables are decorated for transform
    feedback.
endif::VK_EXT_transform_feedback[]

Adjacent Vertex::
    A vertex in an adjacency primitive topology that is not part of a given
    primitive, but is accessible in geometry shaders.

ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
Active Object (Ray Tracing)::
    A primitive or instance in a ray tracing acceleration structure which
    has a corresponding ID, and is not _inactive_ (meaning that it is
    visible to rays).
endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]

ifdef::VK_EXT_blend_operation_advanced[]
Advanced Blend Operation::
    Blending performed using one of the blend operation enums introduced by
    the `<<VK_EXT_blend_operation_advanced>>` extension.
    See <<framebuffer-blend-advanced, Advanced Blending Operations>>.
endif::VK_EXT_blend_operation_advanced[]

Alias (API type/command)::
    An identical definition of another API type/command with the same
    behavior but a different name.

Aliased Range (Memory)::
    A range of a device memory allocation that is bound to multiple
    resources simultaneously.

Allocation Scope::
    An association of a host memory allocation to a parent object or
    command, where the allocation's lifetime ends before or at the same time
    as the parent object is freed or destroyed, or during the parent
    command.

Aspect (Image)::
    An image may: contain multiple kinds, or aspects, of data for each
    pixel, where each aspect is used in a particular way by the pipeline and
    may: be stored differently or separately from other aspects.
    For example, the color components of an image format make up the color
    aspect of the image, and may: be used as a framebuffer color attachment.
    Some operations, like depth testing, operate only on specific aspects of
    an image.

Attachment (Render Pass)::
    A zero-based integer index name used in render pass creation to refer to
    a framebuffer attachment that is accessed by one or more subpasses.
    The index also refers to an attachment description which includes
    information about the properties of the image view that will later be
    attached.

Availability Operation::
    An operation that causes the values generated by specified memory write
    accesses to become available for future access.

Available::
    A state of values written to memory that allows them to be made visible.

ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
Axis-aligned Bounding Box::
    A box bounding a region in space defined by extents along each axis and
    thus representing a box where each edge is aligned to one of the major
    axes.
endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]

Back-Facing::
    See Facingness.

Batch::
    A single structure submitted to a queue as part of a
    <<devsandqueues-submission, queue submission command>>, describing a set
    of queue operations to execute.

Backwards Compatibility::
    A given version of the API is backwards compatible with an earlier
    version if an application, relying only on valid behavior and
    functionality defined by the earlier specification, is able to correctly
    run against each version without any modification.
    This assumes no active attempt by that application to not run when it
    detects a different version.

Binary Semaphore::
    A semaphore with a boolean payload indicating whether the semaphore is
    signaled or unsignaled.
    Represented by a slink:VkSemaphore object
ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
    created with a semaphore type of ename:VK_SEMAPHORE_TYPE_BINARY
endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
    .

Binding (Memory)::
    An association established between a range of a resource object and a
    range of a memory object.
    These associations determine the memory locations affected by operations
    performed on elements of a resource object.
    Memory bindings are established using the flink:vkBindBufferMemory
    command for non-sparse buffer objects, using the flink:vkBindImageMemory
    command for non-sparse image objects, and using the
    flink:vkQueueBindSparse command for sparse resources.

Blend Constant::
    Four floating point (RGBA) values used as an input to blending.

Blending::
    Arithmetic operations between a fragment color value and a value in a
    color attachment that produce a final color value to be written to the
    attachment.

Buffer::
    A resource that represents a linear array of data in device memory.
    Represented by a slink:VkBuffer object.

ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
Buffer Device Address::
    A 64-bit value used in a shader to access buffer memory through the
    code:PhysicalStorageBuffer storage class.
endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]

Buffer View::
    An object that represents a range of a specific buffer, and state that
    controls how the contents are interpreted.
    Represented by a slink:VkBufferView object.

Built-In Variable::
    A variable decorated in a shader, where the decoration makes the
    variable take values provided by the execution environment or values
    that are generated by fixed-function pipeline stages.

Built-In Interface Block::
    A block defined in a shader that contains only variables decorated with
    built-in decorations, and is used to match against other shader stages.

Clip Coordinates::
    The homogeneous coordinate space that vertex positions (code:Position
    decoration) are written in by
    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
    stages>>.

Clip Distance::
    A built-in output from
    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
    stages>> that defines a clip half-space against which the primitive is
    clipped.

Clip Volume::
    The intersection of the view volume with all clip half-spaces.

Color Attachment::
    A subpass attachment point, or image view, that is the target of
    fragment color outputs and blending.

ifdef::VK_AMD_shader_fragment_mask[]
Color Fragment::
    A unique color value within a pixel of a multisampled color image.
    The _fragment mask_ will contain indices to the _color fragment_.
endif::VK_AMD_shader_fragment_mask[]

Color Renderable Format::
    A elink:VkFormat where ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT is
    set in one of the following, depending on the image's tiling:
    * slink:VkFormatProperties::pname:linearTilingFeatures
    * slink:VkFormatProperties::pname:optimalTilingFeatures
ifdef::VK_EXT_image_drm_format_modifier[]
    * slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierTilingFeatures
endif::VK_EXT_image_drm_format_modifier[]

Combined Image Sampler::
    A descriptor type that includes both a sampled image and a sampler.

Command Buffer::
    An object that records commands to be submitted to a queue.
    Represented by a slink:VkCommandBuffer object.

Command Pool::
    An object that command buffer memory is allocated from, and that owns
    that memory.
    Command pools aid multithreaded performance by enabling different
    threads to use different allocators, without internal synchronization on
    each use.
    Represented by a slink:VkCommandPool object.

Compatible Allocator::
    When allocators are compatible, allocations from each allocator can: be
    freed by the other allocator.

Compatible Image Formats::
    When formats are compatible, images created with one of the formats can:
    have image views created from it using any of the compatible formats.
    Also see _Size-Compatible Image Formats_.

Compatible Queues::
    Queues within a queue family.
    Compatible queues have identical properties.

Complete Mipmap Chain::
    The entire set of miplevels that can be provided for an image, from the
    largest application specified miplevel size down to the _minimum
    miplevel size_.
    See <<resources-image-miplevel-sizing, Image Miplevel Sizing>>.

ifdef::VK_KHR_deferred_host_operations[]
Completed Operation::
    A deferred operation whose corresponding command has been executed to
    completion.
    See <<deferred-host-operations, Deferred Host Operations>>
endif::VK_KHR_deferred_host_operations[]

Component (Format)::
    A distinct part of a format.
    Depth, stencil, and color channels (e.g. R, G, B, A), are all separate
    components.

Compressed Texel Block::
    An element of an image having a block-compressed format, comprising a
    rectangular block of texel values that are encoded as a single value in
    memory.
    Compressed texel blocks of a particular block-compressed format have a
    corresponding width, height, and depth that define the dimensions of
    these elements in units of texels, and a size in bytes of the encoding
    in memory.

Constant Integral Expressions::
    A SPIR-V constant instruction whose type is code:OpTypeInt.
    See _Constant Instruction_ in section 2.2.1 "`Instructions`" of the
    <<spirv-spec,Khronos SPIR-V Specification>>.

ifdef::VK_NV_cooperative_matrix[]
Cooperative Matrix::
    A SPIR-V type where the storage for and computations performed on the
    matrix are spread across a set of invocations such as a subgroup.
endif::VK_NV_cooperative_matrix[]

ifdef::VK_NV_corner_sampled_image[]
Corner-Sampled Image::
    A slink:VkImage where unnormalized texel coordinates are centered on
    integer values instead of half-integer values.
    Specified by setting the ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV bit
    on slink:VkImageCreateInfo::pname:flags at image creation.
endif::VK_NV_corner_sampled_image[]

Coverage Index::
    The index of a sample in the coverage mask.

Coverage Mask::
    A bitfield associated with a fragment representing the samples that were
    determined to be covered based on the result of rasterization, and then
    subsequently modified by fragment operations or the fragment shader.

Cull Distance::
    A built-in output from
    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
    stages>> that defines a cull half-space where the primitive is rejected
    if all vertices have a negative value for the same cull distance.

Cull Volume::
    The intersection of the view volume with all cull half-spaces.

Decoration (SPIR-V)::
    Auxiliary information such as built-in variables, stream numbers,
    invariance, interpolation type, relaxed precision, etc., added to
    variables or structure-type members through decorations.

ifdef::VK_KHR_deferred_host_operations[]
Deferrable Command::
    A command which allows deferred execution of host-side work.
    See <<deferred-host-operations,Deferred Host Operations>>.

Deferrable Operation::
    A single logical item of host-side work which can be deferred.
    Represented by the slink:VkDeferredOperationKHR object.
    See <<deferred-host-operations,Deferred Host Operations>>.
endif::VK_KHR_deferred_host_operations[]

Deprecated (feature)::
    A feature is deprecated if it is no longer recommended as the correct or
    best way to achieve its intended purpose.

Depth/Stencil Attachment::
    A subpass attachment point, or image view, that is the target of depth
    and/or stencil test operations and writes.

Depth/Stencil Format::
    A elink:VkFormat that includes depth and/or stencil components.

Depth/Stencil Image (or ImageView)::
    A slink:VkImage (or slink:VkImageView) with a depth/stencil format.

ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
Depth/Stencil Resolve Attachment::
    A subpass attachment point, or image view, that is the target of a
    multisample resolve operation from the corresponding depth/stencil
    attachment at the end of the subpass.
endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]

Derivative Group::
    A set of fragment
ifdef::VK_NV_compute_shader_derivatives[]
    or compute
endif::VK_NV_compute_shader_derivatives[]
    shader invocations that cooperate to compute derivatives, including
    implicit derivatives for sampled image operations.

Descriptor::
    Information about a resource or resource view written into a descriptor
    set that is used to access the resource or view from a shader.

Descriptor Binding::
    An entry in a descriptor set layout corresponding to zero or more
    descriptors of a single descriptor type in a set.
    Defined by a slink:VkDescriptorSetLayoutBinding structure.

Descriptor Pool::
    An object that descriptor sets are allocated from, and that owns the
    storage of those descriptor sets.
    Descriptor pools aid multithreaded performance by enabling different
    threads to use different allocators, without internal synchronization on
    each use.
    Represented by a slink:VkDescriptorPool object.

Descriptor Set::
    An object that resource descriptors are written into via the API, and
    that can: be bound to a command buffer such that the descriptors
    contained within it can: be accessed from shaders.
    Represented by a slink:VkDescriptorSet object.

Descriptor Set Layout::
    An object that defines the set of resources (types and counts) and their
    relative arrangement (in the binding namespace) within a descriptor set.
    Used when allocating descriptor sets and when creating pipeline layouts.
    Represented by a slink:VkDescriptorSetLayout object.

Device::
    The processor(s) and execution environment that perform tasks requested
    by the application via the Vulkan API.

ifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
Device Group::
    A set of physical devices that support accessing each other's memory and
    recording a single command buffer that can: be executed on all the
    physical devices.

Device Index::
    A zero-based integer that identifies one physical device from a logical
    device.
    A device index is valid if it is less than the number of physical
    devices in the logical device.

Device Mask::
    A bitmask where each bit represents one device index.
    A device mask value is valid if every bit that is set in the mask is at
    a bit position that is less than the number of physical devices in the
    logical device.
endif::VK_VERSION_1_1,VK_KHR_device_group_creation[]

Device Memory::
    Memory accessible to the device.
    Represented by a slink:VkDeviceMemory object.

Device-Level Command::
    Any command that is dispatched from a logical device, or from a child
    object of a logical device.

Device-Level Functionality::
    All device-level commands and objects, and their structures, enumerated
    types, and enumerants.

Device-Level Object::
    Logical device objects and their child objects.
    For example, slink:VkDevice, slink:VkQueue, and slink:VkCommandBuffer
    objects are device-level objects.

Device-Local Memory::
    Memory that is connected to the device, and may: be more performant for
    device access than host-local memory.

Direct Drawing Commands::
    _Drawing commands_ that take all their parameters as direct arguments to
    the command (and not sourced via structures in buffer memory as the
    _indirect drawing commands_).
    Includes
ifdef::VK_EXT_multi_draw[]
    flink:vkCmdDrawMultiIndexedEXT, flink:vkCmdDrawMultiEXT,
endif::VK_EXT_multi_draw[]
ifdef::VK_NV_mesh_shader[]
    flink:vkCmdDrawMeshTasksNV,
endif::VK_NV_mesh_shader[]
    flink:vkCmdDraw, and flink:vkCmdDrawIndexed.

ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
Disjoint::
    _Disjoint planes_ are _image planes_ to which memory is bound
    independently. +
    A _disjoint image_ consists of multiple _disjoint planes_, and is
    created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT bit set.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]

Dispatchable Handle::
    A handle of a pointer handle type which may: be used by layers as part
    of intercepting API commands.
    The first argument to each Vulkan command is a dispatchable handle type.

Dispatching Commands::
    Commands that provoke work using a compute pipeline.
    Includes flink:vkCmdDispatch and flink:vkCmdDispatchIndirect.

Drawing Commands::
    Commands that provoke work using a graphics pipeline.
    Includes flink:vkCmdDraw, flink:vkCmdDrawIndexed,
ifdef::VK_VERSION_1_2[]
    flink:vkCmdDrawIndirectCount, flink:vkCmdDrawIndexedIndirectCount,
endif::VK_VERSION_1_2[]
ifdef::VK_KHR_draw_indirect_count[]
    flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
    flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]
ifdef::VK_EXT_multi_draw[]
    flink:vkCmdDrawMultiIndexedEXT, flink:vkCmdDrawMultiEXT,
endif::VK_EXT_multi_draw[]
ifdef::VK_NV_mesh_shader[]
    flink:vkCmdDrawMeshTasksNV, flink:vkCmdDrawMeshTasksIndirectNV,
    flink:vkCmdDrawMeshTasksIndirectCountNV,
endif::VK_NV_mesh_shader[]
    flink:vkCmdDrawIndirect, and flink:vkCmdDrawIndexedIndirect.

Duration (Command)::
    The _duration_ of a Vulkan command refers to the interval between
    calling the command and its return to the caller.

Dynamic Storage Buffer::
    A storage buffer whose offset is specified each time the storage buffer
    is bound to a command buffer via a descriptor set.

Dynamic Uniform Buffer::
    A uniform buffer whose offset is specified each time the uniform buffer
    is bound to a command buffer via a descriptor set.

Dynamically Uniform::
    See _Dynamically Uniform_ in section 2.2 "`Terms`" of the
    <<spirv-spec,Khronos SPIR-V Specification>>.

Element::
    Arrays are composed of multiple elements, where each element exists at a
    unique index within that array.
    Used primarily to describe data passed to or returned from the Vulkan
    API.

Explicitly-Enabled Layer::
    A layer enabled by the application by adding it to the enabled layer
    list in flink:vkCreateInstance or flink:vkCreateDevice.

Event::
    A synchronization primitive that is signaled when execution of previous
    commands completes through a specified set of pipeline stages.
    Events can be waited on by the device and polled by the host.
    Represented by a slink:VkEvent object.

Executable State (Command Buffer)::
    A command buffer that has ended recording commands and can: be executed.
    See also Initial State and Recording State.

Execution Dependency::
    A dependency that guarantees that certain pipeline stages`' work for a
    first set of commands has completed execution before certain pipeline
    stages`' work for a second set of commands begins execution.
    This is accomplished via pipeline barriers, subpass dependencies,
    events, or implicit ordering operations.

Execution Dependency Chain::
    A sequence of execution dependencies that transitively act as a single
    execution dependency.

ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
Explicit chroma reconstruction::
    An implementation of sampler {YCbCr} conversion which reconstructs
    reduced-resolution chroma samples to luma resolution and then separately
    performs texture sample interpolation.
    This is distinct from an implicit implementation, which incorporates
    chroma sample reconstruction into texture sample interpolation.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]

Extension Scope::
    The set of objects and commands that can: be affected by an extension.
    Extensions are either device scope or instance scope.

Extending Structure::
    A structure type which may appear in the _pname:pNext chain_ of another
    structure, extending the functionality of the other structure.
    Extending structures may be defined by either core API versions or
    extensions.

ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
External Handle::
    A resource handle which has meaning outside of a specific Vulkan device
    or its parent instance.
    External handles may: be used to share resources between multiple Vulkan
    devices in different instances, or between Vulkan and other APIs.
    Some external handle types correspond to platform-defined handles, in
    which case the resource may: outlive any particular Vulkan device or
    instance and may: be transferred between processes, or otherwise
    manipulated via functionality defined by the platform for that handle
    type.
endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]

External synchronization::
    A type of synchronization required: of the application, where parameters
    defined to be externally synchronized must: not be used simultaneously
    in multiple threads.

Facingness (Polygon)::
    A classification of a polygon as either front-facing or back-facing,
    depending on the orientation (winding order) of its vertices.

Facingness (Fragment)::
    A fragment is either front-facing or back-facing, depending on the
    primitive it was generated from.
    If the primitive was a polygon (regardless of polygon mode), the
    fragment inherits the facingness of the polygon.
    All other fragments are front-facing.

Fence::
    A synchronization primitive that is signaled when a set of batches or
    sparse binding operations complete execution on a queue.
    Fences can: be waited on by the host.
    Represented by a slink:VkFence object.

Flat Shading::
    A property of a vertex attribute that causes the value from a single
    vertex (the provoking vertex) to be used for all vertices in a
    primitive, and for interpolation of that attribute to return that single
    value unaltered.

Format Features::
    A set of features from elink:VkFormatFeatureFlagBits that a
    elink:VkFormat is capable of using for various commands.
    The list is determined by factors such as elink:VkImageTiling.

Fragment::
    A rectangular framebuffer region with associated data produced by
    <<primsrast,rasterization>> and processed by <<fragops,fragment
    operations>> including the fragment shader.

[[glossary-fragment-area]]
Fragment Area::
    The width and height, in pixels, of a fragment.

ifdef::VK_EXT_fragment_density_map[]
[[glossary-fragment-density]]
Fragment Density::
    The ratio of fragments per framebuffer area in the x and y direction.

[[glossary-fragment-density-texel-size]]
Fragment Density Texel Size::
    The [eq]#(w,h)# framebuffer region in pixels that each texel in a
    fragment density map applies to.
endif::VK_EXT_fragment_density_map[]

Fragment Input Attachment Interface::
    Variables with code:UniformConstant storage class and a decoration of
    code:InputAttachmentIndex that are statically used by a fragment
    shader's entry point, which receive values from input attachments.

ifdef::VK_AMD_shader_fragment_mask[]
Fragment Mask::
    A lookup table that associates color samples with color fragment values.
endif::VK_AMD_shader_fragment_mask[]

Fragment Output Interface::
    A fragment shader entry point's variables with code:Output storage
    class, which output to color and/or depth/stencil attachments.

Framebuffer::
    A collection of image views and a set of dimensions that, in conjunction
    with a render pass, define the inputs and outputs used by drawing
    commands.
    Represented by a slink:VkFramebuffer object.

Framebuffer Attachment::
    One of the image views used in a framebuffer.

Framebuffer Coordinates::
    A coordinate system in which adjacent pixels`' coordinates differ by 1
    in x and/or y, with [eq]#(0,0)# in the upper left corner and pixel
    centers at half-integers.

Framebuffer-Space::
    Operating with respect to framebuffer coordinates.

Framebuffer-Local::
    A framebuffer-local dependency guarantees that only for a single
    framebuffer region, the first set of operations happens-before the
    second set of operations.

Framebuffer-Global::
    A framebuffer-global dependency guarantees that for all framebuffer
    regions, the first set of operations happens-before the second set of
    operations.

Framebuffer Region::
    A framebuffer region is a set of sample (x, y, layer, sample)
    coordinates that is a subset of the entire framebuffer.

Front-Facing::
    See Facingness.

Full Compatibility::
    A given version of the API is fully compatible with another version if
    an application, relying only on valid behavior and functionality defined
    by either of those specifications, is able to correctly run against each
    version without any modification.
    This assumes no active attempt by that application to not run when it
    detects a different version.

Global Workgroup::
    A collection of local workgroups dispatched by a single dispatching
ifdef::VK_NV_mesh_shader[or single mesh task drawing]
    command.

Handle::
    An opaque integer or pointer value used to refer to a Vulkan object.
    Each object type has a unique handle type.

Happen-after, happens-after::
    A transitive, irreflexive and antisymmetric ordering relation between
    operations.
    An execution dependency with a source of *A* and a destination of *B*
    enforces that *B* happens-after *A*.
    The inverse relation of happens-before.

Happen-before, happens-before::
    A transitive, irreflexive and antisymmetric ordering relation between
    operations.
    An execution dependency with a source of *A* and a destination of *B*
    enforces that *A* happens-before *B*.
    The inverse relation of happens-after.

Helper Invocation::
    A fragment shader invocation that is created solely for the purposes of
    evaluating derivatives for use in non-helper fragment shader
    invocations, and which does not have side effects.

Host::
    The processor(s) and execution environment that the application runs on,
    and that the Vulkan API is exposed on.

Host Mapped Device Memory::
    Device memory that is mapped for host access using flink:vkMapMemory.

ifdef::VK_EXT_external_memory_host[]
Host Mapped Foreign Memory::
    Memory owned by a foreign device that is mapped for host access.
endif::VK_EXT_external_memory_host[]

Host Memory::
    Memory not accessible to the device, used to store implementation data
    structures.

Host-Accessible Subresource::
    A buffer, or a linear image subresource in either the
    ename:VK_IMAGE_LAYOUT_PREINITIALIZED or ename:VK_IMAGE_LAYOUT_GENERAL
    layout.
    Host-accessible subresources have a well-defined addressing scheme which
    can be used by the host.

Host-Local Memory::
    Memory that is not local to the device, and may: be less performant for
    device access than device-local memory.

Host-Visible Memory::
    Device memory that can: be mapped on the host and can: be read and
    written by the host.

Identically Defined Objects::
    Objects of the same type where all arguments to their creation or
    allocation functions, with the exception of pname:pAllocator, are +
    . Vulkan handles which refer to the same object or
    . identical scalar or enumeration values or
    . Host pointers which point to an array of values or structures which
      also satisfy these three constraints.

Image::
    A resource that represents a multi-dimensional formatted interpretation
    of device memory.
    Represented by a slink:VkImage object.

Image Subresource::
    A specific mipmap level and layer of an image.

Image Subresource Range::
    A set of image subresources that are contiguous mipmap levels and
    layers.

Image View::
    An object that represents an image subresource range of a specific
    image, and state that controls how the contents are interpreted.
    Represented by a slink:VkImageView object.

Immutable Sampler::
    A sampler descriptor provided at descriptor set layout creation time,
    and that is used for that binding in all descriptor sets allocated from
    the layout, and cannot be changed.

ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
Implicit chroma reconstruction::
    An implementation of sampler {YCbCr} conversion which reconstructs the
    reduced-resolution chroma samples directly at the sample point, as part
    of the normal texture sampling operation.
    This is distinct from an _explicit chroma reconstruction_
    implementation, which reconstructs the reduced-resolution chroma samples
    to the resolution of the luma samples, then filters the result as part
    of texture sample interpolation.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]

Implicitly-Enabled Layer::
    A layer enabled by a loader-defined mechanism outside the Vulkan API,
    rather than explicitly by the application during instance or device
    creation.

ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
Inactive Object (Ray Tracing)::
    A primitive or instance in a ray tracing acceleration structure which
    has a corresponding ID, but which will never report an intersection with
    any ray.
endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]

Index Buffer::
    A buffer bound via flink:vkCmdBindIndexBuffer which is the source of
    index values used to fetch vertex attributes for a
    flink:vkCmdDrawIndexed or flink:vkCmdDrawIndexedIndirect command.

Indexed Drawing Commands::
    _Drawing commands_ which use an _index buffer_ as the source of index
    values used to fetch vertex attributes for a drawing command.
    Includes flink:vkCmdDrawIndexed,
ifdef::VK_VERSION_1_2[]
    flink:vkCmdDrawIndexedIndirectCount,
endif::VK_VERSION_1_2[]
ifdef::VK_KHR_draw_indirect_count[]
    flink:vkCmdDrawIndexedIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
    flink:vkCmdDrawIndexedIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]
ifdef::VK_EXT_multi_draw[]
    flink:vkCmdDrawMultiIndexedEXT,
endif::VK_EXT_multi_draw[]
    and flink:vkCmdDrawIndexedIndirect.

Indirect Commands::
    Drawing or dispatching commands that source some of their parameters
    from structures in buffer memory.
    Includes flink:vkCmdDrawIndirect, flink:vkCmdDrawIndexedIndirect,
ifdef::VK_VERSION_1_2[]
    flink:vkCmdDrawIndirectCount, flink:vkCmdDrawIndexedIndirectCount,
endif::VK_VERSION_1_2[]
ifdef::VK_KHR_draw_indirect_count[]
    flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
    flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]
ifdef::VK_NV_mesh_shader[]
    flink:vkCmdDrawMeshTasksIndirectNV,
    flink:vkCmdDrawMeshTasksIndirectCountNV,
endif::VK_NV_mesh_shader[]
    and flink:vkCmdDispatchIndirect.

ifdef::VK_NV_device_generated_commands[]
Indirect Commands Layout::
    A definition of a sequence of commands, that are generated on the device
    via flink:vkCmdPreprocessGeneratedCommandsNV and
    flink:vkCmdExecuteGeneratedCommandsNV.
    Each sequence is comprised of multiple
    elink:VkIndirectCommandsTokenTypeNV, which represent a subset of
    traditional command buffer commands.
    Represented as slink:VkIndirectCommandsLayoutNV.
endif::VK_NV_device_generated_commands[]

Indirect Drawing Commands::
    _Drawing commands_ that source some of their parameters from structures
    in buffer memory.
    Includes flink:vkCmdDrawIndirect,
ifdef::VK_VERSION_1_2[]
    flink:vkCmdDrawIndirectCount, flink:vkCmdDrawIndexedIndirectCount,
endif::VK_VERSION_1_2[]
ifdef::VK_KHR_draw_indirect_count[]
    flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
    flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]
ifdef::VK_NV_mesh_shader[]
    flink:vkCmdDrawMeshTasksIndirectNV,
    flink:vkCmdDrawMeshTasksIndirectCountNV,
endif::VK_NV_mesh_shader[]
    and flink:vkCmdDrawIndexedIndirect.

Initial State (Command Buffer)::
    A command buffer that has not begun recording commands.
    See also Recording State and Executable State.

ifdef::VK_EXT_inline_uniform_block[]
Inline Uniform Block::
    A descriptor type that represents uniform data stored directly in
    descriptor sets, and supports read-only access in a shader.
endif::VK_EXT_inline_uniform_block[]

Input Attachment::
    A descriptor type that represents an image view, and supports unfiltered
    read-only access in a shader, only at the fragment's location in the
    view.

Instance::
    The top-level Vulkan object, which represents the application's
    connection to the implementation.
    Represented by a slink:VkInstance object.

Instance-Level Command::
    Any command that is dispatched from an instance, or from a child object
    of an instance, except for physical devices and their children.

Instance-Level Functionality::
    All instance-level commands and objects, and their structures,
    enumerated types, and enumerants.

Instance-Level Object::
    High-level Vulkan objects, which are not physical devices, nor children
    of physical devices.
    For example, slink:VkInstance is an instance-level object.

ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
Instance (Memory)::
    In a logical device representing more than one physical device, some
    device memory allocations have the requested amount of memory allocated
    multiple times, once for each physical device in a device mask.
    Each such replicated allocation is an instance of the device memory.

Instance (Resource)::
    In a logical device representing more than one physical device, buffer
    and image resources exist on all physical devices but can: be bound to
    memory differently on each.
    Each such replicated resource is an instance of the resource.
endif::VK_VERSION_1_1,VK_KHR_device_group[]

Internal Synchronization::
    A type of synchronization required: of the implementation, where
    parameters not defined to be externally synchronized may: require
    internal mutexing to avoid multithreaded race conditions.

Invocation (Shader)::
    A single execution of an entry point in a SPIR-V module.
    For example, a single vertex's execution of a vertex shader or a single
    fragment's execution of a fragment shader.

Invocation Group::
    A set of shader invocations that are executed in parallel and that must:
    execute the same control flow path in order for control flow to be
    considered dynamically uniform.

ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
Invocation Repack Instruction::
    A ray tracing shader call <<ray-tracing-repack,instruction>> where the
    implementation may: change the set of invocations that are executing.
endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]

ifdef::VK_KHR_deferred_host_operations[]
Join (Deferred Host Operations)::
    The act of instructing a thread to participate in the execution of a
    deferred operation.
    See <<deferred-host-operations, Deferred Host Operations>>.
endif::VK_KHR_deferred_host_operations[]

[[glossary-linear-resource]]
Linear Resource::
+
--
A resource is _linear_ if it is one of the following:

  * a slink:VkBuffer
  * a slink:VkImage created with ename:VK_IMAGE_TILING_LINEAR
ifdef::VK_EXT_image_drm_format_modifier[]
  * a slink:VkImage created with
    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and whose
    <<glossary-drm-format-modifier,Linux DRM format modifier>> is
    code:DRM_FORMAT_MOD_LINEAR
endif::VK_EXT_image_drm_format_modifier[]
ifdef::VK_NV_ray_tracing[]
  * a slink:VkAccelerationStructureNV
endif::VK_NV_ray_tracing[]
ifdef::VK_KHR_acceleration_structure[]

Because a slink:VkAccelerationStructureKHR resource does not have memory
bound to it directly, it is considered neither linear nor non-linear.
However, the slink:VkBuffer on which a slink:VkAccelerationStructureKHR
resource is placed is a linear resource.
endif::VK_KHR_acceleration_structure[]

A resource is _non-linear_ if it is one of the following:

  * a slink:VkImage created with ename:VK_IMAGE_TILING_OPTIMAL
ifdef::VK_EXT_image_drm_format_modifier[]
  * a slink:VkImage created with
    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and whose
    <<glossary-drm-format-modifier,Linux DRM format modifier>> is not
    code:DRM_FORMAT_MOD_LINEAR
endif::VK_EXT_image_drm_format_modifier[]
--

ifdef::VK_EXT_image_drm_format_modifier[]
[[glossary-drm-format-modifier,Linux DRM format modifier]]
Linux DRM Format Modifier::
    A 64-bit, vendor-prefixed, semi-opaque unsigned integer describing
    vendor-specific details of an image's memory layout.
    In Linux graphics APIs, _modifiers_ are commonly used to specify the
    memory layout of externally shared images.
    An image has a _modifier_ if and only if it is created with pname:tiling
    equal to ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
    For more details, refer to the appendix for extension
    `<<VK_EXT_image_drm_format_modifier>>`.
endif::VK_EXT_image_drm_format_modifier[]

Local Workgroup::
    A collection of compute shader invocations invoked by a single
    dispatching command, which share data via code:WorkgroupLocal variables
    and can synchronize with each other.

Logical Device::
    An object that represents the application's interface to the physical
    device.
    The logical device is the parent of most Vulkan objects.
    Represented by a slink:VkDevice object.

Logical Operation::
    Bitwise operations between a fragment color value and a value in a color
    attachment, that produce a final color value to be written to the
    attachment.

Lost Device::
    A state that a logical device may: be in as a result of unrecoverable
    implementation errors, or other exceptional conditions.

Mappable::
    See Host-Visible Memory.

Memory Dependency::
    A memory dependency is an execution dependency which includes
    availability and visibility operations such that:

  * The first set of operations happens-before the availability operation
  * The availability operation happens-before the visibility operation
  * The visibility operation happens-before the second set of operations

Memory Domain::
    A memory domain is an abstract place to which memory writes are made
    available by availability operations and memory domain operations.
    The memory domains correspond to the set of agents that the write can:
    then be made visible to.
    The memory domains are _host_, _device_, _shader_, _workgroup instance_
    (for workgroup instance there is a unique domain for each compute
    workgroup) and _subgroup instance_ (for subgroup instance there is a
    unique domain for each subgroup).

Memory Domain Operation::
    An operation that makes the writes that are available to one memory
    domain available to another memory domain.

Memory Heap::
    A region of memory from which device memory allocations can: be made.

Memory Type::
    An index used to select a set of memory properties (e.g. mappable,
    cached) for a device memory allocation.

ifdef::VK_NV_mesh_shader[]
Mesh Shading Pipeline::
    A graphics pipeline where the primitives are assembled explicitly in the
    shader stages.
    In contrast to the primitive shading pipeline where input primitives are
    assembled by fixed function processing.
endif::VK_NV_mesh_shader[]

ifdef::VK_NV_mesh_shader[]
Mesh Tasks Drawing Commands::
    _Drawing commands_ which create shader invocations organized in
    workgroups for drawing mesh tasks.
    Includes flink:vkCmdDrawMeshTasksNV, flink:vkCmdDrawMeshTasksIndirectNV,
    and flink:vkCmdDrawMeshTasksIndirectCountNV.
endif::VK_NV_mesh_shader[]

Minimum Miplevel Size::
    The smallest size that is permitted for a miplevel.
    For conventional images this is 1x1x1.
ifdef::VK_NV_corner_sampled_image[]
    For corner-sampled images, this is 2x2x2.
endif::VK_NV_corner_sampled_image[]
    See <<resources-image-miplevel-sizing, Image Miplevel Sizing>>.

Mip Tail Region::
    The set of mipmap levels of a sparse residency texture that are too
    small to fill a sparse block, and that must: all be bound to memory
    collectively and opaquely.

ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
Multi-planar::
    A _multi-planar format_ (or "`planar format`") is an image format
    consisting of more than one _plane_, identifiable with a etext:_2PLANE
    or etext:_3PLANE component to the format name and listed in
    <<formats-requiring-sampler-ycbcr-conversion>>.
    A _multi-planar image_ (or "`planar image`") is an image of a
    multi-planar format.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]

Non-Dispatchable Handle::
    A handle of an integer handle type.
    Handle values may: not be unique, even for two objects of the same type.

Non-Indexed Drawing Commands::
    _Drawing commands_ for which the vertex attributes are sourced in linear
    order from the vertex input attributes for a drawing command (i.e. they
    do not use an _index buffer_).
    Includes flink:vkCmdDraw,
ifdef::VK_VERSION_1_2[]
    flink:vkCmdDrawIndirectCount,
endif::VK_VERSION_1_2[]
ifdef::VK_KHR_draw_indirect_count[]
    flink:vkCmdDrawIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
    flink:vkCmdDrawIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]
ifdef::VK_EXT_multi_draw[]
    flink:vkCmdDrawMultiEXT,
endif::VK_EXT_multi_draw[]
    and flink:vkCmdDrawIndirect.

Normalized::
    A value that is interpreted as being in the range [eq]#[0,1]# as a
    result of being implicitly divided by some other value.

Normalized Device Coordinates::
    A coordinate space after perspective division is applied to clip
    coordinates, and before the viewport transformation converts to
    framebuffer coordinates.

Obsoleted (feature)::
    A feature is obsolete if it can no longer be used.

ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
Opaque Capture Address::
    A 64-bit value representing the device address of a buffer or memory
    object that is expected to be used by trace capture/replay tools in
    combination with the
    <<features-bufferDeviceAddress,bufferDeviceAddress>> feature.
endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]

Overlapped Range (Aliased Range)::
    The aliased range of a device memory allocation that intersects a given
    image subresource of an image or range of a buffer.

Ownership (Resource)::
    If an entity (e.g. a queue family) has ownership of a resource, access
    to that resource is well-defined for access by that entity.

Packed Format::
    A format whose components are stored as a single texel block in memory,
    with their relative locations defined within that element.

ifdef::VK_NV_geometry_shader_passthrough[]
Passthrough Geometry Shader::
    A geometry shader which uses the code:PassthroughNV decoration on a
    variable in its input interface.
    Output primitives in a passthrough geometry shader always have the same
    topology as the input primitive and are not produced by emitting
    vertices.
endif::VK_NV_geometry_shader_passthrough[]

ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore,VK_KHR_external_fence[]
Payload::
    Importable or exportable reference to the internal data of an object in
    Vulkan.
endif::VK_VERSION_1_1,VK_KHR_external_semaphore,VK_KHR_external_fence[]

ifdef::VK_NV_mesh_shader[]
Per-View::
    A variable that has an array of values which are output, one for each
    view that is being generated.
    A mesh shader which uses the code:PerViewNV decoration on a variable in
    its output interface.
endif::VK_NV_mesh_shader[]

ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
Peer Memory::
    An instance of memory corresponding to a different physical device than
    the physical device performing the memory access, in a logical device
    that represents multiple physical devices.
endif::VK_VERSION_1_1,VK_KHR_device_group[]

Physical Device::
    An object that represents a single device in the system.
    Represented by a slink:VkPhysicalDevice object.

Physical-Device-Level Command::
    Any command that is dispatched from a physical device.

Physical-Device-Level Functionality::
    All physical-device-level commands and objects, and their structures,
    enumerated types, and enumerants.

Physical-Device-Level Object::
    Physical device objects.
    For example, slink:VkPhysicalDevice is a physical-device-level object.

Pipeline::
    An object that controls how graphics or compute work is executed on the
    device.
    A pipeline includes one or more shaders, as well as state controlling
    any non-programmable stages of the pipeline.
    Represented by a slink:VkPipeline object.

Pipeline Barrier::
    An execution and/or memory dependency recorded as an explicit command in
    a command buffer, that forms a dependency between the previous and
    subsequent commands.

Pipeline Cache::
    An object that can: be used to collect and retrieve information from
    pipelines as they are created, and can: be populated with previously
    retrieved information in order to accelerate pipeline creation.
    Represented by a slink:VkPipelineCache object.

Pipeline Layout::
    An object that defines the set of resources (via a collection of
    descriptor set layouts) and push constants used by pipelines that are
    created using the layout.
    Used when creating a pipeline and when binding descriptor sets and
    setting push constant values.
    Represented by a slink:VkPipelineLayout object.

ifdef::VK_KHR_pipeline_library[]
Pipeline Library::
    A pipeline that cannot be directly used, instead defining a set of
    shaders and shader groups which will be <<pipeline-library,linked into
    other pipelines>>.
endif::VK_KHR_pipeline_library[]

Pipeline Stage::
    A logically independent execution unit that performs some of the
    operations defined by an action command.

ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
Pipeline Trace Ray Instruction::
    A ray tracing instruction which traces a ray into an acceleration
    structure when using ray tracing pipelines.
    One of
ifdef::VK_NV_ray_tracing[code:OpTraceNV,]
ifdef::VK_NV_ray_tracing_motion_blur[code:OpTraceRayMotionNV, code:OpTraceMotionNV,]
ifdef::VK_KHR_ray_tracing_pipeline[code:OpTraceRayKHR]
    .
endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]

pname:pNext Chain::
    A set of structures <<fundamentals-validusage-pNext,chained together>>
    through their ptext:pNext members.

ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
Planar::
    See _multi-planar_.

Plane::
    An _image plane_ is part of the representation of an image, containing a
    subset of the color channels required to represent the texels in the
    image and with a contiguous mapping of coordinates to bound memory.
    Most images consist only of a single plane, but some formats spread the
    channels across multiple image planes.
    The host-accessible properties of each image plane are accessed in a
    linear layout using flink:vkGetImageSubresourceLayout.
    If a multi-planar image is created with the
    ename:VK_IMAGE_CREATE_DISJOINT_BIT bit set, the image is described as
    _disjoint_, and its planes are therefore bound to memory independently.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]

Point Sampling (Rasterization)::
    A rule that determines whether a fragment sample location is covered by
    a polygon primitive by testing whether the sample location is in the
    interior of the polygon in framebuffer-space, or on the boundary of the
    polygon according to the tie-breaking rules.

Potential Format Features::
    The union of all elink:VkFormatFeatureFlagBits that the implementation
    supports for a specified elink:VkFormat, over all supported image
    tilings.
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
    For <<memory-external-android-hardware-buffer-external-formats,external
    formats>> the elink:VkFormatFeatureFlagBits is provided by the
    implementation.
endif::VK_ANDROID_external_memory_android_hardware_buffer[]

Pre-rasterization::
    Operations that execute before <<primsrast,rasterization>>, and any
    state associated with those operations.

ifdef::VK_KHR_swapchain[]
Presentable image::
    A sname:VkImage object obtained from a sname:VkSwapchainKHR used to
    present to a sname:VkSurfaceKHR object.
endif::VK_KHR_swapchain[]

Preserve Attachment::
    One of a list of attachments in a subpass description that is not read
    or written by the subpass, but that is read or written on earlier and
    later subpasses and whose contents must: be preserved through this
    subpass.

Primary Command Buffer::
    A command buffer that can: execute secondary command buffers, and can:
    be submitted directly to a queue.

ifdef::VK_NV_mesh_shader[]
Primitive Shading Pipeline::
    A graphics pipeline where input primitives are assembled by fixed
    function processing.
    It is the counterpart to mesh shading.
endif::VK_NV_mesh_shader[]

Primitive Topology::
    State that controls how vertices are assembled into primitives, e.g. as
    lists of triangles, strips of lines, etc..

Promoted (feature)::
    A feature from an older extension is considered promoted if it is made
    available as part of a new core version or newer extension with wider
    support.

ifdef::VK_VERSION_1_1[]
Protected Buffer::
    A buffer to which protected device memory can: be bound.

Protected-capable Device Queue::
    A device queue to which protected command buffers can: be submitted.

Protected Command Buffer::
    A command buffer which can: be submitted to a protected-capable device
    queue.

Protected Device Memory::
    Device memory which can: be visible to the device but must: not be
    visible to the host.

Protected Image::
    An image to which protected device memory can: be bound.
endif::VK_VERSION_1_1[]

Provisional::
    A feature is released provisionally in order to get wider feedback on
    the functionality before it is finalized.
    Provisional features may change in ways that break backwards
    compatibility, and thus are not recommended for use in production
    applications.

Provoking Vertex::
    The vertex in a primitive from which flat shaded attribute values are
    taken.
    This is generally the "`first`" vertex in the primitive, and depends on
    the primitive topology.

Push Constants::
    A small bank of values writable via the API and accessible in shaders.
    Push constants allow the application to set values used in shaders
    without creating buffers or modifying and binding descriptor sets for
    each update.

Push Constant Interface::
    The set of variables with code:PushConstant storage class that are
    statically used by a shader entry point, and which receive values from
    push constant commands.

ifdef::VK_KHR_push_descriptor[]
Push Descriptors::
    Descriptors that are written directly into a command buffer rather than
    into a descriptor set.
    Push descriptors allow the application to set descriptors used in
    shaders without allocating or modifying descriptor sets for each update.
endif::VK_KHR_push_descriptor[]

ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
Descriptor Update Template::
    An object that specifies a mapping from descriptor update information in
    host memory to elements in a descriptor set, which helps enable more
    efficient descriptor set updates.

endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]

Query Pool::
    An object containing a number of query entries and their associated
    state and results.
    Represented by a slink:VkQueryPool object.

Queue::
    An object that executes command buffers and sparse binding operations on
    a device.
    Represented by a slink:VkQueue object.

Queue Family::
    A set of queues that have common properties and support the same
    functionality, as advertised in slink:VkQueueFamilyProperties.

Queue Operation::
    A unit of work to be executed by a specific queue on a device, submitted
    via a <<devsandqueues-submission, queue submission command>>.
    Each queue submission command details the specific queue operations that
    occur as a result of calling that command.
    Queue operations typically include work that is specific to each
    command, and synchronization tasks.

Queue Submission::
    Zero or more batches and an optional fence to be signaled, passed to a
    command for execution on a queue.
    See the <<devsandqueues-submission, Devices and Queues chapter>> for
    more information.

ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
Ray Tracing Command::
    Commands that provoke work using a ray tracing pipeline.
    Includes
ifdef::VK_NV_ray_tracing[flink:vkCmdTraceRaysNV,]
ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCmdTraceRaysKHR, and flink:vkCmdTraceRaysIndirectKHR]
    .
endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]

Recording State (Command Buffer)::
    A command buffer that is ready to record commands.
    See also Initial State and Executable State.

Release Operation (Resource)::
    An operation that releases ownership of an image subresource or buffer
    range.

Render Pass::
    An object that represents a set of framebuffer attachments and phases of
    rendering using those attachments.
    Represented by a slink:VkRenderPass object.

Render Pass Instance::
    A use of a render pass in a command buffer.

Required Extensions::
    Extensions that must: be enabled alongside extensions dependent on them
    (see <<extendingvulkan-extensions-extensiondependencies, Extension
    Dependencies>>).

Reset (Command Buffer)::
    Resetting a command buffer discards any previously recorded commands and
    puts a command buffer in the initial state.

Residency Code::
    An integer value returned by sparse image instructions, indicating
    whether any sparse unbound texels were accessed.

Resolve Attachment::
    A subpass attachment point, or image view, that is the target of a
    multisample resolve operation from the corresponding color attachment at
    the end of the subpass.

ifdef::VK_KHR_swapchain[]
Retired Swapchain::
    A swapchain that has been used as the pname:oldSwapchain parameter to
    flink:vkCreateSwapchainKHR.
    Images cannot be acquired from a retired swapchain, however images that
    were acquired (but not presented) before the swapchain was retired can:
    be presented.
endif::VK_KHR_swapchain[]

Sample Index::
    The index of a sample within a <<primsrast-multisampling-coverage-mask,
    single set of samples>>.

Sample Shading::
    Invoking the fragment shader multiple times per fragment, with the
    covered samples partitioned among the invocations.

Sampled Image::
    A descriptor type that represents an image view, and supports filtered
    (sampled) and unfiltered read-only access in a shader.

Sampler::
    An object containing state that controls how sampled image data is
    sampled (or filtered) when accessed in a shader.
    Also a descriptor type describing the object.
    Represented by a slink:VkSampler object.

Secondary Command Buffer::
    A command buffer that can: be executed by a primary command buffer, and
    must: not be submitted directly to a queue.

Self-Dependency::
    A subpass dependency from a subpass to itself, i.e. with
    pname:srcSubpass equal to pname:dstSubpass.
    A self-dependency is not automatically performed during a render pass
    instance, rather a subset of it can: be performed via
    flink:vkCmdPipelineBarrier during the subpass.

Semaphore::
    A synchronization primitive that supports signal and wait operations,
    and can: be used to synchronize operations within a queue or across
    queues.
    Represented by a slink:VkSemaphore object.

Shader::
    Instructions selected (via an entry point) from a shader module, which
    are executed in a shader stage.

ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
Shader Call::
    An <<ray-tracing-shader-call,instruction>> which may: cause execution to
    continue in a different shader stage.
endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]

Shader Code::
    A stream of instructions used to describe the operation of a shader.

ifdef::VK_NV_device_generated_commands,VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
Shader Group::
    A set of Shader Stages that are part of a slink:VkPipeline which
    contains multiple of such sets.
    This allows the device to make use of all the shader groups from the
    bound pipeline independently.
endif::VK_NV_device_generated_commands,VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]

Shader Module::
    A collection of shader code, potentially including several functions and
    entry points, that is used to create shaders in pipelines.
    Represented by a slink:VkShaderModule object.

Shader Stage::
    A stage of the graphics or compute pipeline that executes shader code.

ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
[[glossary-shading-rate]]
Shading Rate::
    The ratio of the number of fragment shader invocations generated in a
    fully covered framebuffer region to the size (in pixels) of that region.
endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]

ifdef::VK_NV_shading_rate_image[]
[[glossary-shading-rate-image]]
Shading Rate Image::
    An image used to establish the shading rate for a framebuffer region,
    where each pixel controls the shading rate for a corresponding
    framebuffer region.
endif::VK_NV_shading_rate_image[]

ifdef::VK_KHR_shared_presentable_image[]
Shared presentable image::
    A presentable image created from a swapchain with elink:VkPresentModeKHR
    set to either ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
endif::VK_KHR_shared_presentable_image[]

Side Effect::
    A store to memory or atomic operation on memory from a shader
    invocation.

ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
Single-plane format::
    A format that is not _multi-planar_.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]

Size-Compatible Image Formats::
    When a compressed image format and an uncompressed image format are
    size-compatible, it means that the texel block size of the uncompressed
    format must: equal the texel block size of the compressed format.

Sparse Block::
    An element of a sparse resource that can be independently bound to
    memory.
    Sparse blocks of a particular sparse resource have a corresponding size
    in bytes that they use in the bound memory.

Sparse Image Block::
    A sparse block in a sparse partially-resident image.
    In addition to the sparse block size in bytes, sparse image blocks have
    a corresponding width, height, and depth that define the dimensions of
    these elements in units of texels or compressed texel blocks, the latter
    being used in case of sparse images having a block-compressed format.

Sparse Unbound Texel::
    A texel read from a region of a sparse texture that does not have memory
    bound to it.

ifdef::VK_NV_ray_tracing_motion_blur[]
SRT::
   A decomposition of a spatial transform separating out scale, rotation,
   and translation which has better linear interpolation properties for
   representing motion.
endif::VK_NV_ray_tracing_motion_blur[]

Static Use::
    An object in a shader is statically used by a shader entry point if any
    function in the entry point's call tree contains an instruction using
    the object.
    Static use is used to constrain the set of descriptors used by a shader
    entry point.

Storage Buffer::
    A descriptor type that represents a buffer, and supports reads, writes,
    and atomics in a shader.

Storage Image::
    A descriptor type that represents an image view, and supports unfiltered
    loads, stores, and atomics in a shader.

Storage Texel Buffer::
    A descriptor type that represents a buffer view, and supports
    unfiltered, formatted reads, writes, and atomics in a shader.

ifdef::VK_VERSION_1_1,VK_EXT_shader_subgroup_vote[]
Subgroup::
    A set of shader invocations that can: synchronize and share data with
    each other efficiently.
    In compute shaders, the _local workgroup_ is a superset of the subgroup.
endif::VK_VERSION_1_1,VK_EXT_shader_subgroup_vote[]

ifdef::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]
Subgroup Mask::
    A bitmask for all invocations in the current subgroup with one bit per
    invocation, starting with the least significant bit in the first vector
    component, continuing to the last bit (less than code:SubgroupSize) in
    the last required vector component.
endif::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]

Subpass::
    A phase of rendering within a render pass, that reads and writes a
    subset of the attachments.

Subpass Dependency::
    An execution and/or memory dependency between two subpasses described as
    part of render pass creation, and automatically performed between
    subpasses in a render pass instance.
    A subpass dependency limits the overlap of execution of the pair of
    subpasses, and can: provide guarantees of memory coherence between
    accesses in the subpasses.

Subpass Description::
    Lists of attachment indices for input attachments, color attachments,
    depth/stencil attachment, resolve attachments,
ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
    depth/stencil resolve,
endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
    and preserve attachments used by the subpass in a render pass.

Subset (Self-Dependency)::
    A subset of a self-dependency is a pipeline barrier performed during the
    subpass of the self-dependency, and whose stage masks and access masks
    each contain a subset of the bits set in the identically named mask in
    the self-dependency.

Texel Block::
    A single addressable element of an image with an uncompressed
    elink:VkFormat, or a single compressed block of an image with a
    compressed elink:VkFormat.

Texel Block Size::
    The size (in bytes) used to store a texel block of a compressed or
    uncompressed image.

Texel Coordinate System::
    One of three coordinate systems (normalized, unnormalized, integer) that
    define how texel coordinates are interpreted in an image or a specific
    mipmap level of an image.

ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
Timeline Semaphore::
    A semaphore with a strictly increasing 64-bit unsigned integer payload
    indicating whether the semaphore is signaled with respect to a
    particular reference value.
    Represented by a slink:VkSemaphore object created with a semaphore type
    of ename:VK_SEMAPHORE_TYPE_TIMELINE.
endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]

Uniform Texel Buffer::
    A descriptor type that represents a buffer view, and supports
    unfiltered, formatted, read-only access in a shader.

Uniform Buffer::
    A descriptor type that represents a buffer, and supports read-only
    access in a shader.

Units in the Last Place (ULP)::
    A measure of floating-point error loosely defined as the smallest
    representable step in a floating-point format near a given value.
    For the precise definition see <<spirvenv-precision-operation, Precision
    and Operation of SPIR-V instructions>> or Jean-Michel Muller, "`On the
    definition of ulp(x)`", RR-5504, INRIA.
    Other sources may also use the term "`unit of least precision`".

Unnormalized::
    A value that is interpreted according to its conventional
    interpretation, and is not normalized.

ifdef::VK_VERSION_1_1[]
Unprotected Buffer::
    A buffer to which unprotected device memory can: be bound.

Unprotected Command Buffer::
    A command buffer which can: be submitted to an unprotected device queue
    or a protected-capable device queue.

Unprotected Device Memory::
    Device memory which can: be visible to the device and can: be visible to
    the host.

Unprotected Image::
    An image to which unprotected device memory can: be bound.
endif::VK_VERSION_1_1[]

User-Defined Variable Interface::
    A shader entry point's variables with code:Input or code:Output storage
    class that are not built-in variables.

Vertex Input Attribute::
    A graphics pipeline resource that produces input values for the vertex
    shader by reading data from a vertex input binding and converting it to
    the attribute's format.

ifdef::VK_EXT_transform_feedback[]
Vertex Stream::
    A vertex stream is where the last
    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
    stages>> outputs vertex data, which then goes to the rasterizer, is
    captured to a transform feedback buffer, or both.
    Geometry shaders can: emit primitives to multiple independent vertex
    streams.
    Each vertex emitted by the geometry shader is directed at one of the
    vertex streams.
endif::VK_EXT_transform_feedback[]

ifdef::VK_EXT_validation_cache[]
Validation Cache::
    An object that can: be used to collect and retrieve validation results
    from the validation layers, and can: be populated with previously
    retrieved results in order to accelerate the validation process.
    Represented by a slink:VkValidationCacheEXT object.
endif::VK_EXT_validation_cache[]

Vertex Input Binding::
    A graphics pipeline resource that is bound to a buffer and includes
    state that affects addressing calculations within that buffer.

Vertex Input Interface::
    A vertex shader entry point's variables with code:Input storage class,
    which receive values from vertex input attributes.

ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
View Mask::
    When multiview is enabled, a view mask is a property of a subpass
    controlling which views the rendering commands are broadcast to.
endif::VK_VERSION_1_1,VK_KHR_multiview[]

View Volume::
    A subspace in homogeneous coordinates, corresponding to post-projection
    x and y values between -1 and +1, and z values between 0 and +1.

Viewport Transformation::
    A transformation from normalized device coordinates to framebuffer
    coordinates, based on a viewport rectangle and depth range.

Visibility Operation::
    An operation that causes available values to become visible to specified
    memory accesses.

Visible::
    A state of values written to memory that allows them to be accessed by a
    set of operations.

// To be added per issue 18:
// Current State <<fundamentals-queueoperation>>
// Barycentric Coordinates <<primsrast-polygons-basic>>
// Internal Allocations <<memory-host-allocation-scope>>
// Unavailable, Available <<queries-operation>> - NB: this clashes with available/visible in terms of memory
// Signaled, Unsignaled <<synchronization-semaphores>> <<synchronization-fences>>
// Interior Vertices <<tessellation-tessellator-spacing>>
// Inner Vertices <<tessellation-triangle-tessellation>> <<tessellation-quad-tessellation>>
// Isolines <<tessellation-isoline-tessellation>>
// Binding Range <<sparsemem-memory-binding>>


[[lexicon-common-abbreviations]]
== Common Abbreviations

The abbreviations and acronyms defined in this section are sometimes used in
the Specification and the API where they are considered clear and
commonplace.

Src::
    Source

Dst::
    Destination

Min::
    Minimum

Max::
    Maximum

Rect::
    Rectangle

Info::
    Information

LOD::
    Level of Detail

ID::
    Identifier

UUID::
    Universally Unique Identifier

Op::
    Operation

R::
    Red color component

G::
    Green color component

B::
    Blue color component

A::
    Alpha color component

RTZ::
    Round towards zero

RTE::
    Round to nearest even


[[lexicon-prefixes]]
== Prefixes

Prefixes are used in the API to denote specific semantic meaning of Vulkan
names, or as a label to avoid name clashes, and are explained here:

VK/Vk/vk::
    Vulkan namespace +
    All types, commands, enumerants and defines in this specification are
    prefixed with these two characters.

PFN/pfn::
    Function Pointer +
    Denotes that a type is a function pointer, or that a variable is of a
    pointer type.

p::
    Pointer +
    Variable is a pointer.

vkCmd::
    Commands that record commands in command buffers +
    These API commands do not result in immediate processing on the device.
    Instead, they record the requested action in a command buffer for
    execution when the command buffer is submitted to a queue.

s::
    Structure +
    Used to denote the etext:VK_STRUCTURE_TYPE* member of each structure in
    pname:sType
