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

[[video-decode-and-encode-operations]]
= Video Decode and Encode Operations

Vulkan implementations can: expose video decode and encode engines, which
are independent from the graphics and compute engines.
Video decode and encode is performed by recording video operations and
submitting them to video decode and encode queues.
Vulkan provides core support for video decode and encode and can: support a
variety of video codecs through individual extensions built on the core
video support.

The subsections below detail the fundamental components and operation of
Vulkan video.


== Technical Terminology and Semantics


[[video-picture-resources]]
=== Video Picture Resources

*Video Picture Resources* contain format information, can: be
multidimensional and may: have associated metadata.
The metadata can: include implementation-private details required for the
decode or encode operations and application managed color-space related
information.

In Vulkan, a <<video-picture-resources,Video Picture Resource>> is
represented by a slink:VkImage.
The slink:VkImageView, representing the slink:VkImage, is used with the
decode operations as <<decoded-output-picture,Output>> and <<dpb,Decoded
Picture Buffer (DPB)>>, and with the encode operation as
<<input-encode-picture,Input>> and <<reconstructed-pictures, Reconstructed>>
<<video-picture-resources,Video Picture Resource>>.


[[reference-picture]]
=== Reference Picture

Video *Reference Picture* is a <<video-picture-resources,Video Picture
Resource>> that can: be used in the video decode or encode process to
provide predictions of the values of samples in the subsequently decoded or
encoded pictures.


[[decoded-output-picture]]
=== Decoded Output Picture

The pixels resulting from the video decoding process are stored in a
*Decoded Output Picture*, represented by a slink:VkImageView.
This can: be shared with the <<dpb, Encoder Reconstructed or Decoder DPB>>
<<video-picture-resources,Video Picture Resources>>.
It can: also be used as an input for Video Encode, Graphics, Compute
processing, or WSI presentation.


[[input-encode-picture]]
=== Input Picture to Encode

The primary source of input pixels for the video encoding process is the
*Input Picture to Encode*, represented by a slink:VkImageView.
This can: be shared with the <<dpb, Encoder Reconstructed or Decoder DPB>>
<<video-picture-resources,Video Picture Resources>>.
It can: be a direct target of Video Decode, Graphics, Compute processing, or
WSI presentation.


[[dpb]]
=== Decoded Picture Buffer (DPB)

Previously decoded pictures are used by video codecs to provide predictions
of the values of samples in the subsequently decoded pictures.
At the decoder, such <<video-picture-resources,Video Picture Resources>> are
stored in a *Decoded Picture Buffer (DPB)* as an indexed set of
<<reference-picture,Reference Pictures>>.


[[reconstructed-pictures]]
=== Reconstructed Pictures

An integral part of the video decoding pipeline is the reconstruction of
pictures from the compressed stream.
A similar stage exists in the video encoding pipeline as well.
Such reconstructed pictures may: be used as <<reference-picture,Reference
Pictures>> for subsequently decoded or encoded pictures.
The correct use of such <<reference-picture,Reference Pictures>> is driven
by the video compression standard, the implementation, and the
application-specific use cases.

This specification refers to the collection of the *Decoded Picture Buffer*
and *Reconstructed Pictures* as <<dpb, Decoded Picture Buffer (DPB) Set>>,
or only, *DPB*.


[[dpb-slot]]
=== Decoded Picture Buffer (DPB) Slot

*Decoded Picture Buffer (DPB) Slot* represents a single or multi-layer
indexed <<reference-picture,Reference Picture's>> entry within the
<<video-session, Video Session's>> <<dpb,DPB Set>>.
A valid <<dpb-slot,DPB Slot>> index starts from zero and goes up to the
maximum of *N* - 1, where *N* is the number of <<reference-picture,Reference
Picture>> entries requested for a <<video-session, Video Session>>.


[[reference-metadata]]
=== Reference Picture Metadata

The opaque <<dpb-slot,DPB Slot>> state managed by the implementation may:
contain *Reference Picture Metadata*, present when the
<<video-picture-resources,picture resource>> associated with the
<<dpb-slot,DPB Slot>> is used as a <<reference-picture,reference picture>>
in one or more video decode or encode operations.

An implementation or application may: have other Picture Metadata related to
the Video Picture Resource or the DPB Slot, but such data is outside the
scope of this specification.

[NOTE]
.Note:
====
The video decode or encode implementation does not maintain internal
references to the <<reference-picture,Reference Pictures>>, beyond the
<<reference-metadata,Reference Picture Metadata>>.
It is the responsibility of the Vulkan Application to create, manage, and
destroy, as well as to provide those Video Picture Resources, when required,
during the decoding or encoding process.
====


[[color-space-metadata]]
=== Color Space Metadata

*Color Space Metadata* is the additional static or dynamic state associated
with a <<video-picture-resources,Video Picture Resource>> specifying the
color volume (the color primaries, white point, and luminance range) of the
display that was used in mastering the video content.
The use of *Color Space Metadata* is outside the scope of the current
version of the video core specification.


== Introduction

This chapter discusses extensions supporting Video Decode or Encode
operations.
Video Decode and Encode operations are supported by queues with an
advertised queue capability of ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR and
ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR, respectively.
Video Decode or Encode queue operation support allows for Vulkan
applications to cooperate closely with other graphics or compute operations
seamlessly and efficiently, therefore improving the overall application
performance.


[[video-decode-queue]]
=== Video Decode Queue

`apiext:VK_KHR_video_decode_queue` adds a video decode queue type bit
ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR to elink:VkQueueFlagBits.
As in the case of other queue types, an application must: use
flink:vkGetPhysicalDeviceQueueFamilyProperties to query whether the physical
device has support for the Video Decode Queue.
When the implementation reports the ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR bit
for a queue family, it advertises general support for Vulkan queue
operations described in <<devsandqueues, Devices and Queues>>.


[[video-encode-queue]]
=== Video Encode Queue

`apiext:VK_KHR_video_encode_queue` adds a video encode queue type bit
ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR to elink:VkQueueFlagBits.
As in the case of other queue types, an application must: use
flink:vkGetPhysicalDeviceQueueFamilyProperties to query whether the physical
device has support for the Video Encode Queue.
When the implementation reports the ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR bit
for a queue family, it advertises general support for Vulkan queue
operations described in <<devsandqueues, Devices and Queues>>.

The rest of the chapter focuses, specifically, on Video Decode and Encode
queue operations.


[[video-session-introduction]]
=== Video Session

Before performing any video decoding or encoding operations, the application
must: create a <<video-session,Video Session>> instance, of type
slink:VkVideoSessionKHR.
A <<video-session,Video Session>> instance is an immutable object and
supports a single compression standard (for example, H.264, H.265, VP9, AV1,
etc.).
The implementation uses the slink:VkVideoSessionKHR object to maintain the
video state for the video decode or video encode operation.
A <<video-session,Video Session>> instance is created specifically:

  * For a particular video compression standard;
  * For video decoding or video encoding;
  * With maximum supported decoded or encoded picture width/height;
  * With the maximum number of supported <<dpb,DPB>> or
    <<reconstructed-pictures,Reconstructed Pictures>> slots that can be
    allocated;
  * With the maximum number of <<reference-picture,Reference Pictures>> that
    can: be used simultaneously for video decode or encode operations;
  * Codec color and features profile;
  * Color Space format description (not supported with this version of the
    specification);

slink:VkVideoSessionKHR represents a single video decode or encode stream.
For each concurrently used stream, a separate instance of
slink:VkVideoSessionKHR is required.
After the application has finished with the processing of a stream, it can
reuse the <<video-session,Video Session>> instance for another, provided
that the configuration parameters between the two usages are compatible (as
determined by the video compression standard in use).
Once the slink:VkVideoSessionKHR instance has been created, the video
compression standard and profiles, <<input-encode-picture,Input>> /
<<decoded-output-picture,Output>> / <<dpb,DPB>> formats, and the settings
like the maximum extent cannot: be changed.

The values of the following slink:VkVideoSessionKHR parameters can: be
updated each frame, subject to the restrictions imposed on parameter updates
by the video compression standard in use:

  * decoded or encoded picture size
  * number of active <<dpb,DPB>> or <<reconstructed-pictures,Reconstructed
    Picture>> slots
  * number of <<reference-picture,Reference Pictures>> in use,
  * color space and color space metadata
  * color space metadata.

