Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions appendices/VK_EXT_ycbcr_3plane_16bit_lsb_formats.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright 2026 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_EXT_ycbcr_3plane_16bit_lsb_formats.adoc[]

=== Other Extension Metadata

*Last Modified Date*::
2026-04-30
*IP Status*::
No known IP claims.
*Contributors*::
- Robert Mader, Collabora

=== Description

This extension adds some 10/12/14bit {YCbCr} formats that are in common use for
video software encode and decode, but were not part of the
`apiext:VK_KHR_sampler_ycbcr_conversion` extension.

include::{generated}/interfaces/VK_EXT_ycbcr_3plane_16bit_lsb_formats.adoc[]

=== Version History

* Revision 1, 2026-04-30 (Robert Mader)
** Initial draft
16 changes: 16 additions & 0 deletions chapters/descriptorbuffers.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -596,6 +596,22 @@ ifdef::VK_BASE_VERSION_1_3[Vulkan 1.3 is not supported and]
ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, or
ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM
endif::VK_EXT_ycbcr_2plane_444_formats[]
ifdef::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]
* If the <<features-ycbcr3plane16BitLsbFormats,pname:ycbcr3plane16BitLsbFormats>>
feature is not enabled, pname:format must: not be
ename:VK_FORMAT_Z6R10_UNORM_EXT,
ename:VK_FORMAT_Z4R12_UNORM_EXT,
ename:VK_FORMAT_Z2R14_UNORM_EXT,
ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_420_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_422_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_444_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_420_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_422_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_444_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_420_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_422_UNORM_3PACK16_EXT or
ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_444_UNORM_3PACK16_EXT
endif::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]
****

include::{generated}/validity/structs/VkDescriptorAddressInfoEXT.adoc[]
Expand Down
36 changes: 36 additions & 0 deletions chapters/features.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -6092,6 +6092,42 @@ endif::VK_BASE_VERSION_1_3[]
--
endif::VK_EXT_ycbcr_2plane_444_formats[]

ifdef::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]
[open,refpage='VkPhysicalDeviceYcbcr3Plane16BitLsbFormatsFeaturesEXT',desc='Structure describing whether the implementation supports additional 3-plane 16bit LSB {YCbCr} formats',type='structs']
--
The sname:VkPhysicalDeviceYcbcr3Plane16BitLsbFormatsFeaturesEXT structure is
defined as:

include::{generated}/api/structs/VkPhysicalDeviceYcbcr3Plane16BitLsbFormatsFeaturesEXT.adoc[]

This structure describes the following feature:

* pname:sType is a elink:VkStructureType value identifying this structure.
* pname:pNext is `NULL` or a pointer to a structure extending this
structure.
* [[features-ycbcr3plane16BitLsbFormats]] pname:ycbcr3plane16BitLsbFormats
indicates that the implementation supports querying format features for, and
using, the following 3-plane 16bit LSB {YCbCr} formats:
** ename:VK_FORMAT_Z6R10_UNORM_EXT
** ename:VK_FORMAT_Z4R12_UNORM_EXT
** ename:VK_FORMAT_Z2R14_UNORM_EXT
** ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_420_UNORM_3PACK16_EXT
** ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_422_UNORM_3PACK16_EXT
** ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_444_UNORM_3PACK16_EXT
** ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_420_UNORM_3PACK16_EXT
** ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_422_UNORM_3PACK16_EXT
** ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_444_UNORM_3PACK16_EXT
** ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_420_UNORM_3PACK16_EXT
** ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_422_UNORM_3PACK16_EXT
** ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_444_UNORM_3PACK16_EXT

:refpage: VkPhysicalDeviceYcbcr3Plane16BitLsbFormatsFeaturesEXT
include::{chapters}/features.adoc[tag=features]

include::{generated}/validity/structs/VkPhysicalDeviceYcbcr3Plane16BitLsbFormatsFeaturesEXT.adoc[]
--
endif::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]

