summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Leech <oddhack@sonic.net>2024-02-01 05:37:42 -0800
committerJon Leech <oddhack@sonic.net>2024-02-01 05:37:42 -0800
commit8c4e3f27f12060fd0bd1302393c4808fee6ce81f (patch)
tree933e4eed53511ae9eb140c9ef91b4b6f6387a53e
parentbf11e6d4ca4b71ae311bb925ae68d215fbe09a86 (diff)
downloadgfxstream-protocols-8c4e3f27f12060fd0bd1302393c4808fee6ce81f.tar.gz
Change log for February 1, 2024 Vulkan 1.3.277 spec update:
Internal Issues * Add bits to VkSubgroupFeatureFlagBits for VK_KHR_shader_subgroup_rotate (internal issue 3773). * Add missing `promotedto` XML attribute to VK_EXT_line_rasterization (internal issue 3772). * Fix VU missing shaderTileImageStencilReadAccess (internal issue 3778). * Revert add VUs for VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT (internal MR 6402). * Add missing VkGraphicsPipelinCreateInfo multisample state VU (internal MR 6408). * Add VU for null pGeometries and ppGeometries (internal MR 6411). * Fix typo in vkCmdWriteAccelerationStructuresPropertiesKHR VU (internal MR 6417). * Fix typos in some credits (internal MR 6423). * Fix missing SPIR-V interface summary in some extension appendices (internal MR 6425). * Update VK_FORMAT_UNDEFINED for VK_ANDROID_external_format_resolve (internal MR 6428) * Fix vkGetDescriptorEXT VU for null pCombinedImageSampler (internal MR 6431). * Remove redundant vkGetDescriptorEXT VU (internal MR 6434). New Extensions * VK_KHR_video_decode_av1
-rw-r--r--ChangeLog.adoc31
-rw-r--r--Makefile2
-rw-r--r--appendices/VK_KHR_dynamic_rendering_local_read.adoc4
-rw-r--r--appendices/VK_KHR_shader_float_controls2.adoc4
-rw-r--r--appendices/VK_KHR_shader_maximal_reconvergence.adoc4
-rw-r--r--appendices/VK_KHR_shader_quad_control.adoc3
-rw-r--r--appendices/VK_KHR_shader_subgroup_rotate.adoc6
-rw-r--r--appendices/VK_KHR_video_decode_av1.adoc39
-rw-r--r--appendices/boilerplate.adoc2
-rw-r--r--appendices/credits.adoc2
-rw-r--r--appendices/glossary.adoc3
-rw-r--r--appendices/spirvenv.adoc4
-rw-r--r--chapters/VK_KHR_surface/wsi.adoc2
-rw-r--r--chapters/accelstructures.adoc8
-rw-r--r--chapters/commonvalidity/pipeline_barrier_common.adoc6
-rw-r--r--chapters/descriptorsets.adoc16
-rw-r--r--chapters/features.adoc2
-rw-r--r--chapters/introduction.adoc5
-rw-r--r--chapters/limits.adoc38
-rwxr-xr-xchapters/pipelines.adoc19
-rw-r--r--chapters/primsrast.adoc16
-rw-r--r--chapters/renderpass.adoc9
-rw-r--r--chapters/video/av1_decode.adoc613
-rw-r--r--chapters/video/av1_parameter_sets.adoc30
-rw-r--r--chapters/video/decode.adoc115
-rw-r--r--chapters/videocoding.adoc62
-rw-r--r--proposals/VK_KHR_cooperative_matrix.asciidoc (renamed from proposals/VK_KHR_cooperative_matrix.adoc)0
-rw-r--r--proposals/VK_KHR_shader_expect_assume.asciidoc (renamed from proposals/VK_KHR_shader_expect_assume.adoc)0
-rw-r--r--proposals/VK_KHR_shader_maximal_reconvergence.asciidoc (renamed from proposals/VK_KHR_shader_maximal_reconvergence.adoc)0
-rw-r--r--proposals/VK_KHR_shader_subgroup_rotate.asciidoc (renamed from proposals/VK_KHR_shader_subgroup_rotate.adoc)0
-rw-r--r--proposals/VK_KHR_video_decode_av1.adoc624
-rwxr-xr-xscripts/genvk.py2
-rwxr-xr-xscripts/vkconventions.py1
-rwxr-xr-xscripts/xml_consistency.py1
-rw-r--r--tests/vtest.c8
-rw-r--r--xml/Makefile7
-rw-r--r--xml/video.xml485
-rwxr-xr-xxml/vk.xml92
38 files changed, 2209 insertions, 56 deletions
diff --git a/ChangeLog.adoc b/ChangeLog.adoc
index dfcd30c9..769918f9 100644
--- a/ChangeLog.adoc
+++ b/ChangeLog.adoc
@@ -14,6 +14,37 @@ appears frequently in the change log.
-----------------------------------------------------
+Change log for February 1, 2024 Vulkan 1.3.277 spec update:
+
+Internal Issues
+
+ * Add bits to VkSubgroupFeatureFlagBits for VK_KHR_shader_subgroup_rotate
+ (internal issue 3773).
+ * Add missing `promotedto` XML attribute to VK_EXT_line_rasterization
+ (internal issue 3772).
+ * Fix VU missing shaderTileImageStencilReadAccess (internal issue 3778).
+ * Revert add VUs for VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT
+ (internal MR 6402).
+ * Add missing VkGraphicsPipelinCreateInfo multisample state VU (internal
+ MR 6408).
+ * Add VU for null pGeometries and ppGeometries (internal MR 6411).
+ * Fix typo in vkCmdWriteAccelerationStructuresPropertiesKHR VU (internal
+ MR 6417).
+ * Fix typos in some credits (internal MR 6423).
+ * Fix missing SPIR-V interface summary in some extension appendices
+ (internal MR 6425).
+ * Update VK_FORMAT_UNDEFINED for VK_ANDROID_external_format_resolve
+ (internal MR 6428)
+ * Fix vkGetDescriptorEXT VU for null pCombinedImageSampler (internal MR
+ 6431).
+ * Remove redundant vkGetDescriptorEXT VU (internal MR 6434).
+
+New Extensions
+
+ * VK_KHR_video_decode_av1
+
+-----------------------------------------------------
+
Change log for January 25, 2024 Vulkan 1.3.276 spec update:
Github Issues
diff --git a/Makefile b/Makefile
index 5b927bb7..758e3997 100644
--- a/Makefile
+++ b/Makefile
@@ -137,7 +137,7 @@ VERBOSE =
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
-PATCHVERSION = 276
+PATCHVERSION = 277
BASEOPTS =
ifneq (,$(findstring VKSC_VERSION_1_0,$(VERSIONS)))
diff --git a/appendices/VK_KHR_dynamic_rendering_local_read.adoc b/appendices/VK_KHR_dynamic_rendering_local_read.adoc
index 61c420d8..60ee7000 100644
--- a/appendices/VK_KHR_dynamic_rendering_local_read.adoc
+++ b/appendices/VK_KHR_dynamic_rendering_local_read.adoc
@@ -11,7 +11,7 @@ include::{generated}/meta/{refprefix}VK_KHR_dynamic_rendering_local_read.adoc[]
*Contributors*::
- Tobias Hector, AMD
- Hans-Kristian Arntzen, Valve
- - Connor Abbot, Valve
+ - Connor Abbott, Valve
- Pan Gao, Huawei
- Lionel Landwerlin, Intel
- Shahbaz Youssefi, Google
@@ -29,7 +29,7 @@ include::{generated}/meta/{refprefix}VK_KHR_dynamic_rendering_local_read.adoc[]
- Michal Pietrasiuk, Intel
- Matthew Netsch, Qualcomm
- Marty Johnson, Khronos
- - Huilong Wang, Huawei
+ - Wyvern Wang, Huawei
- Jeff Bolz, Nvidia
- Samuel (Sheng-Wen) Huang, MediaTek
diff --git a/appendices/VK_KHR_shader_float_controls2.adoc b/appendices/VK_KHR_shader_float_controls2.adoc
index 7bff61b4..ecd9d201 100644
--- a/appendices/VK_KHR_shader_float_controls2.adoc
+++ b/appendices/VK_KHR_shader_float_controls2.adoc
@@ -29,6 +29,10 @@ is important.
include::{generated}/interfaces/VK_KHR_shader_float_controls2.adoc[]
+=== New SPIR-V Capabilities
+
+ * <<spirvenv-capabilities-table-FloatControls2,FloatControls2>>
+
=== Version History
* Revision 1, 2023-05-16 (Graeme Leese)
diff --git a/appendices/VK_KHR_shader_maximal_reconvergence.adoc b/appendices/VK_KHR_shader_maximal_reconvergence.adoc
index 77b1ea1d..b8e7d63e 100644
--- a/appendices/VK_KHR_shader_maximal_reconvergence.adoc
+++ b/appendices/VK_KHR_shader_maximal_reconvergence.adoc
@@ -36,6 +36,10 @@ other tangled instructions.
include::{generated}/interfaces/VK_KHR_shader_maximal_reconvergence.adoc[]
+=== New SPIR-V Capabilities
+
+ * <<spirvenv-capabilities-table-MaximallyReconvergesKHR,MaximallyReconvergesKHR>>
+
=== Version History
* Revision 1, 2021-11-12 (Alan Baker)
diff --git a/appendices/VK_KHR_shader_quad_control.adoc b/appendices/VK_KHR_shader_quad_control.adoc
index 69e771b6..e1772672 100644
--- a/appendices/VK_KHR_shader_quad_control.adoc
+++ b/appendices/VK_KHR_shader_quad_control.adoc
@@ -29,6 +29,9 @@ require helper invocations participate in group operations.
include::{generated}/interfaces/VK_KHR_shader_quad_control.adoc[]
+=== New SPIR-V Capabilities
+
+ * <<spirvenv-capabilities-table-QuadControlKHR,QuadControlKHR>>
=== Version History
diff --git a/appendices/VK_KHR_shader_subgroup_rotate.adoc b/appendices/VK_KHR_shader_subgroup_rotate.adoc
index bf372ac7..ba4bd154 100644
--- a/appendices/VK_KHR_shader_subgroup_rotate.adoc
+++ b/appendices/VK_KHR_shader_subgroup_rotate.adoc
@@ -5,7 +5,7 @@
include::{generated}/meta/{refprefix}VK_KHR_shader_subgroup_rotate.adoc[]
*Last Modified Date*::
- 2023-06-20
+ 2024-01-29
*IP Status*::
No known IP claims.
*Contributors*::
@@ -16,6 +16,7 @@ include::{generated}/meta/{refprefix}VK_KHR_shader_subgroup_rotate.adoc[]
- Jan-Harald Fredriksen, Arm Ltd.
- Graeme Leese, Broadcom
- Tom Olson, Arm Ltd.
+ - Spencer Fricke, LunarG Inc.
This extension adds support for the subgroup rotate instruction defined in
SPV_KHR_subgroup_rotate.
@@ -28,5 +29,8 @@ include::{generated}/interfaces/VK_KHR_shader_subgroup_rotate.adoc[]
=== Version History
+ * Revision 2, 2024-01-29 (Kévin Petit)
+ ** Add ename:VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR and
+ ename:VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR
* Revision 1, 2023-06-20 (Kévin Petit)
** Initial revision
diff --git a/appendices/VK_KHR_video_decode_av1.adoc b/appendices/VK_KHR_video_decode_av1.adoc
new file mode 100644
index 00000000..97209d4f
--- /dev/null
+++ b/appendices/VK_KHR_video_decode_av1.adoc
@@ -0,0 +1,39 @@
+// Copyright 2023-2024 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_video_decode_av1.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+ 2024-01-02
+*IP Status*::
+ No known IP claims.
+*Contributors*::
+ - Ahmed Abdelkhalek, AMD
+ - Benjamin Cheng, AMD
+ - Ho Hin Lau, AMD
+ - Lynne Iribarren, Independent
+ - David Airlie, Red Hat, Inc.
+ - Ping Liu, Intel
+ - Srinath Kumarapuram, NVIDIA
+ - Vassili Nikolaev, NVIDIA
+ - Tony Zlatinski, NVIDIA
+ - Charlie Turner, Igalia
+ - Daniel Almeida, Collabora
+ - Nicolas Dufresne, Collabora
+ - Daniel Rakos, RasterGrid
+
+=== Description
+
+This extension builds upon the `apiext:VK_KHR_video_decode_queue` extension
+by adding support for decoding elementary video stream sequences compliant
+with the AV1 video compression standard.
+
+include::{generated}/interfaces/VK_KHR_video_decode_av1.adoc[]
+
+=== Version History
+
+ * Revision 1, 2024-01-02 (Daniel Rakos)
+ ** Internal revisions
diff --git a/appendices/boilerplate.adoc b/appendices/boilerplate.adoc
index 90eb9e05..12ba8fcf 100644
--- a/appendices/boilerplate.adoc
+++ b/appendices/boilerplate.adoc
@@ -448,5 +448,7 @@ associated with the externally-provided video compression standards.
| `vulkan_video_codec_h265std` | ITU-T H.265 common definitions | `<vk_video/vulkan_video_codec_h265std.h>` | apiext:VK_KHR_video_decode_h265, apiext:VK_KHR_video_encode_h265
| `vulkan_video_codec_h265std_decode` | ITU-T H.265 decode-specific definitions | `<vk_video/vulkan_video_codec_h265std_decode.h>` | apiext:VK_KHR_video_decode_h265
| `vulkan_video_codec_h265std_encode` | ITU-T H.265 encode-specific definitions | `<vk_video/vulkan_video_codec_h265std_encode.h>` | apiext:VK_KHR_video_encode_h265
+| `vulkan_video_codec_av1std` | AV1 common definitions | `<vk_video/vulkan_video_codec_av1std.h>` | apiext:VK_KHR_video_decode_av1
+| `vulkan_video_codec_av1std_decode` | AV1 decode-specific definitions | `<vk_video/vulkan_video_codec_av1std_decode.h>` | apiext:VK_KHR_video_decode_av1
|====
endif::VKSC_VERSION_1_0[]
diff --git a/appendices/credits.adoc b/appendices/credits.adoc
index 88578541..b642a054 100644
--- a/appendices/credits.adoc
+++ b/appendices/credits.adoc
@@ -217,7 +217,7 @@ endif::VKSC_VERSION_1_0[]
* Hai Nguyen, Google (versions 1.2, 1.3)
* Hans-Kristian Arntzen, Valve Software (versions 1.1, 1.2, 1.3)
* Henri Verbeet, Codeweavers (version 1.2)
- * Huei Long Wang, Huawei (version 1.3)
+ * Wyvern Wang, Huawei (version 1.3)
* Hwanyong Lee, Kyungpook National University (version 1.0)
* Iago Toral, Igalia (versions 1.1, 1.2)
* Ian Elliott, Google (versions 1.0, 1.1, 1.2)
diff --git a/appendices/glossary.adoc b/appendices/glossary.adoc
index d0515ab2..7449fca0 100644
--- a/appendices/glossary.adoc
+++ b/appendices/glossary.adoc
@@ -2095,6 +2095,9 @@ MV::
NALU::
Network Abstraction Layer Unit
+OBU::
+ Open Bitstream Unit
+
PCM::
Pulse-Code Modulation
diff --git a/appendices/spirvenv.adoc b/appendices/spirvenv.adoc
index 861c395c..b70e155d 100644
--- a/appendices/spirvenv.adoc
+++ b/appendices/spirvenv.adoc
@@ -2090,12 +2090,12 @@ ifdef::VK_QCOM_image_processing2[]
asampler object that included
slink:VkSamplerBlockMatchWindowCreateInfoQCOM in the pname:pNext chain.
endif::VK_QCOM_image_processing2[]
-ifdef:VK_KHR_shader_maximal_reconvergence[]
+ifdef::VK_KHR_shader_maximal_reconvergence[]
* [[VUID-{refpage}-MaximallyReconvergesKHR-09565]]
The execution mode code:MaximallyReconvergesKHR must: not be applied to
an entry point unless the entry point does not execute any
<<ray-tracing-repack,_invocation repack instructions_>>.
-endif:VK_KHR_shader_maximal_reconvergence[]
+endif::VK_KHR_shader_maximal_reconvergence[]
ifdef::VK_KHR_shader_subgroup_rotate[]
* [[VUID-{refpage}-shaderSubgroupRotateClustered-09566]]
If <<features-shaderSubgroupRotateClustered,
diff --git a/chapters/VK_KHR_surface/wsi.adoc b/chapters/VK_KHR_surface/wsi.adoc
index c96d3235..fba9dd8e 100644
--- a/chapters/VK_KHR_surface/wsi.adoc
+++ b/chapters/VK_KHR_surface/wsi.adoc
@@ -1705,6 +1705,8 @@ otherwise intends to stop presenting for a time.
pname:fullScreenExclusive set to
ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
****
+
+include::{generated}/validity/protos/vkReleaseFullScreenExclusiveModeEXT.adoc[]
--
endif::VK_EXT_full_screen_exclusive[]
diff --git a/chapters/accelstructures.adoc b/chapters/accelstructures.adoc
index b9f6cc7f..570186f1 100644
--- a/chapters/accelstructures.adoc
+++ b/chapters/accelstructures.adoc
@@ -575,8 +575,8 @@ not modified.
* [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03654]]
pname:type must: not be ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
* [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-pGeometries-03788]]
- Only one of pname:pGeometries or pname:ppGeometries can: be a valid
- pointer, the other must: be `NULL`
+ If pname:geometryCount is not `0`, exactly one of pname:pGeometries or
+ pname:ppGeometries must: be a valid pointer, the other must: be `NULL`
* [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03789]]
If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, the
pname:geometryType member of elements of either pname:pGeometries or
@@ -1673,8 +1673,8 @@ ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR.
The pname:buffer used to create each acceleration structure in
pname:pAccelerationStructures must: be bound to device memory
* [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-query-04880]]
- The sum of pname:query plus pname:accelerationStructureCount must: be
- less than or equal to the number of queries in pname:queryPool
+ The sum of pname:firstQuery plus pname:accelerationStructureCount must:
+ be less than or equal to the number of queries in pname:queryPool
include::{chapters}/commonvalidity/write_acceleration_structure_properties_common.adoc[]
****
diff --git a/chapters/commonvalidity/pipeline_barrier_common.adoc b/chapters/commonvalidity/pipeline_barrier_common.adoc
index a2db85c6..5ddb3ce0 100644
--- a/chapters/commonvalidity/pipeline_barrier_common.adoc
+++ b/chapters/commonvalidity/pipeline_barrier_common.adoc
@@ -91,8 +91,10 @@ ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
ifdef::VK_EXT_shader_tile_image,VK_KHR_dynamic_rendering[]
If
ifdef::VK_EXT_shader_tile_image[]
- neither the <<features-shaderTileImageColorReadAccess,
- pname:shaderTileImageColorReadAccess>> nor
+ none of the <<features-shaderTileImageColorReadAccess,
+ pname:shaderTileImageColorReadAccess>>,
+ <<features-shaderTileImageStencilReadAccess,
+ pname:shaderTileImageStencilReadAccess>>, or
<<features-shaderTileImageDepthReadAccess,
pname:shaderTileImageDepthReadAccess>> features are enabled,
endif::VK_EXT_shader_tile_image[]
diff --git a/chapters/descriptorsets.adoc b/chapters/descriptorsets.adoc
index d77ff45b..37fc2a7c 100644
--- a/chapters/descriptorsets.adoc
+++ b/chapters/descriptorsets.adoc
@@ -1127,11 +1127,6 @@ ifdef::VK_KHR_push_descriptor[]
endif::VK_KHR_push_descriptor[]
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03004]]
If an element of pname:pBindingFlags includes
- ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, then all
- other elements of slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings
- must: have a smaller value of pname:binding
- * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-09379]]
- If an element of pname:pBindingFlags includes
ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, then it must:
be the element with the highest pname:binding number
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformBufferUpdateAfterBind-03005]]
@@ -3112,11 +3107,6 @@ ignored.
* [[VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-descriptorSetCount-03045]]
If pname:descriptorSetCount is not zero, pname:descriptorSetCount must:
equal slink:VkDescriptorSetAllocateInfo::pname:descriptorSetCount
- * [[VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-pSetLayouts-03046]]
- If slink:VkDescriptorSetAllocateInfo::pname:pSetLayouts[i] has a
- variable-sized descriptor binding, then pname:pDescriptorCounts[i] must:
- be less than or equal to the descriptor count specified for that binding
- when the descriptor set layout was created
****
include::{generated}/validity/structs/VkDescriptorSetVariableDescriptorCountAllocateInfo.adoc[]
@@ -5893,13 +5883,9 @@ ifdef::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
times
slink:VkSamplerYcbcrConversionImageFormatProperties::pname:combinedImageSamplerDescriptorCount
endif::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
- * [[VUID-vkGetDescriptorEXT-pDescriptor-08016]]
- pname:pDescriptor must: be a valid pointer to an array of at least
- pname:dataSize bytes
* [[VUID-vkGetDescriptorEXT-pDescriptorInfo-09507]]
If pname:pDescriptorInfo->type is
- ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER and
- pname:pDescriptorInfo->data.pCombinedImageSampler is `NULL` or it has a
+ ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER and it has a
pname:imageView that is dlink:VK_NULL_HANDLE then pname:dataSize must:
be equal to the size of
slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:combinedImageSamplerDescriptorSize
diff --git a/chapters/features.adoc b/chapters/features.adoc
index 9b9c55f4..be87d683 100644
--- a/chapters/features.adoc
+++ b/chapters/features.adoc
@@ -8275,7 +8275,7 @@ ifdef::VK_KHR_line_rasterization,VK_EXT_line_rasterization[]
* `apiext:VK_KHR_line_rasterization` or `apiext:VK_EXT_line_rasterization`
extension, if the <<features-extendedDynamicState3LineRasterizationMode,
pname:extendedDynamicState3LineRasterizationMode>> feature is supported.
- * `apiext:VK_KHR_line_rasterization` or `apiext:VK_EXT_line_rasterization
+ * `apiext:VK_KHR_line_rasterization` or `apiext:VK_EXT_line_rasterization`
extension, if the <<features-extendedDynamicState3LineStippleEnable,
pname:extendedDynamicState3LineStippleEnable>> feature is supported.
endif::VK_KHR_line_rasterization,VK_EXT_line_rasterization[]
diff --git a/chapters/introduction.adoc b/chapters/introduction.adoc
index eab9071b..11477347 100644
--- a/chapters/introduction.adoc
+++ b/chapters/introduction.adoc
@@ -212,6 +212,11 @@ ITU-T.
_H.265 High Efficiency Video Coding_ (August, 2021).
https://www.itu.int/rec/T-REC-H.265-202108-S/ .
+[[aomedia-av1]]
+Alliance for Open Media.
+_AV1 Bitstream & Decoding Process Specification_ (January 8, 2019).
+https://aomediacodec.github.io/av1-spec/av1-spec.pdf .
+
[[vulkan-registry]] Jon Leech.
_The Khronos Vulkan API Registry_ (February 26, 2023).
https://registry.khronos.org/vulkan/specs/1.3/registry.html .
diff --git a/chapters/limits.adoc b/chapters/limits.adoc
index 3387b3f7..c893507b 100644
--- a/chapters/limits.adoc
+++ b/chapters/limits.adoc
@@ -1304,6 +1304,35 @@ supported, pname:supportedOperations must: include <<features-subgroup-quad,
ename:VK_SUBGROUP_FEATURE_QUAD_BIT>>.
endif::VK_KHR_shader_quad_control[]
+ifdef::VK_KHR_shader_subgroup_rotate[]
+If apiext:VK_KHR_shader_subgroup_rotate is supported, and the implementation
+advertises support with a slink:VkExtensionProperties::pname:specVersion
+greater than or equal to 2, and <<features-shaderSubgroupRotate,
+pname:shaderSubgroupRotate>> is supported,
+ename:VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR must: be returned in
+pname:subgroupSupportedOperations.
+If apiext:VK_KHR_shader_subgroup_rotate is supported, and the implementation
+advertises support with a slink:VkExtensionProperties::pname:specVersion
+greater than or equal to 2, and <<features-shaderSubgroupRotateClustered,
+pname:shaderSubgroupRotateClustered>> is supported,
+ename:VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR must: be returned in
+pname:subgroupSupportedOperations.
+
+[NOTE]
+.Note
+====
+ename:VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR and
+ename:VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR were added in version 2
+of the apiext:VK_KHR_shader_subgroup_rotate extension, after the initial
+release, so there are implementations that do not advertise these bits.
+Applications should use the <<features-shaderSubgroupRotate,
+pname:shaderSubgroupRotate>> and <<features-shaderSubgroupRotateClustered,
+pname:shaderSubgroupRotateClustered>> features to determine and enable
+support.
+These bits are advertised here for consistency and for future dependencies.
+====
+endif::VK_KHR_shader_subgroup_rotate[]
+
include::{generated}/validity/structs/VkPhysicalDeviceSubgroupProperties.adoc[]
--
@@ -1352,6 +1381,15 @@ ifdef::VK_NV_shader_subgroup_partitioned[]
accept SPIR-V shader modules containing the
code:GroupNonUniformPartitionedNV capability.
endif::VK_NV_shader_subgroup_partitioned[]
+ifdef::VK_KHR_shader_subgroup_rotate[]
+ * [[features-subgroup-rotate]] ename:VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR
+ specifies the device will accept SPIR-V shader modules containing the
+ code:GroupNonUniformRotateKHR capability.
+ * [[features-subgroup-rotate-clustered]]
+ ename:VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR specifies the device
+ will accept SPIR-V shader modules that use the code:ClusterSize operand
+ to code:OpGroupNonUniformRotateKHR.
+endif::VK_KHR_shader_subgroup_rotate[]
--
[open,refpage='VkSubgroupFeatureFlags',desc='Bitmask of VkSubgroupFeatureFlagBits',type='flags']
diff --git a/chapters/pipelines.adoc b/chapters/pipelines.adoc
index 8412ae31..84cbd77e 100755
--- a/chapters/pipelines.adoc
+++ b/chapters/pipelines.adoc
@@ -3447,10 +3447,11 @@ endif::VK_EXT_extended_dynamic_state3[]
<<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
state>>, pname:layout must: be a valid slink:VkPipelineLayout handle
* [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06603]]
- If <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization
- shader state>>, <<pipelines-graphics-subsets-fragment-shader, fragment
- shader state>>, or <<pipelines-graphics-subsets-fragment-output,
- fragment output state>>,
+ If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+ pre-rasterization shader state>>,
+ <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+ or <<pipelines-graphics-subsets-fragment-output, fragment output
+ state>>,
ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
and pname:renderPass is not dlink:VK_NULL_HANDLE,
endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
@@ -3808,6 +3809,16 @@ endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
created with ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
the pname:pMultisampleState used to create that library must: be
_identically defined_ pname:pMultisampleState
+ * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-09567]]
+ If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+ was created with
+ ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT and
+ a value of pname:pMultisampleState->sampleShadingEnable equal
+ ename:VK_TRUE, and if
+ slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+ ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+ pname:pMultisampleState must: be _identically defined_ to that used to
+ create the library
ifdef::VK_KHR_fragment_shading_rate[]
* [[VUID-VkGraphicsPipelineCreateInfo-flags-06638]]
If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
diff --git a/chapters/primsrast.adoc b/chapters/primsrast.adoc
index 4d8947f6..d9d2cf28 100644
--- a/chapters/primsrast.adoc
+++ b/chapters/primsrast.adoc
@@ -2659,39 +2659,39 @@ pname:lineStippleFactor and pname:lineStipplePattern are ignored.
.Valid Usage
****
- * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02768]]
+ * [[VUID-VkPipelineRasterizationLineStateCreateInfoKHR-lineRasterizationMode-02768]]
If pname:lineRasterizationMode is
ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_KHR, then the
<<features-rectangularLines, pname:rectangularLines>> feature must: be
enabled
- * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02769]]
+ * [[VUID-VkPipelineRasterizationLineStateCreateInfoKHR-lineRasterizationMode-02769]]
If pname:lineRasterizationMode is
ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_KHR, then the
<<features-bresenhamLines, pname:bresenhamLines>> feature must: be
enabled
- * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02770]]
+ * [[VUID-VkPipelineRasterizationLineStateCreateInfoKHR-lineRasterizationMode-02770]]
If pname:lineRasterizationMode is
ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR, then the
<<features-smoothLines, pname:smoothLines>> feature must: be enabled
- * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02771]]
+ * [[VUID-VkPipelineRasterizationLineStateCreateInfoKHR-stippledLineEnable-02771]]
If pname:stippledLineEnable is ename:VK_TRUE and
pname:lineRasterizationMode is
ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_KHR, then the
<<features-stippledRectangularLines, pname:stippledRectangularLines>>
feature must: be enabled
- * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02772]]
+ * [[VUID-VkPipelineRasterizationLineStateCreateInfoKHR-stippledLineEnable-02772]]
If pname:stippledLineEnable is ename:VK_TRUE and
pname:lineRasterizationMode is
ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_KHR, then the
<<features-stippledBresenhamLines, pname:stippledBresenhamLines>>
feature must: be enabled
- * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02773]]
+ * [[VUID-VkPipelineRasterizationLineStateCreateInfoKHR-stippledLineEnable-02773]]
If pname:stippledLineEnable is ename:VK_TRUE and
pname:lineRasterizationMode is
ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR, then the
<<features-stippledSmoothLines, pname:stippledSmoothLines>> feature
must: be enabled
- * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02774]]
+ * [[VUID-VkPipelineRasterizationLineStateCreateInfoKHR-stippledLineEnable-02774]]
If pname:stippledLineEnable is ename:VK_TRUE and
pname:lineRasterizationMode is
ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_KHR, then the
@@ -3277,7 +3277,7 @@ values used to create the currently active pipeline.
.Valid Usage
****
- * [[VUID-vkCmdSetLineStippleEXT-lineStippleFactor-02776]]
+ * [[VUID-vkCmdSetLineStippleKHR-lineStippleFactor-02776]]
pname:lineStippleFactor must: be in the range [eq]#[1,256]#
****
diff --git a/chapters/renderpass.adoc b/chapters/renderpass.adoc
index cb740002..be51f870 100644
--- a/chapters/renderpass.adoc
+++ b/chapters/renderpass.adoc
@@ -5321,8 +5321,13 @@ parameters that are identical to those specified here.
.Valid Usage
****
* [[VUID-VkFramebufferAttachmentImageInfo-viewFormatCount-09536]]
- If pname:viewFormatCount is not 0, each element of pname:pViewFormats
- must: not be ename:VK_FORMAT_UNDEFINED
+ If pname:viewFormatCount is not 0,
+ifdef::VK_ANDROID_external_format_resolve[]
+ and the render pass is not being used with an external format resolve
+ attachment,
+endif::VK_ANDROID_external_format_resolve[]
+ each element of pname:pViewFormats must: not be
+ ename:VK_FORMAT_UNDEFINED
****
include::{generated}/validity/structs/VkFramebufferAttachmentImageInfo.adoc[]
diff --git a/chapters/video/av1_decode.adoc b/chapters/video/av1_decode.adoc
new file mode 100644
index 00000000..c3407f84
--- /dev/null
+++ b/chapters/video/av1_decode.adoc
@@ -0,0 +1,613 @@
+// Copyright 2023-2024 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[decode-av1]]
+== AV1 Decode Operations
+
+Video decode operations using an <<decode-av1-profile,AV1 decode profile>>
+can: be used to decode elementary video stream sequences compliant to the
+<<aomedia-av1,AV1 Specification>>.
+
+[NOTE]
+.Note
+====
+Refer to the <<preamble,Preamble>> for information on how the Khronos
+Intellectual Property Rights Policy relates to normative references to
+external materials not created by Khronos.
+====
+
+This process is performed according to the <<decode-operation-steps,video
+decode operation steps>> with the codec-specific semantics defined in
+section 7 of the <<aomedia-av1,AV1 Specification>>:
+
+ * Syntax elements, derived values, and other parameters are applied from
+ the following structures:
+ ** The code:StdVideoAV1SequenceHeader structure stored in the bound video
+ session parameters object specifying the
+ <<decode-av1-active-sequence-header,active sequence header>>.
+ ** The code:StdVideoDecodeAV1PictureInfo structure specifying the
+ <<decode-av1-picture-info,AV1 picture information>>.
+ ** The code:StdVideoDecodeAV1ReferenceInfo structures specifying the
+ <<decode-av1-reference-info,AV1 reference information>> corresponding
+ to the optional <<reconstructed-picture,reconstructed picture>> and any
+ <<active-reference-pictures,active reference pictures>>.
+ * The contents of the provided video bitstream buffer range are
+ interpreted as defined in the <<decode-av1-bitstream-data-access,AV1
+ Decode Bitstream Data Access>> section.
+ * Picture data in the <<video-picture-resources,video picture resources>>
+ corresponding to the used <<decode-av1-active-reference-picture-info,
+ active reference pictures>>, <<decode-av1-output-picture-info,decode
+ output picture>>, and optional <<decode-av1-reconstructed-picture-info,
+ reconstructed picture>> is accessed as defined in the
+ <<decode-av1-picture-data-access,AV1 Decode Picture Data Access>>
+ section.
+ * The decision on <<decode-ref-pic-setup,reference picture setup>> is made
+ according to the parameters specified in the
+ <<decode-av1-ref-pic-setup,AV1 picture information>>.
+
+If the parameters and the bitstream adhere to the syntactic and semantic
+requirements defined in the corresponding sections of the <<aomedia-av1,AV1
+Specification>>, as described above, and the <<dpb-slot,DPB slots>>
+associated with the <<active-reference-pictures,active reference pictures>>
+all refer to <<dpb-slot-states,valid picture references>>, then the video
+decode operation will complete successfully.
+Otherwise, the video decode operation may: complete
+<<decode-unsuccessful,unsuccessfully>>.
+
+
+[[decode-av1-bitstream-data-access]]
+=== AV1 Decode Bitstream Data Access
+
+The video bitstream buffer range should: contain one or more frame OBUs,
+comprised of a frame header OBU and tile group OBU, that together represent
+an entire frame, as defined in sections 5.10, 5.9, and 5.11, and this data
+is interpreted as defined in sections 6.9, 6.8, and 6.10 of the
+<<aomedia-av1,AV1 Specification>>, respectively.
+
+The offset specified in
+slink:VkVideoDecodeAV1PictureInfoKHR::pname:frameHeaderOffset should:
+specify the starting offset of the frame header OBU of the frame.
+
+[NOTE]
+.Note
+====
+When the tiles of the frame are encoded into multiple tile groups, each
+frame OBU has a separate frame header OBU but their content is expected to
+match per the requirements of the <<aomedia-av1,AV1 Specification>>.
+Accordingly, the offset specified in pname:frameHeaderOffset can: be the
+offset of any of the otherwise identical frame header OBUs when multiple
+tile groups are present.
+====
+
+The offsets and sizes provided in
+slink:VkVideoDecodeAV1PictureInfoKHR::pname:pTileOffsets and
+slink:VkVideoDecodeAV1PictureInfoKHR::pname:pTileSizes, respectively,
+should: specify the starting offsets and sizes corresponding to each tile
+within the video bitstream buffer range.
+
+
+[[decode-av1-picture-data-access]]
+=== AV1 Decode Picture Data Access
+
+Accesses to image data within a video picture resource happen at the
+granularity indicated by
+slink:VkVideoCapabilitiesKHR::pname:pictureAccessGranularity, as returned by
+flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the used <<video-profiles,
+video profile>>.
+Accordingly, the complete image subregion of a
+<<decode-output-picture,decode output picture>>,
+<<reference-picture,reference picture>>, or
+<<reconstructed-picture,reconstructed picture>> accessed by video coding
+operations using an <<decode-av1-profile,AV1 decode profile>> is defined as
+the set of texels within the coordinate range:
+
+ {empty}:: [eq]#([0,pname:endX),[0,pname:endY))#
+
+Where:
+
+ * [eq]#pname:endX# equals [eq]#pname:codedExtent.width# rounded up to the
+ nearest integer multiple of pname:pictureAccessGranularity.width and
+ clamped to the width of the image subresource
+ <<video-image-subresource-reference,referred>> to by the corresponding
+ slink:VkVideoPictureResourceInfoKHR structure;
+ * [eq]#endY# equals [eq]#pname:codedExtent.height# rounded up to the
+ nearest integer multiple of pname:pictureAccessGranularity.height and
+ clamped to the height of the image subresource
+ <<video-image-subresource-reference, referred>> to by the corresponding
+ slink:VkVideoPictureResourceInfoKHR structure;
+
+Where pname:codedExtent is the member of the
+slink:VkVideoPictureResourceInfoKHR structure corresponding to the picture.
+
+In case of video decode operations using an <<decode-av1-profile,AV1 decode
+profile>>, any access to a picture at the coordinates
+[eq]#(pname:x,pname:y)#, as defined by the <<aomedia-av1,AV1
+Specification>>, is an access to the image subresource
+<<video-image-subresource-reference,referred>> to by the corresponding
+slink:VkVideoPictureResourceInfoKHR structure at the texel coordinates
+[eq]#(pname:x,pname:y)#.
+
+
+[[decode-av1-reference-names]]
+=== AV1 Reference Names and Semantics
+
+Individual reference frames used in the decoding process have different
+semantics, as defined in section 6.10.24 of the <<aomedia-av1,AV1
+Specification>>.
+The AV1 semantics associated with a reference picture are indicated by the
+corresponding enumeration constant defined in the Video Std enumeration type
+code:StdVideoAV1ReferenceName:
+
+ * code:STD_VIDEO_AV1_REFERENCE_NAME_INTRA_FRAME identifies the reference
+ used for intra coding (code:INTRA_FRAME), as defined in sections 2 and
+ 7.11.2 of the <<aomedia-av1,AV1 Specification>>.
+ * All other enumeration constants refer to forward or backward references
+ used for inter coding, as defined in sections 2 and 7.11.3 of the
+ <<aomedia-av1,AV1 Specification>>:
+ ** code:STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME identifies the
+ code:LAST_FRAME reference
+ ** code:STD_VIDEO_AV1_REFERENCE_NAME_LAST2_FRAME identifies the
+ code:LAST2_FRAME reference
+ ** code:STD_VIDEO_AV1_REFERENCE_NAME_LAST3_FRAME identifies the
+ code:LAST3_FRAME reference
+ ** code:STD_VIDEO_AV1_REFERENCE_NAME_GOLDEN_FRAME identifies the
+ code:GOLDEN_FRAME reference
+ ** code:STD_VIDEO_AV1_REFERENCE_NAME_BWDREF_FRAME identifies the
+ code:BWDREF_FRAME reference
+ ** code:STD_VIDEO_AV1_REFERENCE_NAME_ALTREF2_FRAME identifies the
+ code:ALTREF2_FRAME reference
+ ** code:STD_VIDEO_AV1_REFERENCE_NAME_ALTREF_FRAME identifies the
+ code:ALTREF_FRAME reference
+
+These enumeration constants are not directly used in any APIs but are used
+to indirectly index into certain Video Std and Vulkan API parameter arrays.
+
+
+[[decode-av1-profile]]
+=== AV1 Decode Profile
+
+[open,refpage='VkVideoDecodeAV1ProfileInfoKHR',desc='Structure specifying AV1 decode profile',type='structs']
+--
+A video profile supporting AV1 video decode operations is specified by
+setting slink:VkVideoProfileInfoKHR::pname:videoCodecOperation to
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR and adding a
+sname:VkVideoDecodeAV1ProfileInfoKHR structure to the
+slink:VkVideoProfileInfoKHR::pname:pNext chain.
+
+The sname:VkVideoDecodeAV1ProfileInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeAV1ProfileInfoKHR.adoc[]
+
+ * pname:sType is a elink:VkStructureType value identifying this structure.
+ * pname:pNext is `NULL` or a pointer to a structure extending this
+ structure.
+ * pname:stdProfile is a code:StdVideoAV1Profile value specifying the AV1
+ codec profile, as defined in section A.2 of the <<aomedia-av1,AV1
+ Specification>>.
+ * [[decode-av1-film-grain-support]] pname:filmGrainSupport specifies
+ whether AV1 film grain, as defined in section 7.8.3 of the
+ <<aomedia-av1,AV1 Specification>>, can: be used with the video profile.
+ When this member is set to ename:VK_TRUE, video session objects created
+ against the video profile will be able to decode pictures that have
+ <<decode-av1-film-grain,film grain>> enabled.
+
+[NOTE]
+.Note
+====
+Enabling pname:filmGrainSupport may: increase the memory requirements of
+video sessions and/or video picture resources on some implementations.
+====
+
+include::{generated}/validity/structs/VkVideoDecodeAV1ProfileInfoKHR.adoc[]
+--
+
+
+=== AV1 Decode Capabilities
+
+[open,refpage='VkVideoDecodeAV1CapabilitiesKHR',desc='Structure describing AV1 decode capabilities',type='structs']
+--
+When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
+capabilities for an <<decode-av1-profile,AV1 decode profile>>, the
+slink:VkVideoCapabilitiesKHR::pname:pNext chain must: include a
+sname:VkVideoDecodeAV1CapabilitiesKHR structure that will be filled with the
+profile-specific capabilities.
+
+The sname:VkVideoDecodeAV1CapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeAV1CapabilitiesKHR.adoc[]
+
+ * pname:sType is a elink:VkStructureType value identifying this structure.
+ * pname:pNext is `NULL` or a pointer to a structure extending this
+ structure.
+ * pname:maxLevel is a code:StdVideoAV1Level value specifying the maximum
+ AV1 level supported by the profile, as defined in section A.3 of the
+ <<aomedia-av1,AV1 Specification>>.
+
+include::{generated}/validity/structs/VkVideoDecodeAV1CapabilitiesKHR.adoc[]
+--
+
+
+[[decode-av1-parameter-sets]]
+=== AV1 Decode Parameter Sets
+
+<<video-session-parameters,Video session parameters>> objects created with
+the video codec operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR
+contain a single instance of the following parameter set:
+
+:operationType: decode
+include::{chapters}/video/av1_parameter_sets.adoc[]
+
+
+[open,refpage='VkVideoDecodeAV1SessionParametersCreateInfoKHR',desc='Structure specifies AV1 decoder parameter set information',type='structs']
+--
+When a <<video-session-parameters,video session parameters>> object is
+created with the codec operation
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, the
+slink:VkVideoSessionParametersCreateInfoKHR::pname:pNext chain must: include
+a sname:VkVideoDecodeAV1SessionParametersCreateInfoKHR structure specifying
+the contents of the object.
+
+The sname:VkVideoDecodeAV1SessionParametersCreateInfoKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoDecodeAV1SessionParametersCreateInfoKHR.adoc[]
+
+ * pname:sType is a elink:VkStructureType value identifying this structure.
+ * pname:pNext is `NULL` or a pointer to a structure extending this
+ structure.
+ * pname:pStdSequenceHeader is a pointer to a
+ code:StdVideoAV1SequenceHeader structure describing the
+ <<decode-av1-sequence-header,AV1 sequence header>> entry to store in the
+ created object.
+
+[NOTE]
+.Note
+====
+As AV1 video session parameters objects will only ever contain a single AV1
+sequence header, this has to be specified at object creation time and such
+video session parameters objects cannot be updated using the
+flink:vkUpdateVideoSessionParametersKHR command.
+When a new AV1 sequence header is decoded from the input video bitstream the
+application needs to create a new video session parameters object to store
+it.
+====
+
+include::{generated}/validity/structs/VkVideoDecodeAV1SessionParametersCreateInfoKHR.adoc[]
+--
+
+
+=== AV1 Decoding Parameters
+
+[open,refpage='VkVideoDecodeAV1PictureInfoKHR',desc='Structure specifies AV1 picture information when decoding a frame',type='structs']
+--
+The sname:VkVideoDecodeAV1PictureInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeAV1PictureInfoKHR.adoc[]
+
+ * pname:sType is a elink:VkStructureType value identifying this structure.
+ * pname:pNext is `NULL` or a pointer to a structure extending this
+ structure.
+ * pname:pStdPictureInfo is a pointer to a
+ code:StdVideoDecodeAV1PictureInfo structure specifying
+ <<decode-av1-picture-info,AV1 picture information>>.
+ * pname:referenceNameSlotIndices is an array of seven
+ (ename:VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR, which is equal to the
+ Video Std definition code:STD_VIDEO_AV1_REFS_PER_FRAME) signed integer
+ values specifying the index of the <<dpb-slot, DPB slot>> or a negative
+ integer value for each <<decode-av1-reference-names,AV1 reference name>>
+ used for inter coding.
+ In particular, the DPB slot index for the AV1 reference name code:frame
+ is specified in pname:referenceNameSlotIndices[code:frame -
+ code:STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME].
+ * pname:frameHeaderOffset is the byte offset of the AV1 frame header OBU,
+ as defined in section 5.9 of the <<aomedia-av1,AV1 Specification>>,
+ within the video bitstream buffer range specified in
+ slink:VkVideoDecodeInfoKHR.
+ * pname:tileCount is the number of elements in pname:pTileOffsets and
+ pname:pTileSizes.
+ * pname:pTileOffsets is a pointer to an array of pname:tileCount integers
+ specifying the byte offset of the tiles of the picture within the video
+ bitstream buffer range specified in slink:VkVideoDecodeInfoKHR.
+ * pname:pTileSizes is a pointer to an array of pname:tileCount integers
+ specifying the byte size of the tiles of the picture within the video
+ bitstream buffer range specified in slink:VkVideoDecodeInfoKHR.
+
+This structure is specified in the pname:pNext chain of the
+slink:VkVideoDecodeInfoKHR structure passed to flink:vkCmdDecodeVideoKHR to
+specify the codec-specific picture information for an <<decode-av1,AV1
+decode operation>>.
+
+[[decode-av1-output-picture-info]]
+Decode Output Picture Information::
+
+When this structure is specified in the pname:pNext chain of the
+slink:VkVideoDecodeInfoKHR structure passed to flink:vkCmdDecodeVideoKHR,
+the information related to the <<decode-output-picture-info,decode output
+picture>> is defined as follows:
+
+ * The image subregion used is determined according to the
+ <<decode-av1-picture-data-access,AV1 Decode Picture Data Access>>
+ section.
+ * The decode output picture is associated with the
+ <<decode-av1-picture-info,AV1 picture information>> provided in
+ pname:pStdPictureInfo.
+
+[[decode-av1-picture-info]]
+Std Picture Information::
+
+The members of the code:StdVideoDecodeAV1PictureInfo structure pointed to by
+pname:pStdPictureInfo are interpreted as follows:
+
+ * code:flags.reserved, code:reserved1, and code:reserved2 are used only
+ for padding purposes and are otherwise ignored;
+ * [[decode-av1-film-grain]] code:flags.apply_grain indicates that film
+ grain is enabled for the decoded picture, as defined in section 6.8.20
+ of the <<aomedia-av1,AV1 Specification>>;
+ * code:tg_start and code:tg_end are interpreted as defined in section
+ 6.10.1 of the <<aomedia-av1,AV1 Specification>>;
+ * code:OrderHint, code:OrderHints, and code:expectedFrameId are
+ interpreted as defined in section 6.8.2 of the <<aomedia-av1,AV1
+ Specification>>;
+ * the code:StdVideoAV1TileInfo structure pointed to by code:pTileInfo is
+ interpreted as follows:
+ ** code:flags.reserved and code:reserved1 are used only for padding
+ purposes and are otherwise ignored;
+ ** code:pMiColStarts is a pointer to an array of code:TileCols number of
+ unsigned integers that corresponds to code:MiColStarts defined in
+ section 6.8.14 of the <<aomedia-av1,AV1 Specification>>;
+ ** code:pMiRowStarts is a pointer to an array of code:TileRows number of
+ unsigned integers that corresponds to code:MiRowStarts defined in
+ section 6.8.14 of the <<aomedia-av1,AV1 Specification>>;
+ ** code:pWidthInSbsMinus1 is a pointer to an array of code:TileCols number
+ of unsigned integers that corresponds to code:width_in_sbs_minus_1
+ defined in section 6.8.14 of the <<aomedia-av1,AV1 Specification>>;
+ ** code:pHeightInSbsMinus1 is a pointer to an array of code:TileRows
+ number of unsigned integers that corresponds to
+ code:height_in_sbs_minus_1 defined in section 6.8.14 of the
+ <<aomedia-av1,AV1 Specification>>;
+ ** all other members of code:StdVideoAV1TileInfo are interpreted as
+ defined in section 6.8.14 of the <<aomedia-av1,AV1 Specification>>;
+ * the code:StdVideoAV1Quantization structure pointed to by
+ code:pQuantization is interpreted as follows:
+ ** code:flags.reserved is used only for padding purposes and is otherwise
+ ignored;
+ ** all other members of code:StdVideoAV1Quantization are interpreted as
+ defined in section 6.8.11 of the <<aomedia-av1,AV1 Specification>>;
+ * if code:flags.segmentation_enabled is set, then the
+ code:StdVideoAV1Segmentation structure pointed to by code:pSegmentation
+ is interpreted as follows:
+ ** the elements of code:FeatureEnabled are bitmasks where bit index
+ [eq]#i# of element [eq]#j# corresponds to `FeatureEnabled[i][j]` as
+ defined in section 6.8.13 of the <<aomedia-av1,AV1 Specification>>;
+ ** code:FeatureData is interpreted as defined in section 6.8.13 of the
+ <<aomedia-av1,AV1 Specification>>;
+ * the code:StdVideoAV1LoopFilter structure pointed to by code:pLoopFilter
+ is interpreted as follows:
+ ** code:flags.reserved is used only for padding purposes and is otherwise
+ ignored;
+ ** code:update_ref_delta is a bitmask where bit index [eq]#i# is
+ interpreted as the value of code:update_ref_delta corresponding to
+ element [eq]#i# of code:loop_filter_ref_deltas as defined in section
+ 6.8.10 of the <<aomedia-av1,AV1 Specification>>;
+ ** code:update_mode_delta is a bitmask where bit index [eq]#i# is
+ interpreted as the value of code:update_mode_delta corresponding to
+ element [eq]#i# of code:loop_filter_mode_deltas as defined in section
+ 6.8.10 of the <<aomedia-av1,AV1 Specification>>;
+ ** all other members of code:StdVideoAV1LoopFilter are interpreted as
+ defined in section 6.8.10 of the <<aomedia-av1,AV1 Specification>>;
+ * if code:flags.enable_cdef is set in the
+ <<decode-av1-active-sequence-header,active sequence header>>, then the
+ members of the code:StdVideoAV1CDEF structure pointed to by code:pCDEF
+ are interpreted as follows:
+ ** code:cdef_y_sec_strength and code:cdef_uv_sec_strength are the
+ bitstream values of the corresponding syntax elements defined in
+ section 5.9.19 of the <<aomedia-av1,AV1 Specification>>;
+ ** all other members of code:StdVideoAV1CDEF are interpreted as defined in
+ section 6.10.14 of the <<aomedia-av1,AV1 Specification>>;
+ * the code:StdVideoAV1LoopRestoration structure pointed to by
+ code:pLoopRestoration is interpreted as defined in section 6.10.15 of
+ the <<aomedia-av1,AV1 Specification>>;
+ * the members of the code:StdVideoAV1GlobalMotion structure provided in
+ code:global_motion are interpreted as defined in section 7.10 of the
+ <<aomedia-av1,AV1 Specification>>;
+ * if code:flags.film_grain_params_present is set in the
+ <<decode-av1-active-sequence-header,active sequence header>>, then the
+ code:StdVideoAV1FilmGrain structure pointed to by code:pFilmGrain is
+ interpreted as follows:
+ ** code:flags.reserved is used only for padding purposes and is otherwise
+ ignored;
+ ** all other members of code:StdVideoAV1FilmGrain are interpreted as
+ defined in section 6.8.20 of the <<aomedia-av1,AV1 Specification>>;
+ * all other members are interpreted as defined in section 6.8 of the
+ <<aomedia-av1,AV1 Specification>>.
+
+When <<decode-av1-film-grain,film grain is enabled>> for the decoded frame,
+the code:flags.update_grain and code:film_grain_params_ref_idx values
+specified in code:StdVideoAV1FilmGrain are ignored by AV1 decode operations
+and the code:load_grain_params function, as defined in section 6.8.20 of the
+<<aomedia-av1,AV1 Specification>>, is not executed.
+Instead, the application is responsible for specifying the effective film
+grain parameters for the frame in code:StdVideoAV1FilmGrain.
+
+When <<decode-av1-film-grain,film grain is enabled>> for the decoded frame,
+the application is required to specify a different decode output picture
+resource in slink:VkVideoDecodeInfoKHR::pname:dstPictureResource compared to
+the reconstructed picture specified in
+slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource even
+if the implementation does not report support for
+ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR in
+slink:VkVideoDecodeCapabilitiesKHR::pname:flags for the video decode
+profile.
+
+[[decode-av1-ref-pic-setup]]
+Reference picture setup is controlled by the value of
+code:StdVideoDecodeAV1PictureInfo::pname:refresh_frame_flags.
+If it is not zero and a <<decode-reconstructed-picture-info,reconstructed
+picture>> is specified, then the latter is used as the target of picture
+reconstruction to <<dpb-slot-states,activate>> the <<dpb-slot,DPB slot>>
+specified in pname:pDecodeInfo->pSetupReferenceSlot->slotIndex.
+If code:StdVideoDecodeAV1PictureInfo::pname:refresh_frame_flags is zero, but
+a <<decode-reconstructed-picture-info,reconstructed picture>> is specified,
+then the corresponding picture reference associated with the <<dpb-slot,DPB
+slot>> is invalidated, as described in the <<dpb-slot-states,DPB Slot
+States>> section.
+
+[[decode-av1-active-sequence-header]]
+Active Parameter Sets::
+
+The _active sequence header_ is the <<decode-av1-sequence-header,AV1
+sequence header>> stored in the bound video session parameters object.
+
+include::{generated}/validity/structs/VkVideoDecodeAV1PictureInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeAV1DpbSlotInfoKHR',desc='Structure specifies AV1 DPB information when decoding a frame',type='structs']
+--
+The sname:VkVideoDecodeAV1DpbSlotInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeAV1DpbSlotInfoKHR.adoc[]
+
+ * pname:sType is a elink:VkStructureType value identifying this structure.
+ * pname:pNext is `NULL` or a pointer to a structure extending this
+ structure.
+ * pname:pStdReferenceInfo is a pointer to a
+ code:StdVideoDecodeAV1ReferenceInfo structure specifying
+ <<decode-av1-reference-info,AV1 reference information>>.
+
+This structure is specified in the pname:pNext chain of
+slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot, if not `NULL`, and
+the pname:pNext chain of the elements of
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots to specify the
+codec-specific reference picture information for an <<decode-av1,AV1 decode
+operation>>.
+
+[[decode-av1-active-reference-picture-info]]
+Active Reference Picture Information::
+
+When this structure is specified in the pname:pNext chain of the elements of
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots, one element is added to
+the list of <<decode-active-reference-picture-info,active reference
+pictures>> used by the video decode operation for each element of
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots as follows:
+
+ * The image subregion used is determined according to the
+ <<decode-av1-picture-data-access,AV1 Decode Picture Data Access>>
+ section.
+ * The reference picture is associated with the <<dpb-slot,DPB slot>> index
+ specified in the pname:slotIndex member of the corresponding element of
+ slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots.
+ * The reference picture is associated with the
+ <<decode-av1-reference-info,AV1 reference information>> provided in
+ pname:pStdReferenceInfo.
+
+[[decode-av1-reconstructed-picture-info]]
+Reconstructed Picture Information::
+
+When this structure is specified in the pname:pNext chain of
+slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot, the information
+related to the <<decode-reconstructed-picture-info,reconstructed picture>>
+is defined as follows:
+
+ * The image subregion used is determined according to the
+ <<decode-av1-picture-data-access,AV1 Decode Picture Data Access>>
+ section.
+ * If <<decode-av1-ref-pic-setup,reference picture setup>> is requested,
+ then the reconstructed picture is used to <<dpb-slot-states,activate>>
+ the <<dpb-slot,DPB slot>> with the index specified in
+ slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->slotIndex.
+ * The reconstructed picture is associated with the
+ <<decode-av1-reference-info,AV1 reference information>> provided in
+ pname:pStdReferenceInfo.
+
+[[decode-av1-reference-info]]
+Std Reference Information::
+
+The members of the code:StdVideoDecodeAV1ReferenceInfo structure pointed to
+by pname:pStdReferenceInfo are interpreted as follows:
+
+ * code:flags.reserved and code:reserved1 are used only for padding
+ purposes and are otherwise ignored;
+ * code:flags.disable_frame_end_update_cdf is interpreted as defined in
+ section 6.8.2 of the <<aomedia-av1,AV1 Specification>>;
+ * code:flags.segmentation_enabled is interpreted as defined in section
+ 6.8.13 of the <<aomedia-av1,AV1 Specification>>;
+ * code:frame_type is interpreted as defined in section 6.8.2 of the
+ <<aomedia-av1,AV1 Specification>>;
+ * code:RefFrameSignBias is a bitmask where bit index [eq]#i# corresponds
+ to `RefFrameSignBias[i]` as defined in section 6.8.2 of the
+ <<aomedia-av1,AV1 Specification>>;
+ * code:OrderHint is interpreted as defined in section 6.8.2 of the
+ <<aomedia-av1,AV1 Specification>>;
+ * code:SavedOrderHints is interpreted as defined in section 7.20 of the
+ <<aomedia-av1,AV1 Specification>>.
++
+[NOTE]
+.Note
+====
+When the AV1 reference information is provided for the reconstructed
+picture, certain parameters (e.g. code:frame_type) are specified both in the
+<<decode-av1-picture-info,AV1 picture information>> and in the AV1 reference
+information.
+This is necessary because unlike the AV1 picture information, which is only
+used for the purposes of the video decode operation in question, the AV1
+reference information specified for the reconstructed picture may: be
+associated with the activated DPB slot, meaning that some implementations
+may: maintain it as part of the <<reference-metadata,reference picture
+metadata>> corresponding to the video picture resource associated with the
+DPB slot.
+When the AV1 reference information is provided for an active reference
+picture, the specified parameters correspond to the parameters specified
+when the DPB slot was activated (set up) with the reference picture, as
+usual, in order to communicate these parameters for implementations that do
+not maintain any subset of these parameters as part of the DPB slot's
+<<reference-metadata,reference picture metadata>>.
+====
+
+include::{generated}/validity/structs/VkVideoDecodeAV1DpbSlotInfoKHR.adoc[]
+--
+
+
+[[decode-av1-requirements]]
+=== AV1 Decode Requirements
+
+This section describes the required: AV1 decoding capabilities for physical
+devices that have at least one queue family that supports the video codec
+operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, as returned by
+flink:vkGetPhysicalDeviceQueueFamilyProperties2 in
+slink:VkQueueFamilyVideoPropertiesKHR::pname:videoCodecOperations.
+
+.Required <<video-std-header-version,Video Std Header Versions>>
+[options="header"]
+|====
+| Video Std Header Name | Version
+| `vulkan_video_codec_av1std_decode` | 1.0.0
+|====
+
+.Required Video Capabilities
+[width="100%",cols="<35,<14,<11",options="header"]
+|====
+| Video Capability | Requirement | Requirement Type^1^
+| **slink:VkVideoCapabilitiesKHR** | |
+| pname:flags | - | min
+| pname:minBitstreamBufferOffsetAlignment | 4096 | max
+| pname:minBitstreamBufferSizeAlignment | 4096 | max
+| pname:pictureAccessGranularity | (64,64) | max
+| pname:minCodedExtent | - | max
+| pname:maxCodedExtent | - | min
+| pname:maxDpbSlots | 0 | min
+| pname:maxActiveReferencePictures | 0 | min
+| **slink:VkVideoDecodeCapabilitiesKHR** | |
+| pname:flags | ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR or
+ ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR | min
+| **slink:VkVideoDecodeAV1CapabilitiesKHR** | |
+| pname:maxLevel | code:STD_VIDEO_AV1_LEVEL_2_0 | min
+|====
+
+1::
+ The *Requirement Type* column specifies the requirement is either the
+ minimum value all implementations must: support, the maximum value all
+ implementations must: support, or the exact value all implementations
+ must: support.
+ For bitmasks a minimum value is the least bits all implementations must:
+ set, but they may: have additional bits set beyond this minimum.
diff --git a/chapters/video/av1_parameter_sets.adoc b/chapters/video/av1_parameter_sets.adoc
new file mode 100644
index 00000000..587b8f8d
--- /dev/null
+++ b/chapters/video/av1_parameter_sets.adoc
@@ -0,0 +1,30 @@
+// Copyright 2023-2024 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+// Common AV1 Parameter Set descriptions
+// "operationType" attribute specifies whether this is included in the encode or decode section
+
+[[{operationType}-av1-sequence-header]]
+
+AV1 Sequence Header::
+
+Represented by code:StdVideoAV1SequenceHeader structures and interpreted as
+follows:
+
+ * code:flags.reserved and code:reserved1 are used only for padding
+ purposes and are otherwise ignored;
+ * the code:StdVideoAV1ColorConfig structure pointed to by
+ code:pColorConfig is interpreted as follows:
+ ** code:flags.reserved and code:reserved1 are used only for padding
+ purposes and are otherwise ignored;
+ ** all other members of code:StdVideoAV1ColorConfig are interpreted as
+ defined in section 6.4.2 of the <<aomedia-av1,AV1 Specification>>;
+ * if code:flags.timing_info_present_flag is set, then the
+ code:StdVideoAV1TimingInfo structure pointed to by code:pTimingInfo is
+ interpreted as follows:
+ ** code:flags.reserved is used only for padding purposes and is otherwise
+ ignored;
+ ** all other members of code:StdVideoAV1TimingInfo are interpreted as
+ defined in section 6.4.3 of the <<aomedia-av1,AV1 Specification>>;
+ * all other members of code:StdVideoAV1SequenceHeader are interpreted as
+ defined in section 6.4 of the <<aomedia-av1,AV1 Specification>>.
diff --git a/chapters/video/decode.adoc b/chapters/video/decode.adoc
index 482bce9f..4aebbb97 100644
--- a/chapters/video/decode.adoc
+++ b/chapters/video/decode.adoc
@@ -101,6 +101,12 @@ ifdef::VK_KHR_video_decode_h265[]
codec-specific aspects of the video decoding process are performed as
defined in the <<decode-h265,H.265 Decode Operations>> section.
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+ * If the used video codec operation is
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the
+ codec-specific aspects of the video decoding process are performed as
+ defined in the <<decode-av1,AV1 Decode Operations>> section.
+endif::VK_KHR_video_decode_av1[]
[[decode-operation-steps]]
@@ -173,6 +179,21 @@ include::{generated}/api/enums/VkVideoDecodeCapabilityFlagBitsKHR.adoc[]
<<reconstructed-picture,reconstructed picture>> and
<<decode-output-picture,decode output picture>> in a video decode
operation.
+ifdef::VK_KHR_video_decode_av1[]
++
+[NOTE]
+.Note
+====
+Some video profiles allow using distinct video picture resources as the
+reconstructed picture and decode output picture in specific video decode
+operations even when the video decode profile does not support
+ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR.
+Even if the implementation only reports coincide, the decode output picture
+for <<decode-av1-film-grain,film grain>> enabled frames must be a different
+video picture resource from the reconstructed picture because film grain is
+applied outside of the coding loop.
+====
+endif::VK_KHR_video_decode_av1[]
Implementations are only required: to support one of
ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR and
@@ -519,12 +540,23 @@ endif::VK_KHR_video_maintenance1[]
pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource must: not
<<video-picture-resource-matching,match>>
* [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07141]]
- If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL` and
- slink:VkVideoDecodeCapabilitiesKHR::pname:flags does not include
- ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR, as
- returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video
- profile the bound video session was created with, then the video picture
- resources specified by pname:pDecodeInfo->dstPictureResource and
+ If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL` and none of the
+ following is true:
+ ** slink:VkVideoDecodeCapabilitiesKHR::pname:flags includes
+ ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR, as
+ returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video
+ profile the bound video session was created with
+ifdef::VK_KHR_video_decode_av1[]
+ ** the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR and
+ slink:VkVideoDecodeAV1ProfileInfoKHR::pname:filmGrainSupport set to
+ ename:VK_TRUE, and <<decode-av1-film-grain,film grain>> is enabled for
+ the decoded picture
+endif::VK_KHR_video_decode_av1[]
+
++
+then the video picture resources specified by
+ pname:pDecodeInfo->dstPictureResource and
pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource must:
<<video-picture-resource-matching,match>>
* [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07142]]
@@ -821,6 +853,77 @@ ifdef::VK_KHR_video_decode_h265[]
chain of each element of pname:pDecodeInfo->pReferenceSlots must:
include a slink:VkVideoDecodeH265DpbSlotInfoKHR structure
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+ * [[VUID-vkCmdDecodeVideoKHR-filmGrainSupport-09248]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR and
+ slink:VkVideoDecodeAV1ProfileInfoKHR::pname:filmGrainSupport set to
+ ename:VK_FALSE, then <<decode-av1-film-grain,film grain>> must: not be
+ enabled for the decoded picture
+ * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-09249]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR,
+ pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, and
+ <<decode-av1-film-grain,film grain>> is enabled for the decoded picture,
+ then the video picture resources specified by
+ pname:pDecodeInfo->dstPictureResource and
+ pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource must: not
+ <<video-picture-resource-matching,match>>
+ * [[VUID-vkCmdDecodeVideoKHR-pNext-09250]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pname:pNext
+ chain of pname:pDecodeInfo must: include a
+ slink:VkVideoDecodeAV1PictureInfoKHR structure
+ * [[VUID-vkCmdDecodeVideoKHR-frameHeaderOffset-09251]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the
+ pname:frameHeaderOffset member of the
+ slink:VkVideoDecodeAV1PictureInfoKHR structure included in the
+ pname:pNext chain of pname:pDecodeInfo must: be less than the minimum of
+ pname:pDecodeInfo->srcBufferRange
+ * [[VUID-vkCmdDecodeVideoKHR-pTileOffsets-09253]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then all elements of
+ the pname:pTileOffsets member of the
+ slink:VkVideoDecodeAV1PictureInfoKHR structure included in the
+ pname:pNext chain of pname:pDecodeInfo must: be less than
+ pname:pDecodeInfo->srcBufferRange
+ * [[VUID-vkCmdDecodeVideoKHR-pTileOffsets-09252]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then for each element
+ [eq]#i# of the pname:pTileOffsets and pname:pTileSizes members of the
+ slink:VkVideoDecodeAV1PictureInfoKHR structure included in the
+ pname:pNext chain of pname:pDecodeInfo the sum of pname:pTileOffsets[i]
+ and pname:pTileSizes[i] must: be less than or equal to
+ pname:pDecodeInfo->srcBufferRange
+ * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-09254]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR and
+ pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then the
+ pname:pNext chain of pname:pDecodeInfo->pSetupReferenceSlot must:
+ include a slink:VkVideoDecodeAV1DpbSlotInfoKHR structure
+ * [[VUID-vkCmdDecodeVideoKHR-pNext-09255]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pname:pNext
+ chain of each element of pname:pDecodeInfo->pReferenceSlots must:
+ include a slink:VkVideoDecodeAV1DpbSlotInfoKHR structure
+ * [[VUID-vkCmdDecodeVideoKHR-referenceNameSlotIndices-09262]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then each element of
+ the pname:referenceNameSlotIndices array member of the
+ slink:VkVideoDecodeAV1PictureInfoKHR structure included in the
+ pname:pNext chain of pname:pDecodeInfo must: either be negative or must:
+ equal the pname:slotIndex member of one of the elements of
+ pname:pDecodeInfo->pReferenceSlots
+ * [[VUID-vkCmdDecodeVideoKHR-slotIndex-09263]]
+ If the bound video session was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the
+ pname:slotIndex member of each element of
+ pname:pDecodeInfo->pReferenceSlots must: equal one of the elements of
+ the code:referenceNameSlotIndices array member of the
+ slink:VkVideoDecodeAV1PictureInfoKHR structure included in the
+ pname:pNext chain of pname:pDecodeInfo
+endif::VK_KHR_video_decode_av1[]
****
include::{generated}/validity/protos/vkCmdDecodeVideoKHR.adoc[]
diff --git a/chapters/videocoding.adoc b/chapters/videocoding.adoc
index 4b434cb0..ddab7599 100644
--- a/chapters/videocoding.adoc
+++ b/chapters/videocoding.adoc
@@ -400,6 +400,12 @@ ifdef::VK_KHR_video_decode_h265[]
ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pname:pNext
chain must: include a slink:VkVideoDecodeH265ProfileInfoKHR structure
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+ * [[VUID-VkVideoProfileInfoKHR-videoCodecOperation-09256]]
+ If pname:videoCodecOperation is
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pname:pNext
+ chain must: include a slink:VkVideoDecodeAV1ProfileInfoKHR structure
+endif::VK_KHR_video_decode_av1[]
ifdef::VK_KHR_video_encode_h264[]
* [[VUID-VkVideoProfileInfoKHR-videoCodecOperation-07181]]
If pname:videoCodecOperation is
@@ -435,6 +441,10 @@ ifdef::VK_KHR_video_decode_h265[]
* ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR specifies support for
<<decode-h265,H.265 decode operations>>.
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+ * ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR specifies support for
+ <<decode-av1,AV1 decode operations>>.
+endif::VK_KHR_video_decode_av1[]
ifdef::VK_KHR_video_encode_h264[]
* ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR specifies support for
<<encode-h264,H.264 encode operations>>.
@@ -780,6 +790,13 @@ ifdef::VK_KHR_video_decode_h265[]
chain of pname:pCapabilities must: include a
slink:VkVideoDecodeH265CapabilitiesKHR structure
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+ * [[VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-09257]]
+ If pname:pVideoProfile->videoCodecOperation is
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pname:pNext
+ chain of pname:pCapabilities must: include a
+ slink:VkVideoDecodeAV1CapabilitiesKHR structure
+endif::VK_KHR_video_decode_av1[]
ifdef::VK_KHR_video_encode_queue[]
* [[VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07186]]
If pname:pVideoProfile->videoCodecOperation specifies an encode
@@ -1820,6 +1837,10 @@ ifdef::VK_KHR_video_decode_h265[]
in the <<decode-h265-parameter-sets,H.265 Decode Parameter Sets>>
section.
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+ * For ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR these are defined
+ in the <<decode-av1-parameter-sets,AV1 Decode Parameter Sets>> section.
+endif::VK_KHR_video_decode_av1[]
ifdef::VK_KHR_video_encode_h264[]
* For ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR these are defined
in the <<encode-h264-parameter-sets,H.264 Encode Parameter Sets>>
@@ -1994,6 +2015,21 @@ sets of parameter entries:
pname:pps_seq_parameter_set_id, and pname:pps_pic_parameter_set_id.
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+If pname:pCreateInfo->videoSession was created with the video codec
+operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the
+created video session parameters object will contain a single
+<<decode-av1-sequence-header,AV1 sequence header>> represented by a
+code:StdVideoAV1SequenceHeader structure specified through the
+pname:pStdSequenceHeader member of the
+slink:VkVideoDecodeAV1SessionParametersCreateInfoKHR structure provided in
+the pname:pCreateInfo->pNext chain.
+As such video session parameters objects can: only contain a single
+<<decode-av1-sequence-header,AV1 sequence header>>, it is not possible to
+use a previously created object as a template or subsequently update the
+created video session parameters object.
+endif::VK_KHR_video_decode_av1[]
+
ifdef::VK_KHR_video_encode_h264[]
If pname:pCreateInfo->videoSession was created with the video codec
operation ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the
@@ -2342,6 +2378,17 @@ ifdef::VK_KHR_video_decode_h265[]
slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure included
in the pname:pNext chain
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+ * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-09258]]
+ If pname:videoSession was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then
+ pname:videoSessionParametersTemplate must: be dname:VK_NULL_HANDLE
+ * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-09259]]
+ If pname:videoSession was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pname:pNext
+ chain must: include a
+ slink:VkVideoDecodeAV1SessionParametersCreateInfoKHR structure
+endif::VK_KHR_video_decode_av1[]
ifdef::VK_KHR_video_encode_h264[]
* [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07210]]
If pname:videoSession was created with the video codec operation
@@ -2673,6 +2720,11 @@ ifdef::VK_KHR_video_decode_h265[]
slink:VkVideoDecodeH265SessionParametersCreateInfoKHR::pname:maxStdPPSCount
pname:videoSessionParameters was created with
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+ * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-09260]]
+ pname:videoSessionParameters must: not have been created with the video
+ codec operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR
+endif::VK_KHR_video_decode_av1[]
ifdef::VK_KHR_video_encode_h264[]
* [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07226]]
If pname:videoSessionParameters was created with the video codec
@@ -3166,6 +3218,12 @@ ifdef::VK_KHR_video_decode_h265[]
ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then
pname:videoSessionParameters must: not be dname:VK_NULL_HANDLE
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+ * [[VUID-VkVideoBeginCodingInfoKHR-videoSession-09261]]
+ If pname:videoSession was created with the video codec operation
+ ename:VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then
+ pname:videoSessionParameters must: not be dname:VK_NULL_HANDLE
+endif::VK_KHR_video_decode_av1[]
ifdef::VK_KHR_video_encode_h264[]
* [[VUID-VkVideoBeginCodingInfoKHR-videoSession-07249]]
If pname:videoSession was created with the video codec operation
@@ -3481,6 +3539,10 @@ ifdef::VK_KHR_video_decode_h265[]
include::{chapters}/video/h265_decode.adoc[]
endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_decode_av1[]
+include::{chapters}/video/av1_decode.adoc[]
+endif::VK_KHR_video_decode_av1[]
+
ifdef::VK_KHR_video_encode_queue[]
include::{chapters}/video/encode.adoc[]
endif::VK_KHR_video_encode_queue[]
diff --git a/proposals/VK_KHR_cooperative_matrix.adoc b/proposals/VK_KHR_cooperative_matrix.asciidoc
index 83766b7a..83766b7a 100644
--- a/proposals/VK_KHR_cooperative_matrix.adoc
+++ b/proposals/VK_KHR_cooperative_matrix.asciidoc
diff --git a/proposals/VK_KHR_shader_expect_assume.adoc b/proposals/VK_KHR_shader_expect_assume.asciidoc
index 9cfe62c2..9cfe62c2 100644
--- a/proposals/VK_KHR_shader_expect_assume.adoc
+++ b/proposals/VK_KHR_shader_expect_assume.asciidoc
diff --git a/proposals/VK_KHR_shader_maximal_reconvergence.adoc b/proposals/VK_KHR_shader_maximal_reconvergence.asciidoc
index 7b361e4e..7b361e4e 100644
--- a/proposals/VK_KHR_shader_maximal_reconvergence.adoc
+++ b/proposals/VK_KHR_shader_maximal_reconvergence.asciidoc
diff --git a/proposals/VK_KHR_shader_subgroup_rotate.adoc b/proposals/VK_KHR_shader_subgroup_rotate.asciidoc
index 83eb8646..83eb8646 100644
--- a/proposals/VK_KHR_shader_subgroup_rotate.adoc
+++ b/proposals/VK_KHR_shader_subgroup_rotate.asciidoc
diff --git a/proposals/VK_KHR_video_decode_av1.adoc b/proposals/VK_KHR_video_decode_av1.adoc
new file mode 100644
index 00000000..200bf29d
--- /dev/null
+++ b/proposals/VK_KHR_video_decode_av1.adoc
@@ -0,0 +1,624 @@
+// Copyright 2023-2024 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_video_decode_av1
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document outlines a proposal to enable performing AV1 video decode operations in Vulkan.
+
+== Problem Statement
+
+The `VK_KHR_video_queue` extension introduces support for video coding operations and the `VK_KHR_video_decode_queue` extension further extends this with APIs specific to video decoding.
+
+The goal of this proposal is to build upon this infrastructure to introduce support for decoding elementary video stream sequences compliant with the AV1 video compression standard.
+
+
+== Solution Space
+
+As the `VK_KHR_video_queue` and `VK_KHR_video_decode_queue` extensions already laid down the architecture for how codec-specific video decode extensions need to be designed, this extension only needs to define the APIs to provide the necessary codec-specific parameters at various points during the use of the codec-independent APIs. In particular:
+
+ * APIs allowing to specify AV1 sequence headers to be stored in video session parameters objects
+ * APIs allowing to specify AV1 information specific to the decoded picture
+ * APIs allowing to specify AV1 reference picture information specific to the active reference pictures and optional reconstructed picture used in video decode operations
+
+The following options have been considered to choose the structure of these definitions:
+
+ 1. Allow specifying packed codec-specific data to the APIs in the form they appear in bitstreams
+ 2. Specify codec-specific parameters through custom type definitions that the application can populate after parsing the corresponding data elements in the bitstreams
+
+Option (1) would allow for a simpler API, but it requires implementations to include an appropriate parser for these data elements. As decoding applications typically parse these data elements for other reasons anyway, this proposal choses option (2) to enable the application to provide the needed parameters through custom definitions provided by a video std header dedicated to AV1 video decoding.
+
+The following additional options have been considered to choose the way this video std header is defined:
+
+ 1. Include all definitions in this AV1 video decode std header
+ 2. Add a separate video std header that includes AV1 parameter definitions that can be shared across video decoding and video encoding use cases that the AV1 video decode std header depends on, and only include decode-specific definitions in the AV1 video decode std header
+
+For consistency with existing codec-specific decode extensions, this extension uses option (2) and introduces the following new video std headers:
+
+ * `vulkan_video_codec_av1std` - containing common definitions for all AV1 video coding operations
+ * `vulkan_video_codec_av1std_decode` - containing definitions specific to AV1 video decoding operations
+
+These headers can be included as follows:
+
+[source,c]
+----
+#include <vk_video/vulkan_video_codec_av1std.h>
+#include <vk_video/vulkan_video_codec_av1std_decode.h>
+----
+
+
+== Proposal
+
+=== Video Std Headers
+
+This extension uses the new `vulkan_video_codec_av1std_decode` video std header. Implementations must always support at least version 1.0.0 of this video std header.
+
+
+=== AV1 Decode Profiles
+
+This extension introduces the new video codec operation `VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR`. This flag can be used to check whether a particular queue family supports decoding AV1 content, as returned in `VkQueueFamilyVideoPropertiesKHR`.
+
+An AV1 decode profile can be defined through a `VkVideoProfileInfoKHR` structure using this new video codec operation and by including the following new codec-specific profile information structure in the `pNext` chain:
+
+[source,c]
+----
+typedef struct VkVideoDecodeAV1ProfileInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ StdVideoAV1Profile stdProfile;
+ VkBool32 filmGrainSupport;
+} VkVideoDecodeAV1ProfileInfoKHR;
+----
+
+`stdProfile` specifies the AV1 profile.
+
+`filmGrainSupport` specifies whether AV1 film grain can be used with the video profile.
+
+If the application knows in advance that the decoded content does not use AV1 film grain or if the application would prefer applying film grain manually onto the decode output picture (e.g. using shaders), then setting `filmGrainSupport` to `VK_FALSE` in the video profile may reduce the memory requirements of video sessions and/or video picture resources.
+
+Some implementations may not support AV1 film grain. On such implementations `vkGetPhysicalDeviceVideoCapabilitiesKHR` will return `VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR` when called with an AV1 decode profile having `filmGrainSupport` set to `VK_TRUE`.
+
+
+=== AV1 Decode Capabilities
+
+Applications need to include the following new structure in the `pNext` chain of `VkVideoCapabilitiesKHR` when calling the `vkGetPhysicalDeviceVideoCapabilitiesKHR` command to retrieve the capabilities specific to AV1 video decoding:
+
+[source,c]
+----
+typedef struct VkVideoDecodeAV1CapabilitiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ StdVideoAV1Level maxLevel;
+} VkVideoDecodeAV1CapabilitiesKHR;
+----
+
+`maxLevel` indicates the maximum supported AV1 level.
+
+
+=== AV1 Decode Parameter Sets
+
+The use of video session parameters objects is mandatory when decoding AV1 video streams. Applications need to include the following new structure in the `pNext` chain of `VkVideoSessionParametersCreateInfoKHR` when creating video session parameters objects for AV1 decode use, to specify the parameter set capacity of the created objects:
+
+[source,c]
+----
+typedef struct VkVideoDecodeAV1SessionParametersCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ const StdVideoAV1SequenceHeader* pStdSequenceHeader;
+} VkVideoDecodeAVSessionParametersCreateInfoKHR;
+----
+
+`pStdSequenceHeader` specifies the AV1 sequence header to store in the created video session parameters object.
+
+As AV1 video session parameters objects can only store a single AV1 sequence header, they do not support updates using the `vkUpdateVideoSessionParametersKHR` command. Applications should create a new video session parameters object for each new sequence header decoded from the incoming bitstream.
+
+
+=== AV1 Decoding Parameters
+
+Decode parameters specific to AV1 need to be provided by the application through the `pNext` chain of `VkVideoDecodeInfoKHR`, using the following new structure:
+
+[source,c]
+----
+typedef struct VkVideoDecodeAV1PictureInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ const StdVideoDecodeAV1PictureInfo* pStdPictureInfo;
+ int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR];
+ uint32_t frameHeaderOffset;
+ uint32_t tileCount;
+ const uint32_t* pTileOffsets;
+ const uint32_t* pTileSizes;
+} VkVideoDecodeAV1PictureInfoKHR;
+----
+
+`pStdPictureInfo` points to the codec-specific decode parameters defined in the `vulkan_video_codec_av1std_decode` video std header (including the AV1 frame header parameters).
+
+The `referenceNameSlotIndices` array provides a mapping from AV1 reference names to the DPB slot indices currently associated with the used reference picture resources. Multiple AV1 reference names may refer to the same DPB slot, while unused AV1 reference names are indicated by specifying a negative DPB slot index in the corresponding element of the array. As this array only provides a mapping for reference pictures used for inter-frame coding, for a given AV1 reference name `frame` (as defined in the enumeration type `StdVideoAV1ReferenceName`) the corresponding DPB slot index is specified in `referenceNameSlotIndices[frame - STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME]`. Further details are provided about the AV1 reference management model later, in a dedicated section of this proposal.
+
+`frameHeaderOffset` specifies the relative offset of the frame header OBU within the video bitstream buffer range used by the video decode operation.
+
+The `pTileOffsets` and `pTileSizes` arrays contain the relative offset and size of individual tiles of the picture within the video bitstream buffer range used by the video decode operation.
+
+The active sequence header is the one stored in the bound video session parameters object.
+
+Picture information specific to AV1 for the active reference pictures and the optional reconstructed picture need to be provided by the application through the `pNext` chain of corresponding elements of `VkVideoDecodeInfoKHR::pReferenceSlots` and the `pNext` chain of `VkVideoDecodeInfoKHR::pSetupReferenceSlot`, respectively, using the following new structure:
+
+[source,c]
+----
+typedef struct VkVideoDecodeAV1DpbSlotInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ const StdVideoDecodeAV1ReferenceInfo* pStdReferenceInfo;
+} VkVideoDecodeAV1DpbSlotInfoKHR;
+----
+
+`pStdReferenceInfo` points to the codec-specific reference picture parameters defined in the `vulkan_video_codec_av1std_decode` video std header.
+
+It is the application's responsibility to specify video bitstream buffer data and codec-specific parameters that are compliant to the rules defined by the AV1 video compression standard. While it is not illegal, from the API usage's point of view, to specify non-compliant inputs, they may cause the video decode operation to complete unsuccessfully and will cause the output pictures (decode output and reconstructed pictures) to have undefined contents after the execution of the operation.
+
+For more information about how to parse individual AV1 bitstream syntax elements, calculate derived values, and, in general, how to interpret these parameters, please refer to the corresponding sections of the https://aomediacodec.github.io/av1-spec/av1-spec.pdf[AV1 Specification].
+
+
+=== AV1 Reference Management
+
+The AV1 video compression standard supports each frame to reference up to 7 + 1 reference pictures for sample prediction. The seven "real" reference pictures are identified with so called AV1 reference names (`LAST_FRAME`, `LAST2_FRAME`, `LAST3_FRAME`, `GOLDEN_FRAME`, `BWDREF_FRAME`, `ALTREF2_FRAME`, and `ALTREF_FRAME`) identifying different types of backward and forward references. Each AV1 reference name has associated semantics that affect how the reference picture data is used for inter-frame sample prediction. In addition, there is a special AV1 reference name called `INTRA_FRAME` that corresponds to the currently decoded frame used for intra-frame sample prediction.
+
+The AV1 decoder model also incorporates the concept of a VBI which has 8 slots and maintains the set of reference pictures and associated metadata that can be included in the list of active reference pictures when decoding subsequent frames. The reference frame update process detailed in section 7.20 of the AV1 specification allows associating multiple VBI slots with the same reference picture and logically replicating the metadata associated with the activated reference picture across these VBI slots.
+
+The VBI model, however, is only an intermediate step of the reference picture resource management, as the AV1 decoder model maps these in the end to actual frame buffer resources stored in a buffer pool. While the AV1 specification defines this buffer pool to have at most 10 entries, this specific size is only a consequence of logical model.
+
+In Vulkan, DPB slot management and association with video picture resources is entirely application-controlled. Accordingly, this proposal provides a direct mapping from AV1 reference names to active DPB slot indices using the `VkVideoDecodeAV1PictureInfoKHR::referenceNameSlotIndices` array, effectively bypassing the reference name to VBI slot and the VBI slot to buffer pool resource mapping. Applications are responsible for determining this mapping based on the codec syntax elements `last_frame_idx`, `gold_frame_idx`, and `ref_frame_idx` (whichever is applicable), and the DPB slot (and DPB picture resource) management strategy they choose.
+
+
+== Examples
+
+=== Select queue family with AV1 decode support
+
+[source,c]
+----
+uint32_t queueFamilyIndex;
+uint32_t queueFamilyCount;
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, NULL);
+
+VkQueueFamilyProperties2* props = calloc(queueFamilyCount,
+ sizeof(VkQueueFamilyProperties2));
+VkQueueFamilyVideoPropertiesKHR* videoProps = calloc(queueFamilyCount,
+ sizeof(VkQueueFamilyVideoPropertiesKHR));
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+ props[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2;
+ props[queueFamilyIndex].pNext = &videoProps[queueFamilyIndex];
+
+ videoProps[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR;
+}
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, props);
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+ if ((props[queueFamilyIndex].queueFamilyProperties.queueFlags & VK_QUEUE_VIDEO_DECODE_BIT_KHR) != 0 &&
+ (videoProps[queueFamilyIndex].videoCodecOperations & VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR) != 0) {
+ break;
+ }
+}
+
+if (queueFamilyIndex < queueFamilyCount) {
+ // Found appropriate queue family
+ ...
+} else {
+ // Did not find a queue family with the needed capabilities
+ ...
+}
+----
+
+
+=== Check support and query the capabilities for an AV1 decode profile
+
+[source,c]
+----
+VkResult result;
+
+VkVideoDecodeAV1ProfileInfoKHR decodeAV1ProfileInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR,
+ .pNext = NULL,
+ .stdProfile = STD_VIDEO_AV1_PROFILE_MAIN,
+ .filmGrainSupport = VK_TRUE
+};
+
+VkVideoProfileInfoKHR profileInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR,
+ .pNext = &decodeAV1ProfileInfo,
+ .videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR,
+ .chromaSubsampling = VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,
+ .lumaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
+ .chromaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR
+};
+
+VkVideoDecodeAV1CapabilitiesKHR decodeAV1Capabilities = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_KHR,
+ .pNext = NULL,
+};
+
+VkVideoDecodeCapabilitiesKHR decodeCapabilities = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR,
+ .pNext = &decodeAV1Capabilities
+}
+
+VkVideoCapabilitiesKHR capabilities = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR,
+ .pNext = &decodeCapabilities
+};
+
+result = vkGetPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, &profileInfo, &capabilities);
+
+if (result == VK_SUCCESS) {
+ // Profile is supported, check additional capabilities
+ ...
+} else {
+ // Profile is not supported, result provides additional information about why
+ ...
+}
+----
+
+=== Create AV1 video session parameters objects
+
+[source,c]
+----
+VkVideoSessionParametersKHR videoSessionParams = VK_NULL_HANDLE;
+
+StdVideoAV1SequenceHeader sequenceHeader = {};
+// parse and populate sequence header parameters
+...
+
+VkVideoDecodeAV1SessionParametersCreateInfoKHR decodeAV1CreateInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR,
+ .pNext = NULL,
+ .pStdSequenceHeader = &sequenceHeader
+};
+
+vkCreateVideoSessionParametersKHR(device, &createInfo, NULL, &videoSessionParams);
+----
+
+
+=== Record AV1 decode operation (video session without DPB slots)
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+StdVideoDecodeAV1PictureInfo stdPictureInfo = {};
+// parse and populate picture info from frame header data
+...
+
+VkVideoDecodeAV1PictureInfoKHR decodeAV1PictureInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR,
+ .pNext = NULL,
+ .pStdPictureInfo = &stdPictureInfo,
+ .frameHeaderOffset = ... // frame header OBU offset relative to the bitstream buffer range
+ .tileCount = ... // number of tiles
+ .pTileOffsets = ... // array of tile offsets relative to the bitstream buffer range
+ .pTileSizes = ... // array of tile sizes
+};
+
+// As no references are used, make sure that no DPB slot indices are associated with
+// the AV1 reference names
+for (uint32_t i = 0; i < VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR; ++i) {
+ decodeAV1PictureInfo.referenceNameSlotIndices[i] = -1;
+}
+
+VkVideoDecodeInfoKHR decodeInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+ .pNext = &decodeAV1PictureInfo,
+ ...
+ // reconstructed picture is not needed if video session was created without DPB slots
+ .pSetupReferenceSlot = NULL,
+ .referenceSlotCount = 0,
+ .pReferenceSlots = NULL
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+=== Record AV1 decode operation without reference picture list
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+StdVideoDecodeAV1ReferenceInfo stdReferenceInfo = {};
+// parse and populate reconstructed reference picture info from frame data
+...
+
+VkVideoDecodeAV1DpbSlotInfoKHR decodeAV1DpbSlotInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR,
+ .pNext = NULL,
+ .pStdReferenceInfo = &stdReferenceInfo
+};
+
+VkVideoReferenceSlotInfoKHR setupSlotInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+ .pNext = &decodeAV1DpbSlotInfo
+ ...
+};
+
+StdVideoDecodeAV1PictureInfo stdPictureInfo = {};
+// parse and populate picture info from frame header data
+...
+if (stdPictureInfo.refresh_frame_flags != 0) {
+ // reconstructed picture will activate DPB slot
+} else {
+ // reconstructed picture and slot may only be used by implementations as transient resource
+}
+
+VkVideoDecodeAV1PictureInfoKHR decodeAV1PictureInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR,
+ .pNext = NULL,
+ .pStdPictureInfo = &stdPictureInfo,
+ .frameHeaderOffset = ... // frame header OBU offset relative to the bitstream buffer range
+ .tileCount = ... // number of tiles
+ .pTileOffsets = ... // array of tile offsets relative to the bitstream buffer range
+ .pTileSizes = ... // array of tile sizes
+};
+
+// As no references are used, make sure that no DPB slot indices are associated with
+// the AV1 reference names
+for (uint32_t i = 0; i < VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR; ++i) {
+ decodeAV1PictureInfo.referenceNameSlotIndices[i] = -1;
+}
+
+VkVideoDecodeInfoKHR decodeInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+ .pNext = &decodeAV1PictureInfo,
+ ...
+ .pSetupReferenceSlot = &setupSlotInfo,
+ ...
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+=== Record AV1 decode operation with reference picture list
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+StdVideoDecodeAV1ReferenceInfo stdReferenceInfo[] = {};
+// populate reference picture info for each active reference picture
+...
+
+VkVideoDecodeAV1DpbSlotInfoKHR decodeAV1DpbSlotInfo[] = {
+ {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR,
+ .pNext = NULL,
+ .pStdReferenceInfo = &stdReferenceInfo[0]
+ },
+ {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR,
+ .pNext = NULL,
+ .pStdReferenceInfo = &stdReferenceInfo[1]
+ },
+ ...
+};
+
+
+VkVideoReferenceSlotInfoKHR referenceSlotInfo[] = {
+ {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+ .pNext = &decodeAV1DpbSlotInfo[0],
+ ...
+ },
+ {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+ .pNext = &decodeAV1DpbSlotInfo[1],
+ ...
+ },
+ ...
+};
+
+StdVideoDecodeAV1PictureInfo stdPictureInfo = {};
+// parse and populate picture info from frame header data
+...
+if (stdPictureInfo.refresh_frame_flags != 0) {
+ // reconstructed picture will activate DPB slot
+} else {
+ // reconstructed picture and slot may only be used as transient resource by implementations
+}
+
+VkVideoDecodeAV1PictureInfoKHR decodeAV1PictureInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR,
+ .pNext = NULL,
+ .pStdPictureInfo = &stdPictureInfo,
+ .frameHeaderOffset = ... // frame header OBU offset relative to the bitstream buffer range
+ .tileCount = ... // number of tiles
+ .pTileOffsets = ... // array of tile offsets relative to the bitstream buffer range
+ .pTileSizes = ... // array of tile sizes
+};
+
+// Initialize AV1 reference name to DPB slot index mapping and add mapping
+// corresponding to the active reference picture list
+for (uint32_t i = 0; i < VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR; ++i) {
+ decodeAV1PictureInfo.referenceNameSlotIndices[i] = -1;
+}
+// NOTE: This is just an example, the actually used AV1 reference names come from the frame header
+decodeAV1PictureInfo.referenceNameSlotIndices[STD_VIDEO_AV1_REFERENCE_NAME_GOLDEN_FRAME - STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME] =
+ referenceSlotInfo[0].slotIndex;
+decodeAV1PictureInfo.referenceNameSlotIndices[STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME - STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME] =
+ referenceSlotInfo[1].slotIndex;
+...
+
+VkVideoDecodeInfoKHR decodeInfo = {
+ .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+ .pNext = &decodeAV1PictureInfo,
+ ...
+ .referenceSlotCount = sizeof(referenceSlotInfo) / sizeof(referenceSlotInfo[0]),
+ .pReferenceSlots = &referenceSlotInfo[0]
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+== Issues
+
+=== RESOLVED: In what form should codec-specific parameters be provided?
+
+In the form of structures defined by the `vulkan_video_codec_av1std_decode` and `vulkan_video_codec_av1std` video std headers.
+
+While it is anticipated that AV1 video encoding will need additional AV1 sequence header parameters and a different set picture parameters, thus more parameters are defined by this proposal as AV1 video decode specific definitions, there remains a significant number of definitions that can be reused across AV1 video decode and encode operations which justify having a common AV1 video std header.
+
+Applications are responsible to parse sequence header, frame header, and tile group data and use the parsed data to populate the structures defined by the video std headers. It is also the application's responsibility to maintain and manage these data structures, as needed, to be able to provide them as inputs to video decode operations where needed.
+
+
+=== RESOLVED: What are the requirements for the codec-specific input parameters and bitstream data?
+
+It is legal from an API usage perspective for the application to provide any values for the codec-specific input parameters (parameter sets, picture information, etc.) or video bitstream data. However, if the input data does not conform to the requirements of the AV1 video compression standard, then video decode operations may complete unsuccessfully and, in general, the outputs produced by the video decode operation will have undefined contents.
+
+
+=== RESOLVED: What type of AV1 parameter sets do we want to store in video session parameters objects?
+
+Only sequence headers. As AV1 does not have identifiers for these, each video session parameters object will only ever store a single AV1 sequence header and thus applications have to create separate video session parameters objects for each sequence.
+
+
+=== RESOLVED: What should be the contents of the input bitstream buffer when decoding an AV1 frame?
+
+One or more frame OBUs, each consisting of a frame header OBU and a tile group OBU. The tile group OBUs need to include all tiles of the frame.
+
+
+=== RESOLVED: Does the application need to specify the offsets of individual tiles?
+
+Yes.
+
+
+=== RESOLVED: Does the application also need to specify the sizes of individual tiles?
+
+Yes. Especially as the tiles may be spread across multiple tile group OBUs.
+
+
+=== RESOLVED: Does the application also need to specify the offset of the frame header OBU?
+
+Due to the base address alignment requirements of the bitstream buffer, having the frame header OBU at offset zero within the application provided bitstream buffer range may require an additional copy on the application side which would be suboptimal. There are at least two possible options to avoid that:
+
+ 1. Add a parameter to the AV1 decode picture information structure indicating the offset of the frame header OBU
+ 2. Require `minBitstreamBufferOffsetAlignment` to be `1` for AV1 decode profiles
+
+This proposal follows option (1) and adds an explicit frame header OBU offset parameter for the application to be able to place bitstream data into the buffer at any offset typically dictated by the input content, while also allowing implementations to parse any data, if needed, from the frame header OBU.
+
+If the frame is split across multiple tile group OBUs, then multiple frame header OBUs may be present in the bitstream, but as those all have to match it is sufficient to specify the offset of either of them.
+
+
+=== RESOLVED: Does the application also need to specify the offsets of the tile group OBUs and the range of tiles they cover?
+
+No. Implementations only need the offsets and sizes of individual tiles but do not care about the grouping of tiles into tile group OBUs.
+
+
+=== RESOLVED: How do AV1 references map to DPB slot indices?
+
+AV1 associates different semantics to the various types of references referred to by a frame (`INTRA_FRAME..ALTREF_FRAME`).
+
+The AV1 `ref_frame_idx` array provides a mapping table from the AV1 reference names `LAST_FRAME..ALTREF_FRAME` to reference picture slot numbers. These numbers are indices used to address various state vectors, and the so called VBI (virtual buffer index) that maps individual reference picture slots to reference picture resources (BufferPool entries).
+
+While conceptually the AV1 VBI is similar to the Vulkan DPB model, it has certain behaviors that render using the VBI directly as the Vulkan DPB impossible. In particular:
+
+ * The reference frame update process described in section 7.20 of the AV1 specification allows the video stream to activate multiple VBI slots with the currently reconstructed picture through setting multiple bits in the `refresh_frame_flags` syntax element, but the Vulkan DPB model does not allow activating multiple DPB slots at once with the same video picture resource
+ * As a result, multiple slots of the AV1 VBI can refer to the same reference picture resource at any given time, which is also not allowed in the Vulkan DPB model
+
+Accordingly, the AV1 VBI cannot be used directly as the Vulkan DPB and, as such, the AV1 reference picture slots are not equivalent with the Vulkan DPB slot indices.
+
+This means that there is a need for some form of mapping from AV1 reference names to Vulkan DPB slot indices. The following options were considered to enable this:
+
+ 1. Require the application to provide an already remapped form of the `ref_frame_idx` array (and any other codec-specific parameters that provide per AV1 reference name information) to the implementation where the AV1 reference picture slots (VBI slot indices) are already replaced with Vulkan DPB slot indices
+ 2. Require the application to provide a mapping table from AV1 reference picture slots (VBI slot indices) to Vulkan DPB slot indices
+ 3. Require the application to provide a mapping table from AV1 reference names (`LAST_FRAME..ALTREF_FRAME`) to Vulkan DPB slot indices
+ 4. Require the application to specify the AV1 reference name (`LAST_FRAME..ALTREF_FRAME`) as part of the set of Video Std reference picture information parameters
+
+Option (1) would avoid introducing any new parameters, but would make the semantics of the `ref_frame_idx` array (and all other codec-specific parameters that provide per AV1 reference name information) differ from the one defined in the AV1 specification, which could be awkward to describe and thus could be confusing for users of the API.
+
+In the model proposed by option (2), translation from AV1 reference names to Vulkan DPB slot indices would happen in two steps:
+
+ * First, `ref_frame_idx` maps the AV1 reference name (`LAST_FRAME..ALTREF_FRAME`) to AV1 picture resource slots (VBI indices)
+ * Second, a new VBI mapping table would map the AV1 picture resource slots (VBI indices) to Vulkan DPB slot indices
+
+Accordingly, option (2) would be fairly straightforward and mostly self-explanatory, but would require reintroducing the VBI concept defined in Annex E of the AV1 specification with the BufferPool resources being replaced by Vulkan DPB slots, and the translation itself would need to happen in two steps, per above.
+
+Option (3) is similar to option (2), but the new mapping table would instead map AV1 reference names (`LAST_FRAME..ALTREF_FRAME`) directly to Vulkan DPB slot indices, which avoids the need to introduce the concept of VBI and the need for a two-step mapping.
+
+Such a mapping table seems pretty arbitrary. In addition, unlike the VBI based mapping table in option (2), most entries of this mapping table would be irrelevant to implementations, as decoding only needs to know the DPB slot indices corresponding to the AV1 reference names actually used by the active reference picture list for the currently decoded frame.
+
+Option (4) solves the shortcomings of option (3) by instead of providing a mapping from AV1 reference names (`LAST_FRAME..ALTREF_FRAME`) to Vulkan DPB slot indices, it specifies the AV1 reference name for each active reference picture, and provides a mapping between Vulkan DPB slot indices and AV1 reference names through that. This is, however, not possible in practice, because there is not always a 1-to-1 mapping between AV1 reference names and DPB slot indices, as multiple AV1 reference names may map to the same DPB slot index.
+
+This proposal chooses option (3), because having a mapping directly from AV1 reference names to Vulkan DPB slot indices is sufficient.
+
+
+=== RESOLVED: Does AV1 decode support the _coincide_ mode?
+
+AV1 film grain is an example where the image contents of the decode output picture and the reconstructed picture will need to be different, thus in such cases using _coincide_ mode is not really an option. However, requiring _distinct_ mode in all cases would be overly restrictive, as implementations may be able to support _coincide_ mode when film grain is not used, or if the frames using film grain may not need to be set up as reference, hence this proposal does not restrict implementations to support _coincide_ mode when applicable and only requires the use of _distinct_ mode in the specific decode operations that do apply film grain. In fact, this proposal changes general codec-independent behavior by allowing _distinct_ mode to be used for AV1 film grain enabled frames (by specifying a different decode output and reconstructed picture resource) even if the implementation does not report support for _distinct_ mode in the video decode profile capabilities.
+
+
+=== RESOLVED: Should film grain be a capability or part of the video profile definition?
+
+As AV1 film grain may have implications on the overall behavior of the decoding process, this proposal includes it in the video profile definition similar to how the picture layout for interlaced content is also part of the video profile definition for H.264 decode.
+
+Whether the application intends to use film grain or not may affect the memory requirements of video sessions and/or video picture resources, thus including film grain support in the video profile definition enables implementations to minimize the memory needs of decoding when film grain is not expected to be used.
+
+It is understood that not all applications may know in advance whether the decoded bitstream will use film grain or not. In such cases applications have at least the following options:
+
+ 1. Conservatively enable film grain support in the video profile
+ 2. Use other methods to apply film grain onto the decode output picture (e.g. using shaders)
+
+Option (2) may anyway be necessary to support implementations that do not support AV1 decode profiles with film grain support.
+
+
+=== RESOLVED: Do the additional memory requirements imposed by AV1 film grain support affect the memory requirements of images created with `VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR`?
+
+Potentially. Video profile independent image resources need to be compatible with all video profiles supported by the implementation, thus if the implementation has additional memory requirements for such resources (e.g. an image usable both as decode output picture and reconstructed picture) in order to support AV1 film grain, then those may apply to certain video profile independent image resources, in line with the general expectations laid out about video profile independent resources in the `VK_KHR_video_maintenance1` extension.
+
+
+=== RESOLVED: Does the application has to send frame OBUs that have `show_existing_frame` set for decoding?
+
+No. Such frame OBUs do not contain any actual payload that is relevant to implementations.
+
+
+=== RESOLVED: Are any of the `frame_width_minus_1`, `frame_height_minus_1`, `render_width_minus_1`, and `render_height_minus_1` parameters from the frame header redundant with respect to the decoded frame size specified in `VkVideoDecodeInfoKHR::dstPictureResource.codedExtent`?
+
+Yes. None of those parameters are necessary for decoding, as the `codedExtent` of the decode output picture provides sufficient information to implementations.
+
+
+=== RESOLVED: Are the extents in superblocks specified by the `width_in_sbs_minus_1` and `height_in_sbs_minus_1` tile parameters necessary?
+
+Yes. Video APIs use different conventions for these parameters. This proposal expects the syntax values specified through the `pWidthInSbsMinus1` and `pHeightInSbsMinus1` array pointer members of the `StdVideoAV1TileInfo` structure.
+
+
+=== RESOLVED: What codec-specific parameters need to be specified for the active reference pictures?
+
+Certain frame header OBU parameters of the referenced frames and a subset of the reference frame state tracked according to section 7.20 of the AV1 specification. These are needed by implementations that may not track them as part of the video session state.
+
+
+=== RESOLVED: How is reference picture setup requested for AV1 decode operations?
+
+As specifying a reconstructed picture DPB slot and resource is always required per the latest revision of the video extensions, additional codec syntax controls whether the DPB slot is activated with the reconstructed picture.
+
+In the case of AV1 decode, reference picture setup depends on the value of `StdVideoDecodeAV1PictureInfo::refresh_frame_flags`. A non-zero `refresh_frame_flags` indicates that the VBI needs to be updated such as for each set bit the corresponding VBI slot is associated with the decoded picture's information, such as CDF data among others. While VBI slot management is outside of the scope of this proposal, and the responsibility of the application, a non-zero `refresh_frame_flags` value inherently also implies the need for reference picture setup and thus the activation of a DPB slot with the reconstructed picture.
+
+Accordingly, for AV1 decode, reference picture setup is requested and the DPB slot specified for the reconstructed picture is activated with the picture if and only if `StdVideoDecodeAV1PictureInfo::refresh_frame_flags` is not zero.
+
+
+=== RESOLVED: Are film grain parameters tracked as part of DPB slot reference picture metadata?
+
+No. Implementations do not usually track this in the AV1 decode sessions and the application is anyway expected to specify the effective film grain parameters through the `StdVideoAV1FilmGrain` structure. It is thus the application's responsibility to ensure that they provide these. This also means that AV1 decoder implementations will ignore the `update_grain` and `film_grain_params_ref_idx` parameters which are defined only for the purposes of being used by a future AV1 encoder extension.
+
+
+=== RESOLVED: Should the size of the `GmType` and `gm_params` arrays be `STD_VIDEO_AV1_NUM_REF_FRAMES` or `STD_VIDEO_AV1_REFS_PER_FRAME`?
+
+`STD_VIDEO_AV1_NUM_REF_FRAMES`, i.e. eight, in order to match the indexing scheme used by the AV1 specification. In practice, element index zero will not be used, because the AV1 specification only defines these for the AV1 reference names between `LAST_FRAME` and `ALTREF_FRAME` (i.e. between indices 1 and 7), but it was deemed that diverging from the indexing scheme used by the AV1 specification could be the source of confusion.
diff --git a/scripts/genvk.py b/scripts/genvk.py
index a4d55cd0..6895adcb 100755
--- a/scripts/genvk.py
+++ b/scripts/genvk.py
@@ -860,6 +860,8 @@ def makeGenOpts(args):
'vulkan_video_codec_h265std',
'vulkan_video_codec_h265std_decode',
'vulkan_video_codec_h265std_encode',
+ 'vulkan_video_codec_av1std',
+ 'vulkan_video_codec_av1std_decode',
]
# Unused at present
diff --git a/scripts/vkconventions.py b/scripts/vkconventions.py
index 07ccebe4..cf0803b5 100755
--- a/scripts/vkconventions.py
+++ b/scripts/vkconventions.py
@@ -119,6 +119,7 @@ class VulkanConventions(ConventionsBase):
# The simple-minded rules need modification for some structure names
subpats = [
[ r'_H_(26[45])_', r'_H\1_' ],
+ [ r'_AV_1_', r'_AV1_' ],
[ r'_VULKAN_([0-9])([0-9])_', r'_VULKAN_\1_\2_' ],
[ r'_VULKAN_SC_([0-9])([0-9])_',r'_VULKAN_SC_\1_\2_' ],
[ r'_DIRECT_FB_', r'_DIRECTFB_' ],
diff --git a/scripts/xml_consistency.py b/scripts/xml_consistency.py
index e1e4b19f..91864dba 100755
--- a/scripts/xml_consistency.py
+++ b/scripts/xml_consistency.py
@@ -35,6 +35,7 @@ EXTENSION_NAME_VERSION_EXCEPTIONS = (
'VK_EXT_shader_image_atomic_int64',
'VK_KHR_video_decode_h264',
'VK_KHR_video_decode_h265',
+ 'VK_KHR_video_decode_av1',
'VK_KHR_video_encode_h264',
'VK_KHR_video_encode_h265',
'VK_KHR_external_fence_win32',
diff --git a/tests/vtest.c b/tests/vtest.c
index ccb87015..4bd39fde 100644
--- a/tests/vtest.c
+++ b/tests/vtest.c
@@ -22,6 +22,8 @@ typedef unsigned int uint32_t;
#include "vk_video/vulkan_video_codec_h265std.h"
#include "vk_video/vulkan_video_codec_h265std_decode.h"
#include "vk_video/vulkan_video_codec_h265std_encode.h"
+#include "vk_video/vulkan_video_codec_av1std.h"
+#include "vk_video/vulkan_video_codec_av1std_decode.h"
#endif
#ifdef VULKAN_VIDEO_CODECS_COMMON
#include "vk_video/vulkan_video_codecs_common.h"
@@ -44,6 +46,12 @@ typedef unsigned int uint32_t;
#ifdef VULKAN_VIDEO_CODEC_H265STD_ENCODE
#include "vk_video/vulkan_video_codec_h265std_encode.h"
#endif
+#ifdef VULKAN_VIDEO_CODEC_AV1STD
+#include "vk_video/vulkan_video_codec_av1std.h"
+#endif
+#ifdef VULKAN_VIDEO_CODEC_AV1STD_DECODE
+#include "vk_video/vulkan_video_codec_av1std_decode.h"
+#endif
int main(void) {
return 0;
diff --git a/xml/Makefile b/xml/Makefile
index 755ab76b..36cc6600 100644
--- a/xml/Makefile
+++ b/xml/Makefile
@@ -150,7 +150,9 @@ CODECS = vulkan_video_codecs_common.h \
vulkan_video_codec_h264std_encode.h \
vulkan_video_codec_h265std.h \
vulkan_video_codec_h265std_decode.h \
- vulkan_video_codec_h265std_encode.h
+ vulkan_video_codec_h265std_encode.h \
+ vulkan_video_codec_av1std.h \
+ vulkan_video_codec_av1std_decode.h
CODECXML = video.xml
# Do not build video headers for Vulkan SC
ifeq ($(VULKAN_API),vulkan)
@@ -201,6 +203,9 @@ vtest: $(CODEC_HEADERS)
gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD_DECODE
gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD_ENCODE
gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD -D VULKAN_VIDEO_CODEC_H265STD_DECODE -D VULKAN_VIDEO_CODEC_H265STD_ENCODE
+ gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_AV1STD
+ gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_AV1STD_DECODE
+ gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_AV1STD -D VULKAN_VIDEO_CODEC_AV1STD_DECODE
gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_ALL
gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_ALL -D VK_NO_STDINT_H
$(RM) vtest.o
diff --git a/xml/video.xml b/xml/video.xml
index 38b087ef..d570742c 100644
--- a/xml/video.xml
+++ b/xml/video.xml
@@ -23,11 +23,13 @@ The current public version of video.xml is maintained in the default branch
<type name="uint16_t" requires="stdint"/>
<type name="uint8_t" requires="stdint"/>
<type name="int32_t" requires="stdint"/>
+ <type name="int16_t" requires="stdint"/>
<type name="int8_t" requires="stdint"/>
<type category="include" name="vk_video/vulkan_video_codecs_common.h">#include "vulkan_video_codecs_common.h"</type>
<type category="include" name="vk_video/vulkan_video_codec_h264std.h">#include "vulkan_video_codec_h264std.h"</type>
<type category="include" name="vk_video/vulkan_video_codec_h265std.h">#include "vulkan_video_codec_h265std.h"</type>
+ <type category="include" name="vk_video/vulkan_video_codec_av1std.h">#include "vulkan_video_codec_av1std.h"</type>
<!-- vulkan_video_codecs_common macros -->
<type category="define">#define <name>VK_MAKE_VIDEO_STD_VERSION</name>(major, minor, patch) \
@@ -49,6 +51,10 @@ The current public version of video.xml is maintained in the default branch
<type category="define" requires="VK_MAKE_VIDEO_STD_VERSION">
#define <name>VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_1_0_0</name> <type>VK_MAKE_VIDEO_STD_VERSION</type>(1, 0, 0)</type>
+ <!-- vulkan_video_codec_av1std_decode.h macros -->
+ <type category="define" requires="VK_MAKE_VIDEO_STD_VERSION">
+#define <name>VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0</name> <type>VK_MAKE_VIDEO_STD_VERSION</type>(1, 0, 0)</type>
+
<!-- vulkan_video_codec_h264std.h enumerated types -->
<type name="StdVideoH264ChromaFormatIdc" category="enum"/>
<type name="StdVideoH264ProfileIdc" category="enum"/>
@@ -832,6 +838,277 @@ The current public version of video.xml is maintained in the default branch
<member><type>int32_t</type> <name>PicOrderCntVal</name><comment>Picture order count derived as specified in 8.3.1</comment></member>
<member><type>uint8_t</type> <name>TemporalId</name><comment>Temporal ID, as defined in 7.4.2.2</comment></member>
</type>
+
+ <!-- vulkan_video_codec_av1std.h enumerated types -->
+ <type name="StdVideoAV1Profile" category="enum"/>
+ <type name="StdVideoAV1Level" category="enum"/>
+ <type name="StdVideoAV1FrameType" category="enum"/>
+ <type name="StdVideoAV1ReferenceName" category="enum"/>
+ <type name="StdVideoAV1InterpolationFilter" category="enum"/>
+ <type name="StdVideoAV1TxMode" category="enum"/>
+ <type name="StdVideoAV1FrameRestorationType" category="enum"/>
+ <type name="StdVideoAV1ColorPrimaries" category="enum"/>
+ <type name="StdVideoAV1TransferCharacteristics" category="enum"/>
+ <type name="StdVideoAV1MatrixCoefficients" category="enum"/>
+ <type name="StdVideoAV1ChromaSamplePosition" category="enum"/>
+
+ <type category="struct" name="StdVideoAV1ColorConfigFlags">
+ <comment>Syntax defined in section 5.5.2, semantics defined in section 6.4.2</comment>
+ <member><type>uint32_t</type> <name>mono_chrome</name> : 1</member>
+ <member><type>uint32_t</type> <name>color_range</name> : 1</member>
+ <member><type>uint32_t</type> <name>separate_uv_delta_q</name> : 1</member>
+ <member><type>uint32_t</type> <name>color_description_present_flag</name> : 1</member>
+ <member><type>uint32_t</type> <name>reserved</name> : 28</member>
+ </type>
+ <type category="struct" name="StdVideoAV1ColorConfig">
+ <comment>Syntax defined in section 5.5.2, semantics defined in section 6.4.2</comment>
+ <member><type>StdVideoAV1ColorConfigFlags</type> <name>flags</name></member>
+ <member><type>uint8_t</type> <name>BitDepth</name></member>
+ <member><type>uint8_t</type> <name>subsampling_x</name></member>
+ <member><type>uint8_t</type> <name>subsampling_y</name></member>
+ <member><type>uint8_t</type> <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+ <member><type>StdVideoAV1ColorPrimaries</type> <name>color_primaries</name></member>
+ <member><type>StdVideoAV1TransferCharacteristics</type> <name>transfer_characteristics</name></member>
+ <member><type>StdVideoAV1MatrixCoefficients</type> <name>matrix_coefficients</name></member>
+ <member><type>StdVideoAV1ChromaSamplePosition</type> <name>chroma_sample_position</name></member>
+ </type>
+ <type category="struct" name="StdVideoAV1TimingInfoFlags">
+ <comment>Syntax defined in section 5.5.3, semantics defined in section 6.4.3</comment>
+ <member><type>uint32_t</type> <name>equal_picture_interval</name> : 1</member>
+ <member><type>uint32_t</type> <name>reserved</name> : 31</member>
+ </type>
+ <type category="struct" name="StdVideoAV1TimingInfo">
+ <comment>Syntax defined in section 5.5.3, semantics defined in section 6.4.3</comment>
+ <member><type>StdVideoAV1TimingInfoFlags</type> <name>flags</name></member>
+ <member><type>uint32_t</type> <name>num_units_in_display_tick</name></member>
+ <member><type>uint32_t</type> <name>time_scale</name></member>
+ <member><type>uint32_t</type> <name>num_ticks_per_picture_minus_1</name></member>
+ </type>
+ <type category="struct" name="StdVideoAV1SequenceHeaderFlags">
+ <comment>Syntax defined in section 5.5, semantics defined in section 6.4</comment>
+ <member><type>uint32_t</type> <name>still_picture</name> : 1</member>
+ <member><type>uint32_t</type> <name>reduced_still_picture_header</name> : 1</member>
+ <member><type>uint32_t</type> <name>use_128x128_superblock</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_filter_intra</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_intra_edge_filter</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_interintra_compound</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_masked_compound</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_warped_motion</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_dual_filter</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_order_hint</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_jnt_comp</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_ref_frame_mvs</name> : 1</member>
+ <member><type>uint32_t</type> <name>frame_id_numbers_present_flag</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_superres</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_cdef</name> : 1</member>
+ <member><type>uint32_t</type> <name>enable_restoration</name> : 1</member>
+ <member><type>uint32_t</type> <name>film_grain_params_present</name> : 1</member>
+ <member><type>uint32_t</type> <name>timing_info_present_flag</name> : 1</member>
+ <member><type>uint32_t</type> <name>initial_display_delay_present_flag</name> : 1</member>
+ <member><type>uint32_t</type> <name>reserved</name> : 13</member>
+ </type>
+ <type category="struct" name="StdVideoAV1SequenceHeader">
+ <comment>Syntax defined in section 5.5, semantics defined in section 6.4</comment>
+ <member><type>StdVideoAV1SequenceHeaderFlags</type> <name>flags</name></member>
+ <member><type>StdVideoAV1Profile</type> <name>seq_profile</name></member>
+ <member><type>uint8_t</type> <name>frame_width_bits_minus_1</name></member>
+ <member><type>uint8_t</type> <name>frame_height_bits_minus_1</name></member>
+ <member><type>uint16_t</type> <name>max_frame_width_minus_1</name></member>
+ <member><type>uint16_t</type> <name>max_frame_height_minus_1</name></member>
+ <member><type>uint8_t</type> <name>delta_frame_id_length_minus_2</name></member>
+ <member><type>uint8_t</type> <name>additional_frame_id_length_minus_1</name></member>
+ <member><type>uint8_t</type> <name>order_hint_bits_minus_1</name></member>
+ <member><type>uint8_t</type> <name>seq_force_integer_mv</name><comment>The final value of of seq_force_integer_mv per the value of seq_choose_integer_mv.</comment></member>
+ <member><type>uint8_t</type> <name>seq_force_screen_content_tools</name><comment>The final value of of seq_force_screen_content_tools per the value of seq_choose_screen_content_tools.</comment></member>
+ <member><type>uint8_t</type> <name>reserved1</name>[5]<comment>Reserved for future use and must be initialized with 0.</comment></member>
+ <member>const <type>StdVideoAV1ColorConfig</type>* <name>pColorConfig</name></member>
+ <member>const <type>StdVideoAV1TimingInfo</type>* <name>pTimingInfo</name></member>
+ </type>
+ <type category="struct" name="StdVideoAV1LoopFilterFlags">
+ <comment>Syntax defined in section 5.9.11, semantics defined in section 6.8.10</comment>
+ <member><type>uint32_t</type> <name>loop_filter_delta_enabled</name> : 1</member>
+ <member><type>uint32_t</type> <name>loop_filter_delta_update</name> : 1</member>
+ <member><type>uint32_t</type> <name>reserved</name> : 30</member>
+ </type>
+ <type category="struct" name="StdVideoAV1LoopFilter">
+ <comment>Syntax defined in section 5.9.11, semantics defined in section 6.8.10</comment>
+ <member><type>StdVideoAV1LoopFilterFlags</type> <name>flags</name></member>
+ <member><type>uint8_t</type> <name>loop_filter_level</name>[<enum>STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS</enum>]</member>
+ <member><type>uint8_t</type> <name>loop_filter_sharpness</name></member>
+ <member><type>uint8_t</type> <name>update_ref_delta</name></member>
+ <member><type>int8_t</type> <name>loop_filter_ref_deltas</name>[<enum>STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME</enum>]</member>
+ <member><type>uint8_t</type> <name>update_mode_delta</name></member>
+ <member><type>int8_t</type> <name>loop_filter_mode_deltas</name>[<enum>STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS</enum>]</member>
+ </type>
+ <type category="struct" name="StdVideoAV1QuantizationFlags">
+ <comment>Syntax defined in section 5.9.12, semantics defined in section 6.8.11</comment>
+ <member><type>uint32_t</type> <name>using_qmatrix</name> : 1</member>
+ <member><type>uint32_t</type> <name>diff_uv_delta</name> : 1</member>
+ <member><type>uint32_t</type> <name>reserved</name> : 30</member>
+ </type>
+ <type category="struct" name="StdVideoAV1Quantization">
+ <comment>Syntax defined in section 5.9.12, semantics defined in section 6.8.11</comment>
+ <member><type>StdVideoAV1QuantizationFlags</type> <name>flags</name></member>
+ <member><type>uint8_t</type> <name>base_q_idx</name></member>
+ <member><type>int8_t</type> <name>DeltaQYDc</name></member>
+ <member><type>int8_t</type> <name>DeltaQUDc</name></member>
+ <member><type>int8_t</type> <name>DeltaQUAc</name></member>
+ <member><type>int8_t</type> <name>DeltaQVDc</name></member>
+ <member><type>int8_t</type> <name>DeltaQVAc</name></member>
+ <member><type>uint8_t</type> <name>qm_y</name></member>
+ <member><type>uint8_t</type> <name>qm_u</name></member>
+ <member><type>uint8_t</type> <name>qm_v</name></member>
+ </type>
+ <type category="struct" name="StdVideoAV1Segmentation">
+ <comment>Syntax defined in section 5.9.14, semantics defined in section 6.8.13</comment>
+ <member><type>uint8_t</type> <name>FeatureEnabled</name>[<enum>STD_VIDEO_AV1_MAX_SEGMENTS</enum>]<comment>Each element contains 8 (SEG_LVL_MAX) bits, one bit for each feature within the segment</comment></member>
+ <member><type>int16_t</type> <name>FeatureData</name>[<enum>STD_VIDEO_AV1_MAX_SEGMENTS</enum>][<enum>STD_VIDEO_AV1_SEG_LVL_MAX</enum>]</member>
+ </type>
+ <type category="struct" name="StdVideoAV1TileInfoFlags">
+ <comment>Syntax defined in section 5.9.15, semantics defined in section 6.8.14</comment>
+ <member><type>uint32_t</type> <name>uniform_tile_spacing_flag</name> : 1</member>
+ <member><type>uint32_t</type> <name>reserved</name> : 31</member>
+ </type>
+ <type category="struct" name="StdVideoAV1TileInfo">
+ <comment>Syntax defined in section 5.9.15, semantics defined in section 6.8.14</comment>
+ <member><type>StdVideoAV1TileInfoFlags</type> <name>flags</name></member>
+ <member><type>uint8_t</type> <name>TileCols</name></member>
+ <member><type>uint8_t</type> <name>TileRows</name></member>
+ <member><type>uint16_t</type> <name>context_update_tile_id</name></member>
+ <member><type>uint8_t</type> <name>tile_size_bytes_minus_1</name></member>
+ <member><type>uint8_t</type> <name>reserved1</name>[7]<comment>Reserved for future use and must be initialized with 0.</comment></member>
+ <member>const <type>uint16_t</type>* <name>pMiColStarts</name><comment>TileCols number of elements</comment></member>
+ <member>const <type>uint16_t</type>* <name>pMiRowStarts</name><comment>TileRows number of elements</comment></member>
+ <member>const <type>uint16_t</type>* <name>pWidthInSbsMinus1</name><comment>TileCols number of elements</comment></member>
+ <member>const <type>uint16_t</type>* <name>pHeightInSbsMinus1</name><comment>TileRows number of elements</comment></member>
+ </type>
+ <type category="struct" name="StdVideoAV1CDEF">
+ <comment>Syntax defined in section 5.9.19, semantics defined in section 6.10.14</comment>
+ <member><type>uint8_t</type> <name>cdef_damping_minus_3</name></member>
+ <member><type>uint8_t</type> <name>cdef_bits</name></member>
+ <member><type>uint8_t</type> <name>cdef_y_pri_strength</name>[<enum>STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS</enum>]</member>
+ <member><type>uint8_t</type> <name>cdef_y_sec_strength</name>[<enum>STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS</enum>]</member>
+ <member><type>uint8_t</type> <name>cdef_uv_pri_strength</name>[<enum>STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS</enum>]</member>
+ <member><type>uint8_t</type> <name>cdef_uv_sec_strength</name>[<enum>STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS</enum>]</member>
+ </type>
+ <type category="struct" name="StdVideoAV1LoopRestoration">
+ <comment>Syntax defined in section 5.9.20, semantics defined in section 6.10.15</comment>
+ <member><type>StdVideoAV1FrameRestorationType</type> <name>FrameRestorationType</name>[<enum>STD_VIDEO_AV1_MAX_NUM_PLANES</enum>]</member>
+ <member><type>uint16_t</type> <name>LoopRestorationSize</name>[<enum>STD_VIDEO_AV1_MAX_NUM_PLANES</enum>]</member>
+ </type>
+ <type category="struct" name="StdVideoAV1GlobalMotion">
+ <comment>Syntax defined in section 5.9.24, semantics defined in section 7.10</comment>
+ <member><type>uint8_t</type> <name>GmType</name>[<enum>STD_VIDEO_AV1_NUM_REF_FRAMES</enum>]</member>
+ <member><type>int32_t</type> <name>gm_params</name>[<enum>STD_VIDEO_AV1_NUM_REF_FRAMES</enum>][<enum>STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS</enum>]</member>
+ </type>
+ <type category="struct" name="StdVideoAV1FilmGrainFlags">
+ <comment>Syntax defined in section 5.9.30, semantics defined in section 6.8.20</comment>
+ <member><type>uint32_t</type> <name>chroma_scaling_from_luma</name> : 1</member>
+ <member><type>uint32_t</type> <name>overlap_flag</name> : 1</member>
+ <member><type>uint32_t</type> <name>clip_to_restricted_range</name> : 1</member>
+ <member><type>uint32_t</type> <name>update_grain</name> : 1</member>
+ <member><type>uint32_t</type> <name>reserved</name> : 28</member>
+ </type>
+ <type category="struct" name="StdVideoAV1FilmGrain">
+ <comment>Syntax defined in section 5.9.30, semantics defined in section 6.8.20</comment>
+ <member><type>StdVideoAV1FilmGrainFlags</type> <name>flags</name></member>
+ <member><type>uint8_t</type> <name>grain_scaling_minus_8</name></member>
+ <member><type>uint8_t</type> <name>ar_coeff_lag</name></member>
+ <member><type>uint8_t</type> <name>ar_coeff_shift_minus_6</name></member>
+ <member><type>uint8_t</type> <name>grain_scale_shift</name></member>
+ <member><type>uint16_t</type> <name>grain_seed</name></member>
+ <member><type>uint8_t</type> <name>film_grain_params_ref_idx</name></member>
+ <member><type>uint8_t</type> <name>num_y_points</name></member>
+ <member><type>uint8_t</type> <name>point_y_value</name>[<enum>STD_VIDEO_AV1_MAX_NUM_Y_POINTS</enum>]</member>
+ <member><type>uint8_t</type> <name>point_y_scaling</name>[<enum>STD_VIDEO_AV1_MAX_NUM_Y_POINTS</enum>]</member>
+ <member><type>uint8_t</type> <name>num_cb_points</name></member>
+ <member><type>uint8_t</type> <name>point_cb_value</name>[<enum>STD_VIDEO_AV1_MAX_NUM_CB_POINTS</enum>]</member>
+ <member><type>uint8_t</type> <name>point_cb_scaling</name>[<enum>STD_VIDEO_AV1_MAX_NUM_CB_POINTS</enum>]</member>
+ <member><type>uint8_t</type> <name>num_cr_points</name></member>
+ <member><type>uint8_t</type> <name>point_cr_value</name>[<enum>STD_VIDEO_AV1_MAX_NUM_CR_POINTS</enum>]</member>
+ <member><type>uint8_t</type> <name>point_cr_scaling</name>[<enum>STD_VIDEO_AV1_MAX_NUM_CR_POINTS</enum>]</member>
+ <member><type>int8_t</type> <name>ar_coeffs_y_plus_128</name>[<enum>STD_VIDEO_AV1_MAX_NUM_POS_LUMA</enum>]</member>
+ <member><type>int8_t</type> <name>ar_coeffs_cb_plus_128</name>[<enum>STD_VIDEO_AV1_MAX_NUM_POS_CHROMA</enum>]</member>
+ <member><type>int8_t</type> <name>ar_coeffs_cr_plus_128</name>[<enum>STD_VIDEO_AV1_MAX_NUM_POS_CHROMA</enum>]</member>
+ <member><type>uint8_t</type> <name>cb_mult</name></member>
+ <member><type>uint8_t</type> <name>cb_luma_mult</name></member>
+ <member><type>uint16_t</type> <name>cb_offset</name></member>
+ <member><type>uint8_t</type> <name>cr_mult</name></member>
+ <member><type>uint8_t</type> <name>cr_luma_mult</name></member>
+ <member><type>uint16_t</type> <name>cr_offset</name></member>
+ </type>
+ <type category="struct" name="StdVideoDecodeAV1PictureInfoFlags">
+ <comment>Syntax defined in section 5.9, semantics defined in section 6.8</comment>
+ <member><type>uint32_t</type> <name>error_resilient_mode</name> : 1</member>
+ <member><type>uint32_t</type> <name>disable_cdf_update</name> : 1</member>
+ <member><type>uint32_t</type> <name>use_superres</name> : 1</member>
+ <member><type>uint32_t</type> <name>render_and_frame_size_different</name> : 1</member>
+ <member><type>uint32_t</type> <name>allow_screen_content_tools</name> : 1</member>
+ <member><type>uint32_t</type> <name>is_filter_switchable</name> : 1</member>
+ <member><type>uint32_t</type> <name>force_integer_mv</name> : 1</member>
+ <member><type>uint32_t</type> <name>frame_size_override_flag</name> : 1</member>
+ <member><type>uint32_t</type> <name>buffer_removal_time_present_flag</name> : 1</member>
+ <member><type>uint32_t</type> <name>allow_intrabc</name> : 1</member>
+ <member><type>uint32_t</type> <name>frame_refs_short_signaling</name> : 1</member>
+ <member><type>uint32_t</type> <name>allow_high_precision_mv</name> : 1</member>
+ <member><type>uint32_t</type> <name>is_motion_mode_switchable</name> : 1</member>
+ <member><type>uint32_t</type> <name>use_ref_frame_mvs</name> : 1</member>
+ <member><type>uint32_t</type> <name>disable_frame_end_update_cdf</name> : 1</member>
+ <member><type>uint32_t</type> <name>allow_warped_motion</name> : 1</member>
+ <member><type>uint32_t</type> <name>reduced_tx_set</name> : 1</member>
+ <member><type>uint32_t</type> <name>reference_select</name> : 1</member>
+ <member><type>uint32_t</type> <name>skip_mode_present</name> : 1</member>
+ <member><type>uint32_t</type> <name>delta_q_present</name> : 1</member>
+ <member><type>uint32_t</type> <name>delta_lf_present</name> : 1</member>
+ <member><type>uint32_t</type> <name>delta_lf_multi</name> : 1</member>
+ <member><type>uint32_t</type> <name>segmentation_enabled</name> : 1</member>
+ <member><type>uint32_t</type> <name>segmentation_update_map</name> : 1</member>
+ <member><type>uint32_t</type> <name>segmentation_temporal_update</name> : 1</member>
+ <member><type>uint32_t</type> <name>segmentation_update_data</name> : 1</member>
+ <member><type>uint32_t</type> <name>UsesLr</name> : 1</member>
+ <member><type>uint32_t</type> <name>usesChromaLr</name> : 1</member>
+ <member><type>uint32_t</type> <name>apply_grain</name> : 1</member>
+ <member><type>uint32_t</type> <name>reserved</name> : 3</member>
+ </type>
+ <type category="struct" name="StdVideoDecodeAV1PictureInfo">
+ <comment>Syntax defined in sections 5.9 and 5.11.1, semantics defined in sections 6.8 and 6.10.1</comment>
+ <member><type>StdVideoDecodeAV1PictureInfoFlags</type> <name>flags</name></member>
+ <member><type>StdVideoAV1FrameType</type> <name>frame_type</name></member>
+ <member><type>uint32_t</type> <name>current_frame_id</name></member>
+ <member><type>uint8_t</type> <name>OrderHint</name></member>
+ <member><type>uint8_t</type> <name>primary_ref_frame</name></member>
+ <member><type>uint8_t</type> <name>refresh_frame_flags</name></member>
+ <member><type>uint8_t</type> <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+ <member><type>StdVideoAV1InterpolationFilter</type> <name>interpolation_filter</name></member>
+ <member><type>StdVideoAV1TxMode</type> <name>TxMode</name></member>
+ <member><type>uint8_t</type> <name>delta_q_res</name></member>
+ <member><type>uint8_t</type> <name>delta_lf_res</name></member>
+ <member><type>uint8_t</type> <name>SkipModeFrame</name>[<enum>STD_VIDEO_AV1_SKIP_MODE_FRAMES</enum>]</member>
+ <member><type>uint8_t</type> <name>coded_denom</name></member>
+ <member><type>uint8_t</type> <name>reserved2</name>[3]<comment>Reserved for future use and must be initialized with 0.</comment></member>
+ <member><type>uint8_t</type> <name>OrderHints</name>[<enum>STD_VIDEO_AV1_NUM_REF_FRAMES</enum>]</member>
+ <member><type>uint32_t</type> <name>expectedFrameId</name>[<enum>STD_VIDEO_AV1_NUM_REF_FRAMES</enum>]</member>
+ <member>const <type>StdVideoAV1TileInfo</type>* <name>pTileInfo</name></member>
+ <member>const <type>StdVideoAV1Quantization</type>* <name>pQuantization</name></member>
+ <member>const <type>StdVideoAV1Segmentation</type>* <name>pSegmentation</name></member>
+ <member>const <type>StdVideoAV1LoopFilter</type>* <name>pLoopFilter</name></member>
+ <member>const <type>StdVideoAV1CDEF</type>* <name>pCDEF</name></member>
+ <member>const <type>StdVideoAV1LoopRestoration</type>* <name>pLoopRestoration</name></member>
+ <member>const <type>StdVideoAV1GlobalMotion</type>* <name>pGlobalMotion</name></member>
+ <member>const <type>StdVideoAV1FilmGrain</type>* <name>pFilmGrain</name></member>
+ </type>
+ <type category="struct" name="StdVideoDecodeAV1ReferenceInfoFlags">
+ <member><type>uint32_t</type> <name>disable_frame_end_update_cdf</name> : 1</member>
+ <member><type>uint32_t</type> <name>segmentation_enabled</name> : 1</member>
+ <member><type>uint32_t</type> <name>reserved</name> : 30</member>
+ </type>
+ <type category="struct" name="StdVideoDecodeAV1ReferenceInfo">
+ <member><type>StdVideoDecodeAV1ReferenceInfoFlags</type> <name>flags</name></member>
+ <member><type>uint8_t</type> <name>frame_type</name></member>
+ <member><type>uint8_t</type> <name>RefFrameSignBias</name></member>
+ <member><type>uint8_t</type> <name>OrderHint</name></member>
+ <member><type>uint8_t</type> <name>SavedOrderHints</name>[<enum>STD_VIDEO_AV1_NUM_REF_FRAMES</enum>]</member>
+ </type>
</types>
<!-- vulkan_video_codec_h264std.h enums -->
@@ -1039,6 +1316,142 @@ The current public version of video.xml is maintained in the default branch
<enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID" value="0x7FFFFFFF"/>
</enums>
+ <!-- vulkan_video_codec_av1std.h enums -->
+ <enums name="StdVideoAV1Profile" type="enum">
+ <enum name="STD_VIDEO_AV1_PROFILE_MAIN" value="0"/>
+ <enum name="STD_VIDEO_AV1_PROFILE_HIGH" value="1"/>
+ <enum name="STD_VIDEO_AV1_PROFILE_PROFESSIONAL" value="2"/>
+ <enum name="STD_VIDEO_AV1_PROFILE_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1Level" type="enum">
+ <enum name="STD_VIDEO_AV1_LEVEL_2_0" value="0"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_2_1" value="1"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_2_2" value="2"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_2_3" value="3"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_3_0" value="4"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_3_1" value="5"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_3_2" value="6"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_3_3" value="7"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_4_0" value="8"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_4_1" value="9"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_4_2" value="10"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_4_3" value="11"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_5_0" value="12"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_5_1" value="13"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_5_2" value="14"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_5_3" value="15"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_6_0" value="16"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_6_1" value="17"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_6_2" value="18"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_6_3" value="19"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_7_0" value="20"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_7_1" value="21"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_7_2" value="22"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_7_3" value="23"/>
+ <enum name="STD_VIDEO_AV1_LEVEL_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1FrameType" type="enum">
+ <enum name="STD_VIDEO_AV1_FRAME_TYPE_KEY" value="0"/>
+ <enum name="STD_VIDEO_AV1_FRAME_TYPE_INTER" value="1"/>
+ <enum name="STD_VIDEO_AV1_FRAME_TYPE_INTRA_ONLY" value="2"/>
+ <enum name="STD_VIDEO_AV1_FRAME_TYPE_SWITCH" value="3"/>
+ <enum name="STD_VIDEO_AV1_FRAME_TYPE_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1ReferenceName" type="enum">
+ <enum name="STD_VIDEO_AV1_REFERENCE_NAME_INTRA_FRAME" value="0"/>
+ <enum name="STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME" value="1"/>
+ <enum name="STD_VIDEO_AV1_REFERENCE_NAME_LAST2_FRAME" value="2"/>
+ <enum name="STD_VIDEO_AV1_REFERENCE_NAME_LAST3_FRAME" value="3"/>
+ <enum name="STD_VIDEO_AV1_REFERENCE_NAME_GOLDEN_FRAME" value="4"/>
+ <enum name="STD_VIDEO_AV1_REFERENCE_NAME_BWDREF_FRAME" value="5"/>
+ <enum name="STD_VIDEO_AV1_REFERENCE_NAME_ALTREF2_FRAME" value="6"/>
+ <enum name="STD_VIDEO_AV1_REFERENCE_NAME_ALTREF_FRAME" value="7"/>
+ <enum name="STD_VIDEO_AV1_REFERENCE_NAME_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1InterpolationFilter" type="enum">
+ <enum name="STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP" value="0"/>
+ <enum name="STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH" value="1"/>
+ <enum name="STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SHARP" value="2"/>
+ <enum name="STD_VIDEO_AV1_INTERPOLATION_FILTER_BILINEAR" value="3"/>
+ <enum name="STD_VIDEO_AV1_INTERPOLATION_FILTER_SWITCHABLE" value="4"/>
+ <enum name="STD_VIDEO_AV1_INTERPOLATION_FILTER_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1TxMode" type="enum">
+ <enum name="STD_VIDEO_AV1_TX_MODE_ONLY_4X4" value="0"/>
+ <enum name="STD_VIDEO_AV1_TX_MODE_LARGEST" value="1"/>
+ <enum name="STD_VIDEO_AV1_TX_MODE_SELECT" value="2"/>
+ <enum name="STD_VIDEO_AV1_TX_MODE_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1FrameRestorationType" type="enum">
+ <enum name="STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_NONE" value="0"/>
+ <enum name="STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_WIENER" value="1"/>
+ <enum name="STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SGRPROJ" value="2"/>
+ <enum name="STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SWITCHABLE" value="3"/>
+ <enum name="STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1ColorPrimaries">
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_BT_709" value="1"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED" value="2"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_M" value="4"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_B_G" value="5"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_BT_601" value="6"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_240" value="7"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_GENERIC_FILM" value="8"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_BT_2020" value="9"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_XYZ" value="10"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_431" value="11"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_432" value="12"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_EBU_3213" value="22"/>
+ <enum name="STD_VIDEO_AV1_COLOR_PRIMARIES_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1TransferCharacteristics">
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_0" value="0"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_709" value="1"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_UNSPECIFIED" value="2"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_3" value="3"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_M" value="4"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_B_G" value="5"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_601" value="6"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_240" value="7"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LINEAR" value="8"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100" value="9"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100_SQRT10" value="10"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_IEC_61966" value="11"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_1361" value="12"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SRGB" value="13"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_10_BIT" value="14"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_12_BIT" value="15"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_2084" value="16"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_428" value="17"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_HLG" value="18"/>
+ <enum name="STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1MatrixCoefficients">
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_IDENTITY" value="0"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_709" value="1"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_UNSPECIFIED" value="2"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_RESERVED_3" value="3"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_FCC" value="4"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_470_B_G" value="5"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_601" value="6"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_240" value="7"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_YCGCO" value="8"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_NCL" value="9"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_CL" value="10"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_2085" value="11"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_NCL" value="12"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_CL" value="13"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_ICTCP" value="14"/>
+ <enum name="STD_VIDEO_AV1_MATRIX_COEFFICIENTS_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+ <enums name="StdVideoAV1ChromaSamplePosition">
+ <enum name="STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_UNKNOWN" value="0"/>
+ <enum name="STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_VERTICAL" value="1"/>
+ <enum name="STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_COLOCATED" value="2"/>
+ <enum name="STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_RESERVED" value="3"/>
+ <enum name="STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_INVALID" value="0x7FFFFFFF"/>
+ </enums>
+
<extensions>
<extension name="vulkan_video_codecs_common" comment="protect with VULKAN_VIDEO_CODEC_COMMON_H_" supported="vulkan">
<require>
@@ -1214,5 +1627,77 @@ The current public version of video.xml is maintained in the default branch
<type name="StdVideoEncodeH265ReferenceInfo"/>
</require>
</extension>
+ <extension name="vulkan_video_codec_av1std" comment="protect with VULKAN_VIDEO_CODEC_AV1STD_H_" supported="vulkan">
+ <require>
+ <type name="vk_video/vulkan_video_codecs_common.h"/>
+
+ <enum name="STD_VIDEO_AV1_NUM_REF_FRAMES" value="8"/>
+ <enum name="STD_VIDEO_AV1_REFS_PER_FRAME" value="7"/>
+ <enum name="STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME" value="8"/>
+ <enum name="STD_VIDEO_AV1_MAX_TILE_COLS" value="64"/>
+ <enum name="STD_VIDEO_AV1_MAX_TILE_ROWS" value="64"/>
+ <enum name="STD_VIDEO_AV1_MAX_SEGMENTS" value="8"/>
+ <enum name="STD_VIDEO_AV1_SEG_LVL_MAX" value="8"/>
+ <enum name="STD_VIDEO_AV1_PRIMARY_REF_NONE" value="7"/>
+ <enum name="STD_VIDEO_AV1_SELECT_INTEGER_MV" value="2"/>
+ <enum name="STD_VIDEO_AV1_SELECT_SCREEN_CONTENT_TOOLS" value="2"/>
+ <enum name="STD_VIDEO_AV1_SKIP_MODE_FRAMES" value="2"/>
+ <enum name="STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS" value="4"/>
+ <enum name="STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS" value="2"/>
+ <enum name="STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS" value="8"/>
+ <enum name="STD_VIDEO_AV1_MAX_NUM_PLANES" value="3"/>
+ <enum name="STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS" value="6"/>
+ <enum name="STD_VIDEO_AV1_MAX_NUM_Y_POINTS" value="14"/>
+ <enum name="STD_VIDEO_AV1_MAX_NUM_CB_POINTS" value="10"/>
+ <enum name="STD_VIDEO_AV1_MAX_NUM_CR_POINTS" value="10"/>
+ <enum name="STD_VIDEO_AV1_MAX_NUM_POS_LUMA" value="24"/>
+ <enum name="STD_VIDEO_AV1_MAX_NUM_POS_CHROMA" value="25"/>
+
+ <type name="StdVideoAV1Profile"/>
+ <type name="StdVideoAV1Level"/>
+ <type name="StdVideoAV1FrameType"/>
+ <type name="StdVideoAV1ReferenceName"/>
+ <type name="StdVideoAV1InterpolationFilter"/>
+ <type name="StdVideoAV1TxMode"/>
+ <type name="StdVideoAV1FrameRestorationType"/>
+ <type name="StdVideoAV1ColorPrimaries"/>
+ <type name="StdVideoAV1TransferCharacteristics"/>
+ <type name="StdVideoAV1MatrixCoefficients"/>
+ <type name="StdVideoAV1ChromaSamplePosition"/>
+
+ <type name="StdVideoAV1ColorConfigFlags"/>
+ <type name="StdVideoAV1ColorConfig"/>
+ <type name="StdVideoAV1TimingInfoFlags"/>
+ <type name="StdVideoAV1TimingInfo"/>
+ <type name="StdVideoAV1LoopFilterFlags"/>
+ <type name="StdVideoAV1LoopFilter"/>
+ <type name="StdVideoAV1QuantizationFlags"/>
+ <type name="StdVideoAV1Quantization"/>
+ <type name="StdVideoAV1Segmentation"/>
+ <type name="StdVideoAV1TileInfoFlags"/>
+ <type name="StdVideoAV1TileInfo"/>
+ <type name="StdVideoAV1CDEF"/>
+ <type name="StdVideoAV1LoopRestoration"/>
+ <type name="StdVideoAV1GlobalMotion"/>
+ <type name="StdVideoAV1FilmGrainFlags"/>
+ <type name="StdVideoAV1FilmGrain"/>
+ <type name="StdVideoAV1SequenceHeaderFlags"/>
+ <type name="StdVideoAV1SequenceHeader"/>
+ </require>
+ </extension>
+ <extension name="vulkan_video_codec_av1std_decode" comment="protect with VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_" supported="vulkan">
+ <require>
+ <type name="vk_video/vulkan_video_codec_av1std.h"/>
+
+ <type name="VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0"/>
+ <enum name="VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION" value="VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0"/>
+ <enum name="VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME" value="&quot;VK_STD_vulkan_video_codec_av1_decode&quot;"/>
+
+ <type name="StdVideoDecodeAV1PictureInfoFlags"/>
+ <type name="StdVideoDecodeAV1PictureInfo"/>
+ <type name="StdVideoDecodeAV1ReferenceInfoFlags"/>
+ <type name="StdVideoDecodeAV1ReferenceInfo"/>
+ </require>
+ </extension>
</extensions>
</registry>
diff --git a/xml/vk.xml b/xml/vk.xml
index 82ec5eb1..fb92b7c2 100755
--- a/xml/vk.xml
+++ b/xml/vk.xml
@@ -175,7 +175,7 @@ branch of the member gitlab server.
#define <name>VKSC_API_VERSION_1_0</name> <type>VK_MAKE_API_VERSION</type>(VKSC_API_VARIANT, 1, 0, 0)// Patch version should always be set to 0</type>
<type api="vulkan" category="define">// Version of this file
-#define <name>VK_HEADER_VERSION</name> 276</type>
+#define <name>VK_HEADER_VERSION</name> 277</type>
<type api="vulkan" category="define" requires="VK_HEADER_VERSION">// Complete version of this file
#define <name>VK_HEADER_VERSION_COMPLETE</name> <type>VK_MAKE_API_VERSION</type>(0, 1, 3, VK_HEADER_VERSION)</type>
<type api="vulkansc" category="define">// Version of this file
@@ -6866,6 +6866,44 @@ typedef void* <name>MTLSharedEvent_id</name>;
<member optional="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>StdVideoDecodeH265ReferenceInfo</type>* <name>pStdReferenceInfo</name></member>
</type>
+ <type category="include" name="vk_video/vulkan_video_codec_av1std.h">#include "vk_video/vulkan_video_codec_av1std.h"</type>
+ <type requires="vk_video/vulkan_video_codec_av1std.h" name="StdVideoAV1Profile"/>
+ <type requires="vk_video/vulkan_video_codec_av1std.h" name="StdVideoAV1Level"/>
+ <type requires="vk_video/vulkan_video_codec_av1std.h" name="StdVideoAV1SequenceHeader"/>
+ <type category="include" name="vk_video/vulkan_video_codec_av1std_decode.h">#include "vk_video/vulkan_video_codec_av1std_decode.h"</type>
+ <type requires="vk_video/vulkan_video_codec_av1std_decode.h" name="StdVideoDecodeAV1PictureInfo"/>
+ <type requires="vk_video/vulkan_video_codec_av1std_decode.h" name="StdVideoDecodeAV1ReferenceInfo"/>
+ <type category="struct" name="VkVideoDecodeAV1ProfileInfoKHR" structextends="VkVideoProfileInfoKHR,VkQueryPoolCreateInfo">
+ <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+ <member optional="true">const <type>void</type>* <name>pNext</name></member>
+ <member><type>StdVideoAV1Profile</type> <name>stdProfile</name></member>
+ <member><type>VkBool32</type> <name>filmGrainSupport</name></member>
+ </type>
+ <type category="struct" name="VkVideoDecodeAV1CapabilitiesKHR" returnedonly="true" structextends="VkVideoCapabilitiesKHR">
+ <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+ <member optional="true"><type>void</type>* <name>pNext</name></member>
+ <member><type>StdVideoAV1Level</type> <name>maxLevel</name></member>
+ </type>
+ <type category="struct" name="VkVideoDecodeAV1SessionParametersCreateInfoKHR" structextends="VkVideoSessionParametersCreateInfoKHR">
+ <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+ <member optional="true">const <type>void</type>* <name>pNext</name></member>
+ <member>const <type>StdVideoAV1SequenceHeader</type>* <name>pStdSequenceHeader</name></member>
+ </type>
+ <type category="struct" name="VkVideoDecodeAV1PictureInfoKHR" structextends="VkVideoDecodeInfoKHR">
+ <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+ <member optional="true">const <type>void</type>* <name>pNext</name></member>
+ <member>const <type>StdVideoDecodeAV1PictureInfo</type>* <name>pStdPictureInfo</name></member>
+ <member><type>int32_t</type> <name>referenceNameSlotIndices</name>[<enum>VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR</enum>]</member>
+ <member><type>uint32_t</type> <name>frameHeaderOffset</name></member>
+ <member><type>uint32_t</type> <name>tileCount</name></member>
+ <member len="tileCount">const <type>uint32_t</type>* <name>pTileOffsets</name></member>
+ <member len="tileCount">const <type>uint32_t</type>* <name>pTileSizes</name></member>
+ </type>
+ <type category="struct" name="VkVideoDecodeAV1DpbSlotInfoKHR" structextends="VkVideoReferenceSlotInfoKHR">
+ <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+ <member optional="true">const <type>void</type>* <name>pNext</name></member>
+ <member>const <type>StdVideoDecodeAV1ReferenceInfo</type>* <name>pStdReferenceInfo</name></member>
+ </type>
<type category="struct" name="VkVideoSessionCreateInfoKHR">
<member values="VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member optional="true">const <type>void</type>* <name>pNext</name></member>
@@ -9078,6 +9116,7 @@ typedef void* <name>MTLSharedEvent_id</name>;
<enum type="uint32_t" value="16" name="VK_MAX_GLOBAL_PRIORITY_SIZE_KHR"/>
<enum name="VK_MAX_GLOBAL_PRIORITY_SIZE_EXT" alias="VK_MAX_GLOBAL_PRIORITY_SIZE_KHR"/>
<enum type="uint32_t" value="32" name="VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT"/>
+ <enum type="uint32_t" value="7" name="VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR"/>
<enum type="uint32_t" value="(~0U)" name="VK_SHADER_INDEX_UNUSED_AMDX"/>
</enums>
@@ -20414,7 +20453,7 @@ typedef void* <name>MTLSharedEvent_id</name>;
<enum bitpos="19" extends="VkImageCreateFlagBits" name="VK_IMAGE_CREATE_RESERVED_19_BIT_EXT"/>
</require>
</extension>
- <extension name="VK_EXT_line_rasterization" number="260" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Jeff Bolz @jeffbolznv" specialuse="cadsupport" supported="vulkan,vulkansc">
+ <extension name="VK_EXT_line_rasterization" number="260" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Jeff Bolz @jeffbolznv" specialuse="cadsupport" supported="vulkan,vulkansc" promotedto="VK_KHR_line_rasterization">
<require>
<enum value="1" name="VK_EXT_LINE_RASTERIZATION_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_line_rasterization&quot;" name="VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME"/>
@@ -22472,9 +22511,11 @@ typedef void* <name>MTLSharedEvent_id</name>;
</extension>
<extension name="VK_KHR_shader_subgroup_rotate" number="417" author="KHR" contact="Kevin Petit @kpet" type="device" supported="vulkan" ratified="vulkan">
<require>
- <enum value="1" name="VK_KHR_SHADER_SUBGROUP_ROTATE_SPEC_VERSION"/>
+ <enum value="2" name="VK_KHR_SHADER_SUBGROUP_ROTATE_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_shader_subgroup_rotate&quot;" name="VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR"/>
+ <enum bitpos="9" extends="VkSubgroupFeatureFlagBits" name="VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR"/>
+ <enum bitpos="10" extends="VkSubgroupFeatureFlagBits" name="VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR"/>
<type name="VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR"/>
</require>
</extension>
@@ -23738,10 +23779,22 @@ typedef void* <name>MTLSharedEvent_id</name>;
<enum value="&quot;VK_EXT_extension_512&quot;" name="VK_EXT_EXTENSION_512_EXTENSION_NAME"/>
</require>
</extension>
- <extension name="VK_KHR_extension_513" number="513" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" type="device" supported="disabled">
+ <extension name="VK_KHR_video_decode_av1" number="513" author="KHR" depends="VK_KHR_video_decode_queue" contact="Daniel Rakos @aqnuep" type="device" supported="vulkan" ratified="vulkan">
<require>
- <enum value="0" name="VK_KHR_EXTENSION_513_SPEC_VERSION"/>
- <enum value="&quot;VK_KHR_extension_513&quot;" name="VK_KHR_EXTENSION_513_EXTENSION_NAME"/>
+ <enum value="1" name="VK_KHR_VIDEO_DECODE_AV1_SPEC_VERSION"/>
+ <enum value="&quot;VK_KHR_video_decode_av1&quot;" name="VK_KHR_VIDEO_DECODE_AV1_EXTENSION_NAME"/>
+ <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_KHR"/>
+ <enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR"/>
+ <enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR"/>
+ <enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR"/>
+ <enum offset="5" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR"/>
+ <enum bitpos="2" extends="VkVideoCodecOperationFlagBitsKHR" name="VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR"/>
+ <enum name="VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR"/>
+ <type name="VkVideoDecodeAV1ProfileInfoKHR"/>
+ <type name="VkVideoDecodeAV1CapabilitiesKHR"/>
+ <type name="VkVideoDecodeAV1SessionParametersCreateInfoKHR"/>
+ <type name="VkVideoDecodeAV1PictureInfoKHR"/>
+ <type name="VkVideoDecodeAV1DpbSlotInfoKHR"/>
</require>
</extension>
<extension name="VK_KHR_extension_514" number="514" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" type="device" supported="disabled">
@@ -24134,6 +24187,30 @@ typedef void* <name>MTLSharedEvent_id</name>;
<enum value="&quot;VK_KHR_extension_559&quot;" name="VK_KHR_EXTENSION_559_EXTENSION_NAME"/>
</require>
</extension>
+ <extension name="VK_NV_extension_560" number="560" author="NV" contact="Lujin Wang @lwnv" supported="disabled">
+ <require>
+ <enum value="0" name="VK_NV_EXTENSION_560_SPEC_VERSION"/>
+ <enum value="&quot;VK_NV_extension_560&quot;" name="VK_NV_EXTENSION_560_EXTENSION_NAME"/>
+ </require>
+ </extension>
+ <extension name="VK_EXT_extension_561" number="561" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="disabled">
+ <require>
+ <enum value="0" name="VK_EXT_EXTENSION_561_SPEC_VERSION"/>
+ <enum value="&quot;VK_EXT_extension_561&quot;" name="VK_EXT_EXTENSION_561_EXTENSION_NAME"/>
+ </require>
+ </extension>
+ <extension name="VK_KHR_extension_562" number="562" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="disabled">
+ <require>
+ <enum value="0" name="VK_KHR_EXTENSION_562_SPEC_VERSION"/>
+ <enum value="&quot;VK_KHR_extension_562&quot;" name="VK_KHR_EXTENSION_562_EXTENSION_NAME"/>
+ </require>
+ </extension>
+ <extension name="VK_KHR_extension_563" number="563" author="KHR" contact="Jon Leech @oddhack" supported="disabled">
+ <require>
+ <enum value="0" name="VK_KHR_EXTENSION_563_SPEC_VERSION"/>
+ <enum value="&quot;VK_KHR_extension_563&quot;" name="VK_KHR_EXTENSION_563_EXTENSION_NAME"/>
+ </require>
+ </extension>
</extensions>
<formats>
<format name="VK_FORMAT_R4G4_UNORM_PACK8" class="8-bit" blockSize="1" texelsPerBlock="1" packed="8">
@@ -26284,6 +26361,9 @@ typedef void* <name>MTLSharedEvent_id</name>;
<spirvcapability name="QuadControlKHR">
<enable struct="VkPhysicalDeviceShaderQuadControlFeaturesKHR" feature="shaderQuadControl" requires="VK_KHR_shader_quad_control"/>
</spirvcapability>
+ <spirvcapability name="MaximallyReconvergesKHR">
+ <enable struct="VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR" feature="shaderMaximalReconvergence" requires="VK_KHR_shader_maximal_reconvergence"/>
+ </spirvcapability>
</spirvcapabilities>
<sync comment="Machine readable representation of the synchronization objects and their mappings">
<syncstage name="VK_PIPELINE_STAGE_2_NONE" alias="VK_PIPELINE_STAGE_NONE">