The updated parameters must: not exceed the maximum limits specified when
creating the slink:VkVideoSessionKHR instance.


[[video-session-device-memory-heaps]]
=== Video Session Device Memory Heaps

After creating a <<video-session,Video Session>> instance, and before the
object can be used for any of the decode or encode operations, the
application must: allocate and bind device memory resources to the Video
Session object.
An implementation may: require one or more device memory heaps of different
memory types, as reported by the
flink:vkGetVideoSessionMemoryRequirementsKHR function, to be bound with the
flink:vkBindVideoSessionMemoryKHR function to the <<video-session,Video
Session>>, For more information about the *Video Session Device Memory*,
please refer to the <<binding-session-memory, Binding the Session Object
Device Memory>> section, below.


[[video-session-parameters-introduction]]
=== Video Session Parameters

A lot of codec standards require parameters that are in use for the entire
video stream.
For example, H.264/AVC and HEVC standards require sequence and picture
parameter sets (SPS and PPS) that apply to multiple Video Decode and Encode
frames, layers, and sub-layers.
Vulkan Video uses <<video-session-parameters,Video Session Parameters>>
objects to store such standard parameters.
The application creates one or more <<video-session-parameters,Video Session
Parameters>> Objects against a <<video-session,Video Session>>, with a set
of common Video Parameters that are required for the processing of the video
content.
During the object creation, the implementation stores the parameters to the
created instance.
During command buffer recording, it is the responsibility of the application
to provide the <<video-session-parameters,Video Session Parameters>> object
containing the parameters that are necessary for the processing the portion
of the stream under consideration.


[[video-picture-subresources]]
=== Video Picture Subresources

For <<video-picture-resources,Video Picture Resources>>, an application has
the option to use single or multi-layer <<VkImage,images>> for
<<resources-image-views,image views>>.
The layer to be used during decode or encode operations can: be specified
when the <<VkImageView,image view>> is being created with the
slink:VkImageSubresourceRange::pname:baseArrayLayer parameter, and/or within
the resource binding operations in command buffer by using the
slink:VkVideoPictureResourceKHR::pname:baseArrayLayer parameter.

[NOTE]
.Note:
====
Both Video Decode and Encode operations only work with a single layer at the
time.
====

The <<resources-image-views, Image views>> representing the
<<input-encode-picture,Input>> / <<decoded-output-picture,Output>> /
<<dpb,DPB>> <<video-picture-resources,Video Picture Resources>> could have
been created with sizes bigger than the coded size that is used with Video
Decode and Encode operations.
This allows for the same Video Picture Resources to be reused when there is
a change in the input video content resolution.
The effective coded size of the <<video-picture-resources,Video Picture
Resources>> used for Video Decode and Encode operations is provided with
slink:VkVideoPictureResourceKHR::pname:extent parameter of each resource in
use.

[NOTE]
.Note:
====
Many codec standards require the coded and <<video-picture-resources,Video
Picture Resources'>> sizes to match.
====


[[dpb-picture-resources]]
==== Video Session <<dpb,DPB and Reconstructed>> Video Picture Resources

The video compression standard chosen may: require the use of
<<reference-picture,Reference Pictures>>.
In Vulkan Video, like any other <<video-picture-resources,Video Picture
Resources>>, the <<reference-picture,Reference Pictures>> are represented
with <<resources-image-views, Image Views>>.

When an application requires <<reference-picture,Reference Picture
Resources>>, it creates and then associates <<VkImageView,image views>>,
representing these resources, with Video Session <<dpb-slot,DPB or
Reconstructed slots>> while recording the command buffer.

<<decoded-output-picture, Decoded output pictures>> may: be used as
<<reference-picture,reference pictures>> in future video decode operations.
The same pictures may: be used in texture sampling operations or in the
(WSI) presentation pipeline.
Representing the <<dpb-slot,DPB's Video Picture Resources>> by
<<VkImageView,image views>> makes it possible to accommodate all these use
cases in a "`zero-copy`" fashion.
Also, it provides more fine-grained control of the application over the
efficient usage of the DPB and Reconstructed <<VkDeviceMemory,Device Memory
Resources>>.


[[video-session-dpb-slot-resource-management]]
==== Video Session <<dpb-slot,DPB and Reconstructed Slot>> Resource Management

Before <<dpb-picture-resources, Video Picture Resources>> can be used as
<<reference-picture,Reference Picture Resources>>, Video Session
<<dpb-slot,DPB or Reconstructed Slots>> must: be associated with those
resources.

The application allocates a <<dpb-slot,DPB or Reconstructed Slot>> and
associates it with a <<video-picture-resources,Video Picture Resource>> and
then sets up the resource as a target of decode or encode operation.
After successfully decoding or encoding a picture with the targeted
<<dpb-slot,DPB or Reconstructed Slot>> , in addition to the
<<reference-picture,Reference Picture>> pixel data, the implementation may:
generate an opaque <<reference-metadata,Reference Picture Metadata>> for
that video session Slot and its associated <<video-picture-resources,Video
Picture Resource>>.

Subsequently, one or more <<dpb-slot,DPB or Reconstructed video session
Slots>>, along with their associated <<video-picture-resources,Video Picture
Resources>>, can: be used as <<reference-picture,Reference Picture's>>
source for the video decode or encode operations.

If <<reference-picture,Reference Pictures>> were to be required for decoding
or encoding of the video bitstream, the
slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesSlotsCount
must: be set to a value bigger than `0` when the instance of the
<<video-session,Video Session>> object is created.

Up to
slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesSlotsCount
slots can: be activated with <<video-picture-resources,Video Picture
Resources>> for a video session and up to
slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesActiveCount
active slots can: be used as DPB or Reconstructed
<<reference-picture,Reference Pictures>> within a single decode or encode
operation.

When the implementation is associating <<reference-metadata,Reference
Picture Metadata>> with the <<video-picture-resources,Video Picture
Resources>> themselves, such data must: be independent of the
<<video-session,Video Session>> to allow for those
<<video-picture-resources,Video Picture Resources>> to be shared with other
Video Session instances.
All of the <<video-session,Video Session>>-dependent
<<reference-metadata,Reference Picture Metadata>> must: only be associated
with the <<video-session,Video Session>> <<dpb-slot,DPB or Reconstructed
Slots>>.

The application with the help of the implementation is responsible for
managing the individual <<dpb-slot,DPB, or Reconstructed Slots>> that belong
to a single <<video-session,Video Session>> <<dpb,DPB set>>:

  * The application maintains the Slot allocation and per-slot
    <<reference-picture,Reference Picture>>
    <<video-picture-resources,Resources>>;
  * Implementation maintains global and per-slot opaque
    <<reference-metadata,Reference Picture Metadata>>;

The application also manages the mapping between the codec-specific picture
IDs and <<dpb-slot,DPB Slots>>.

When a Video Picture is decoded and is set as a
<<reference-picture,Reference Picture>> against a Video Session
<<dpb-slot,DPB Slot>>, or is encoded and a Reconstructed Video Picture
Resource is associated with a Video Session <<dpb-slot,DPB Slot>> then:

  * The <<video-picture-resources,Video Picture Resource>> associated with
    the Slot is filled with the decoded or reconstructed pixel data;
  * The implementation generates the <<dpb-slot,DPB Slot's>>
    <<reference-metadata,Reference Picture Metadata>>;

When a <<dpb-slot,DPB's Slot>> is deactivated, or a different
<<video-picture-resources,Video Picture Resource>> is used with the Slot, or
the content of the <<video-picture-resources,Video Picture Resource>> is
modified, the <<reference-metadata,Reference Picture Metadata>> associated
with the <<dpb-slot,DPB Slot>> gets invalidated by the implementation.
Subsequent attempts to use such, invalidated, <<dpb,DPB>> Slot as a
<<reference-picture,Reference>> source would produce undefined: results.


[[video-session-dpb-picture-size-changes]]
==== Video Session <<dpb-slot,DPB Slot>> subresources