ifdef::VK_EXT_color_write_enable[]
[open,refpage='VkPhysicalDeviceColorWriteEnableFeaturesEXT',desc='Structure describing whether writes to color attachments can be enabled and disabled dynamically',type='structs']
--
Expand Down
195 changes: 191 additions & 4 deletions chapters/formats.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -1359,6 +1359,161 @@ ifdef::VK_BASE_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[]
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
endif::VK_BASE_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[]
ifdef::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]
* ename:VK_FORMAT_Z6R10_UNORM_EXT specifies a one-component, 16-bit
unsigned normalized format that has a single 10-bit R component in the
bottom 10 bits of a 16-bit word, with the top 6 bits unused and required
to be set to zero.
* ename:VK_FORMAT_Z4R12_UNORM_EXT specifies a one-component, 16-bit
unsigned normalized format that has a single 12-bit R component in the
bottom 12 bits of a 16-bit word, with the top 4 bits unused and required
to be set to zero.
* ename:VK_FORMAT_Z2R14_UNORM_EXT specifies a one-component, 16-bit
unsigned normalized format that has a single 14-bit R component in the
bottom 14 bits of a 16-bit word, with the top 2 bits unused and required
to be set to zero.
* ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_420_UNORM_3PACK16_EXT specifies an
unsigned normalized _multi-planar format_ that has a 10-bit G component
in the bottom 10 bits of each 16-bit word of plane 0, a 10-bit B component
in the bottom 10 bits of each 16-bit word of plane 1, and a 10-bit R
component in the bottom 10 bits of each 16-bit word of plane 2, with the
top 6 bits of each word unused and required to be set to zero.
The horizontal and vertical dimensions of the R and B planes are halved
relative to the image dimensions, and each R and B component is shared
with the G components for which latexmath:[\left\lfloor i_G \times 0.5
\right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
\right\rfloor = j_B = j_R].
The location of each plane when this image is in linear layout can be
determined via flink:vkGetImageSubresourceLayout, using
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
This format only supports images with a width and height that is a
multiple of two.
* ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_422_UNORM_3PACK16_EXT specifies an
unsigned normalized _multi-planar format_ that has a 10-bit G component
in the bottom 10 bits of each 16-bit word of plane 0, a 10-bit B component
in the bottom 10 bits of each 16-bit word of plane 1, and a 10-bit R
component in the bottom 10 bits of each 16-bit word of plane 2, with the
top 6 bits of each word unused and required to be set to zero.
The horizontal dimension of the R and B plane is halved relative to the
image dimensions, and each R and B value is shared with the G components
for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
i_R].
The location of each plane when this image is in linear layout can be
determined via flink:vkGetImageSubresourceLayout, using
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
This format only supports images with a width that is a multiple of two.
* ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_444_UNORM_3PACK16_EXT specifies an
unsigned normalized _multi-planar format_ that has a 10-bit G component
in the bottom 10 bits of each 16-bit word of plane 0, a 10-bit B component
in the bottom 10 bits of each 16-bit word of plane 1, and a 10-bit R
component in the bottom 10 bits of each 16-bit word of plane 2, with the
top 6 bits of each word unused and required to be set to zero.
Each plane has the same dimensions and each R, G, and B component
contributes to a single texel.
The location of each plane when this image is in linear layout can be
determined via flink:vkGetImageSubresourceLayout, using
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
* ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_420_UNORM_3PACK16_EXT specifies an
unsigned normalized _multi-planar format_ that has a 12-bit G component
in the bottom 12 bits of each 16-bit word of plane 0, a 12-bit B component
in the bottom 12 bits of each 16-bit word of plane 1, and a 12-bit R
component in the bottom 12 bits of each 16-bit word of plane 2, with the
top 4 bits of each word unused and required to be set to zero.
The horizontal and vertical dimensions of the R and B planes are halved
relative to the image dimensions, and each R and B component is shared
with the G components for which latexmath:[\left\lfloor i_G \times 0.5
\right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
\right\rfloor = j_B = j_R].
The location of each plane when this image is in linear layout can be
determined via flink:vkGetImageSubresourceLayout, using
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
This format only supports images with a width and height that is a
multiple of two.
* ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_422_UNORM_3PACK16_EXT specifies an
unsigned normalized _multi-planar format_ that has a 12-bit G component
in the bottom 12 bits of each 16-bit word of plane 0, a 12-bit B component
in the bottom 12 bits of each 16-bit word of plane 1, and a 12-bit R
component in the bottom 12 bits of each 16-bit word of plane 2, with the
top 4 bits of each word unused and required to be set to zero.
The horizontal dimension of the R and B plane is halved relative to the
image dimensions, and each R and B value is shared with the G components
for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
i_R].
The location of each plane when this image is in linear layout can be
determined via flink:vkGetImageSubresourceLayout, using
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
This format only supports images with a width that is a multiple of two.
* ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_444_UNORM_3PACK16_EXT specifies an
unsigned normalized _multi-planar format_ that has a 12-bit G component
in the bottom 12 bits of each 16-bit word of plane 0, a 12-bit B component
in the bottom 12 bits of each 16-bit word of plane 1, and a 12-bit R
component in the bottom 12 bits of each 16-bit word of plane 2, with the
top 4 bits of each word unused and required to be set to zero.
Each plane has the same dimensions and each R, G, and B component
contributes to a single texel.
The location of each plane when this image is in linear layout can be
determined via flink:vkGetImageSubresourceLayout, using
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
* ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_420_UNORM_3PACK16_EXT specifies an
unsigned normalized _multi-planar format_ that has a 14-bit G component
in the bottom 14 bits of each 16-bit word of plane 0, a 14-bit B component
in the bottom 14 bits of each 16-bit word of plane 1, and a 14-bit R
component in the bottom 14 bits of each 16-bit word of plane 2, with the
top 2 bits of each word unused and required to be set to zero.
The horizontal and vertical dimensions of the R and B planes are halved
relative to the image dimensions, and each R and B component is shared
with the G components for which latexmath:[\left\lfloor i_G \times 0.5
\right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
\right\rfloor = j_B = j_R].
The location of each plane when this image is in linear layout can be
determined via flink:vkGetImageSubresourceLayout, using
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
This format only supports images with a width and height that is a
multiple of two.
* ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_422_UNORM_3PACK16_EXT specifies an
unsigned normalized _multi-planar format_ that has a 14-bit G component
in the bottom 14 bits of each 16-bit word of plane 0, a 14-bit B component
in the bottom 14 bits of each 16-bit word of plane 1, and a 14-bit R
component in the bottom 14 bits of each 16-bit word of plane 2, with the
top 2 bits of each word unused and required to be set to zero.
The horizontal dimension of the R and B plane is halved relative to the
image dimensions, and each R and B value is shared with the G components
for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
i_R].
The location of each plane when this image is in linear layout can be
determined via flink:vkGetImageSubresourceLayout, using
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
This format only supports images with a width that is a multiple of two.
* ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_444_UNORM_3PACK16_EXT, specifies an
unsigned normalized _multi-planar format_ that has a 14-bit G component
in the bottom 14 bits of each 16-bit word of plane 0, a 14-bit B component
in the bottom 14 bits of each 16-bit word of plane 1, and a 14-bit R
component in the bottom 14 bits of each 16-bit word of plane 2, with the
top 2 bits of each word unused and required to be set to zero.
Each plane has the same dimensions and each R, G, and B component
contributes to a single texel.
The location of each plane when this image is in linear layout can be
determined via flink:vkGetImageSubresourceLayout, using
ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
endif::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]
ifdef::VK_IMG_format_pvrtc[]
* ename:VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG specifies a four-component,
PVRTC compressed format where each 64-bit compressed texel block encodes
Expand Down Expand Up @@ -2062,9 +2217,9 @@ include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties.adoc[]
structure in which physical device properties for pname:format are
returned.