DPB <<reference-picture,Reference Picture's>> coded width and height can:
change, dynamically, via slink:VkVideoPictureResourceKHR::pname:extent, and
the picture parameters from the codec-specific extensions.
When a <<dpb-slot,DPB Slot>> is activated as a <<reference-picture,Reference
Picture>> and a decode or encode operation is performed against that slot,
the coded extent can: be recorded by the implementation to the corresponding
<<dpb-slot,DPB Slot's>> metadata state.
Subsequently, when the <<reference-picture,Reference Pictures>> are used
with the decoded <<decoded-output-picture, Output>> or encoded
<<input-encode-picture, Input Picture>>, their coded extent can differ.
Decoding or encoding pictures, using picture sizes, different from the
previously produced <<reference-picture,Reference Pictures>> should: be used
with care, not to conflict with the codec standard and the implementation's
support for that.
It is the responsibility of the application to ensure that valid <<dpb,DPB
Set>> of <<reference-picture,Reference Pictures>> are in use, according to
the codec standard.

In addition, the <<video-picture-resources,Video Picture Resources>> extent
cannot: exceed the slink:VkVideoSessionCreateInfoKHR::pname:maxCodedExtent.

[NOTE]
.Note:
====
Coding Standards such as VP9 and AV1 allow for images with different sizes
to be used as <<reference-picture,Reference Pictures>>.
Others, like H.264 and H.265, do not support <<reference-picture,Reference
Pictures>> with different sizes.
Using <<reference-picture,Reference Pictures>> with incompatible sizes with
such standards would render undefined: results.
====


[[video-resource-management-by-application]]
==== The application is in control of the allocation and use of the system resource

In Vulkan Video, the application has complete control over how and when
system resources are used.
The Vulkan Video framework provides the following tools to ensure that
device and host memory resources are used in an optimal way:

  * The video application can: allocate or destroy the number of allocated
    <<decoded-output-picture, Output>> or <<input-encode-picture, Input>>
    Pictures, and can: grow, or shrink the DPB set of
    <<reference-picture,Reference Pictures>>, dynamically, based on the
    changing video content requirement.
  * <<reference-picture,Reference Pictures>> can: be shared with the decoded
    <<decoded-output-picture, Output>> or encoded <<input-encode-picture,
    Input>> pictures.
  * The application can: use <<sparsememory, sparse memory>> for the
    <<VkImage,images>>, representing <<video-picture-resources,Video Picture
    Resources>>.
    The use of sparse memory would allow the application to remove the
    <<VkDeviceMemory,Device Memory>> backing of the <<resources-images,
    image resources>> when the <<dpb-slot,DPB Slot>> is not in active use.
    Furthermore, if the <<features-sparseResidency,sparse residency
    feature>> is supported by the implementation (see <<sparsememory,Sparse
    Resources>>), then <<VkImage,images>> can be, partially, bound with the
    resource memory.
    This feature is particularly important when using video content with a
    significant change of decoded or encoded resolution.
  * If the implementation supports <<VkImage,image arrays>>, and
    <<sparsememory, sparse memory resources>>, then the application can:
    remove the <<VkDeviceMemory,Device Memory>> backing of <<VkImage,image
    array>> layers that are not used by any <<dpb-slot,DPB Slots>>.


[[video-session-dpb-binding-reconstructed-slot]]
==== Using DPB and Reconstructed Slot's Associated Resources

Before a <<dpb-slot,DPB Slot>> is to become *Valid* for use with a
<<reference-picture,Reference Picture>>, it requires memory resources to be
bound to it.

Some of the memory resources required for the <<dpb-slot,DPB Slot>>, are
opaquely managed by the implementation and, internally, allocated from the
<<video-session-device-memory-heaps,Session's Device Memory Heaps>>.
The application provides the <<resources-images, image resources>> of one or
more <<reference-picture,Reference Pictures>>, in the
slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots as part of the
flink:vkCmdBeginVideoCodingKHR command.

If a <<dpb-slot,DPB Slot>> was already used with an <<resources-image-views,
image view>>, and a new image view or a dlink:VK_NULL_HANDLE handle is used
with that Slot, then the <<dpb-slot,DPB Slot's>> state will be invalidated
by the implementation.
If a <<dpb-slot,DPB Slot>> were to be reused with the same
<<resources-image-views, image view>>, the state of the Slot would not
change.


[[video-session-activating-dpb-slot]]
==== Video Session Activating DPB Slot as a Reference

Before a <<dpb-slot,DPB Slot>> is to be used for a
<<reference-picture,Reference Pictures>> index, it must: be activated.
The activation of a <<dpb-slot,DPB Slot>> is done within the
flink:vkCmdDecodeVideoKHR command's
slink:VkVideoDecodeInfoKHR::pname:slotIndex field for the decode operations,
and within the flink:vkCmdEncodeVideoKHR command's
slink:VkVideoEncodeInfoKHR::pname:slotIndex field for the encode operations.

While activating a Slot for DPB, it must: already have an associated
<<resources-image-views, image view>>, within the
slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots in the
flink:vkCmdBeginVideoCodingKHR command and <<VkDeviceMemory,Device Memory>>
backing of the the <<resources-images, image resources>> must: be resident.

When a <<dpb-slot,DPB Slot>> were to be activated, the
slink:VkVideoDecodeInfoKHR::pname:slotIndex for decode, or
slink:VkVideoDecodeInfoKHR::pname:slotIndex for encode, must: be set to the
application's allocated <<dpb-slot,DPB Slot's index>>.
When activating a <<dpb-slot,DPB Slot>>, the application will perform a
decode or encode operation against its Slot's index in order to enable its
state as a *Valid Picture Reference*.
If a <<dpb-slot,DPB Slot>> is activated, but a decode or encode operation is
not performed against that Slot's index, or the decode or encode operation
was unsuccessful, then the <<dpb-slot,DPB Slot>> would remain in the
*Invalid Picture Reference* state (see below the
<<video-session-dpb-slot-states,DPB Slot States>>).

By just providing a <<video-picture-resources,Video Picture Resources>> for
a <<dpb-slot,DPB Slot>> within the
slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots, and without
successfully performing a decode or encode operation against that Slot, the
<<dpb-slot,DPB Slot's>> state cannot: be changed to *Valid Picture
Reference*.
If the <<dpb-slot,DPB Slots>> were already in *Valid Picture Reference*, and
there is no <<video-picture-resources,Video Picture Resources>> associated
with the <<dpb-slot,DPB Slot>> for a decode or encode operation, the state
<<dpb-slot,DPB Slot>> would not change.
However, if an application is referring to a valid <<dpb-slot,DPB Slot>> in
its current decode or encode operations, then a valid
<<resources-image-views, image view>> must: be provided for that Slot within
slink:VkVideoPictureResourceKHR::pname:imageViewBinding for that decode or
encode operation.


[[video-session-invalidating-dpb-slot]]
==== Video Session Invalidating DPB Slot's Reference State

When a <<dpb-slot,DPB Slot>> is invalidated, its state is set to *Invalid
Picture Reference*.
Using a <<dpb-slot,DPB Slot>> as a <<reference-picture,Reference Picture>>
index for video decode or encode operations while the Slot is in *Invalid
Picture Reference* state would render undefined: results.


[[video-session-dpb-slot-states]]
==== Video Session <<dpb,DPB>> Slot States

To help understand the valid use of the <<video-session,Video Session>>
<<dpb,DPB>> and its resource management, this section aims to explain the
different states and correct usage of <<dpb-slot,DPB Slots>>.

There are four (4) states that a <<dpb-slot,DPB Slot>> could be in:

  * Picture Reference Unused;
  * Invalid Picture Reference;
  * Updating Picture Reference;
  * Valid Picture Reference;

The different states are outlined within the
<<video-session-dpb-slot-states-table,DPB Slot States>> and
<<video-session-dpb-slot-states-flow-diagram, DPB Slot States Flow Diagram>>
below.

All DPB Slot management operations are performed via the
slink:VkVideoDecodeInfoKHR::pname:slotIndex or
slink:VkVideoEncodeInfoKHR::pname:slotIndex field.

All DPB resource binding, invalidating, and activating Slot management
operations are performed, by the implementation, *before* the decoding or
encoding commands, based on the slink:VkVideoDecodeInfoKHR::pname:slotIndex
or slink:VkVideoEncodeInfoKHR::pname:slotIndex field and the entries from
the slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots.
The application cannot: move a DPB Slot from a *Picture Reference Unused* to
*Updating Picture Reference* state, implicitly, within a decode or encode
command operation.
Such a DPB Slot must: first be transitioned to an *Invalid Picture
Reference* state using slink:VkVideoDecodeInfoKHR::pname:slotIndex or
slink:VkVideoEncodeInfoKHR::pname:slotIndex, as part of a decode command.
For more details, see <<video-picture-decode-modes, Video Picture Decode
Modes>>.

When using <<sparsememory, sparse memory resources>>, it would be acceptable
and valid behavior for the application to unbind the memory while the DPB
Slot is any of the DPB Slot states, provided the command buffers, in a
<<commandbuffers-lifecycle, pending state>>, do not reference any such
<<video-picture-resources,Video Picture Resources>>.

Accessing <<sparsememory-accessing-unbound, unbound regions>> of the
<<sparsememory, sparse memory resources>> by the decoder or encoder,
regardless if those are used as <<decoded-output-picture,Output>>,
<<input-encode-picture,Input>>, <<dpb,DPB>> or
<<reconstructed-pictures,Reconstructed>> <<video-picture-resources,Video
Picture Resources>>, would render undefined: results.
The slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
property reported by the implementation does not offer guarantees on the
behavior of decode or encode operations when it comes to accessing
<<sparsememory-accessing-unbound, unbound regions>>.
However, both reads and writes are still considered safe and will not affect
other resources or populated regions of the image.

[[video-session-dpb-slot-states-table]]
.Video Session <<dpb-slot,DPB Slot>> States
[cols="10%h,30%,50%,10%",options="header"]
|====
| <<dpb-slot,DPB Slot>> State | Moving to <<dpb-slot,DPB Slot>> State | Exiting <<dpb-slot,DPB Slot>> State | Retain Video Picture Resource Memory

| *Picture Reference Unused* |
* Bind Device Memory; +
* Reset decode or encode state; +
* Invalidate, delete or unbind memory of a Picture Reference associated with Reference DPB Slot |
* Activate Reference DPB Slot -> *Invalid Picture Reference* |
Application Controlled

| *Invalid Picture Reference* |
* Activate Reference DPB Slot; +
* Unsuccessful video decode or encode operation; |
* Start decode or encode operation with an active Reference DPB Slot target -> *Updating Picture Reference*; +
* Updating a Picture Resource outside the decoder or encoder or deleting or removing the memory binding(sparse) -> *Picture Reference Unused*; |
Application Controlled

| *Updating Picture Reference* |
Start decode or encode operation with an active Reference DPB Slot target; |
Decode or encode operation with an active Reference DPB Slot target Completed Successfully -> *Valid Picture Reference*; +
Unsuccessful video decode or encode operation -> *Invalid Picture Reference* |
Yes

| *Valid Picture Reference* |
Video decode or encode operation with an active Reference DPB Slot target Completed Successfully; |
* Replace Reference DPB Slot -> *Invalid Picture Reference*; +
* Invalidate, delete or unbind memory of a Picture Reference of the Reference DPB Slot -> *Picture Reference Unused*; |
Yes
|====

[[video-session-dpb-slot-states-flow-diagram]]
image::images/VideoDecodeSessionDpbStates.svg[align="center",title="DPB Slot States Flow Diagram",opts="{imageopts}"]


[[video-physical-device-capabilities]]
== Video Physical Device Capabilities


[[supported-video-codec-operations-enumeration]]
=== Supported Video Codec Operations Enumeration

The structure slink:VkVideoQueueFamilyProperties2KHR may: be chained to
slink:VkQueueFamilyProperties2 when calling
flink:vkGetPhysicalDeviceQueueFamilyProperties2 to retrieve the video codec
operations supported for the physical device queue family index.

[open,refpage='VkVideoQueueFamilyProperties2KHR',desc='Structure specifying the codec video operations',type='structs']
--
The slink:VkVideoQueueFamilyProperties2KHR structure is defined as:

include::{generated}/api/structs/VkVideoQueueFamilyProperties2KHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:videoCodecOperations is a bitmask of
    elink:VkVideoCodecOperationFlagBitsKHR specifying supported video codec
    operation(s).

include::{generated}/validity/structs/VkVideoQueueFamilyProperties2KHR.txt[]
--

[open,refpage='VkVideoCodecOperationFlagBitsKHR',desc='Video codec operation types',type='enums']
--
The codec operations are defined with the
elink:VkVideoCodecOperationFlagBitsKHR enum:

include::{generated}/api/enums/VkVideoCodecOperationFlagBitsKHR.txt[]

Each decode or encode codec-specific extension extends this enumeration with
the appropriate bit corresponding to the extension's codec operation:

  * ename:VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR - No video operations are
    supported for this queue family.
ifdef::VK_EXT_video_encode_h264[]
  * ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT - H.264 video encode
    operations are supported by this queue family.
endif::VK_EXT_video_encode_h264[]
ifdef::VK_EXT_video_decode_h264[]
  * ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT - H.264 video decode
    operations are supported by this queue family.
endif::VK_EXT_video_decode_h264[]
ifdef::VK_EXT_video_decode_h265[]
  * ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT - H.265 video decode
    operations are supported by this queue family.
endif::VK_EXT_video_decode_h265[]
--

[open,refpage='VkVideoCodecOperationFlagsKHR',desc='Bitmask specifying the Video codec operations supported',type='flags']
--
include::{generated}/api/flags/VkVideoCodecOperationFlagsKHR.txt[]

tlink:VkVideoCodecOperationFlagsKHR is a bitmask type for setting a mask of
zero or more elink:VkVideoCodecOperationFlagBitsKHR.
--


[[video-profiles]]
=== Video Profiles

[open,refpage='VkVideoProfileKHR',desc='Structure specifying the codec video profile',type='structs']
--
A video profile is defined by slink:VkVideoProfileKHR structure as:

include::{generated}/api/structs/VkVideoProfileKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:videoCodecOperation is a elink:VkVideoCodecOperationFlagBitsKHR
    value specifying a video codec operation.
  * pname:chromaSubsampling is a bitmask of
    elink:VkVideoChromaSubsamplingFlagBitsKHR specifying video chroma
    subsampling information.
  * pname:lumaBitDepth is a bitmask of
    elink:VkVideoComponentBitDepthFlagBitsKHR specifying video luma bit
    depth information.
  * pname:chromaBitDepth is a bitmask of
    elink:VkVideoComponentBitDepthFlagBitsKHR specifying video chroma bit
    depth information.

include::{generated}/validity/structs/VkVideoProfileKHR.txt[]
--

[open,refpage='VkVideoChromaSubsamplingFlagBitsKHR',desc='Video chroma subsampling',type='enums']
--
The video format chroma subsampling is defined with the following enums:

include::{generated}/api/enums/VkVideoChromaSubsamplingFlagBitsKHR.txt[]

  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR - the format is
    monochrome.
  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR - the format is 4:2:0
    chroma subsampled.
    The two chroma components are each subsampled at a factor of 2 both
    horizontally and vertically.
  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR - the format is 4:2:2
    chroma subsampled.
    The two chroma components are sampled at half the sample rate of luma.
    The horizontal chroma resolution is halved.
  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR - the format is 4:4:4
    chroma sampled.
    Each of the three YCbCr components have the same sample rate, thus there
    is no chroma subsampling.
--

[open,refpage='VkVideoChromaSubsamplingFlagsKHR',desc='Bitmask specifying the Video format chroma subsampling',type='flags']
--
include::{generated}/api/flags/VkVideoChromaSubsamplingFlagsKHR.txt[]

tlink:VkVideoChromaSubsamplingFlagsKHR is a bitmask type for setting a mask
of zero or more elink:VkVideoChromaSubsamplingFlagBitsKHR.
--

[open,refpage='VkVideoComponentBitDepthFlagBitsKHR',desc='Video component bit depth',type='enums']
--
The video format component bit depth is defined with the following enums:

include::{generated}/api/enums/VkVideoComponentBitDepthFlagBitsKHR.txt[]

  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR - the format component bit
    depth is 8 bits.
  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR - the format component bit
    depth is 10 bits.
  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR - the format component bit
    depth is 12 bits.