ifdef::VK_EXT_ycbcr_2plane_444_formats[]
.Valid Usage
****
ifdef::VK_EXT_ycbcr_2plane_444_formats[]
* [[VUID-vkGetPhysicalDeviceFormatProperties-None-12272]]
If
ifdef::VK_BASE_VERSION_1_3[Vulkan 1.3 is not supported,]
Expand All @@ -2079,8 +2234,24 @@ ifdef::VK_KHR_maintenance5,VK_BASE_VERSION_1_3[and]
ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16,
ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, or
ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM
****
endif::VK_EXT_ycbcr_2plane_444_formats[]
ifdef::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]
* If the <<features-ycbcr3plane16BitLsbFormats,pname:ycbcr3plane16BitLsbFormats>>
feature is not enabled, pname:format must: not be
ename:VK_FORMAT_Z6R10_UNORM_EXT,
ename:VK_FORMAT_Z4R12_UNORM_EXT,
ename:VK_FORMAT_Z2R14_UNORM_EXT,
ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_420_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_422_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_444_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_420_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_422_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_444_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_420_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_422_UNORM_3PACK16_EXT or
ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_444_UNORM_3PACK16_EXT
endif::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]
****

include::{generated}/validity/protos/vkGetPhysicalDeviceFormatProperties.adoc[]
--
Expand Down Expand Up @@ -2428,9 +2599,9 @@ fname:vkGetPhysicalDeviceFormatProperties2 behaves similarly to
flink:vkGetPhysicalDeviceFormatProperties, with the ability to return
extended information in a pname:pNext chain of output structures.

ifdef::VK_EXT_ycbcr_2plane_444_formats[]
.Valid Usage
****
ifdef::VK_EXT_ycbcr_2plane_444_formats[]
* [[VUID-vkGetPhysicalDeviceFormatProperties2-None-12273]]
If
ifdef::VK_BASE_VERSION_1_3[Vulkan 1.3 is not supported,]
Expand All @@ -2445,8 +2616,24 @@ ifdef::VK_KHR_maintenance5,VK_BASE_VERSION_1_3[and]
ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16,
ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, or
ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM
****
endif::VK_EXT_ycbcr_2plane_444_formats[]
ifdef::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]
* If the <<features-ycbcr3plane16BitLsbFormats,pname:ycbcr3plane16BitLsbFormats>>
feature is not enabled, pname:format must: not be
ename:VK_FORMAT_Z6R10_UNORM_EXT,
ename:VK_FORMAT_Z4R12_UNORM_EXT,
ename:VK_FORMAT_Z2R14_UNORM_EXT,
ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_420_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_422_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z6G10_Z6B10_Z6R10_3PLANE_444_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_420_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_422_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z4G12_Z4B12_Z4R12_3PLANE_444_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_420_UNORM_3PACK16_EXT,
ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_422_UNORM_3PACK16_EXT or
ename:VK_FORMAT_Z2G14_Z2B14_Z2R14_3PLANE_444_UNORM_3PACK16_EXT
endif::VK_EXT_ycbcr_3plane_16bit_lsb_formats[]
****

include::{generated}/validity/protos/vkGetPhysicalDeviceFormatProperties2.adoc[]
--
Expand Down
Loading