--

[open,refpage='VkVideoComponentBitDepthFlagsKHR',desc='Bitmask specifying the Video format component bit depth',type='flags']
--
include::{generated}/api/flags/VkVideoComponentBitDepthFlagsKHR.txt[]

tlink:VkVideoComponentBitDepthFlagsKHR is a bitmask type for setting a mask
of zero or more elink:VkVideoComponentBitDepthFlagBitsKHR.
--

A video profile is provided when querying capabilities or image formats for
video using flink:vkGetPhysicalDeviceVideoCapabilitiesKHR or
flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR, respectively.
A video profile is also provided when creating resources (images, video
sessions, etc.) used by video queues.
Each instance of slink:VkVideoProfileKHR must: chain a codec-operation
specific video profile extension structure, corresponding to the
codec-operation specified in
slink:VkVideoProfileKHR::pname:videoCodecOperation.
Additional information is provided in each codec-operation-specific video
extension.


[[supported-video-decode-or-encode-capabilities]]
=== Supported Video Decode or Encode Capabilities

[open,refpage='vkGetPhysicalDeviceVideoCapabilitiesKHR',desc='Query video decode or encode capabilities',type='protos']
--
To query video decode or encode capabilities for a specific codec, call:

include::{generated}/api/protos/vkGetPhysicalDeviceVideoCapabilitiesKHR.txt[]

  * pname:physicalDevice is the physical device whose video decode or encode
    capabilities will be queried.
  * pname:pVideoProfile is a pointer to a slink:VkVideoProfileKHR structure
    with a chained codec-operation specific video profile structure.
  * pname:pCapabilities is a pointer to a slink:VkVideoCapabilitiesKHR
    structure in which the capabilities are returned.

include::{generated}/validity/protos/vkGetPhysicalDeviceVideoCapabilitiesKHR.txt[]
--

If pname:pVideoProfile and chained codec-operation specific profile is not
supported, ename:VK_ERROR_FORMAT_NOT_SUPPORTED is returned.

Otherwise, the implementation will fill pname:pCapabilities with
capabilities associated with this video profile.


[open,refpage='VkVideoCapabilitiesKHR',desc='Structure specifying parameters of video capabilities',type='structs']
--
The slink:VkVideoCapabilitiesKHR structure is defined as:

include::{generated}/api/structs/VkVideoCapabilitiesKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:capabilityFlags is a bitmask of elink:VkVideoCapabilityFlagBitsKHR
    specifying capability flags.
  * pname:minBitstreamBufferOffsetAlignment is the minimum alignment for the
    input or output bitstream buffer offset.
  * pname:minBitstreamBufferSizeAlignment is the minimum alignment for the
    input or output bitstream buffer size
  * pname:videoPictureExtentGranularity is the minimum size alignment of the
    extent with the required padding for the decoded or encoded video
    images.
  * pname:minExtent is the minimum width and height of the decoded or
    encoded video.
  * pname:maxExtent is the maximum width and height of the decoded or
    encoded video.
  * pname:maxReferencePicturesSlotsCount is the maximum number of DPB Slots
    supported by the implementation for a single video session instance.
  * pname:maxReferencePicturesActiveCount is the maximum slots that can be
    used as <<reference-picture,Reference Pictures>> with a single decode or
    encode operation.

include::{generated}/validity/structs/VkVideoCapabilitiesKHR.txt[]
--

[open,refpage='VkVideoCapabilityFlagBitsKHR',desc='Video Decode and Encode Capability Flags',type='enums']
--
The slink:VkVideoCapabilitiesKHR flags are defined with the following
enumeration:

include::{generated}/api/enums/VkVideoCapabilityFlagBitsKHR.txt[]

  * ename:VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR - the decode or
    encode session supports protected content.
  * ename:VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR - the DPB or
    Reconstructed Video Picture Resources for the video session may: be
    created as a separate slink:VkImage for each DPB picture.
    If not supported, the DPB must: be created as single multi-layered image
    where each layer represents one of the DPB Video Picture Resources.
--

[open,refpage='VkVideoCapabilityFlagsKHR',desc='Bitmask specifying the Video Decode and Encode Capability Flags',type='flags']
--
include::{generated}/api/flags/VkVideoCapabilityFlagsKHR.txt[]

tlink:VkVideoCapabilityFlagsKHR is a bitmask type for setting a mask of zero
or more elink:VkVideoCapabilityFlagBitsKHR.
--


[[supported-video-input-output-dpb-formats-enumeration]]
=== Enumeration of Supported Video Output, Input and DPB Formats

[open,refpage='vkGetPhysicalDeviceVideoFormatPropertiesKHR',desc='Query supported Video Decode and Encode image formats',type='protos']
--
To enumerate the supported output, input and DPB image formats for a
specific codec operation and video profile, call:

include::{generated}/api/protos/vkGetPhysicalDeviceVideoFormatPropertiesKHR.txt[]

  * pname:physicalDevice is the physical device being queried.
  * pname:pVideoFormatInfo is a pointer to a
    slink:VkPhysicalDeviceVideoFormatInfoKHR structure specifying the codec
    and video profile for which information is returned.
  * pname:pVideoFormatPropertyCount is a pointer to an integer related to
    the number of video format properties available or queried, as described
    below.
  * pname:pVideoFormatProperties is a pointer to an array of
    slink:VkVideoFormatPropertiesKHR structures in which supported formats
    are returned.

If pname:pVideoFormatProperties is `NULL`, then the number of video format
properties supported for the given pname:physicalDevice is returned in
pname:pVideoFormatPropertyCount.
Otherwise, pname:pVideoFormatPropertyCount must: point to a variable set by
the user to the number of elements in the pname:pVideoFormatProperties
array, and on return the variable is overwritten with the number of values
actually written to pname:pVideoFormatProperties.
If the value of pname:pVideoFormatPropertyCount is less than the number of
video format properties supported, at most pname:pVideoFormatPropertyCount
values will be written to pname:pVideoFormatProperties, and
ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
indicate that not all the available values were returned.

.Valid Usage
****
  * [[VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-imageUsage-04844]]
    The pname:imageUsage enum of slink:VkPhysicalDeviceVideoFormatInfoKHR
    must: contain at least one of the following video image usage bit(s):
    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR,
    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, or
    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR
****

[NOTE]
.Note:
====
For most use cases, only decode or encode related usage flags are going to
be specified.
For a use case such as transcode, if the image were to be shared between
decode and encode session(s), then both decode and encode related usage
flags can: be set.
====

include::{generated}/validity/protos/vkGetPhysicalDeviceVideoFormatPropertiesKHR.txt[]
--

[open,refpage='VkPhysicalDeviceVideoFormatInfoKHR',desc='Structure specifying the codec video format',type='structs']
--
The slink:VkPhysicalDeviceVideoFormatInfoKHR input structure is defined as:

include::{generated}/api/structs/VkPhysicalDeviceVideoFormatInfoKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:imageUsage is a bitmask of elink:VkImageUsageFlagBits specifying
    intended video image usages.
  * pname:pVideoProfiles is a pointer to a slink:VkVideoProfilesKHR
    structure providing the video profile(s) of video session(s) that will
    use the image.
    For most use cases, the image is used by a single video session and a
    single video profile is provided.
    For a use case such as transcode, where a decode session output image
    may: be used as encode input for one or more encode sessions, multiple
    video profiles representing the video sessions that will share the image
    may: be provided.

include::{generated}/validity/structs/VkPhysicalDeviceVideoFormatInfoKHR.txt[]
--

[open,refpage='VkVideoProfilesKHR',desc='Structure enumerating the video profiles',type='structs']
--
The slink:VkVideoProfilesKHR structure is defined as:

include::{generated}/api/structs/VkVideoProfilesKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:profileCount is an integer which holds the number of video
    profiles included in pname:pProfiles.
  * pname:pProfiles is a pointer to an array of slink:VkVideoProfileKHR
    structures.
    Each slink:VkVideoProfileKHR structure must: chain the corresponding
    codec-operation specific extension video profile structure.

include::{generated}/validity/structs/VkVideoProfilesKHR.txt[]
--

[open,refpage='VkVideoFormatPropertiesKHR',desc='Structure enumerating the video image formats',type='structs']
--
The slink:VkVideoFormatPropertiesKHR output structure for
flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR is defined as:

include::{generated}/api/structs/VkVideoFormatPropertiesKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:format is one of the supported formats reported by the
    implementation.

If the pname:pVideoProfiles provided in input structure
pname:pVideoFormatInfo are not supported,
ename:VK_ERROR_FORMAT_NOT_SUPPORTED is returned.
If the implementation requires an opaque video decode or encode DPB, then
when querying with the corresponding video decode or encode DPB image usage
in pname:imageUsage, only one image format is returned:
ename:VK_FORMAT_UNDEFINED.

include::{generated}/validity/structs/VkVideoFormatPropertiesKHR.txt[]
--

Before creating an image, the application should obtain the supported image
creation parameters by querying with
flink:vkGetPhysicalDeviceFormatProperties2 or
flink:vkGetPhysicalDeviceImageFormatProperties2 using one of the reported
pname:pImageFormats and adding slink:VkVideoProfilesKHR to the pname:pNext
chain of slink:VkFormatProperties2.


[[video-session-objects]]
== Video Session Objects


[[video-session]]
=== Video Session

[open,refpage='VkVideoSessionKHR',desc='Opaque handle to a video session object',type='handles']
--
Video session objects are abstracted and represented by
slink:VkVideoSessionKHR handles:

include::{generated}/api/handles/VkVideoSessionKHR.txt[]
--


[[video-session-creation]]
==== Creating a Video Session

[open,refpage='vkCreateVideoSessionKHR',desc='Creates a video session object',type='protos']
--
To create a video session object, call:

include::{generated}/api/protos/vkCreateVideoSessionKHR.txt[]

  * pname:device is the logical device that creates the decode or encode
    session object.
  * pname:pCreateInfo is a pointer to a slink:VkVideoSessionCreateInfoKHR
    structure containing parameters specifying the creation of the decode or
    encode session.
  * pname:pAllocator controls host memory allocation as described in the
    <<memory-allocation, Memory Allocation>> chapter.
  * pname:pVideoSession is a pointer to a slink:VkVideoSessionKHR structure
    specifying the decode or encode video session object which will be
    created by this function when it returns ename:VK_SUCCESS

include::{generated}/validity/protos/vkCreateVideoSessionKHR.txt[]
--

[open,refpage='VkVideoSessionCreateInfoKHR',desc='Structure specifying parameters of a newly created video decode session',type='structs']
--
The slink:VkVideoSessionCreateInfoKHR structure is defined as:

include::{generated}/api/structs/VkVideoSessionCreateInfoKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:queueFamilyIndex is the queue family of the created video session.
  * pname:flags is a bitmask of elink:VkVideoSessionCreateFlagBitsKHR
    specifying creation flags.
  * pname:pVideoProfile is a pointer to a slink:VkVideoProfileKHR structure.
  * pname:pictureFormat is the format of the <<resources-image-views, image
    views>> representing decoded <<decoded-output-picture, Output>> or
    encoded <<input-encode-picture, Input>> pictures.
  * pname:maxCodedExtent is the maximum width and height of the coded
    pictures that this instance will be able to support.
  * pname:referencePicturesFormat is the format of the <<dpb, DPB>> image
    views representing the <<reference-picture,Reference Pictures>>.
  * pname:maxReferencePicturesSlotsCount is the maximum number of
    <<dpb-slot,DPB Slots>> that can be activated with associated
    <<video-picture-resources,Video Picture Resources>> for the created
    video session.
  * pname:maxReferencePicturesActiveCount is the maximum number of active
    <<dpb-slot,DPB Slots>> that can be used as Dpb or Reconstructed
    <<reference-picture,Reference Pictures>> within a single decode or
    encode operation for the created video session.

.Valid Usage
****
  * [[VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-04845]]
    pname:pVideoProfile must: be a pointer to a valid
    slink:VkVideoProfileKHR structure whose pname:pNext chain must: include
    a valid codec-specific profile structure
  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesSlotsCount-04846]]
    If <<reference-picture,Reference Pictures>> are required for use with
    the created video session, the pname:maxReferencePicturesSlotsCount
    must: be set to a value bigger than `0`
  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesSlotsCount-04847]]
    pname:maxReferencePicturesSlotsCount cannot: exceed the implementation
    reported
    slink:VkVideoCapabilitiesKHR::pname:maxReferencePicturesSlotsCount
  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesActiveCount-04848]]
    If <<reference-picture,Reference Pictures>> are required for use with
    the created video session, the pname:maxReferencePicturesActiveCount
    must: be set to a value bigger than `0`
  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesActiveCount-04849]]
    pname:maxReferencePicturesActiveCount cannot: exceed the implementation
    reported
    slink:VkVideoCapabilitiesKHR::pname:maxReferencePicturesActiveCount
  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesActiveCount-04850]]
    pname:maxReferencePicturesActiveCount cannot: exceed the
    pname:maxReferencePicturesSlotsCount
  * [[VUID-VkVideoSessionCreateInfoKHR-maxCodedExtent-04851]]
    pname:maxCodedExtent cannot: be smaller than
    slink:VkVideoCapabilitiesKHR::pname:minExtent and bigger than
    slink:VkVideoCapabilitiesKHR::pname:maxExtent
  * [[VUID-VkVideoSessionCreateInfoKHR-referencePicturesFormat-04852]]
    pname:referencePicturesFormat must: be one of the supported formats in
    slink:VkVideoFormatPropertiesKHR pname:format returned by the
    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR when the
    slink:VkPhysicalDeviceVideoFormatInfoKHR pname:imageUsage contains
    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR or
    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR depending on the session
    codec operation
  * [[VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04853]]
    pname:pictureFormat for decode output must: be one of the supported
    formats in slink:VkVideoFormatPropertiesKHR pname:format returned by the
    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR when the
    slink:VkPhysicalDeviceVideoFormatInfoKHR pname:imageUsage contains
    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
  * [[VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04854]]
    pname:pictureFormat targeting encode operations must: be one of the
    supported formats in slink:VkVideoFormatPropertiesKHR pname:format
    returned by the flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR when
    the slink:VkPhysicalDeviceVideoFormatInfoKHR pname:imageUsage contains
    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR
****

include::{generated}/validity/structs/VkVideoSessionCreateInfoKHR.txt[]
--

[open,refpage='VkVideoSessionCreateFlagBitsKHR',desc='Video decode or encode video session creation flags',type='enums']
--
The decode or encode session creation flags defined with the following
enums:

include::{generated}/api/enums/VkVideoSessionCreateFlagBitsKHR.txt[]

  * ename:VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR - create the
    video session for use with protected video content
--

[open,refpage='VkVideoSessionCreateFlagsKHR',desc='Bitmask specifying the video decode or encode video session creation flags',type='flags']
--
include::{generated}/api/flags/VkVideoSessionCreateFlagsKHR.txt[]

tlink:VkVideoSessionCreateFlagsKHR is a bitmask type for setting a mask of
zero or more elink:VkVideoSessionCreateFlagBitsKHR.
--


[[video-session-destruction]]
=== Destroying a Video Session

[open,refpage='vkDestroyVideoSessionKHR',desc='Destroy decode session object',type='protos']
--
To destroy a decode session object, call:

include::{generated}/api/protos/vkDestroyVideoSessionKHR.txt[]

  * pname:device is the device that was used for the creation of the video
    session.
  * pname:videoSession is the decode or encode video session to be
    destroyed.
  * pname:pAllocator controls host memory allocation as described in the
    <<memory-allocation, Memory Allocation>> chapter.

include::{generated}/validity/protos/vkDestroyVideoSessionKHR.txt[]
--


[[video-session-memory-resource-management]]
=== Video Session Memory Resource Management


[[obtaining-video-session-memory-requirements]]
==== Obtaining the Video Session Object Device Memory Requirements

[open,refpage='vkGetVideoSessionMemoryRequirementsKHR',desc='Get Memory Requirements',type='protos']
--
To get memory requirements for a video session, call:

include::{generated}/api/protos/vkGetVideoSessionMemoryRequirementsKHR.txt[]

  * pname:device is the logical device that owns the video session.
  * pname:videoSession is the video session to query.
  * pname:pVideoSessionMemoryRequirementsCount is a pointer to an integer
    related to the number of memory heap requirements available or queried,
    as described below.
  * pname:pVideoSessionMemoryRequirements is `NULL` or a pointer to an array
    of slink:VkVideoGetMemoryPropertiesKHR structures in which the memory
    heap requirements of the video session are returned.

If pname:pVideoSessionMemoryRequirements is `NULL`, then the number of
memory heap types required for the video session is returned in
pname:pVideoSessionMemoryRequirementsCount.
Otherwise, pname:pVideoSessionMemoryRequirementsCount must: point to a
variable set by the user with the number of elements in the
pname:pVideoSessionMemoryRequirements array, and on return the variable is
overwritten with the number of formats actually written to
pname:pVideoSessionMemoryRequirements.
If pname:pVideoSessionMemoryRequirementsCount is less than the number of
memory heap types required for the video session, then at most
pname:pVideoSessionMemoryRequirementsCount elements will be written to
pname:pVideoSessionMemoryRequirements, and ename:VK_INCOMPLETE will be
returned, instead of ename:VK_SUCCESS, to indicate that not all required
memory heap types were returned.

include::{generated}/validity/protos/vkGetVideoSessionMemoryRequirementsKHR.txt[]
--

[open,refpage='VkVideoGetMemoryPropertiesKHR',desc='Structure specifying video session required memory heap type',type='structs']
--
The slink:VkVideoGetMemoryPropertiesKHR structure is defined as:

include::{generated}/api/structs/VkVideoGetMemoryPropertiesKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:memoryBindIndex is the memory bind index of the memory heap type
    described by the information returned in pname:pMemoryRequirements.
  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
    structure in which the requested memory heap requirements for the heap
    with index pname:memoryBindIndex are returned.

include::{generated}/validity/structs/VkVideoGetMemoryPropertiesKHR.txt[]
--


[[binding-session-memory]]
==== Binding the Session Object Device Memory

[open,refpage='vkBindVideoSessionMemoryKHR',desc='Bind Video Memory',type='protos']
--
To attach memory to a video session object, call:

include::{generated}/api/protos/vkBindVideoSessionMemoryKHR.txt[]

  * pname:device is the logical device that owns the video session's memory.
  * pname:videoSession is the video session to be bound with device memory.
  * pname:videoSessionBindMemoryCount is the number of
    pname:pVideoSessionBindMemories to be bound.
  * pname:pVideoSessionBindMemories is a pointer to an array of
    slink:VkVideoBindMemoryKHR structures specifying memory regions to be
    bound to a device memory heap.

include::{generated}/validity/protos/vkBindVideoSessionMemoryKHR.txt[]
--

[open,refpage='VkVideoBindMemoryKHR',desc='Structure specifying device memory heap entry for video session object',type='structs']
--
The slink:VkVideoBindMemoryKHR structure is defined as:

include::{generated}/api/structs/VkVideoBindMemoryKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:memoryBindIndex is the index of the device memory heap returned in
    slink:VkVideoGetMemoryPropertiesKHR::pname:memoryBindIndex from
    flink:vkGetVideoSessionMemoryRequirementsKHR.
  * pname:memory is the allocated device memory to be bound to the video
    session's heap with index pname:memoryBindIndex.
  * pname:memoryOffset is the start offset of the region of pname:memory
    which is to be bound.
  * pname:memorySize is the size in bytes of the region of pname:memory,
    starting from pname:memoryOffset bytes, to be bound.


include::{generated}/validity/structs/VkVideoBindMemoryKHR.txt[]
--


[[video-session-parameters]]
=== Video Session Parameters

This specification supports several classes of preprocessed parameters
stored in Video Session Parameters objects.
The Video Session Parameters objects reduces the number of parameters being
dispatched and then processed by the implementation while recording video
command buffers.


[[creating-video-session-parameters]]
=== Creating Video Session Parameters

[open,refpage='VkVideoSessionParametersKHR',desc='Opaque handle to a video video session parameters object',type='handles']
--
Video session parameter objects are represented by
slink:VkVideoSessionParametersKHR handles:

include::{generated}/api/handles/VkVideoSessionParametersKHR.txt[]
--

[open,refpage='vkCreateVideoSessionParametersKHR',desc='Creates video session video session parameter object',type='protos']
--
To create a video session parameters object, call:

include::{generated}/api/protos/vkCreateVideoSessionParametersKHR.txt[]

  * pname:device is the logical device that was used for the creation of the
    video session object.
  * pname:pCreateInfo is a pointer to
    slink:VkVideoSessionParametersCreateInfoKHR structure specifying the
    video session parameters.
  * pname:pAllocator controls host memory allocation as described in the
    <<memory-allocation, Memory Allocation>> chapter.
  * pname:pVideoSessionParameters is a pointer to a
    slink:VkVideoSessionParametersKHR handle in which the video session
    parameters object is returned.

include::{generated}/validity/protos/vkCreateVideoSessionParametersKHR.txt[]
--

[open,refpage='VkVideoSessionParametersCreateInfoKHR',desc='Structure to set video session parameters',type='structs']
--
The slink:VkVideoSessionParametersCreateInfoKHR structure is defined as:

include::{generated}/api/structs/VkVideoSessionParametersCreateInfoKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:videoSessionParametersTemplate is dlink:VK_NULL_HANDLE or a valid
    handle to a slink:VkVideoSessionParametersKHR object.
    If this parameter represents a valid handle, then the underlying Video
    Session Parameters object will be used as a template for constructing
    the new video session parameters object.
    All of the template object's current parameters will be inherited by the
    new object in such a case.
    Optionally, some of the template's parameters can be updated or new
    parameters added to the newly constructed object via the
    extension-specific parameters.
  * pname:videoSession is the video session object against which the video
    session parameters object is going to be created.

.Valid Usage
****
  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-04855]]
    If pname:videoSessionParametersTemplate represents a valid handle, it
    must: have been created against pname:videoSession
****

include::{generated}/validity/structs/VkVideoSessionParametersCreateInfoKHR.txt[]
--


[[UpdatingVideoSessionParameters]]
=== Updating the parameters of the Video Session Parameters object

[open,refpage='vkUpdateVideoSessionParametersKHR',desc='Update video session video session parameter object',type='protos']
--
To update, add, or remove video session parameters state, call:

include::{generated}/api/protos/vkUpdateVideoSessionParametersKHR.txt[]

  * pname:device is the logical device that was used for the creation of the
    video session object.
  * pname:videoSessionParameters is the video session object that is going
    to be updated.
  * pname:pUpdateInfo is a pointer to a
    sname:VkVideoSessionParametersUpdateInfoKHR structure containing the
    session parameters update information.

include::{generated}/validity/protos/vkUpdateVideoSessionParametersKHR.txt[]
--

[open,refpage='VkVideoSessionParametersUpdateInfoKHR',desc='Structure to update video session parameters',type='structs']
--
The sname:VkVideoSessionParametersUpdateInfoKHR structure is defined as:

include::{generated}/api/structs/VkVideoSessionParametersUpdateInfoKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:updateSequenceCount is the sequence number of the object update
    with parameters, starting from `1` and incrementing the value by one
    with each subsequent update.

include::{generated}/validity/structs/VkVideoSessionParametersUpdateInfoKHR.txt[]
--


[[destroying-video-session-parameters]]
=== Destroying Video Session Parameters

[open,refpage='vkDestroyVideoSessionParametersKHR',desc='Destroy video session parameters object',type='protos']
--
To destroy a video session object, call:

include::{generated}/api/protos/vkDestroyVideoSessionParametersKHR.txt[]

  * pname:device is the device the video session was created with.
  * pname:videoSessionParameters is the video session parameters object to
    be destroyed.
  * pname:pAllocator controls host memory allocation as described in the
    <<memory-allocation, Memory Allocation>> chapter.

include::{generated}/validity/protos/vkDestroyVideoSessionParametersKHR.txt[]
--


=== Video Encode and Decode commands

[open,refpage='vkCmdBeginVideoCodingKHR',desc='Start decode jobs',type='protos']
--
To start video decode or encode operations, call:

include::{generated}/api/protos/vkCmdBeginVideoCodingKHR.txt[]

  * pname:commandBuffer is the command buffer to be used when recording
    commands for the video decode or encode operations.
  * pname:pBeginInfo is a pointer to a slink:VkVideoBeginCodingInfoKHR
    structure.

include::{generated}/validity/protos/vkCmdBeginVideoCodingKHR.txt[]
--

[open,refpage='VkVideoBeginCodingInfoKHR',desc='Structure specifying parameters of decode starts',type='structs']
--
The slink:VkVideoBeginCodingInfoKHR structure is defined as:

include::{generated}/api/structs/VkVideoBeginCodingInfoKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:flags is reserved for future use.
  * pname:codecQualityPreset is a bitmask of
    elink:VkVideoCodingQualityPresetFlagBitsKHR specifying the Video Decode
    or Encode quality preset.
  * pname:videoSession is the video session object to be bound for the
    processing of the video commands.
  * pname:videoSessionParameters is dlink:VK_NULL_HANDLE or a handle of a
    slink:VkVideoSessionParametersKHR object to be used for the processing
    of the video commands.
    If dlink:VK_NULL_HANDLE, then no video session parameters apply to this
    command buffer context.
  * pname:referenceSlotCount is the number of reference slot entries
    provided in pname:pReferenceSlots.
  * pname:pReferenceSlots is a pointer to an array of
    slink:VkVideoReferenceSlotKHR structures specifying reference slots,
    used within the video command context between this
    flink:vkCmdBeginVideoCodingKHR command and the
    flink:vkCmdEndVideoCodingKHR commmand that follows.
    Each reference slot provides a slot index and the
    slink:VkVideoPictureResourceKHR specifying the reference picture
    resource bound to this slot index.
    A slot index must: not appear more than once in pname:pReferenceSlots in
    a given command.

.Valid Usage
****
  * [[VUID-VkVideoBeginCodingInfoKHR-referenceSlotCount-04856]]
    slink:VkVideoBeginCodingInfoKHR::pname:referenceSlotCount must: not
    exceed the value specified in
    slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesSlotsCount
    when creating the video session object that is being provided in
    pname:videoSession
  * [[VUID-VkVideoBeginCodingInfoKHR-videoSessionParameters-04857]]
    If pname:videoSessionParameters is not dlink:VK_NULL_HANDLE, it must:
    have been created using pname:videoSession as a parent object
****

include::{generated}/validity/structs/VkVideoBeginCodingInfoKHR.txt[]
--

[open,refpage='VkVideoBeginCodingFlagsKHR',desc='Reserved for future use',type='flags']
--
include::{generated}/api/flags/VkVideoBeginCodingFlagsKHR.txt[]

tname:VkVideoBeginCodingFlagsKHR is a bitmask type for setting a mask, but
is currently reserved for future use.
--

[open,refpage='VkVideoCodingQualityPresetFlagBitsKHR',desc='Video codec profile types',type='enums']
--
The decode preset types are defined with the following:

include::{generated}/api/enums/VkVideoCodingQualityPresetFlagBitsKHR.txt[]

  * ename:VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR defines normal
    decode case.
  * ename:VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR defines power
    efficient case.
  * ename:VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR defines quality
    focus case.
--

[open,refpage='VkVideoCodingQualityPresetFlagsKHR',desc='Bitmask of elink:VkVideoCodingQualityPresetFlagBitsKHR flags',type='flags']
--
include::{generated}/api/flags/VkVideoCodingQualityPresetFlagsKHR.txt[]

tlink:VkVideoCodingQualityPresetFlagsKHR is a bitmask type for setting a
mask of zero or more elink:VkVideoCodingQualityPresetFlagBitsKHR.
--

[open,refpage='VkVideoReferenceSlotKHR',desc='Structure specifying the reference picture slot',type='structs']
--
The slink:VkVideoReferenceSlotKHR structure is defined as:

include::{generated}/api/structs/VkVideoReferenceSlotKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:slotIndex is the unique reference slot index used for the encode
    or decode operation.
  * pname:pPictureResource is a pointer to a slink:VkVideoPictureResourceKHR
    structure describing the picture resource bound to this slot index.

include::{generated}/validity/structs/VkVideoReferenceSlotKHR.txt[]
--

[open,refpage='VkVideoPictureResourceKHR',desc='Structure specifying the picture resources',type='structs']
--
The slink:VkVideoPictureResourceKHR structure is defined as:

include::{generated}/api/structs/VkVideoPictureResourceKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:codedOffset is the offset to be used for the picture resource.
  * pname:codedExtent is the extent to be used for the picture resource.
  * pname:baseArrayLayer is the first array layer to be accessed for the
    Decode or Encode Operations.
  * pname:imageViewBinding is a slink:VkImageView image view representing
    this picture resource.

include::{generated}/validity/structs/VkVideoPictureResourceKHR.txt[]
--


=== End of the Video Session

[open,refpage='vkCmdEndVideoCodingKHR',desc='End decode jobs',type='protos']
--
To end video decode or encode operations, call:

include::{generated}/api/protos/vkCmdEndVideoCodingKHR.txt[]

  * pname:commandBuffer is the command buffer to be filled by this function.
  * pname:pEndCodingInfo is a pointer to a slink:VkVideoEndCodingInfoKHR
    structure.

include::{generated}/validity/protos/vkCmdEndVideoCodingKHR.txt[]
--

[open,refpage='VkVideoEndCodingInfoKHR',desc='Structure specifying the end of decode encode commands sequence',type='structs']
--
The slink:VkVideoEndCodingInfoKHR structure is defined as:

include::{generated}/api/structs/VkVideoEndCodingInfoKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:flags is reserved for future use.

include::{generated}/validity/structs/VkVideoEndCodingInfoKHR.txt[]
--

[open,refpage='VkVideoEndCodingFlagsKHR',desc='Reserved for future use',type='flags']
--
include::{generated}/api/flags/VkVideoEndCodingFlagsKHR.txt[]

tname:VkVideoEndCodingFlagsKHR is a bitmask type for setting a mask, but is
currently reserved for future use.
--


=== Video Session Control Command

[open,refpage='vkCmdControlVideoCodingKHR',desc='Set encode rate control parameters',type='protos']
--
To apply dynamic controls to video decode or video operations, call:

include::{generated}/api/protos/vkCmdControlVideoCodingKHR.txt[]

  * pname:commandBuffer is the command buffer to be filled by this function
    for setting encode rate control parameters.
  * pname:pCodingControlInfo is a pointer to a
    slink:VkVideoCodingControlInfoKHR structure.

include::{generated}/validity/protos/vkCmdControlVideoCodingKHR.txt[]
--

[open,refpage='VkVideoCodingControlInfoKHR',desc='Structure specifying parameters of decode starts',type='structs']
--
The slink:VkVideoCodingControlInfoKHR structure is defined as:

include::{generated}/api/structs/VkVideoCodingControlInfoKHR.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:flags is a bitmask of tlink:VkVideoCodingControlFlagsKHR
    specifying control flags.

include::{generated}/validity/structs/VkVideoCodingControlInfoKHR.txt[]
--

[open,refpage='VkVideoCodingControlFlagBitsKHR',desc='Video Coding Control Command Flags',type='enums']
--
The flink:vkCmdControlVideoCodingKHR flags are defined with the following
enumeration:

include::{generated}/api/enums/VkVideoCodingControlFlagBitsKHR.txt[]

  * ename:VK_VIDEO_CODING_CONTROL_DEFAULT_KHR indicates a request for the
    coding control paramaters to be applied to the current state of the
    bound video session.
  * ename:VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR indicates a request for the
    bound video session state to be reset before the coding control
    parameters are applied.
    The state after reset is identical to the state immediately after video
    session creation.
--

[open,refpage='VkVideoCodingControlFlagsKHR',desc='Bitmask specifying the Video Coding Control Command flink:vkCmdControlVideoCodingKHR flags',type='flags']
--
include::{generated}/api/flags/VkVideoCodingControlFlagsKHR.txt[]

tlink:VkVideoCodingControlFlagsKHR is a bitmask type for setting a mask of
zero or more elink:VkVideoCodingControlFlagBitsKHR.
--
