Vulkan-Docs/chapters/features.txt

8618 lines
448 KiB
Plaintext

// Copyright (c) 2015-2018 Khronos Group. This work is licensed under a
// Creative Commons Attribution 4.0 International License; see
// http://creativecommons.org/licenses/by/4.0/
[[features]]
= Features, Limits, and Formats
Vulkan is designed to support a wide variety of implementations, and as such
there are a number of features, limits, and formats which are not supported
on all implementations.
Features describe functionality which is optional: and which must: be
explicitly enabled before use.
Limits describe implementation-dependent minimums, maximums, and other
device characteristics that an application may: need to be aware of.
Supported buffer and image formats may: vary across implementations.
A minimum set of format features are guaranteed, but others must: be
explicitly queried before use to ensure they are supported by the
implementation.
[NOTE]
.Note
====
The features and limits are reported via basic structures (that is
slink:VkPhysicalDeviceFeatures and slink:VkPhysicalDeviceLimits), as well as
extensible structures (sname:VkPhysicalDeviceFeatures2 and
sname:VkPhysicalDeviceProperties2) which were added in
`<<VK_KHR_get_physical_device_properties2>>` and included in Vulkan 1.1.
When new features or limits are added in future Vulkan version or
extensions, each extension should: introduce one new feature structure
and/or limit structure (as needed).
These structures can: be added to the pname:pNext chain of the
sname:VkPhysicalDeviceFeatures2 and sname:VkPhysicalDeviceProperties2
structures, respectively.
====
[[features-features]]
== Features
The Specification defines a set of optional: features that may: be supported
by a Vulkan implementation.
Support for features is reported and enabled on a per-feature basis.
Features are properties of the physical device.
[open,refpage='vkGetPhysicalDeviceFeatures',desc='Reports capabilities of a physical device',type='protos']
--
To query supported features, call:
include::../api/protos/vkGetPhysicalDeviceFeatures.txt[]
* pname:physicalDevice is the physical device from which to query the
supported features.
* pname:pFeatures is a pointer to a slink:VkPhysicalDeviceFeatures
structure in which the physical device features are returned.
For each feature, a value of ename:VK_TRUE specifies that the feature is
supported on this physical device, and ename:VK_FALSE specifies that the
feature is not supported.
include::../validity/protos/vkGetPhysicalDeviceFeatures.txt[]
--
Fine-grained features used by a logical device must: be enabled at
sname:VkDevice creation time.
If a feature is enabled that the physical device does not support,
sname:VkDevice creation will fail.
If an application uses a feature without enabling it at sname:VkDevice
creation time, the device behavior is undefined:.
The validation layer will warn if features are used without being enabled.
The fine-grained features are enabled by passing a pointer to the
sname:VkPhysicalDeviceFeatures structure via the pname:pEnabledFeatures
member of the sname:VkDeviceCreateInfo structure that is passed into the
fname:vkCreateDevice call.
If a member of pname:pEnabledFeatures is set to ename:VK_TRUE or
ename:VK_FALSE, then the device will be created with the indicated feature
enabled or disabled, respectively.
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
Features can: also be enabled by using the slink:VkPhysicalDeviceFeatures2
structure.
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
If an application wishes to enable all features supported by a device, it
can: simply pass in the sname:VkPhysicalDeviceFeatures structure that was
previously returned by fname:vkGetPhysicalDeviceFeatures.
To disable an individual feature, the application can: set the desired
member to ename:VK_FALSE in the same structure.
Setting pname:pEnabledFeatures to `NULL`
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
and not including a slink:VkPhysicalDeviceFeatures2 in the pname:pNext
member of slink:VkDeviceCreateInfo
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
is equivalent to setting all members of the structure to ename:VK_FALSE.
[NOTE]
.Note
====
Some features, such as pname:robustBufferAccess, may: incur a run-time
performance cost.
Application writers should: carefully consider the implications of enabling
all supported features.
====
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[open,refpage='vkGetPhysicalDeviceFeatures2',desc='Reports capabilities of a physical device',type='protos']
--
To query supported features defined by the core or extensions, call:
ifdef::VK_VERSION_1_1[]
include::../api/protos/vkGetPhysicalDeviceFeatures2.txt[]
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
ifdef::VK_KHR_get_physical_device_properties2[]
include::../api/protos/vkGetPhysicalDeviceFeatures2KHR.txt[]
endif::VK_KHR_get_physical_device_properties2[]
* pname:physicalDevice is the physical device from which to query the
supported features.
* pname:pFeatures is a pointer to a slink:VkPhysicalDeviceFeatures2
structure in which the physical device features are returned.
Each structure in pname:pFeatures and its pname:pNext chain contain members
corresponding to fine-grained features.
fname:vkGetPhysicalDeviceFeatures2 writes each member to a boolean value
indicating whether that feature is supported.
include::../validity/protos/vkGetPhysicalDeviceFeatures2.txt[]
--
[open,refpage='VkPhysicalDeviceFeatures2',desc='Structure describing the fine-grained features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceFeatures2 structure is defined as:
include::../api/structs/VkPhysicalDeviceFeatures2.txt[]
ifdef::VK_KHR_get_physical_device_properties2[]
or the equivalent
include::../api/structs/VkPhysicalDeviceFeatures2KHR.txt[]
endif::VK_KHR_get_physical_device_properties2[]
The sname:VkPhysicalDeviceFeatures2 structure is defined as:
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:features is a structure of type slink:VkPhysicalDeviceFeatures
describing the fine-grained features of the Vulkan 1.0 API.
The pname:pNext chain of this structure is used to extend the structure with
features defined by extensions.
This structure can: be used in flink:vkGetPhysicalDeviceFeatures2 or can: be
in the pname:pNext chain of a slink:VkDeviceCreateInfo structure, in which
case it controls which features are enabled in the device in lieu of
pname:pEnabledFeatures.
include::../validity/structs/VkPhysicalDeviceFeatures2.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[open,refpage='VkPhysicalDeviceFeatures',desc='Structure describing the fine-grained features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceFeatures structure is defined as:
include::../api/structs/VkPhysicalDeviceFeatures.txt[]
The members of the sname:VkPhysicalDeviceFeatures structure describe the
following features:
* [[features-features-robustBufferAccess]] pname:robustBufferAccess
specifies that accesses to buffers are bounds-checked against the range
of the buffer descriptor (as determined by
sname:VkDescriptorBufferInfo::pname:range,
sname:VkBufferViewCreateInfo::pname:range, or the size of the buffer).
Out of bounds accesses must: not cause application termination, and the
effects of shader loads, stores, and atomics must: conform to an
implementation-dependent behavior as described below.
** A buffer access is considered to be out of bounds if any of the
following are true:
*** The pointer was formed by code:OpImageTexelPointer and the coordinate
is less than zero or greater than or equal to the number of whole
elements in the bound range.
*** The pointer was not formed by code:OpImageTexelPointer and the object
pointed to is not wholly contained within the bound range.
ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
This includes accesses performed via _variable pointers_ where the
buffer descriptor being accessed cannot be statically determined.
Uninitialized pointers and pointers equal to code:OpConstantNull are
treated as pointing to a zero-sized object, so all accesses through
such pointers are considered to be out of bounds.
endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
+
[NOTE]
.Note
====
If a SPIR-V code:OpLoad instruction loads a structure and the tail end of
the structure is out of bounds, then all members of the structure are
considered out of bounds even if the members at the end are not statically
used.
====
*** If any buffer access in a given SPIR-V block is determined to be out
of bounds, then any other access of the same type (load, store, or
atomic) in the same SPIR-V block that accesses an address less than 16
bytes away from the out of bounds address may: also be considered out
of bounds.
** Out-of-bounds buffer loads will return any of the following values:
*** Values from anywhere within the memory range(s) bound to the buffer
(possibly including bytes of memory past the end of the buffer, up to
the end of the bound range).
*** Zero values, or [eq]#(0,0,0,x)# vectors for vector reads where x is a
valid value represented in the type of the vector components and may:
be any of:
**** 0, 1, or the maximum representable positive integer value, for signed
or unsigned integer components
**** 0.0 or 1.0, for floating-point components
** Out-of-bounds writes may: modify values within the memory range(s)
bound to the buffer, but must: not modify any other memory.
** Out-of-bounds atomics may: modify values within the memory range(s)
bound to the buffer, but must: not modify any other memory, and return
an undefined: value.
** Vertex input attributes are considered out of bounds if the offset of
the attribute in the bound vertex buffer range plus the size of the
attribute is greater than either:
+
*** code:vertexBufferRangeSize, if [eq]#code:bindingStride == 0#; or
*** [eq]#(code:vertexBufferRangeSize - (code:vertexBufferRangeSize %
code:bindingStride))#
+
where code:vertexBufferRangeSize is the byte size of the memory range bound
to the vertex buffer binding and code:bindingStride is the byte stride of
the corresponding vertex input binding.
Further, if any vertex input attribute using a specific vertex input binding
is out of bounds, then all vertex input attributes using that vertex input
binding for that vertex shader invocation are considered out of bounds.
*** If a vertex input attribute is out of bounds, it will be assigned one
of the following values:
**** Values from anywhere within the memory range(s) bound to the buffer,
converted according to the format of the attribute.
**** Zero values, format converted according to the format of the
attribute.
**** Zero values, or [eq]#(0,0,0,x)# vectors, as described above.
** If pname:robustBufferAccess is not enabled, out of bounds accesses may:
corrupt any memory within the process and cause undefined: behavior up
to and including application termination.
* [[features-features-fullDrawIndexUint32]] pname:fullDrawIndexUint32
specifies the full 32-bit range of indices is supported for indexed draw
calls when using a elink:VkIndexType of ename:VK_INDEX_TYPE_UINT32.
pname:maxDrawIndexedIndexValue is the maximum index value that may: be
used (aside from the primitive restart index, which is always 2^32^-1
when the elink:VkIndexType is ename:VK_INDEX_TYPE_UINT32).
If this feature is supported, pname:maxDrawIndexedIndexValue must: be
2^32^-1; otherwise it must: be no smaller than 2^24^-1.
See
<<features-limits-maxDrawIndexedIndexValue,maxDrawIndexedIndexValue>>.
* [[features-features-imageCubeArray]] pname:imageCubeArray specifies
whether image views with a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY can: be created, and that the
corresponding code:SampledCubeArray and code:ImageCubeArray SPIR-V
capabilities can: be used in shader code.
* [[features-features-independentBlend]] pname:independentBlend specifies
whether the sname:VkPipelineColorBlendAttachmentState settings are
controlled independently per-attachment.
If this feature is not enabled, the
sname:VkPipelineColorBlendAttachmentState settings for all color
attachments must: be identical.
Otherwise, a different sname:VkPipelineColorBlendAttachmentState can: be
provided for each bound color attachment.
* [[features-features-geometryShader]] pname:geometryShader specifies
whether geometry shaders are supported.
If this feature is not enabled, the ename:VK_SHADER_STAGE_GEOMETRY_BIT
and ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT enum values must: not be
used.
This also specifies whether shader modules can: declare the
code:Geometry capability.
* [[features-features-tessellationShader]] pname:tessellationShader
specifies whether tessellation control and evaluation shaders are
supported.
If this feature is not enabled, the
ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, and
ename:VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO enum
values must: not be used.
This also specifies whether shader modules can: declare the
code:Tessellation capability.
* [[features-features-sampleRateShading]] pname:sampleRateShading
specifies whether <<primsrast-sampleshading,Sample Shading>> and
multisample interpolation are supported.
If this feature is not enabled, the pname:sampleShadingEnable member of
the sname:VkPipelineMultisampleStateCreateInfo structure must: be set to
ename:VK_FALSE and the pname:minSampleShading member is ignored.
This also specifies whether shader modules can: declare the
code:SampleRateShading capability.
* [[features-features-dualSrcBlend]] pname:dualSrcBlend specifies whether
blend operations which take two sources are supported.
If this feature is not enabled, the ename:VK_BLEND_FACTOR_SRC1_COLOR,
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
ename:VK_BLEND_FACTOR_SRC1_ALPHA, and
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA enum values must: not be used
as source or destination blending factors.
See <<framebuffer-dsb>>.
* [[features-features-logicOp]] pname:logicOp specifies whether logic
operations are supported.
If this feature is not enabled, the pname:logicOpEnable member of the
sname:VkPipelineColorBlendStateCreateInfo structure must: be set to
ename:VK_FALSE, and the pname:logicOp member is ignored.
* [[features-features-multiDrawIndirect]] pname:multiDrawIndirect
specifies whether multiple draw indirect is supported.
If this feature is not enabled, the pname:drawCount parameter to the
fname:vkCmdDrawIndirect and fname:vkCmdDrawIndexedIndirect commands
must: be 0 or 1.
The pname:maxDrawIndirectCount member of the
sname:VkPhysicalDeviceLimits structure must: also be 1 if this feature
is not supported.
See <<features-limits-maxDrawIndirectCount,maxDrawIndirectCount>>.
* [[features-features-drawIndirectFirstInstance]]
pname:drawIndirectFirstInstance specifies whether indirect draw calls
support the pname:firstInstance parameter.
If this feature is not enabled, the pname:firstInstance member of all
sname:VkDrawIndirectCommand and sname:VkDrawIndexedIndirectCommand
structures that are provided to the fname:vkCmdDrawIndirect and
fname:vkCmdDrawIndexedIndirect commands must: be 0.
* [[features-features-depthClamp]] pname:depthClamp specifies whether
depth clamping is supported.
If this feature is not enabled, the pname:depthClampEnable member of the
sname:VkPipelineRasterizationStateCreateInfo structure must: be set to
ename:VK_FALSE.
Otherwise, setting pname:depthClampEnable to ename:VK_TRUE will enable
depth clamping.
* [[features-features-depthBiasClamp]] pname:depthBiasClamp specifies
whether depth bias clamping is supported.
If this feature is not enabled, the pname:depthBiasClamp member of the
sname:VkPipelineRasterizationStateCreateInfo structure must: be set to
0.0 unless the ename:VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state is
enabled, and the pname:depthBiasClamp parameter to
fname:vkCmdSetDepthBias must: be set to 0.0.
* [[features-features-fillModeNonSolid]] pname:fillModeNonSolid specifies
whether point and wireframe fill modes are supported.
If this feature is not enabled, the ename:VK_POLYGON_MODE_POINT and
ename:VK_POLYGON_MODE_LINE enum values must: not be used.
* [[features-features-depthBounds]] pname:depthBounds specifies whether
depth bounds tests are supported.
If this feature is not enabled, the pname:depthBoundsTestEnable member
of the sname:VkPipelineDepthStencilStateCreateInfo structure must: be
set to ename:VK_FALSE.
When pname:depthBoundsTestEnable is set to ename:VK_FALSE, the
pname:minDepthBounds and pname:maxDepthBounds members of the
sname:VkPipelineDepthStencilStateCreateInfo structure are ignored.
* [[features-features-wideLines]] pname:wideLines specifies whether lines
with width other than 1.0 are supported.
If this feature is not enabled, the pname:lineWidth member of the
sname:VkPipelineRasterizationStateCreateInfo structure must: be set to
1.0 unless the ename:VK_DYNAMIC_STATE_LINE_WIDTH dynamic state is
enabled, and the pname:lineWidth parameter to fname:vkCmdSetLineWidth
must: be set to 1.0.
When this feature is supported, the range and granularity of supported
line widths are indicated by the pname:lineWidthRange and
pname:lineWidthGranularity members of the sname:VkPhysicalDeviceLimits
structure, respectively.
* [[features-features-largePoints]] pname:largePoints specifies whether
points with size greater than 1.0 are supported.
If this feature is not enabled, only a point size of 1.0 written by a
shader is supported.
The range and granularity of supported point sizes are indicated by the
pname:pointSizeRange and pname:pointSizeGranularity members of the
sname:VkPhysicalDeviceLimits structure, respectively.
* [[features-features-alphaToOne]] pname:alphaToOne specifies whether the
implementation is able to replace the alpha value of the color fragment
output from the fragment shader with the maximum representable alpha
value for fixed-point colors or 1.0 for floating-point colors.
If this feature is not enabled, then the pname:alphaToOneEnable member
of the sname:VkPipelineMultisampleStateCreateInfo structure must: be set
to ename:VK_FALSE.
Otherwise setting pname:alphaToOneEnable to ename:VK_TRUE will enable
alpha-to-one behavior.
* [[features-features-multiViewport]] pname:multiViewport specifies
whether more than one viewport is supported.
If this feature is not enabled:
** The pname:viewportCount and pname:scissorCount members of the
sname:VkPipelineViewportStateCreateInfo structure must: be set to 1.
** The pname:firstViewport and pname:viewportCount parameters to the
fname:vkCmdSetViewport command must: be set to 0 and 1, respectively.
** The pname:firstScissor and pname:scissorCount parameters to the
fname:vkCmdSetScissor command must: be set to 0 and 1, respectively.
ifdef::VK_NV_scissor_exclusive[]
** The pname:exclusiveScissorCount member of the
sname:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
must: be set to 0 or 1.
** The pname:firstExclusiveScissor and pname:exclusiveScissorCount
parameters to the fname:vkCmdSetExclusiveScissorNV command must: be
set to 0 and 1, respectively.
endif::VK_NV_scissor_exclusive[]
* [[features-features-samplerAnisotropy]] pname:samplerAnisotropy
specifies whether anisotropic filtering is supported.
If this feature is not enabled, the pname:anisotropyEnable member of the
sname:VkSamplerCreateInfo structure must: be ename:VK_FALSE.
* [[features-features-textureCompressionETC2]]
pname:textureCompressionETC2 specifies whether all of the ETC2 and EAC
compressed texture formats are supported.
If this feature is enabled, then the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
be supported in pname:optimalTilingFeatures for the following formats:
+
** ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
** ename:VK_FORMAT_EAC_R11_UNORM_BLOCK
** ename:VK_FORMAT_EAC_R11_SNORM_BLOCK
** ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK
** ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK
+
To query for additional properties, or if the feature is not enabled,
flink:vkGetPhysicalDeviceFormatProperties and
flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
supported properties of individual formats as normal.
* [[features-features-textureCompressionASTC_LDR]]
pname:textureCompressionASTC_LDR specifies whether all of the ASTC LDR
compressed texture formats are supported.
If this feature is enabled, then the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
be supported in pname:optimalTilingFeatures for the following formats:
+
** ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK
+
To query for additional properties, or if the feature is not enabled,
flink:vkGetPhysicalDeviceFormatProperties and
flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
supported properties of individual formats as normal.
* [[features-features-textureCompressionBC]] pname:textureCompressionBC
specifies whether all of the BC compressed texture formats are
supported.
If this feature is enabled, then the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
be supported in pname:optimalTilingFeatures for the following formats:
+
** ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK
** ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK
** ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK
** ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK
** ename:VK_FORMAT_BC2_UNORM_BLOCK
** ename:VK_FORMAT_BC2_SRGB_BLOCK
** ename:VK_FORMAT_BC3_UNORM_BLOCK
** ename:VK_FORMAT_BC3_SRGB_BLOCK
** ename:VK_FORMAT_BC4_UNORM_BLOCK
** ename:VK_FORMAT_BC4_SNORM_BLOCK
** ename:VK_FORMAT_BC5_UNORM_BLOCK
** ename:VK_FORMAT_BC5_SNORM_BLOCK
** ename:VK_FORMAT_BC6H_UFLOAT_BLOCK
** ename:VK_FORMAT_BC6H_SFLOAT_BLOCK
** ename:VK_FORMAT_BC7_UNORM_BLOCK
** ename:VK_FORMAT_BC7_SRGB_BLOCK
+
To query for additional properties, or if the feature is not enabled,
flink:vkGetPhysicalDeviceFormatProperties and
flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
supported properties of individual formats as normal.
* [[features-features-occlusionQueryPrecise]] pname:occlusionQueryPrecise
specifies whether occlusion queries returning actual sample counts are
supported.
Occlusion queries are created in a sname:VkQueryPool by specifying the
pname:queryType of ename:VK_QUERY_TYPE_OCCLUSION in the
sname:VkQueryPoolCreateInfo structure which is passed to
fname:vkCreateQueryPool.
If this feature is enabled, queries of this type can: enable
ename:VK_QUERY_CONTROL_PRECISE_BIT in the pname:flags parameter to
fname:vkCmdBeginQuery.
If this feature is not supported, the implementation supports only
boolean occlusion queries.
When any samples are passed, boolean queries will return a non-zero
result value, otherwise a result value of zero is returned.
When this feature is enabled and ename:VK_QUERY_CONTROL_PRECISE_BIT is
set, occlusion queries will report the actual number of samples passed.
* [[features-features-pipelineStatisticsQuery]]
pname:pipelineStatisticsQuery specifies whether the pipeline statistics
queries are supported.
If this feature is not enabled, queries of type
ename:VK_QUERY_TYPE_PIPELINE_STATISTICS cannot: be created, and none of
the elink:VkQueryPipelineStatisticFlagBits bits can: be set in the
pname:pipelineStatistics member of the sname:VkQueryPoolCreateInfo
structure.
* [[features-features-vertexPipelineStoresAndAtomics]]
pname:vertexPipelineStoresAndAtomics specifies whether storage buffers
and images support stores and atomic operations in the vertex,
tessellation, and geometry shader stages.
If this feature is not enabled, all storage image, storage texel
buffers, and storage buffer variables used by these stages in shader
modules must: be decorated with the code:NonWritable decoration (or the
code:readonly memory qualifier in GLSL).
* [[features-features-fragmentStoresAndAtomics]]
pname:fragmentStoresAndAtomics specifies whether storage buffers and
images support stores and atomic operations in the fragment shader
stage.
If this feature is not enabled, all storage image, storage texel
buffers, and storage buffer variables used by the fragment stage in
shader modules must: be decorated with the code:NonWritable decoration
(or the code:readonly memory qualifier in GLSL).
* [[features-features-shaderTessellationAndGeometryPointSize]]
pname:shaderTessellationAndGeometryPointSize specifies whether the
code:PointSize built-in decoration is available in the tessellation
control, tessellation evaluation, and geometry shader stages.
If this feature is not enabled, members decorated with the
code:PointSize built-in decoration must: not be read from or written to
and all points written from a tessellation or geometry shader will have
a size of 1.0.
This also specifies whether shader modules can: declare the
code:TessellationPointSize capability for tessellation control and
evaluation shaders, or if the shader modules can: declare the
code:GeometryPointSize capability for geometry shaders.
An implementation supporting this feature must: also support one or both
of the <<features-features-tessellationShader,pname:tessellationShader>>
or <<features-features-geometryShader,pname:geometryShader>> features.
* [[features-features-shaderImageGatherExtended]]
pname:shaderImageGatherExtended specifies whether the extended set of
image gather instructions are available in shader code.
If this feature is not enabled, the code:OpImage*code:Gather
instructions do not support the code:Offset and code:ConstOffsets
operands.
This also specifies whether shader modules can: declare the
code:ImageGatherExtended capability.
* [[features-features-shaderStorageImageExtendedFormats]]
pname:shaderStorageImageExtendedFormats specifies whether all the
extended storage image formats are available in shader code.
If this feature is enabled then the
ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT feature must: be supported in
pname:optimalTilingFeatures for all of the extended formats.
To query for additional properties, or if the feature is not enabled,
flink:vkGetPhysicalDeviceFormatProperties and
flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
supported properties of individual formats as normal.
* [[features-features-shaderStorageImageMultisample]]
pname:shaderStorageImageMultisample specifies whether multisampled
storage images are supported.
If this feature is not enabled, images that are created with a
pname:usage that includes ename:VK_IMAGE_USAGE_STORAGE_BIT must: be
created with pname:samples equal to ename:VK_SAMPLE_COUNT_1_BIT.
This also specifies whether shader modules can: declare the
code:StorageImageMultisample capability.
* [[features-features-shaderStorageImageReadWithoutFormat]]
pname:shaderStorageImageReadWithoutFormat specifies whether storage
images require a format qualifier to be specified when reading from
storage images.
If this feature is not enabled, the code:OpImageRead instruction must:
not have an code:OpTypeImage of code:Unknown.
This also specifies whether shader modules can: declare the
code:StorageImageReadWithoutFormat capability.
* [[features-features-shaderStorageImageWriteWithoutFormat]]
pname:shaderStorageImageWriteWithoutFormat specifies whether storage
images require a format qualifier to be specified when writing to
storage images.
If this feature is not enabled, the code:OpImageWrite instruction must:
not have an code:OpTypeImage of code:Unknown.
This also specifies whether shader modules can: declare the
code:StorageImageWriteWithoutFormat capability.
* [[features-features-shaderUniformBufferArrayDynamicIndexing]]
pname:shaderUniformBufferArrayDynamicIndexing specifies whether arrays
of uniform buffers can: be indexed by _dynamically uniform_ integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also specifies whether shader modules can: declare the
code:UniformBufferArrayDynamicIndexing capability.
* [[features-features-shaderSampledImageArrayDynamicIndexing]]
pname:shaderSampledImageArrayDynamicIndexing specifies whether arrays of
samplers or sampled images can: be indexed by dynamically uniform
integer expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: be indexed only by constant
integral expressions when aggregated into arrays in shader code.
This also specifies whether shader modules can: declare the
code:SampledImageArrayDynamicIndexing capability.
* [[features-features-shaderStorageBufferArrayDynamicIndexing]]
pname:shaderStorageBufferArrayDynamicIndexing specifies whether arrays
of storage buffers can: be indexed by dynamically uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also specifies whether shader modules can: declare the
code:StorageBufferArrayDynamicIndexing capability.
* [[features-features-shaderStorageImageArrayDynamicIndexing]]
pname:shaderStorageImageArrayDynamicIndexing specifies whether arrays of
storage images can: be indexed by dynamically uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: be indexed only by constant
integral expressions when aggregated into arrays in shader code.
This also specifies whether shader modules can: declare the
code:StorageImageArrayDynamicIndexing capability.
* [[features-features-shaderClipDistance]] pname:shaderClipDistance
specifies whether clip distances are supported in shader code.
If this feature is not enabled, any members decorated with the
code:ClipDistance built-in decoration must: not be read from or written
to in shader modules.
This also specifies whether shader modules can: declare the
code:ClipDistance capability.
* [[features-features-shaderCullDistance]] pname:shaderCullDistance
specifies whether cull distances are supported in shader code.
If this feature is not enabled, any members decorated with the
code:CullDistance built-in decoration must: not be read from or written
to in shader modules.
This also specifies whether shader modules can: declare the
code:CullDistance capability.
* [[features-features-shaderFloat64]] pname:shaderFloat64 specifies
whether 64-bit floats (doubles) are supported in shader code.
If this feature is not enabled, 64-bit floating-point types must: not be
used in shader code.
This also specifies whether shader modules can: declare the code:Float64
capability.
* [[features-features-shaderInt64]] pname:shaderInt64 specifies whether
64-bit integers (signed and unsigned) are supported in shader code.
If this feature is not enabled, 64-bit integer types must: not be used
in shader code.
This also specifies whether shader modules can: declare the code:Int64
capability.
* [[features-features-shaderInt16]] pname:shaderInt16 specifies whether
16-bit integers (signed and unsigned) are supported in shader code.
If this feature is not enabled, 16-bit integer types must: not be used
in shader code.
This also specifies whether shader modules can: declare the code:Int16
capability.
* [[features-features-shaderResourceResidency]]
pname:shaderResourceResidency specifies whether image operations that
return resource residency information are supported in shader code.
If this feature is not enabled, the code:OpImageSparse* instructions
must: not be used in shader code.
This also specifies whether shader modules can: declare the
code:SparseResidency capability.
The feature requires at least one of the ptext:sparseResidency* features
to be supported.
* [[features-features-shaderResourceMinLod]] pname:shaderResourceMinLod
specifies whether image operations that specify the minimum resource LOD
are supported in shader code.
If this feature is not enabled, the code:MinLod image operand must: not
be used in shader code.
This also specifies whether shader modules can: declare the code:MinLod
capability.
* [[features-features-sparseBinding]] pname:sparseBinding specifies
whether resource memory can: be managed at opaque sparse block level
instead of at the object level.
If this feature is not enabled, resource memory must: be bound only on a
per-object basis using the fname:vkBindBufferMemory and
fname:vkBindImageMemory commands.
In this case, buffers and images must: not be created with
ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT and
ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT set in the pname:flags member
of the sname:VkBufferCreateInfo and sname:VkImageCreateInfo structures,
respectively.
Otherwise resource memory can: be managed as described in
<<sparsememory-sparseresourcefeatures,Sparse Resource Features>>.
* [[features-features-sparseResidencyBuffer]] pname:sparseResidencyBuffer
specifies whether the device can: access partially resident buffers.
If this feature is not enabled, buffers must: not be created with
ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags
member of the sname:VkBufferCreateInfo structure.
* [[features-features-sparseResidencyImage2D]]
pname:sparseResidencyImage2D specifies whether the device can: access
partially resident 2D images with 1 sample per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_1_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the sname:VkImageCreateInfo structure.
* [[features-features-sparseResidencyImage3D]]
pname:sparseResidencyImage3D specifies whether the device can: access
partially resident 3D images.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_3D must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the sname:VkImageCreateInfo structure.
* [[features-features-sparseResidency2Samples]]
pname:sparseResidency2Samples specifies whether the physical device can:
access partially resident 2D images with 2 samples per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_2_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the sname:VkImageCreateInfo structure.
* [[features-features-sparseResidency4Samples]]
pname:sparseResidency4Samples specifies whether the physical device can:
access partially resident 2D images with 4 samples per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_4_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the sname:VkImageCreateInfo structure.
* [[features-features-sparseResidency8Samples]]
pname:sparseResidency8Samples specifies whether the physical device can:
access partially resident 2D images with 8 samples per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_8_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the sname:VkImageCreateInfo structure.
* [[features-features-sparseResidency16Samples]]
pname:sparseResidency16Samples specifies whether the physical device
can: access partially resident 2D images with 16 samples per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_16_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the sname:VkImageCreateInfo structure.
* [[features-features-sparseResidencyAliased]]
pname:sparseResidencyAliased specifies whether the physical device can:
correctly access data aliased into multiple locations.
If this feature is not enabled, the
ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT and
ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT enum values must: not be used
in pname:flags members of the sname:VkBufferCreateInfo and
sname:VkImageCreateInfo structures, respectively.
* [[features-features-variableMultisampleRate]]
pname:variableMultisampleRate specifies whether all pipelines that will
be bound to a command buffer during a subpass with no attachments must:
have the same value for
sname:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
If set to ename:VK_TRUE, the implementation supports variable
multisample rates in a subpass with no attachments.
If set to ename:VK_FALSE, then all pipelines bound in such a subpass
must: have the same multisample rate.
This has no effect in situations where a subpass uses any attachments.
* [[features-features-inheritedQueries]] pname:inheritedQueries specifies
whether a secondary command buffer may: be executed while a query is
active.
include::../validity/structs/VkPhysicalDeviceFeatures.txt[]
--
ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
[open,refpage='VkPhysicalDeviceVariablePointerFeatures',desc='Structure describing variable pointers features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceVariablePointerFeatures structure is defined as:
include::../api/structs/VkPhysicalDeviceVariablePointerFeatures.txt[]
ifdef::VK_KHR_variable_pointers[]
or the equivalent
include::../api/structs/VkPhysicalDeviceVariablePointerFeaturesKHR.txt[]
endif::VK_KHR_variable_pointers[]
The members of the sname:VkPhysicalDeviceVariablePointerFeatures structure
describe the following features:
* [[features-features-variablePointersStorageBuffer]]
pname:variablePointersStorageBuffer specifies whether the implementation
supports the SPIR-V `VariablePointersStorageBuffer` capability.
When this feature is not enabled, shader modules must: not declare the
`SPV_KHR_variable_pointers` extension or the
`VariablePointersStorageBuffer` capability.
* [[features-features-variablePointers]] pname:variablePointers specifies
whether the implementation supports the SPIR-V `VariablePointers`
capability.
When this feature is not enabled, shader modules must: not declare the
`VariablePointers` capability.
If the sname:VkPhysicalDeviceVariablePointerFeatures structure is included
in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2, it is filled
with values indicating whether each feature is supported.
sname:VkPhysicalDeviceVariablePointerFeatures can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable the features.
.Valid Usage
****
* [[VUID-VkPhysicalDeviceVariablePointerFeatures-variablePointers-01431]]
If pname:variablePointers is enabled then
pname:variablePointersStorageBuffer must: also be enabled.
****
include::../validity/structs/VkPhysicalDeviceVariablePointerFeatures.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
[open,refpage='VkPhysicalDeviceMultiviewFeatures',desc='Structure describing multiview features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceMultiviewFeatures structure is defined as:
include::../api/structs/VkPhysicalDeviceMultiviewFeatures.txt[]
ifdef::VK_KHR_multiview[]
or the equivalent
include::../api/structs/VkPhysicalDeviceMultiviewFeaturesKHR.txt[]
endif::VK_KHR_multiview[]
The members of the sname:VkPhysicalDeviceMultiviewFeatures structure
describe the following features:
* [[features-features-multiview]] pname:multiview specifies whether the
implementation supports multiview rendering within a render pass.
If this feature is not enabled, the view mask of each subpass must:
always be zero.
* [[features-features-multiview-gs]] pname:multiviewGeometryShader
specifies whether the implementation supports multiview rendering within
a render pass, with <<geometry,geometry shaders>>.
If this feature is not enabled, then a pipeline compiled against a
subpass with a non-zero view mask must: not include a geometry shader.
* [[features-features-multiview-tess]] pname:multiviewTessellationShader
specifies whether the implementation supports multiview rendering within
a render pass, with <<tessellation,tessellation shaders>>.
If this feature is not enabled, then a pipeline compiled against a
subpass with a non-zero view mask must: not include any tessellation
shaders.
If the sname:VkPhysicalDeviceMultiviewFeatures structure is included in the
pname:pNext chain of slink:VkPhysicalDeviceFeatures2, it is filled with
values indicating whether each feature is supported.
sname:VkPhysicalDeviceMultiviewFeatures can: also be used in the pname:pNext
chain of slink:VkDeviceCreateInfo to enable the features.
.Valid Usage
****
* [[VUID-VkPhysicalDeviceMultiviewFeatures-multiviewGeometryShader-00580]]
If pname:multiviewGeometryShader is enabled then pname:multiview must:
also be enabled.
* [[VUID-VkPhysicalDeviceMultiviewFeatures-multiviewTessellationShader-00581]]
If pname:multiviewTessellationShader is enabled then pname:multiview
must: also be enabled.
****
include::../validity/structs/VkPhysicalDeviceMultiviewFeatures.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_KHR_shader_atomic_int64[]
[open,refpage='VkPhysicalDeviceShaderAtomicInt64FeaturesKHR',desc='Structure describing features supported by VK_KHR_shader_atomic_int64',type='structs']
--
To query 64-bit atomic support for signed and unsigned integers call
flink:vkGetPhysicalDeviceFeatures2 with a
sname:VkPhysicalDeviceShaderAtomicInt64FeaturesKHR structure included in the
pname:pNext chain of its pname:pFeatures parameter.
The slink:VkPhysicalDeviceShaderAtomicInt64FeaturesKHR structure is defined
as:
include::../api/structs/VkPhysicalDeviceShaderAtomicInt64FeaturesKHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* [[features-features-shaderBufferInt64Atomics]]
pname:shaderBufferInt64Atomics indicates whether shaders can: support
64-bit unsigned and signed integer atomic operations on buffers.
* [[features-features-shaderSharedInt64Atomics]]
pname:shaderSharedInt64Atomics indicates whether shaders can: support
64-bit unsigned and signed integer atomic operations on shared memory.
include::../validity/structs/VkPhysicalDeviceShaderAtomicInt64FeaturesKHR.txt[]
--
endif::VK_KHR_shader_atomic_int64[]
ifdef::VK_KHR_8bit_storage[]
[open,refpage='VkPhysicalDevice8BitStorageFeaturesKHR',desc='Structure describing features supported by VK_KHR_8bit_storage',type='structs']
--
To query 8-bit storage features additionally supported call
flink:vkGetPhysicalDeviceFeatures2 with a
sname:VkPhysicalDevice8BitStorageFeaturesKHR structure included in the
pname:pNext chain of its pname:pFeatures parameter.
The sname:VkPhysicalDevice8BitStorageFeaturesKHR structure can: also be in
the pname:pNext chain of a slink:VkDeviceCreateInfo structure, in which case
it controls which additional features are enabled in the device.
The slink:VkPhysicalDevice8BitStorageFeaturesKHR structure is defined as:
include::../api/structs/VkPhysicalDevice8BitStorageFeaturesKHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* [[features-features-storageBuffer8BitAccess]]
pname:storageBuffer8BitAccess indicates whether objects in the
code:StorageBuffer storage class with the code:Block decoration can:
have 8-bit integer members.
If this feature is not enabled, 8-bit integer members must: not be used
in such objects.
This also indicates whether shader modules can: declare the
code:StorageBuffer8BitAccess capability.
* [[features-features-uniformAndStorageBuffer8BitAccess]]
pname:uniformAndStorageBuffer8BitAccess indicates whether objects in
the code:Uniform storage class with the code:Block decoration and in
the code:StorageBuffer storage class with the same decoration can: have
8-bit integer members.
If this feature is not enabled, 8-bit integer members must: not be used
in such objects.
This also indicates whether shader modules can: declare the
code:UniformAndStorageBuffer8BitAccess capability.
* [[features-features-storagePushConstant8]] pname:storagePushConstant8
indicates whether objects in the code:PushConstant storage class can:
have 8-bit integer members.
If this feature is not enabled, 8-bit integer members must: not be used
in such objects.
This also indicates whether shader modules can: declare the
code:StoragePushConstant8 capability.
include::../validity/structs/VkPhysicalDevice8BitStorageFeaturesKHR.txt[]
--
endif::VK_KHR_8bit_storage[]
ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
[open,refpage='VkPhysicalDevice16BitStorageFeatures',desc='Structure describing features supported by VK_KHR_16bit_storage',type='structs']
--
To query 16-bit storage features additionally supported call
flink:vkGetPhysicalDeviceFeatures2 with a
sname:VkPhysicalDevice16BitStorageFeatures structure included in the
pname:pNext chain of its pname:pFeatures parameter.
The sname:VkPhysicalDevice16BitStorageFeatures structure can: also be in the
pname:pNext chain of a slink:VkDeviceCreateInfo structure, in which case it
controls which additional features are enabled in the device.
The slink:VkPhysicalDevice16BitStorageFeatures structure is defined as:
include::../api/structs/VkPhysicalDevice16BitStorageFeatures.txt[]
ifdef::VK_KHR_16bit_storage[]
or the equivalent
include::../api/structs/VkPhysicalDevice16BitStorageFeaturesKHR.txt[]
endif::VK_KHR_16bit_storage[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* [[features-features-storageBuffer16BitAccess]]
pname:storageBuffer16BitAccess specifies whether objects in the
code:StorageBuffer storage class with the code:Block decoration can:
have 16-bit integer and 16-bit floating-point members.
If this feature is not enabled, 16-bit integer or 16-bit floating-point
members must: not be used in such objects.
This also specifies whether shader modules can: declare the
code:StorageBuffer16BitAccess capability.
* [[features-features-uniformAndStorageBuffer16BitAccess]]
pname:uniformAndStorageBuffer16BitAccess specifies whether objects in
the code:Uniform storage class with the code:Block decoration and in
the code:StorageBuffer storage class with the same decoration can: have
16-bit integer and 16-bit floating-point members.
If this feature is not enabled, 16-bit integer or 16-bit floating-point
members must: not be used in such objects.
This also specifies whether shader modules can: declare the
code:UniformAndStorageBuffer16BitAccess capability.
* [[features-features-storagePushConstant16]] pname:storagePushConstant16
specifies whether objects in the code:PushConstant storage class can:
have 16-bit integer and 16-bit floating-point members.
If this feature is not enabled, 16-bit integer or floating-point
members must: not be used in such objects.
This also specifies whether shader modules can: declare the
code:StoragePushConstant16 capability.
* [[features-features-storageInputOutput16]] pname:storageInputOutput16
specifies whether objects in the code:Input and code:Output storage
classes can: have 16-bit integer and 16-bit floating-point members.
If this feature is not enabled, 16-bit integer or 16-bit floating-point
members must: not be used in such objects.
This also specifies whether shader modules can: declare the
code:StorageInputOutput16 capability.
include::../validity/structs/VkPhysicalDevice16BitStorageFeatures.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
[open,refpage='VkPhysicalDeviceSamplerYcbcrConversionFeatures',desc='Structure describing Y\'CbCr conversion features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceSamplerYcbcrConversionFeatures structure is
defined as:
include::../api/structs/VkPhysicalDeviceSamplerYcbcrConversionFeatures.txt[]
ifdef::VK_KHR_sampler_ycbcr_conversion[]
or the equivalent
include::../api/structs/VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR.txt[]
endif::VK_KHR_sampler_ycbcr_conversion[]
The members of the sname:VkPhysicalDeviceSamplerYcbcrConversionFeatures
structure describe the following feature:
* [[features-features-sampler-YCbCr-conversion]]
pname:samplerYcbcrConversion specifies whether the implementation
supports <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>>.
If pname:samplerYcbcrConversion is ename:VK_FALSE, sampler Y'C~B~C~R~
conversion is not supported, and samplers using sampler Y'C~B~C~R~
conversion must: not be used.
include::../validity/structs/VkPhysicalDeviceSamplerYcbcrConversionFeatures.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_VERSION_1_1[]
[open,refpage='VkPhysicalDeviceProtectedMemoryFeatures',desc='Structure describing protected memory features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceProtectedMemoryFeatures structure is defined as:
include::../api/structs/VkPhysicalDeviceProtectedMemoryFeatures.txt[]
* pname:protectedMemory specifies whether protected memory is supported.
If the sname:VkPhysicalDeviceProtectedMemoryFeatures structure is included
in the pname:pNext chain of flink:VkPhysicalDeviceFeatures2, it is filled
with a value indicating whether the feature is supported.
include::../validity/structs/VkPhysicalDeviceProtectedMemoryFeatures.txt[]
--
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_blend_operation_advanced[]
[open,refpage='VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT',desc='Structure describing advanced blending features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.txt[]
The members of the sname:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT
structure describe the following features:
* [[features-features-advancedBlendCoherentOperations]]
pname:advancedBlendCoherentOperations specifies whether blending using
<<framebuffer-blend-advanced,advanced blend operations>> is guaranteed
to execute atomically and in <<drawing-primitive-order, primitive
order>>.
If this is ename:VK_TRUE,
ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT is treated the
same as ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, and advanced blending
needs no additional synchronization over basic blending.
If this is ename:VK_FALSE, then memory dependencies are required to
guarantee order between two advanced blending operations that occur on
the same sample.
If the sname:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
sname:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT can: also be used in
pname:pNext chain of slink:VkDeviceCreateInfo to enable the features.
include::../validity/structs/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.txt[]
--
endif::VK_EXT_blend_operation_advanced[]
ifdef::VK_EXT_conditional_rendering[]
[open,refpage='VkPhysicalDeviceConditionalRenderingFeaturesEXT',desc='Structure describing if a secondary command buffer can be executed if conditional rendering is active in the primary command buffer',type='structs']
--
The sname:VkPhysicalDeviceConditionalRenderingFeaturesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceConditionalRenderingFeaturesEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* [[features-features-conditionalRendering]] pname:conditionalRendering
specifies whether conditional rendering is supported.
* [[features-features-inheritedConditionalRendering]]
pname:inheritedConditionalRendering specifies whether a secondary
command buffer can: be executed while conditional rendering is active in
the primary command buffer.
If the sname:VkPhysicalDeviceConditionalRenderingFeaturesEXT structure is
included in the pname:pNext chain of flink:VkPhysicalDeviceFeatures2, it is
filled with values indicating the implementation-dependent behavior.
sname:VkPhysicalDeviceConditionalRenderingFeaturesEXT can: also be used in
pname:pNext chain of slink:VkDeviceCreateInfo to enable the features.
include::../validity/structs/VkPhysicalDeviceConditionalRenderingFeaturesEXT.txt[]
--
endif::VK_EXT_conditional_rendering[]
ifdef::VK_VERSION_1_1[]
[open,refpage='VkPhysicalDeviceShaderDrawParameterFeatures',desc='Structure describing shader draw parameter features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceShaderDrawParameterFeatures structure is defined
as:
include::../api/structs/VkPhysicalDeviceShaderDrawParameterFeatures.txt[]
* [[features-features-shaderDrawParameters]] pname:shaderDrawParameters
specifies whether shader draw parameters are supported.
If the sname:VkPhysicalDeviceShaderDrawParameterFeatures structure is
included in the pname:pNext chain of flink:VkPhysicalDeviceFeatures2, it is
filled with a value indicating whether the feature is supported.
include::../validity/structs/VkPhysicalDeviceShaderDrawParameterFeatures.txt[]
--
endif::VK_VERSION_1_1[]
ifdef::VK_NV_mesh_shader[]
[open,refpage='VkPhysicalDeviceMeshShaderFeaturesNV',desc='Structure describing mesh shading features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceMeshShaderFeaturesNV structure is defined as:
include::../api/structs/VkPhysicalDeviceMeshShaderFeaturesNV.txt[]
* [[features-features-taskShader]] pname:taskShader indicates whether the
task shader stage is supported.
* [[features-features-meshShader]] pname:meshShader indicates whether the
mesh shader stage is supported.
If the sname:VkPhysicalDeviceMeshShaderFeaturesNV structure is included in
the pname:pNext chain of flink:VkPhysicalDeviceFeatures2, it is filled with
a value indicating whether the feature is supported.
sname:VkPhysicalDeviceMeshShaderFeaturesNV can: also be used in pname:pNext
chain of slink:VkDeviceCreateInfo to enable the features.
include::../validity/structs/VkPhysicalDeviceMeshShaderFeaturesNV.txt[]
--
endif::VK_NV_mesh_shader[]
ifdef::VK_EXT_descriptor_indexing[]
[open,refpage='VkPhysicalDeviceDescriptorIndexingFeaturesEXT',desc='Structure describing descriptor indexing features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceDescriptorIndexingFeaturesEXT structure is defined
as:
include::../api/structs/VkPhysicalDeviceDescriptorIndexingFeaturesEXT.txt[]
The members of the sname:VkPhysicalDeviceDescriptorIndexingFeaturesEXT
structure describe the following features:
* [[features-features-shaderInputAttachmentArrayDynamicIndexing]]
pname:shaderInputAttachmentArrayDynamicIndexing indicates whether arrays
of input attachments can: be indexed by dynamically uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:InputAttachmentArrayDynamicIndexingEXT capability.
* [[features-features-shaderUniformTexelBufferArrayDynamicIndexing]]
pname:shaderUniformTexelBufferArrayDynamicIndexing indicates whether
arrays of uniform texel buffers can: be indexed by dynamically uniform
integer expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:UniformTexelBufferArrayDynamicIndexingEXT capability.
* [[features-features-shaderStorageTexelBufferArrayDynamicIndexing]]
pname:shaderStorageTexelBufferArrayDynamicIndexing indicates whether
arrays of storage texel buffers can: be indexed by dynamically uniform
integer expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:StorageTexelBufferArrayDynamicIndexingEXT capability.
* [[features-features-shaderUniformBufferArrayNonUniformIndexing]]
pname:shaderUniformBufferArrayNonUniformIndexing indicates whether
arrays of uniform buffers can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:UniformBufferArrayNonUniformIndexingEXT capability.
* [[features-features-shaderSampledImageArrayNonUniformIndexing]]
pname:shaderSampledImageArrayNonUniformIndexing indicates whether arrays
of samplers or sampled images can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:SampledImageArrayNonUniformIndexingEXT capability.
* [[features-features-shaderStorageBufferArrayNonUniformIndexing]]
pname:shaderStorageBufferArrayNonUniformIndexing indicates whether
arrays of storage buffers can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:StorageBufferArrayNonUniformIndexingEXT capability.
* [[features-features-shaderStorageImageArrayNonUniformIndexing]]
pname:shaderStorageImageArrayNonUniformIndexing indicates whether arrays
of storage images can: be indexed by non-uniform integer expressions in
shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:StorageImageArrayNonUniformIndexingEXT capability.
* [[features-features-shaderInputAttachmentArrayNonUniformIndexing]]
pname:shaderInputAttachmentArrayNonUniformIndexing indicates whether
arrays of input attachments can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:InputAttachmentArrayNonUniformIndexingEXT capability.
* [[features-features-shaderUniformTexelBufferArrayNonUniformIndexing]]
pname:shaderUniformTexelBufferArrayNonUniformIndexing indicates whether
arrays of uniform texel buffers can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:UniformTexelBufferArrayNonUniformIndexingEXT capability.
* [[features-features-shaderStorageTexelBufferArrayNonUniformIndexing]]
pname:shaderStorageTexelBufferArrayNonUniformIndexing indicates whether
arrays of storage texel buffers can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:StorageTexelBufferArrayNonUniformIndexingEXT capability.
* [[features-features-descriptorBindingUniformBufferUpdateAfterBind]]
pname:descriptorBindingUniformBufferUpdateAfterBind indicates whether
the implementation supports updating uniform buffer descriptors after a
set is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER.
* [[features-features-descriptorBindingSampledImageUpdateAfterBind]]
pname:descriptorBindingSampledImageUpdateAfterBind indicates whether the
implementation supports updating sampled image descriptors after a set
is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE.
* [[features-features-descriptorBindingStorageImageUpdateAfterBind]]
pname:descriptorBindingStorageImageUpdateAfterBind indicates whether the
implementation supports updating storage image descriptors after a set
is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE.
* [[features-features-descriptorBindingStorageBufferUpdateAfterBind]]
pname:descriptorBindingStorageBufferUpdateAfterBind indicates whether
the implementation supports updating storage buffer descriptors after a
set is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER.
* [[features-features-descriptorBindingUniformTexelBufferUpdateAfterBind]]
pname:descriptorBindingUniformTexelBufferUpdateAfterBind indicates
whether the implementation supports updating uniform texel buffer
descriptors after a set is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER.
* [[features-features-descriptorBindingStorageTexelBufferUpdateAfterBind]]
pname:descriptorBindingStorageTexelBufferUpdateAfterBind indicates
whether the implementation supports updating storage texel buffer
descriptors after a set is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER.
* [[features-features-descriptorBindingUpdateUnusedWhilePending]]
pname:descriptorBindingUpdateUnusedWhilePending indicates whether the
implementation supports updating descriptors while the set is in use.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT must:
not be used.
* [[features-features-descriptorBindingPartiallyBound]]
pname:descriptorBindingPartiallyBound indicates whether the
implementation supports statically using a descriptor set binding in
which some descriptors are not valid.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT must: not be used.
* [[features-features-descriptorBindingVariableDescriptorCount]]
pname:descriptorBindingVariableDescriptorCount indicates whether the
implementation supports descriptor sets with a variable-sized last
binding.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT must: not
be used.
* [[features-features-runtimeDescriptorArray]]
pname:runtimeDescriptorArray indicates whether the implementation
supports the SPIR-V +RuntimeDescriptorArrayEXT+ capability.
If this feature is not enabled, descriptors must: not be declared in
runtime arrays.
If the sname:VkPhysicalDeviceDescriptorIndexingFeaturesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it
is filled with values indicating whether each feature is supported.
sname:VkPhysicalDeviceDescriptorIndexingFeaturesEXT can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceDescriptorIndexingFeaturesEXT.txt[]
--
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_vertex_attribute_divisor[]
[open,refpage='VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT',desc='Structure describing if fetching of vertex attribute may be repeated for instanced rendering',type='structs']
--
The sname:VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* [[features-features-vertexAttributeInstanceRateDivisor]]
pname:vertexAttributeInstanceRateDivisor specifies whether vertex
attribute fetching may be repeated in case of instanced rendering.
* [[features-features-vertexAttributeInstanceRateZeroDivisor]]
pname:vertexAttributeInstanceRateZeroDivisor specifies whether a zero
value for sname:VkVertexInputBindingDivisorDescriptionEXT::pname:divisor
is supported.
If the sname:VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT structure is
included in the pname:pNext chain of flink:VkPhysicalDeviceFeatures2, it is
filled with values indicating the implementation-dependent behavior.
sname:VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT can: also be used in
pname:pNext chain of slink:VkDeviceCreateInfo to enable the feature.
include::../validity/structs/VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT.txt[]
--
endif::VK_EXT_vertex_attribute_divisor[]
ifdef::VK_EXT_astc_decode_mode[]
[open,refpage='VkPhysicalDeviceASTCDecodeFeaturesEXT',desc='Structure describing ASTC decode mode features',type='structs']
--
The sname:VkPhysicalDeviceASTCDecodeFeaturesEXT structure is defined as:
include::../api/structs/VkPhysicalDeviceASTCDecodeFeaturesEXT.txt[]
The members of the sname:VkPhysicalDeviceASTCDecodeFeaturesEXT structure
describe the following features:
* [[features-features-astc-decodeModeSharedExponent]]
pname:decodeModeSharedExponent indicates whether the implementation
supports decoding ASTC compressed formats to
ename:FORMAT_E5B9G9R9_UFLOAT_PACK32 internal precision.
If the sname:VkPhysicalDeviceASTCDecodeFeaturesEXT structure is included in
the pname:pNext chain of flink:vkGetPhysicalDeviceFeatures2KHR, it is filled
with values indicating whether each feature is supported.
sname:VkPhysicalDeviceASTCDecodeFeaturesEXT can: also be used in the
pname:pNext chain of flink:vkCreateDevice to enable features.
include::../validity/structs/VkPhysicalDeviceASTCDecodeFeaturesEXT.txt[]
--
endif::VK_EXT_astc_decode_mode[]
ifdef::VK_EXT_transform_feedback[]
[open,refpage='VkPhysicalDeviceTransformFeedbackFeaturesEXT',desc='Structure describing transform feedback features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT structure is defined
as:
include::../api/structs/VkPhysicalDeviceTransformFeedbackFeaturesEXT.txt[]
The members of the sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT
structure describe the following features:
* [[features-features-transformFeedback]] pname:transformFeedback
indicates whether the implementation supports transform feedback and
shader modules can: declare the code:TransformFeedback capability.
* [[features-features-geometryStreams]] pname:geometryStreams indicates
whether the implementation supports the code:GeometryStreams SPIR-V
capability.
If the sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it
is filled with values indicating whether each feature is supported.
sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceTransformFeedbackFeaturesEXT.txt[]
--
endif::VK_EXT_transform_feedback[]
ifdef::VK_KHR_vulkan_memory_model[]
[open,refpage='VkPhysicalDeviceVulkanMemoryModelFeaturesKHR',desc='Structure describing features supported by VK_KHR_vulkan_memory_model',type='structs']
--
To query memory model features additionally supported call
flink:vkGetPhysicalDeviceFeatures2 with a
sname:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR structure included in the
pname:pNext chain of its pname:pFeatures parameter.
The sname:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR structure can: also
be in the pname:pNext chain of a slink:VkDeviceCreateInfo structure, in
which case it controls which additional features are enabled in the device.
The slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR structure is defined
as:
include::../api/structs/VkPhysicalDeviceVulkanMemoryModelFeaturesKHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* [[features-features-vulkanMemoryModel]] pname:vulkanMemoryModel
indicates whether the Vulkan Memory Model is supported, as defined in
<<memory-model,Vulkan Memory Model>>.
This also indicates whether shader modules can: declare the
code:VulkanMemoryModelKHR capability.
* [[features-features-vulkanMemoryModelDeviceScope]]
pname:vulkanMemoryModelDeviceScope indicates whether the Vulkan Memory
Model can use code:Device scope synchronization.
This also indicates whether shader modules can: declare the
code:VulkanMemoryModelDeviceScopeKHR capability.
include::../validity/structs/VkPhysicalDeviceVulkanMemoryModelFeaturesKHR.txt[]
--
endif::VK_KHR_vulkan_memory_model[]
ifdef::VK_EXT_inline_uniform_block[]
[open,refpage='VkPhysicalDeviceInlineUniformBlockFeaturesEXT',desc='Structure describing inline uniform block features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceInlineUniformBlockFeaturesEXT structure is defined
as:
include::../api/structs/VkPhysicalDeviceInlineUniformBlockFeaturesEXT.txt[]
The members of the sname:VkPhysicalDeviceInlineUniformBlockFeaturesEXT
structure describe the following features:
* [[features-features-inlineUniformBlock]] pname:inlineUniformBlock
indicates whether the implementation supports inline uniform block
descriptors.
If this feature is not enabled,
ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT must: not be used.
* [[features-features-descriptorBindingInlineUniformBlockUpdateAfterBind]]
pname:descriptorBindingInlineUniformBlockUpdateAfterBind
ifndef::VK_EXT_descriptor_indexing[]
is ename:VK_FALSE and reserved for future use.
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_descriptor_indexing[]
indicates whether the implementation supports updating inline uniform
block descriptors after a set is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT.
endif::VK_EXT_descriptor_indexing[]
If the sname:VkPhysicalDeviceInlineUniformBlockFeaturesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
sname:VkPhysicalDeviceInlineUniformBlockFeaturesEXT can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceInlineUniformBlockFeaturesEXT.txt[]
--
endif::VK_EXT_inline_uniform_block[]
ifdef::VK_NV_representative_fragment_test[]
[open,refpage='VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV',desc='Structure describing the representative fragment test features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV structure is
defined as:
include::../api/structs/VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV.txt[]
The members of the
sname:VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV structure
describe the following features:
* [[features-features-representativeFragmentTest]]
pname:representativeFragmentTest indicates whether the implementation
supports the representative fragment test.
See <<fragops-rep-frag-test, Representative Fragment Test>>.
If the sname:VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV structure
is included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR,
it is filled with values indicating whether the feature is supported.
sname:VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV can: also be used
in the pname:pNext chain of slink:VkDeviceCreateInfo to enable the feature.
include::../validity/structs/VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV.txt[]
--
endif::VK_NV_representative_fragment_test[]
ifdef::VK_NV_scissor_exclusive[]
[open,refpage='VkPhysicalDeviceExclusiveScissorFeaturesNV',desc='Structure describing exclusive scissor features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceExclusiveScissorFeaturesNV structure is defined
as:
include::../api/structs/VkPhysicalDeviceExclusiveScissorFeaturesNV.txt[]
The members of the sname:VkPhysicalDeviceExclusiveScissorFeaturesNV
structure describe the following features:
* [[features-features-exclusiveScissor]] pname:exclusiveScissor indicates
that the implementation supports the exclusive scissor test.
See <<fragops-exclusive-scissor,Exclusive Scissor Test>> for more
information.
If the sname:VkPhysicalDeviceExclusiveScissorFeaturesNV structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it
is filled with values indicating whether the feature is supported.
sname:VkPhysicalDeviceExclusiveScissorFeaturesNV can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable the feature.
include::../validity/structs/VkPhysicalDeviceExclusiveScissorFeaturesNV.txt[]
--
endif::VK_NV_scissor_exclusive[]
ifdef::VK_NV_corner_sampled_image[]
[open,refpage='VkPhysicalDeviceCornerSampledImageFeaturesNV',desc='Structure describing corner sampled image features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceCornerSampledImageFeaturesNV structure is defined
as:
include::../api/structs/VkPhysicalDeviceCornerSampledImageFeaturesNV.txt[]
The members of the sname:VkPhysicalDeviceCornerSampledImageFeaturesNV
structure describe the following features:
* [[features-features-cornersampledimage]] pname:cornerSampledImage
specifies whether images can be created with a
slink:VkImageCreateInfo::pname:flags containing
ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV.
See <<resources-images-corner-sampled,Corner-Sampled Images>>.
If the sname:VkPhysicalDeviceCornerSampledImageFeaturesNV structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it
is filled with values indicating whether each feature is supported.
sname:VkPhysicalDeviceCornerSampledImageFeaturesNV can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceCornerSampledImageFeaturesNV.txt[]
--
endif::VK_NV_corner_sampled_image[]
ifdef::VK_NV_compute_shader_derivatives[]
[open,refpage='VkPhysicalDeviceComputeShaderDerivativesFeaturesNV',desc='Structure describing compute shader derivative features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceComputeShaderDerivativesFeaturesNV structure is
defined as:
include::../api/structs/VkPhysicalDeviceComputeShaderDerivativesFeaturesNV.txt[]
The members of the sname:VkPhysicalDeviceComputeShaderDerivativesFeaturesNV
structure describe the following features:
* [[features-features-computeShaderDerivativesQuads]]
pname:computeDerivativeGroupQuads indicates that the implementation
supports the code:ComputeDerivativeGroupQuadsNV SPIR-V capability.
* [[features-features-computeShaderDerivativesLinear]]
pname:computeDerivativeGroupLinear indicates that the implementation
supports the code:ComputeDerivativeGroupLinearNV SPIR-V capability.
See <<texture-derivatives-compute,Compute Shader Derivatives>> for more
information.
If the sname:VkPhysicalDeviceComputeShaderDerivativesNV structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it
is filled with values indicating whether each feature is supported.
sname:VkPhysicalDeviceComputeShaderDerivativesFeaturesNV can: also be used
in the pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceComputeShaderDerivativesFeaturesNV.txt[]
--
endif::VK_NV_compute_shader_derivatives[]
ifdef::VK_NV_fragment_shader_barycentric[]
[open,refpage='VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV',desc='Structure describing barycentric support in fragment shaders that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV structure is
defined as:
include::../api/structs/VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV.txt[]
The members of the sname:VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
structure describe the following features:
* [[features-features-fragmentShaderBarycentric]]
pname:fragmentShaderBarycentric indicates that the implementation
supports the code:BaryCoordNV and code:BaryCoordNoPerspNV SPIR-V
fragment shader built-ins and supports the code:PerVertexNV SPIR-V
decoration on fragment shader input variables.
See <<primsrast-barycentric,Barycentric Interpolation>> for more
information.
If the sname:VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV structure
is included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR,
it is filled with values indicating whether the feature is supported.
sname:VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV can: also be used
in the pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV.txt[]
--
endif::VK_NV_fragment_shader_barycentric[]
ifdef::VK_NV_shader_image_footprint[]
[open,refpage='VkPhysicalDeviceShaderImageFootprintFeaturesNV',desc='Structure describing shader image footprint features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceShaderImageFootprintFeaturesNV structure is
defined as:
include::../api/structs/VkPhysicalDeviceShaderImageFootprintFeaturesNV.txt[]
* [[features-features-imageFootprint]] pname:imageFootprint specifies
whether the implementation supports the code:ImageFootprintNV SPIR-V
capability.
See <<textures-footprint,Texel Footprint Evaluation>> for more information.
If the sname:VkPhysicalDeviceShaderImageFootprintFeaturesNV structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it
is filled with values indicating whether each feature is supported.
sname:VkPhysicalDeviceShaderImageFootprintFeaturesNV can: also be used in
the pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceShaderImageFootprintFeaturesNV.txt[]
--
endif::VK_NV_shader_image_footprint[]
ifdef::VK_NV_shading_rate_image[]
[open,refpage='VkPhysicalDeviceShadingRateImageFeaturesNV',desc='Structure describing shading rate image features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceShadingRateImageFeaturesNV structure is defined
as:
include::../api/structs/VkPhysicalDeviceShadingRateImageFeaturesNV.txt[]
The members of the sname:VkPhysicalDeviceShadingRateImageFeaturesNV
structure describe the following features:
* [[features-features-shadingRateImage]] pname:shadingRateImage indicates
that the implementation supports the use of a shading rate image to
derive an effective shading rate for fragment processing.
It also indicates that the implementation supports the
code:ShadingRateNV SPIR-V execution mode.
* [[features-features-shadingRateCoarseSampleOrder]]
pname:shadingRateCoarseSampleOrder indicates that the implementation
supports a user-configurable ordering of coverage samples in fragments
larger than one pixel.
See <<primsrast-shading-rate-image, Shading Rate Image>> for more
information.
If the sname:VkPhysicalDeviceShadingRateImageFeaturesNV structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it
is filled with values indicating whether the feature is supported.
sname:VkPhysicalDeviceShadingRateImageFeaturesNV can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceShadingRateImageFeaturesNV.txt[]
--
endif::VK_NV_shading_rate_image[]
[[features-features-requirements]]
=== Feature Requirements
All Vulkan graphics implementations must: support the following features:
* <<features-features-robustBufferAccess, pname:robustBufferAccess>>
ifdef::VK_VERSION_1_1[]
* <<features-features-multiview, pname:multiview>>
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
* <<features-features-variablePointersStorageBuffer,
pname:variablePointersStorageBuffer>>, if the
`<<VK_KHR_variable_pointers>>` extension is supported.
endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
ifdef::VK_KHR_8bit_storage[]
* <<features-features-StorageBuffer8BitAccess,
pname:storageBuffer8BitAccess>>, if the `<<VK_KHR_8bit_storage>>`
extension is supported.
endif::VK_KHR_8bit_storage[]
ifdef::VK_EXT_descriptor_indexing[]
* If the `<<VK_EXT_descriptor_indexing>>` extension is supported:
** <<features-features-shaderSampledImageArrayDynamicIndexing,
pname:shaderSampledImageArrayDynamicIndexing>>
** <<features-features-shaderStorageBufferArrayDynamicIndexing,
pname:shaderStorageBufferArrayDynamicIndexing>>
** <<features-features-shaderUniformTexelBufferArrayDynamicIndexing,
pname:shaderUniformTexelBufferArrayDynamicIndexing>>
** <<features-features-shaderStorageTexelBufferArrayDynamicIndexing,
pname:shaderStorageTexelBufferArrayDynamicIndexing>>
** <<features-features-shaderSampledImageArrayNonUniformIndexing,
pname:shaderSampledImageArrayNonUniformIndexing>>
** <<features-features-shaderStorageBufferArrayNonUniformIndexing,
pname:shaderStorageBufferArrayNonUniformIndexing>>
** <<features-features-shaderUniformTexelBufferArrayNonUniformIndexing,
pname:shaderUniformTexelBufferArrayNonUniformIndexing>>
** <<features-features-descriptorBindingSampledImageUpdateAfterBind,
pname:descriptorBindingSampledImageUpdateAfterBind>>
** <<features-features-descriptorBindingStorageImageUpdateAfterBind,
pname:descriptorBindingStorageImageUpdateAfterBind>>
** <<features-features-descriptorBindingStorageBufferUpdateAfterBind,
pname:descriptorBindingStorageBufferUpdateAfterBind>> (see also
<<features-limits-robustBufferAccessUpdateAfterBind,
pname:robustBufferAccessUpdateAfterBind>>)
** <<features-features-descriptorBindingUniformTexelBufferUpdateAfterBind,
pname:descriptorBindingUniformTexelBufferUpdateAfterBind>> (see also
<<features-limits-robustBufferAccessUpdateAfterBind,
pname:robustBufferAccessUpdateAfterBind>>)
** <<features-features-descriptorBindingStorageTexelBufferUpdateAfterBind,
pname:descriptorBindingStorageTexelBufferUpdateAfterBind>> (see also
<<features-limits-robustBufferAccessUpdateAfterBind,
pname:robustBufferAccessUpdateAfterBind>>)
** <<features-features-descriptorBindingUpdateUnusedWhilePending,
pname:descriptorBindingUpdateUnusedWhilePending>>
** <<features-features-descriptorBindingPartiallyBound,
pname:descriptorBindingPartiallyBound>>
** <<features-features-runtimeDescriptorArray,
pname:runtimeDescriptorArray>>
ifdef::VK_EXT_inline_uniform_block[]
* <<features-features-inlineUniformBlock,pname:inlineUniformBlock>>, if
the `<<VK_EXT_inline_uniform_block>>` extension is supported.
* <<features-features-descriptorBindingInlineUniformBlockUpdateAfterBind,
pname:descriptorBindingInlineUniformBlockUpdateAfterBind>>, if the
`<<VK_EXT_inline_uniform_block>>` and `<<VK_EXT_descriptor_indexing>>`
extensions are both supported.
endif::VK_EXT_inline_uniform_block[]
endif::VK_EXT_descriptor_indexing[]
All other features defined in the Specification are optional:.
[[features-limits]]
== Limits
There are a variety of implementation-dependent limits.
The sname:VkPhysicalDeviceLimits are properties of the physical device.
These are available in the pname:limits member of the
slink:VkPhysicalDeviceProperties structure which is returned from
flink:vkGetPhysicalDeviceProperties.
[open,refpage='VkPhysicalDeviceLimits',desc='Structure reporting implementation-dependent physical device limits',type='structs']
--
The sname:VkPhysicalDeviceLimits structure is defined as:
include::../api/structs/VkPhysicalDeviceLimits.txt[]
* [[features-limits-maxImageDimension1D]] pname:maxImageDimension1D is the
maximum dimension (pname:width) supported for all images created with an
pname:imageType of ename:VK_IMAGE_TYPE_1D.
* [[features-limits-maxImageDimension2D]] pname:maxImageDimension2D is the
maximum dimension (pname:width or pname:height) supported for all images
created with an pname:imageType of ename:VK_IMAGE_TYPE_2D and without
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
* [[features-limits-maxImageDimension3D]] pname:maxImageDimension3D is the
maximum dimension (pname:width, pname:height, or pname:depth) supported
for all images created with an pname:imageType of
ename:VK_IMAGE_TYPE_3D.
* [[features-limits-maxImageDimensionCube]] pname:maxImageDimensionCube is
the maximum dimension (pname:width or pname:height) supported for all
images created with an pname:imageType of ename:VK_IMAGE_TYPE_2D and
with ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
* [[features-limits-maxImageArrayLayers]] pname:maxImageArrayLayers is the
maximum number of layers (pname:arrayLayers) for an image.
* [[features-limits-maxTexelBufferElements]] pname:maxTexelBufferElements
is the maximum number of addressable texels for a buffer view created on
a buffer which was created with the
ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the pname:usage
member of the sname:VkBufferCreateInfo structure.
* [[features-limits-maxUniformBufferRange]] pname:maxUniformBufferRange is
the maximum value that can: be specified in the pname:range member of
any slink:VkDescriptorBufferInfo structures passed to a call to
flink:vkUpdateDescriptorSets for descriptors of type
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
* [[features-limits-maxStorageBufferRange]] pname:maxStorageBufferRange is
the maximum value that can: be specified in the pname:range member of
any slink:VkDescriptorBufferInfo structures passed to a call to
flink:vkUpdateDescriptorSets for descriptors of type
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
* [[features-limits-maxPushConstantsSize]] pname:maxPushConstantsSize is
the maximum size, in bytes, of the pool of push constant memory.
For each of the push constant ranges indicated by the
pname:pPushConstantRanges member of the sname:VkPipelineLayoutCreateInfo
structure, [eq]#(pname:offset {plus} pname:size)# must: be less than or
equal to this limit.
* [[features-limits-maxMemoryAllocationCount]]
pname:maxMemoryAllocationCount is the maximum number of device memory
allocations, as created by flink:vkAllocateMemory, which can:
simultaneously exist.
* [[features-limits-maxSamplerAllocationCount]]
pname:maxSamplerAllocationCount is the maximum number of sampler
objects, as created by flink:vkCreateSampler, which can: simultaneously
exist on a device.
* [[features-limits-bufferImageGranularity]] pname:bufferImageGranularity
is the granularity, in bytes, at which buffer or linear image resources,
and optimal image resources can: be bound to adjacent offsets in the
same sname:VkDeviceMemory object without aliasing.
See <<resources-bufferimagegranularity,Buffer-Image Granularity>> for
more details.
* [[features-limits-sparseAddressSpaceSize]] pname:sparseAddressSpaceSize
is the total amount of address space available, in bytes, for sparse
memory resources.
This is an upper bound on the sum of the size of all sparse resources,
regardless of whether any memory is bound to them.
* [[features-limits-maxBoundDescriptorSets]] pname:maxBoundDescriptorSets
is the maximum number of descriptor sets that can: be simultaneously
used by a pipeline.
All code:DescriptorSet decorations in shader modules must: have a value
less than pname:maxBoundDescriptorSets.
See <<descriptorsets-sets>>.
* [[features-limits-maxPerStageDescriptorSamplers]]
pname:maxPerStageDescriptorSamplers is the maximum number of samplers
that can: be accessible to a single shader stage in a pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a shader stage when the pname:stageFlags
member of the sname:VkDescriptorSetLayoutBinding structure has the bit
for that shader stage set.
See <<descriptorsets-sampler>> and
<<descriptorsets-combinedimagesampler>>.
* [[features-limits-maxPerStageDescriptorUniformBuffers]]
pname:maxPerStageDescriptorUniformBuffers is the maximum number of
uniform buffers that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a shader stage when the pname:stageFlags
member of the sname:VkDescriptorSetLayoutBinding structure has the bit
for that shader stage set.
See <<descriptorsets-uniformbuffer>> and
<<descriptorsets-uniformbufferdynamic>>.
* [[features-limits-maxPerStageDescriptorStorageBuffers]]
pname:maxPerStageDescriptorStorageBuffers is the maximum number of
storage buffers that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
See <<descriptorsets-storagebuffer>> and
<<descriptorsets-storagebufferdynamic>>.
* [[features-limits-maxPerStageDescriptorSampledImages]]
pname:maxPerStageDescriptorSampledImages is the maximum number of
sampled images that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
See <<descriptorsets-combinedimagesampler>>,
<<descriptorsets-sampledimage>>, and
<<descriptorsets-uniformtexelbuffer>>.
* [[features-limits-maxPerStageDescriptorStorageImages]]
pname:maxPerStageDescriptorStorageImages is the maximum number of
storage images that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
See <<descriptorsets-storageimage>>, and
<<descriptorsets-storagetexelbuffer>>.
* [[features-limits-maxPerStageDescriptorInputAttachments]]
pname:maxPerStageDescriptorInputAttachments is the maximum number of
input attachments that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
These are only supported for the fragment stage.
See <<descriptorsets-inputattachment>>.
* [[features-limits-maxPerStageResources]] pname:maxPerStageResources is
the maximum number of resources that can: be accessible to a single
shader stage in a pipeline layout.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
For the fragment shader stage the framebuffer color attachments also
count against this limit.
* [[features-limits-maxDescriptorSetSamplers]]
pname:maxDescriptorSetSamplers is the maximum number of samplers that
can: be included in descriptor bindings in a pipeline layout across all
pipeline shader stages and descriptor set numbers.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-sampler>> and
<<descriptorsets-combinedimagesampler>>.
* [[features-limits-maxDescriptorSetUniformBuffers]]
pname:maxDescriptorSetUniformBuffers is the maximum number of uniform
buffers that can: be included in descriptor bindings in a pipeline
layout across all pipeline shader stages and descriptor set numbers.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-uniformbuffer>> and
<<descriptorsets-uniformbufferdynamic>>.
* [[features-limits-maxDescriptorSetUniformBuffersDynamic]]
pname:maxDescriptorSetUniformBuffersDynamic is the maximum number of
dynamic uniform buffers that can: be included in descriptor bindings in
a pipeline layout across all pipeline shader stages and descriptor set
numbers.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-uniformbufferdynamic>>.
* [[features-limits-maxDescriptorSetStorageBuffers]]
pname:maxDescriptorSetStorageBuffers is the maximum number of storage
buffers that can: be included in descriptor bindings in a pipeline
layout across all pipeline shader stages and descriptor set numbers.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-storagebuffer>> and
<<descriptorsets-storagebufferdynamic>>.
* [[features-limits-maxDescriptorSetStorageBuffersDynamic]]
pname:maxDescriptorSetStorageBuffersDynamic is the maximum number of
dynamic storage buffers that can: be included in descriptor bindings in
a pipeline layout across all pipeline shader stages and descriptor set
numbers.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-storagebufferdynamic>>.
* [[features-limits-maxDescriptorSetSampledImages]]
pname:maxDescriptorSetSampledImages is the maximum number of sampled
images that can: be included in descriptor bindings in a pipeline layout
across all pipeline shader stages and descriptor set numbers.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-combinedimagesampler>>,
<<descriptorsets-sampledimage>>, and
<<descriptorsets-uniformtexelbuffer>>.
* [[features-limits-maxDescriptorSetStorageImages]]
pname:maxDescriptorSetStorageImages is the maximum number of storage
images that can: be included in descriptor bindings in a pipeline layout
across all pipeline shader stages and descriptor set numbers.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-storageimage>>, and
<<descriptorsets-storagetexelbuffer>>.
* [[features-limits-maxDescriptorSetInputAttachments]]
pname:maxDescriptorSetInputAttachments is the maximum number of input
attachments that can: be included in descriptor bindings in a pipeline
layout across all pipeline shader stages and descriptor set numbers.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-inputattachment>>.
* [[features-limits-maxVertexInputAttributes]]
pname:maxVertexInputAttributes is the maximum number of vertex input
attributes that can: be specified for a graphics pipeline.
These are described in the array of
sname:VkVertexInputAttributeDescription structures that are provided at
graphics pipeline creation time via the
pname:pVertexAttributeDescriptions member of the
sname:VkPipelineVertexInputStateCreateInfo structure.
See <<fxvertex-attrib>> and <<fxvertex-input>>.
* [[features-limits-maxVertexInputBindings]] pname:maxVertexInputBindings
is the maximum number of vertex buffers that can: be specified for
providing vertex attributes to a graphics pipeline.
These are described in the array of
sname:VkVertexInputBindingDescription structures that are provided at
graphics pipeline creation time via the pname:pVertexBindingDescriptions
member of the sname:VkPipelineVertexInputStateCreateInfo structure.
The pname:binding member of sname:VkVertexInputBindingDescription must:
be less than this limit.
See <<fxvertex-input>>.
* [[features-limits-maxVertexInputAttributeOffset]]
pname:maxVertexInputAttributeOffset is the maximum vertex input
attribute offset that can: be added to the vertex input binding stride.
The pname:offset member of the sname:VkVertexInputAttributeDescription
structure must: be less than or equal to this limit.
See <<fxvertex-input>>.
* [[features-limits-maxVertexInputBindingStride]]
pname:maxVertexInputBindingStride is the maximum vertex input binding
stride that can: be specified in a vertex input binding.
The pname:stride member of the sname:VkVertexInputBindingDescription
structure must: be less than or equal to this limit.
See <<fxvertex-input>>.
* [[features-limits-maxVertexOutputComponents]]
pname:maxVertexOutputComponents is the maximum number of components of
output variables which can: be output by a vertex shader.
See <<shaders-vertex>>.
* [[features-limits-maxTessellationGenerationLevel]]
pname:maxTessellationGenerationLevel is the maximum tessellation
generation level supported by the fixed-function tessellation primitive
generator.
See <<tessellation>>.
* [[features-limits-maxTessellationPatchSize]]
pname:maxTessellationPatchSize is the maximum patch size, in vertices,
of patches that can: be processed by the tessellation control shader and
tessellation primitive generator.
The pname:patchControlPoints member of the
sname:VkPipelineTessellationStateCreateInfo structure specified at
pipeline creation time and the value provided in the code:OutputVertices
execution mode of shader modules must: be less than or equal to this
limit.
See <<tessellation>>.
* [[features-limits-maxTessellationControlPerVertexInputComponents]]
pname:maxTessellationControlPerVertexInputComponents is the maximum
number of components of input variables which can: be provided as
per-vertex inputs to the tessellation control shader stage.
* [[features-limits-maxTessellationControlPerVertexOutputComponents]]
pname:maxTessellationControlPerVertexOutputComponents is the maximum
number of components of per-vertex output variables which can: be output
from the tessellation control shader stage.
* [[features-limits-maxTessellationControlPerPatchOutputComponents]]
pname:maxTessellationControlPerPatchOutputComponents is the maximum
number of components of per-patch output variables which can: be output
from the tessellation control shader stage.
* [[features-limits-maxTessellationControlTotalOutputComponents]]
pname:maxTessellationControlTotalOutputComponents is the maximum total
number of components of per-vertex and per-patch output variables which
can: be output from the tessellation control shader stage.
* [[features-limits-maxTessellationEvaluationInputComponents]]
pname:maxTessellationEvaluationInputComponents is the maximum number of
components of input variables which can: be provided as per-vertex
inputs to the tessellation evaluation shader stage.
* [[features-limits-maxTessellationEvaluationOutputComponents]]
pname:maxTessellationEvaluationOutputComponents is the maximum number of
components of per-vertex output variables which can: be output from the
tessellation evaluation shader stage.
* [[features-limits-maxGeometryShaderInvocations]]
pname:maxGeometryShaderInvocations is the maximum invocation count
supported for instanced geometry shaders.
The value provided in the code:Invocations execution mode of shader
modules must: be less than or equal to this limit.
See <<geometry>>.
* [[features-limits-maxGeometryInputComponents]]
pname:maxGeometryInputComponents is the maximum number of components of
input variables which can: be provided as inputs to the geometry shader
stage.
* [[features-limits-maxGeometryOutputComponents]]
pname:maxGeometryOutputComponents is the maximum number of components of
output variables which can: be output from the geometry shader stage.
* [[features-limits-maxGeometryOutputVertices]]
pname:maxGeometryOutputVertices is the maximum number of vertices which
can: be emitted by any geometry shader.
* [[features-limits-maxGeometryTotalOutputComponents]]
pname:maxGeometryTotalOutputComponents is the maximum total number of
components of output, across all emitted vertices, which can: be output
from the geometry shader stage.
* [[features-limits-maxFragmentInputComponents]]
pname:maxFragmentInputComponents is the maximum number of components of
input variables which can: be provided as inputs to the fragment shader
stage.
* [[features-limits-maxFragmentOutputAttachments]]
pname:maxFragmentOutputAttachments is the maximum number of output
attachments which can: be written to by the fragment shader stage.
* [[features-limits-maxFragmentDualSrcAttachments]]
pname:maxFragmentDualSrcAttachments is the maximum number of output
attachments which can: be written to by the fragment shader stage when
blending is enabled and one of the dual source blend modes is in use.
See <<framebuffer-dsb>> and
<<features-features-dualSrcBlend,dualSrcBlend>>.
* [[features-limits-maxFragmentCombinedOutputResources]]
pname:maxFragmentCombinedOutputResources is the total number of storage
buffers, storage images, and output buffers which can: be used in the
fragment shader stage.
* [[features-limits-maxComputeSharedMemorySize]]
pname:maxComputeSharedMemorySize is the maximum total storage size, in
bytes, of all variables declared with the code:WorkgroupLocal storage
class in shader modules (or with the code:shared storage qualifier in
GLSL) in the compute shader stage.
* [[features-limits-maxComputeWorkGroupCount]]
pname:maxComputeWorkGroupCount[3] is the maximum number of local
workgroups that can: be dispatched by a single dispatch command.
These three values represent the maximum number of local workgroups for
the X, Y, and Z dimensions, respectively.
The workgroup count parameters to the dispatch commands must: be less
than or equal to the corresponding limit.
See <<dispatch>>.
* [[features-limits-maxComputeWorkGroupInvocations]]
pname:maxComputeWorkGroupInvocations is the maximum total number of
compute shader invocations in a single local workgroup.
The product of the X, Y, and Z sizes as specified by the code:LocalSize
execution mode in shader modules and by the object decorated by the
code:WorkgroupSize decoration must: be less than or equal to this limit.
* [[features-limits-maxComputeWorkGroupSize]]
pname:maxComputeWorkGroupSize[3] is the maximum size of a local compute
workgroup, per dimension.
These three values represent the maximum local workgroup size in the X,
Y, and Z dimensions, respectively.
The pname:x, pname:y, and pname:z sizes specified by the code:LocalSize
execution mode and by the object decorated by the code:WorkgroupSize
decoration in shader modules must: be less than or equal to the
corresponding limit.
* [[features-limits-subPixelPrecisionBits]] pname:subPixelPrecisionBits is
the number of bits of subpixel precision in framebuffer coordinates
[eq]#x~f~# and [eq]#y~f~#.
See <<primsrast>>.
* [[features-limits-subTexelPrecisionBits]] pname:subTexelPrecisionBits is
the number of bits of precision in the division along an axis of an
image used for minification and magnification filters.
[eq]#2^pname:subTexelPrecisionBits^# is the actual number of divisions
along each axis of the image represented.
Sub-texel values calculated during image sampling will snap to these
locations when generating the filtered results.
* [[features-limits-mipmapPrecisionBits]] pname:mipmapPrecisionBits is the
number of bits of division that the LOD calculation for mipmap fetching
get snapped to when determining the contribution from each mip level to
the mip filtered results.
[eq]#2^pname:mipmapPrecisionBits^# is the actual number of divisions.
* [[features-limits-maxDrawIndexedIndexValue]]
pname:maxDrawIndexedIndexValue is the maximum index value that can: be
used for indexed draw calls when using 32-bit indices.
This excludes the primitive restart index value of 0xFFFFFFFF.
See <<features-features-fullDrawIndexUint32,fullDrawIndexUint32>>.
* [[features-limits-maxDrawIndirectCount]] pname:maxDrawIndirectCount is
the maximum draw count that is supported for indirect draw calls.
See <<features-features-multiDrawIndirect,multiDrawIndirect>>.
* [[features-limits-maxSamplerLodBias]] pname:maxSamplerLodBias is the
maximum absolute sampler LOD bias.
The sum of the pname:mipLodBias member of the sname:VkSamplerCreateInfo
structure and the code:Bias operand of image sampling operations in
shader modules (or 0 if no code:Bias operand is provided to an image
sampling operation) are clamped to the range
[eq]#[-pname:maxSamplerLodBias,+pname:maxSamplerLodBias]#.
See <<samplers-mipLodBias>>.
* [[features-limits-maxSamplerAnisotropy]] pname:maxSamplerAnisotropy is
the maximum degree of sampler anisotropy.
The maximum degree of anisotropic filtering used for an image sampling
operation is the minimum of the pname:maxAnisotropy member of the
sname:VkSamplerCreateInfo structure and this limit.
See <<samplers-maxAnisotropy>>.
* [[features-limits-maxViewports]] pname:maxViewports is the maximum
number of active viewports.
The pname:viewportCount member of the
sname:VkPipelineViewportStateCreateInfo structure that is provided at
pipeline creation must: be less than or equal to this limit.
* [[features-limits-maxViewportDimensions]] pname:maxViewportDimensions[2]
are the maximum viewport dimensions in the X (width) and Y (height)
dimensions, respectively.
The maximum viewport dimensions must: be greater than or equal to the
largest image which can: be created and used as a framebuffer
attachment.
See <<vertexpostproc-viewport,Controlling the Viewport>>.
* [[features-limits-viewportboundsrange]] pname:viewportBoundsRange[2] is
the [eq]#[minimum, maximum]# range that the corners of a viewport must:
be contained in.
This range must: be at least [eq]#[-2 {times} pname:size, 2 {times}
pname:size - 1]#, where [eq]#pname:size =
max(pname:maxViewportDimensions[0], pname:maxViewportDimensions[1])#.
See <<vertexpostproc-viewport,Controlling the Viewport>>.
+
[NOTE]
.Note
====
The intent of the pname:viewportBoundsRange limit is to allow a maximum
sized viewport to be arbitrarily shifted relative to the output target as
long as at least some portion intersects.
This would give a bounds limit of [eq]#[-pname:size {plus} 1, 2 {times}
pname:size - 1]# which would allow all possible non-empty-set intersections
of the output target and the viewport.
Since these numbers are typically powers of two, picking the signed number
range using the smallest possible number of bits ends up with the specified
range.
====
* [[features-limits-viewportSubPixelBits]] pname:viewportSubPixelBits is
the number of bits of subpixel precision for viewport bounds.
The subpixel precision that floating-point viewport bounds are
interpreted at is given by this limit.
* [[features-limits-minMemoryMapAlignment]] pname:minMemoryMapAlignment is
the minimum required: alignment, in bytes, of host visible memory
allocations within the host address space.
When mapping a memory allocation with flink:vkMapMemory, subtracting
pname:offset bytes from the returned pointer will always produce an
integer multiple of this limit.
See <<memory-device-hostaccess>>.
* [[features-limits-minTexelBufferOffsetAlignment]]
pname:minTexelBufferOffsetAlignment is the minimum required: alignment,
in bytes, for the pname:offset member of the
sname:VkBufferViewCreateInfo structure for texel buffers.
When a buffer view is created for a buffer which was created with
ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the pname:usage
member of the sname:VkBufferCreateInfo structure, the pname:offset must:
be an integer multiple of this limit.
* [[features-limits-minUniformBufferOffsetAlignment]]
pname:minUniformBufferOffsetAlignment is the minimum required:
alignment, in bytes, for the pname:offset member of the
sname:VkDescriptorBufferInfo structure for uniform buffers.
When a descriptor of type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC is updated, the
pname:offset must: be an integer multiple of this limit.
Similarly, dynamic offsets for uniform buffers must: be multiples of
this limit.
* [[features-limits-minStorageBufferOffsetAlignment]]
pname:minStorageBufferOffsetAlignment is the minimum required:
alignment, in bytes, for the pname:offset member of the
sname:VkDescriptorBufferInfo structure for storage buffers.
When a descriptor of type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC is updated, the
pname:offset must: be an integer multiple of this limit.
Similarly, dynamic offsets for storage buffers must: be multiples of
this limit.
* [[features-limits-minTexelOffset]] pname:minTexelOffset is the minimum
offset value for the code:ConstOffset image operand of any of the
code:OpImageSample* or code:OpImageFetch* image instructions.
* [[features-limits-maxTexelOffset]] pname:maxTexelOffset is the maximum
offset value for the code:ConstOffset image operand of any of the
code:OpImageSample* or code:OpImageFetch* image instructions.
* [[features-limits-minTexelGatherOffset]] pname:minTexelGatherOffset is
the minimum offset value for the code:Offset or code:ConstOffsets image
operands of any of the code:OpImage*code:Gather image instructions.
* [[features-limits-maxTexelGatherOffset]] pname:maxTexelGatherOffset is
the maximum offset value for the code:Offset or code:ConstOffsets image
operands of any of the code:OpImage*code:Gather image instructions.
* [[features-limits-minInterpolationOffset]] pname:minInterpolationOffset
is the minimum negative offset value for the code:offset operand of the
code:InterpolateAtOffset extended instruction.
* [[features-limits-maxInterpolationOffset]] pname:maxInterpolationOffset
is the maximum positive offset value for the code:offset operand of the
code:InterpolateAtOffset extended instruction.
* [[features-limits-subPixelInterpolationOffsetBits]]
pname:subPixelInterpolationOffsetBits is the number of subpixel
fractional bits that the code:x and code:y offsets to the
code:InterpolateAtOffset extended instruction may: be rounded to as
fixed-point values.
* [[features-limits-maxFramebufferWidth]] pname:maxFramebufferWidth is the
maximum width for a framebuffer.
The pname:width member of the sname:VkFramebufferCreateInfo structure
must: be less than or equal to this limit.
* [[features-limits-maxFramebufferHeight]] pname:maxFramebufferHeight is
the maximum height for a framebuffer.
The pname:height member of the sname:VkFramebufferCreateInfo structure
must: be less than or equal to this limit.
* [[features-limits-maxFramebufferLayers]] pname:maxFramebufferLayers is
the maximum layer count for a layered framebuffer.
The pname:layers member of the sname:VkFramebufferCreateInfo structure
must: be less than or equal to this limit.
* [[features-limits-framebufferColorSampleCounts]]
pname:framebufferColorSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the color sample counts that are
supported for all framebuffer color attachments with floating- or
fixed-point formats.
There is no limit that specifies the color sample counts that are
supported for all color attachments with integer formats.
* [[features-limits-framebufferDepthSampleCounts]]
pname:framebufferDepthSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the supported depth sample counts
for all framebuffer depth/stencil attachments, when the format includes
a depth component.
* pname:framebufferStencilSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the supported stencil sample
counts for all framebuffer depth/stencil attachments, when the format
includes a stencil component.
* pname:framebufferNoAttachmentsSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the supported sample counts for a
framebuffer with no attachments.
* [[features-limits-maxColorAttachments]] pname:maxColorAttachments is the
maximum number of color attachments that can: be used by a subpass in a
render pass.
The pname:colorAttachmentCount member of the sname:VkSubpassDescription
structure must: be less than or equal to this limit.
* [[features-limits-sampledImageColorSampleCounts]]
pname:sampledImageColorSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the sample counts supported for
all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a non-integer color
format.
* [[features-limits-sampledImageIntegerSampleCounts]]
pname:sampledImageIntegerSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the sample counts supported for
all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and an integer color
format.
* [[features-limits-sampledImageDepthSampleCounts]]
pname:sampledImageDepthSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the sample counts supported for
all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a depth format.
* [[features-limits-sampledImageStencilSampleCounts]]
pname:sampledImageStencilSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the sample supported for all 2D
images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a stencil format.
* [[features-limits-storageImageSampleCounts]]
pname:storageImageSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the sample counts supported for
all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, and
pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT.
* [[features-limits-maxSampleMaskWords]] pname:maxSampleMaskWords is the
maximum number of array elements of a variable decorated with the
code:SampleMask built-in decoration.
* [[features-limits-timestampComputeAndGraphics]]
pname:timestampComputeAndGraphics specifies support for timestamps on
all graphics and compute queues.
If this limit is set to ename:VK_TRUE, all queues that advertise the
ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT in the
sname:VkQueueFamilyProperties::pname:queueFlags support
sname:VkQueueFamilyProperties::pname:timestampValidBits of at least 36.
See <<queries-timestamps, Timestamp Queries>>.
* [[features-limits-timestampPeriod]] pname:timestampPeriod is the number
of nanoseconds required: for a timestamp query to be incremented by 1.
See <<queries-timestamps, Timestamp Queries>>.
* [[features-limits-maxClipDistances]] pname:maxClipDistances is the
maximum number of clip distances that can: be used in a single shader
stage.
The size of any array declared with the code:ClipDistance built-in
decoration in a shader module must: be less than or equal to this limit.
* [[features-limits-maxCullDistances]] pname:maxCullDistances is the
maximum number of cull distances that can: be used in a single shader
stage.
The size of any array declared with the code:CullDistance built-in
decoration in a shader module must: be less than or equal to this limit.
* [[features-limits-maxCombinedClipAndCullDistances]]
pname:maxCombinedClipAndCullDistances is the maximum combined number of
clip and cull distances that can: be used in a single shader stage.
The sum of the sizes of any pair of arrays declared with the
code:ClipDistance and code:CullDistance built-in decoration used by a
single shader stage in a shader module must: be less than or equal to
this limit.
* [[features-limits-discreteQueuePriorities]]
pname:discreteQueuePriorities is the number of discrete priorities that
can: be assigned to a queue based on the value of each member of
sname:VkDeviceQueueCreateInfo::pname:pQueuePriorities.
This must: be at least 2, and levels must: be spread evenly over the
range, with at least one level at 1.0, and another at 0.0.
See <<devsandqueues-priority>>.
* [[features-limits-pointSizeRange]] pname:pointSizeRange[2] is the range
[eq]#[pname:minimum,pname:maximum]# of supported sizes for points.
Values written to variables decorated with the code:PointSize built-in
decoration are clamped to this range.
* [[features-limits-lineWidthRange]] pname:lineWidthRange[2] is the range
[eq]#[pname:minimum,pname:maximum]# of supported widths for lines.
Values specified by the pname:lineWidth member of the
sname:VkPipelineRasterizationStateCreateInfo or the pname:lineWidth
parameter to fname:vkCmdSetLineWidth are clamped to this range.
* [[features-limits-pointSizeGranularity]] pname:pointSizeGranularity is
the granularity of supported point sizes.
Not all point sizes in the range defined by pname:pointSizeRange are
supported.
This limit specifies the granularity (or increment) between successive
supported point sizes.
* [[features-limits-lineWidthGranularity]] pname:lineWidthGranularity is
the granularity of supported line widths.
Not all line widths in the range defined by pname:lineWidthRange are
supported.
This limit specifies the granularity (or increment) between successive
supported line widths.
* [[features-limits-strictLines]] pname:strictLines specifies whether
lines are rasterized according to the preferred method of rasterization.
If set to ename:VK_FALSE, lines may: be rasterized under a relaxed set
of rules.
If set to ename:VK_TRUE, lines are rasterized as per the strict
definition.
See <<primsrast-lines-basic,Basic Line Segment Rasterization>>.
* [[features-limits-standardSampleLocations]]
pname:standardSampleLocations specifies whether rasterization uses the
standard sample locations as documented in
<<primsrast-multisampling,Multisampling>>.
If set to ename:VK_TRUE, the implementation uses the documented sample
locations.
If set to ename:VK_FALSE, the implementation may: use different sample
locations.
* [[features-limits-optimalBufferCopyOffsetAlignment]]
pname:optimalBufferCopyOffsetAlignment is the optimal buffer offset
alignment in bytes for fname:vkCmdCopyBufferToImage and
fname:vkCmdCopyImageToBuffer.
The per texel alignment requirements are enforced, but applications
should: use the optimal alignment for optimal performance and power use.
* [[features-limits-optimalBufferCopyRowPitchAlignment]]
pname:optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch
alignment in bytes for fname:vkCmdCopyBufferToImage and
fname:vkCmdCopyImageToBuffer.
Row pitch is the number of bytes between texels with the same X
coordinate in adjacent rows (Y coordinates differ by one).
The per texel alignment requirements are enforced, but applications
should: use the optimal alignment for optimal performance and power use.
* [[features-limits-nonCoherentAtomSize]] pname:nonCoherentAtomSize is the
size and alignment in bytes that bounds concurrent access to
<<memory-device-hostaccess, host-mapped device memory>>.
ifdef::VK_EXT_discard_rectangles[]
* [[features-limits-maxDiscardRectangles]]
slink:VkPhysicalDeviceDiscardRectanglePropertiesEXT::pname:maxDiscardRectangles
is the maximum number of active discard rectangles.
This limit can be queried by setting the pname:pNext pointer from a
slink:VkPhysicalDeviceProperties2 object to an instance of
slink:VkPhysicalDeviceDiscardRectanglePropertiesEXT and using
fname:vkGetPhysicalDeviceProperties2 to fill out the members.
endif::VK_EXT_discard_rectangles[]
ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
* [[features-limits-pointClipping]]
slink:VkPhysicalDevicePointClippingProperties::pname:pointClippingBehavior
defines the clipping behavior of points.
This limit can be queried by setting the pname:pNext pointer from a
slink:VkPhysicalDeviceProperties2 object to an instance of
slink:VkPhysicalDevicePointClippingProperties and using
fname:vkGetPhysicalDeviceProperties2 to fill out the members.
endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
ifdef::VK_EXT_vertex_attribute_divisor[]
* [[features-limits-maxVertexAttribDivisor]]
sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor
is the maximum value of the number of instances that will repeat the
value of vertex attribute data when instanced rendering is enabled.
This limit can be queried by setting the pname:pNext pointer from a
slink:VkPhysicalDeviceProperties2 object to an instance of
slink:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT and using
fname:vkGetPhysicalDeviceProperties2 to fill out the members.
endif::VK_EXT_vertex_attribute_divisor[]
// refBody VkPhysicalDeviceLimits
1::
For all bitmasks of elink:VkSampleCountFlagBits, the sample count limits
defined above represent the minimum supported sample counts for each
image type.
Individual images may: support additional sample counts, which are
queried using flink:vkGetPhysicalDeviceImageFormatProperties as
described in <<features-supported-sample-counts, Supported Sample
Counts>>.
include::../validity/structs/VkPhysicalDeviceLimits.txt[]
--
[open,refpage='VkSampleCountFlagBits',desc='Bitmask specifying sample counts supported for an image used for storage operations',type='enums']
--
Bits which may: be set in the sample count limits returned by
slink:VkPhysicalDeviceLimits, as well as in other queries and structures
representing image sample counts, are:
include::../api/enums/VkSampleCountFlagBits.txt[]
* ename:VK_SAMPLE_COUNT_1_BIT specifies an image with one sample per
pixel.
* ename:VK_SAMPLE_COUNT_2_BIT specifies an image with 2 samples per pixel.
* ename:VK_SAMPLE_COUNT_4_BIT specifies an image with 4 samples per pixel.
* ename:VK_SAMPLE_COUNT_8_BIT specifies an image with 8 samples per pixel.
* ename:VK_SAMPLE_COUNT_16_BIT specifies an image with 16 samples per
pixel.
* ename:VK_SAMPLE_COUNT_32_BIT specifies an image with 32 samples per
pixel.
* ename:VK_SAMPLE_COUNT_64_BIT specifies an image with 64 samples per
pixel.
--
[open,refpage='VkSampleCountFlags',desc='Bitmask of VkSampleCountFlagBits',type='enums']
--
include::../api/flags/VkSampleCountFlags.txt[]
sname:VkSampleCountFlags is a bitmask type for setting a mask of zero or
more slink:VkSampleCountFlagBits.
--
ifdef::VK_KHR_push_descriptor[]
[open,refpage='VkPhysicalDevicePushDescriptorPropertiesKHR',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDevicePushDescriptorPropertiesKHR structure is defined
as:
include::../api/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[]
The members of the sname:VkPhysicalDevicePushDescriptorPropertiesKHR
structure describe the following implementation-dependent limits:
* [[features-limits-maxPushDescriptors]] pname:maxPushDescriptors is the
maximum number of descriptors that can: be used in a descriptor set
created with
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set.
include::../validity/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[]
--
endif::VK_KHR_push_descriptor[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
[open,refpage='VkPhysicalDeviceMultiviewProperties',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceMultiviewProperties structure is defined as:
include::../api/structs/VkPhysicalDeviceMultiviewProperties.txt[]
ifdef::VK_KHR_multiview[]
or the equivalent
include::../api/structs/VkPhysicalDeviceMultiviewPropertiesKHR.txt[]
endif::VK_KHR_multiview[]
The members of the sname:VkPhysicalDeviceMultiviewProperties structure
describe the following implementation-dependent limits:
* [[features-limits-maxMultiviewViewCount]] pname:maxMultiviewViewCount is
one greater than the maximum view index that can: be used in a subpass.
* [[features-limits-maxMultiviewInstanceIndex]]
pname:maxMultiviewInstanceIndex is the maximum valid value of instance
index allowed to be generated by a drawing command recorded within a
subpass of a multiview render pass instance.
include::../validity/structs/VkPhysicalDeviceMultiviewProperties.txt[]
If the sname:VkPhysicalDeviceMultiviewProperties structure is included in
the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it is filled
with the implementation-dependent limits.
--
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_EXT_discard_rectangles[]
[open,refpage='VkPhysicalDeviceDiscardRectanglePropertiesEXT',desc='Structure describing discard rectangle limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT structure is defined
as:
include::../api/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT
structure describe the following implementation-dependent limits:
* pname:maxDiscardRectangles is the maximum number of discard rectangles
that can: be specified.
include::../validity/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[]
If the sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it
is filled with the implementation-dependent limits.
--
endif::VK_EXT_discard_rectangles[]
ifdef::VK_EXT_sample_locations[]
[open,refpage='VkPhysicalDeviceSampleLocationsPropertiesEXT',desc='Structure describing sample location limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceSampleLocationsPropertiesEXT structure is defined
as:
include::../api/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceSampleLocationsPropertiesEXT
structure describe the following implementation-dependent limits:
* [[features-limits-sampleLocationSampleCounts]]
pname:sampleLocationSampleCounts is a bitmask of
elink:VkSampleCountFlagBits indicating the sample counts supporting
custom sample locations.
* [[features-limits-maxSampleLocationGridSize]]
pname:maxSampleLocationGridSize is the maximum size of the pixel grid in
which sample locations can: vary that is supported for all sample counts
in pname:sampleLocationSampleCounts.
* [[features-limits-sampleLocationCoordinateRange]]
pname:sampleLocationCoordinateRange[2] is the range of supported sample
location coordinates.
* [[features-limits-sampleLocationSubPixelBits]]
pname:sampleLocationSubPixelBits is the number of bits of subpixel
precision for sample locations.
* [[features-limits-variableSampleLocations]]
pname:variableSampleLocations specifies whether the sample locations
used by all pipelines that will be bound to a command buffer during a
subpass must: match.
If set to ename:VK_TRUE, the implementation supports variable sample
locations in a subpass.
If set to ename:VK_FALSE, then the sample locations must: stay constant
in each subpass.
include::../validity/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.txt[]
If the sname:VkPhysicalDeviceSampleLocationsPropertiesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it
is filled with the implementation-dependent limits.
--
endif::VK_EXT_sample_locations[]
ifdef::VK_EXT_external_memory_host[]
[open,refpage='VkPhysicalDeviceExternalMemoryHostPropertiesEXT',desc='Structure describing external memory host pointer limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT
structure describe the following implementation-dependent limits:
* [[features-limits-minImportedHostPointerAlignment]]
pname:minImportedHostPointerAlignment is the minimum required:
alignment, in bytes, for the base address and size of host pointers that
can: be imported to a Vulkan memory object.
include::../validity/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.txt[]
If the sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2KHR,
it is filled with the implementation-dependent limits.
--
endif::VK_EXT_external_memory_host[]
ifdef::VK_NVX_multiview_per_view_attributes[]
[open,refpage='VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX structure
is defined as:
include::../api/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.txt[]
The members of the
sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX structure
describe the following implementation-dependent limits:
* [[features-limits-perViewPositionAllComponents]]
pname:perViewPositionAllComponents is ename:VK_TRUE if the
implementation supports per-view position values that differ in
components other than the X component.
include::../validity/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.txt[]
If the sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
structure is included in the pname:pNext chain of
slink:VkPhysicalDeviceProperties2, it is filled with the
implementation-dependent limits.
--
endif::VK_NVX_multiview_per_view_attributes[]
ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
[open,refpage='VkPhysicalDevicePointClippingProperties',desc='Structure describing the point clipping behavior supported by an implementation',type='structs']
--
The sname:VkPhysicalDevicePointClippingProperties structure is defined as:
include::../api/structs/VkPhysicalDevicePointClippingProperties.txt[]
ifdef::VK_KHR_maintenance2[]
or the equivalent
include::../api/structs/VkPhysicalDevicePointClippingPropertiesKHR.txt[]
endif::VK_KHR_maintenance2[]
The members of the sname:VkPhysicalDevicePointClippingProperties structure
describe the following implementation-dependent limit:
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:pointClippingBehavior is the point clipping behavior supported by
the implementation, and is of type elink:VkPointClippingBehavior.
If the sname:VkPhysicalDevicePointClippingProperties structure is included
in the pname:pNext chain of flink:VkPhysicalDeviceProperties2, it is filled
with the implementation-dependent limits.
include::../validity/structs/VkPhysicalDevicePointClippingProperties.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
ifdef::VK_VERSION_1_1[]
[open,refpage='VkPhysicalDeviceSubgroupProperties',desc='Structure describing subgroup support for an implementation',type='structs']
--
The sname:VkPhysicalDeviceSubgroupProperties structure is defined as:
include::../api/structs/VkPhysicalDeviceSubgroupProperties.txt[]
The members of the sname:VkPhysicalDeviceSubgroupProperties structure
describe the following implementation-dependent limits:
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:subgroupSize is the number of invocations in each subgroup.
This will match any <<interfaces-builtin-variables-sgs,
code:SubgroupSize>> decorated variable used in any shader module created
on this device.
pname:subgroupSize is at least 1 if any of the physical device's queues
support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT.
* pname:supportedStages is a bitfield of elink:VkShaderStageFlagBits
describing the shader stages that subgroup operations are supported in.
pname:supportedStages will have the ename:VK_SHADER_STAGE_COMPUTE_BIT
bit set if any of the physical device's queues support
ename:VK_QUEUE_COMPUTE_BIT.
* pname:supportedOperations is a bitmask of
elink:VkSubgroupFeatureFlagBits specifying the sets of subgroup
operations supported on this device.
pname:supportedOperations will have the
ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical
device's queues support ename:VK_QUEUE_GRAPHICS_BIT or
ename:VK_QUEUE_COMPUTE_BIT.
* pname:quadOperationsInAllStages is a boolean that specifies whether
<<features-features-subgroup-quad,quad subgroup operations>> are
available in all stages, or are restricted to fragment and compute
stages.
include::../validity/structs/VkPhysicalDeviceSubgroupProperties.txt[]
If the sname:VkPhysicalDeviceSubgroupProperties structure is included in the
pname:pNext chain of slink:VkPhysicalDeviceProperties2, it is filled with
the implementation-dependent limits.
--
[open,refpage='VkSubgroupFeatureFlagBits',desc='Enum describing what subgroup operations are supported',type='enums']
--
Bits which can: be set in
slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations to
specify supported subgroup operations are:
include::../api/enums/VkSubgroupFeatureFlagBits.txt[]
* [[features-features-subgroup-basic]] ename:VK_SUBGROUP_FEATURE_BASIC_BIT
specifies the device will accept SPIR-V shader modules that contain the
code:GroupNonUniform capability.
* [[features-features-subgroup-vote]] ename:VK_SUBGROUP_FEATURE_VOTE_BIT
specifies the device will accept SPIR-V shader modules that contain the
code:GroupNonUniformVote capability.
* [[features-features-subgroup-arithmetic]]
ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT specifies the device will
accept SPIR-V shader modules that contain the
code:GroupNonUniformArithmetic capability.
* [[features-features-subgroup-ballot]]
ename:VK_SUBGROUP_FEATURE_BALLOT_BIT specifies the device will accept
SPIR-V shader modules that contain the code:GroupNonUniformBallot
capability.
* [[features-features-subgroup-shuffle]]
ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT specifies the device will accept
SPIR-V shader modules that contain the code:GroupNonUniformShuffle
capability.
* [[features-features-subgroup-shuffle-relative]]
ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT specifies the device will
accept SPIR-V shader modules that contain the
code:GroupNonUniformShuffleRelative capability.
* [[features-features-subgroup-clustered]]
ename:VK_SUBGROUP_FEATURE_CLUSTERED_BIT specifies the device will accept
SPIR-V shader modules that contain the code:GroupNonUniformClustered
capability.
* [[features-features-subgroup-quad]] ename:VK_SUBGROUP_FEATURE_QUAD_BIT
specifies the device will accept SPIR-V shader modules that contain the
code:GroupNonUniformQuad capability.
ifdef::VK_NV_shader_subgroup_partitioned[]
* [[features-features-subgroup-partitioned]]
ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV specifies the device will
accept SPIR-V shader modules that contain the
code:GroupNonUniformPartitionedNV capability.
endif::VK_NV_shader_subgroup_partitioned[]
--
[open,refpage='VkSubgroupFeatureFlags',desc='Bitmask of VkSubgroupFeatureFlagBits',type='enums']
--
include::../api/flags/VkSubgroupFeatureFlags.txt[]
sname:VkSubgroupFeatureFlags is a bitmask type for setting a mask of zero or
more slink:VkSubgroupFeatureFlagBits.
--
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_blend_operation_advanced[]
[open,refpage='VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',desc='Structure describing advanced blending limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
structure describe the following implementation-dependent limits:
* [[features-limits-advancedBlendMaxColorAttachments]]
pname:advancedBlendMaxColorAttachments is one greater than the highest
color attachment index that can: be used in a subpass, for a pipeline
that uses an <<framebuffer-blend-advanced,advanced blend operation>>.
* [[features-limits-advancedBlendIndependentBlend]]
pname:advancedBlendIndependentBlend specifies whether advanced blend
operations can: vary per-attachment.
* [[features-limits-advancedBlendNonPremultipliedSrcColor]]
pname:advancedBlendNonPremultipliedSrcColor specifies whether the source
color can: be treated as non-premultiplied.
If this is ename:VK_FALSE, then
slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:srcPremultiplied
must: be ename:VK_TRUE.
* [[features-limits-advancedBlendNonPremultipliedDstColor]]
pname:advancedBlendNonPremultipliedDstColor specifies whether the
destination color can: be treated as non-premultiplied.
If this is ename:VK_FALSE, then
slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:dstPremultiplied
must: be ename:VK_TRUE.
* [[features-limits-advancedBlendCorrelatedOverlap]]
pname:advancedBlendCorrelatedOverlap specifies whether the overlap mode
can: be treated as correlated.
If this is ename:VK_FALSE, then
slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap
must: be ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT.
* [[features-limits-advancedBlendAllOperations]]
pname:advancedBlendAllOperations specifies whether all advanced blend
operation enums are supported.
See the valid usage of slink:VkPipelineColorBlendAttachmentState.
include::../validity/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.txt[]
If the sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT structure
is included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2,
it is filled with the implementation-dependent limits.
--
endif::VK_EXT_blend_operation_advanced[]
ifdef::VK_EXT_vertex_attribute_divisor[]
[open,refpage='VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT',desc='Structure describing max value of vertex attribute divisor that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
structure describe the following implementation-dependent limits:
* [[features-limits-maxVertexAttribDivisor]] pname:maxVertexAttribDivisor
is the maximum value of the number of instances that will repeat the
value of vertex attribute data when instanced rendering is enabled.
include::../validity/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.txt[]
--
endif::VK_EXT_vertex_attribute_divisor[]
ifdef::VK_EXT_sampler_filter_minmax[]
[open,refpage='VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT',desc='Structure describing sampler filter minmax limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT
structure describe the following implementation-dependent limits:
* [[features-limits-filterMinmaxSingleComponentFormats]]
pname:filterMinmaxSingleComponentFormats is a boolean value indicating
whether a minimum set of required formats support min/max filtering.
* [[features-limits-filterMinmaxImageComponentMapping]]
pname:filterMinmaxImageComponentMapping is a boolean value indicating
whether the implementation supports non-identity component mapping of
the image when doing min/max filtering.
If the sname:VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it
is filled with the implementation-dependent limits.
If pname:filterMinmaxSingleComponentFormats is ename:VK_TRUE, the following
formats must: support the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT feature with
ename:VK_IMAGE_TILING_OPTIMAL, if they support
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
* ename:VK_FORMAT_R8_UNORM
* ename:VK_FORMAT_R8_SNORM
* ename:VK_FORMAT_R16_UNORM
* ename:VK_FORMAT_R16_SNORM
* ename:VK_FORMAT_R16_SFLOAT
* ename:VK_FORMAT_R32_SFLOAT
* ename:VK_FORMAT_D16_UNORM
* ename:VK_FORMAT_X8_D24_UNORM_PACK32
* ename:VK_FORMAT_D32_SFLOAT
* ename:VK_FORMAT_D16_UNORM_S8_UINT
* ename:VK_FORMAT_D24_UNORM_S8_UINT
* ename:VK_FORMAT_D32_SFLOAT_S8_UINT
If the format is a depth/stencil format, this bit only specifies that the
depth aspect (not the stencil aspect) of an image of this format supports
min/max filtering, and that min/max filtering of the depth aspect is
supported when depth compare is disabled in the sampler.
If pname:filterMinmaxImageComponentMapping is ename:VK_FALSE the component
mapping of the image view used with min/max filtering must: have been
created with the pname:r component set to
ename:VK_COMPONENT_SWIZZLE_IDENTITY.
Only the pname:r component of the sampled image value is defined and the
other component values are undefined:.
If pname:filterMinmaxImageComponentMapping is ename:VK_TRUE this restriction
does not apply and image component mapping works as normal.
include::../validity/structs/VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT.txt[]
--
endif::VK_EXT_sampler_filter_minmax[]
ifdef::VK_VERSION_1_1[]
[open,refpage='VkPhysicalDeviceProtectedMemoryProperties',desc='Structure describing protected memory properties that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceProtectedMemoryProperties structure is defined as:
include::../api/structs/VkPhysicalDeviceProtectedMemoryProperties.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:protectedNoFault specifies whether the undefined: behavior may:
include process termination or device loss.
If pname:protectedNoFault is ename:VK_FALSE, undefined: behavior may:
include process termination or device loss.
If pname:protectedNoFault is ename:VK_TRUE, undefined: behavior will not
include process termination or device loss.
If the sname:VkPhysicalDeviceProtectedMemoryProperties structure is included
in the pname:pNext chain of flink:VkPhysicalDeviceProperties2, it is filled
with a value indicating the implementation-dependent behavior.
include::../validity/structs/VkPhysicalDeviceProtectedMemoryProperties.txt[]
--
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
[open,refpage='VkPhysicalDeviceMaintenance3Properties',desc='Structure describing descriptor set properties',type='structs']
--
The sname:VkPhysicalDeviceMaintenance3Properties structure is defined as:
include::../api/structs/VkPhysicalDeviceMaintenance3Properties.txt[]
ifdef::VK_KHR_maintenance3[]
or the equivalent
include::../api/structs/VkPhysicalDeviceMaintenance3PropertiesKHR.txt[]
endif::VK_KHR_maintenance3[]
The members of the sname:VkPhysicalDeviceMaintenance3Properties structure
describe the following implementation-dependent limits:
* [[features-limits-maxPerSetDescriptors]] pname:maxPerSetDescriptors is a
maximum number of descriptors (summed over all descriptor types) in a
single descriptor set that is guaranteed to satisfy any
implementation-dependent constraints on the size of a descriptor set
itself.
Applications can: query whether a descriptor set that goes beyond this
limit is supported using flink:vkGetDescriptorSetLayoutSupport.
* [[features-limits-maxMemoryAllocationSize]]
pname:maxMemoryAllocationSize is the maximum size of a memory allocation
that can: be created, even if there is more space available in the heap.
If the sname:VkPhysicalDeviceMaintenance3Properties structure is included in
the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it is filled
with the implementation-dependent limits.
include::../validity/structs/VkPhysicalDeviceMaintenance3Properties.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
ifdef::VK_NV_mesh_shader[]
[open,refpage='VkPhysicalDeviceMeshShaderPropertiesNV',desc='Structure describing mesh shading properties',type='structs']
--
The sname:VkPhysicalDeviceMeshShaderPropertiesNV structure is defined as:
include::../api/structs/VkPhysicalDeviceMeshShaderPropertiesNV.txt[]
The members of the sname:VkPhysicalDeviceMeshShaderPropertiesNV structure
describe the following implementation-dependent limits:
* pname:maxDrawMeshTasksCount is the maximum number of local workgroups
that can: be launched by a single draw mesh tasks command.
See <<drawing-mesh-shading>>.
* pname:maxTaskWorkGroupInvocations is the maximum total number of task
shader invocations in a single local workgroup.
The product of the X, Y, and Z sizes as specified by the code:LocalSize
execution mode in shader modules and by the object decorated by the
code:WorkgroupSize decoration must: be less than or equal to this limit.
* pname:maxTaskWorkGroupSize[3] is the maximum size of a local task
workgroup.
These three values represent the maximum local workgroup size in the X,
Y, and Z dimensions, respectively.
The pname:x, pname:y, and pname:z sizes specified by the code:LocalSize
execution mode and by the object decorated by the code:WorkgroupSize
decoration in shader modules must: be less than or equal to the
corresponding limit.
* pname:maxTaskTotalMemorySize is the maximum number of bytes that the
task shader can use in total for shared and output memory combined.
* pname:maxTaskOutputCount is the maximum number of output tasks a single
task shader workgroup can emit.
* pname:maxMeshWorkGroupInvocations is the maximum total number of mesh
shader invocations in a single local workgroup.
The product of the X, Y, and Z sizes as specified by the code:LocalSize
execution mode in shader modules and by the object decorated by the
code:WorkgroupSize decoration must: be less than or equal to this limit.
* pname:maxMeshWorkGroupSize[3] is the maximum size of a local mesh
workgroup.
These three values represent the maximum local workgroup size in the X,
Y, and Z dimensions, respectively.
The pname:x, pname:y, and pname:z sizes specified by the code:LocalSize
execution mode and by the object decorated by the code:WorkgroupSize
decoration in shader modules must: be less than or equal to the
corresponding limit.
* pname:maxMeshTotalMemorySize is the maximum number of bytes that the
mesh shader can use in total for shared and output memory combined.
* pname:maxMeshOutputVertices is the maximum number of vertices a mesh
shader output can store.
* pname:maxMeshOutputPrimitives is the maximum number of primitives a mesh
shader output can store.
* pname:maxMeshMultiviewViewCount is the maximum number of multi-view
views a mesh shader can use.
* pname:meshOutputPerVertexGranularity is the granularity with which mesh
vertex outputs are allocated.
The value can be used to compute the memory size used by the mesh
shader, which must be less than or equal to
pname:maxMeshTotalMemorySize.
* pname:meshOutputPerPrimitiveGranularity is the granularity with which
mesh outputs qualified as per-primitive are allocated.
The value can be used to compute the memory size used by the mesh
shader, which must be less than or equal to
pname:maxMeshTotalMemorySize.
If the sname:VkPhysicalDeviceMeshShaderPropertiesNV structure is included in
the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it is filled
with the implementation-dependent limits.
include::../validity/structs/VkPhysicalDeviceMeshShaderPropertiesNV.txt[]
--
endif::VK_NV_mesh_shader[]
ifdef::VK_EXT_descriptor_indexing[]
[open,refpage='VkPhysicalDeviceDescriptorIndexingPropertiesEXT',desc='Structure describing descriptor indexing properties that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT
structure describe the following implementation-dependent limits:
* [[features-limits-maxUpdateAfterBindDescriptorsInAllPools]]
pname:maxUpdateAfterBindDescriptorsInAllPools is the maximum number of
descriptors (summed over all descriptor types) that can: be created
across all pools that are created with the
ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT bit set.
Pool creation may: fail when this limit is exceeded, or when the space
this limit represents is unable to satisfy a pool creation due to
fragmentation.
* [[features-limits-shaderUniformBufferArrayNonUniformIndexingNative]]
pname:shaderUniformBufferArrayNonUniformIndexingNative is a boolean
value indicating whether uniform buffer descriptors natively support
nonuniform indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of uniform buffers may:
execute multiple times in order to access all the descriptors.
* [[features-limits-shaderSampledImageArrayNonUniformIndexingNative]]
pname:shaderSampledImageArrayNonUniformIndexingNative is a boolean value
indicating whether sampler and image descriptors natively support
nonuniform indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of samplers or images
may: execute multiple times in order to access all the descriptors.
* [[features-limits-shaderStorageBufferArrayNonUniformIndexingNative]]
pname:shaderStorageBufferArrayNonUniformIndexingNative is a boolean
value indicating whether storage buffer descriptors natively support
nonuniform indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of storage buffers may:
execute multiple times in order to access all the descriptors.
* [[features-limits-shaderStorageImageArrayNonUniformIndexingNative]]
pname:shaderStorageImageArrayNonUniformIndexingNative is a boolean value
indicating whether storage image descriptors natively support nonuniform
indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of storage images may:
execute multiple times in order to access all the descriptors.
* [[features-limits-shaderInputAttachmentArrayNonUniformIndexingNative]]
pname:shaderInputAttachmentArrayNonUniformIndexingNative is a boolean
value indicating whether input attachment descriptors natively support
nonuniform indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of input attachments may:
execute multiple times in order to access all the descriptors.
* [[features-limits-robustBufferAccessUpdateAfterBind]]
pname:robustBufferAccessUpdateAfterBind is a boolean value indicating
whether <<features-features-robustBufferAccess,
pname:robustBufferAccess>> can: be enabled in a device simultaneously
with pname:descriptorBindingUniformBufferUpdateAfterBind,
pname:descriptorBindingStorageBufferUpdateAfterBind,
pname:descriptorBindingUniformTexelBufferUpdateAfterBind, and/or
pname:descriptorBindingStorageTexelBufferUpdateAfterBind.
If this is ename:VK_FALSE, then either pname:robustBufferAccess must: be
disabled or all of these update-after-bind features must: be disabled.
* [[features-limits-quadDivergentImplicitLod]]
pname:quadDivergentImplicitLod is a boolean value indicating whether
implicit level of detail calculations for image operations have
well-defined results when the image and/or sampler objects used for the
instruction are not uniform within a quad.
See <<textures-derivative-image-operations,Derivative Image
Operations>>.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindSamplers]]
pname:maxPerStageDescriptorUpdateAfterBindSamplers is similar to
pname:maxPerStageDescriptorSamplers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers]]
pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers is similar to
pname:maxPerStageDescriptorUniformBuffers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers]]
pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers is similar to
pname:maxPerStageDescriptorStorageBuffers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindSampledImages]]
pname:maxPerStageDescriptorUpdateAfterBindSampledImages is similar to
pname:maxPerStageDescriptorSampledImages but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindStorageImages]]
pname:maxPerStageDescriptorUpdateAfterBindStorageImages is similar to
pname:maxPerStageDescriptorStorageImages but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindInputAttachments]]
pname:maxPerStageDescriptorUpdateAfterBindInputAttachments is similar to
pname:maxPerStageDescriptorInputAttachments but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageUpdateAfterBindResources]]
pname:maxPerStageUpdateAfterBindResources is similar to
pname:maxPerStageResources but counts descriptors from descriptor sets
created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindSamplers]]
pname:maxDescriptorSetUpdateAfterBindSamplers is similar to
pname:maxDescriptorSetSamplers but counts descriptors from descriptor
sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindUniformBuffers]]
pname:maxDescriptorSetUpdateAfterBindUniformBuffers is similar to
pname:maxDescriptorSetUniformBuffers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic]]
pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic is similar to
pname:maxDescriptorSetUniformBuffersDynamic but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindStorageBuffers]]
pname:maxDescriptorSetUpdateAfterBindStorageBuffers is similar to
pname:maxDescriptorSetStorageBuffers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic]]
pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic is similar to
pname:maxDescriptorSetStorageBuffersDynamic but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindSampledImages]]
pname:maxDescriptorSetUpdateAfterBindSampledImages is similar to
pname:maxDescriptorSetSampledImages but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindStorageImages]]
pname:maxDescriptorSetUpdateAfterBindStorageImages is similar to
pname:maxDescriptorSetStorageImages but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindInputAttachments]]
pname:maxDescriptorSetUpdateAfterBindInputAttachments is similar to
pname:maxDescriptorSetInputAttachments but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
If the sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2KHR,
it is filled with the implementation-dependent limits.
include::../validity/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.txt[]
--
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_inline_uniform_block[]
[open,refpage='VkPhysicalDeviceInlineUniformBlockPropertiesEXT',desc='Structure describing inline uniform block properties that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT
structure describe the following implementation-dependent limits:
* [[features-limits-maxInlineUniformBlockSize]]
pname:maxInlineUniformBlockSize is the maximum size in bytes of an
<<descriptorsets-inlineuniformblock, inline uniform block>> binding.
* [[features-limits-maxPerStageDescriptorInlineUniformBlocks]]
pname:maxPerStageDescriptorInlineUniformBlock is the maximum number of
inline uniform block bindings that can: be accessible to a single shader
stage in a pipeline layout.
Descriptor bindings with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptor bindings in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
* [[features-limits-maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks]]
pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
ifndef::VK_EXT_descriptor_indexing[]
equals pname:maxPerStageDescriptorInlineUniformBlocks and is reserved
for future use.
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_descriptor_indexing[]
is similar to pname:maxPerStageDescriptorInlineUniformBlocks but counts
descriptor bindings from descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
endif::VK_EXT_descriptor_indexing[]
* [[features-limits-maxDescriptorSetInlineUniformBlocks]]
pname:maxDescriptorSetInlineUniformBlocks is the maximum number of
inline uniform block bindings that can: be included in descriptor
bindings in a pipeline layout across all pipeline shader stages and
descriptor set numbers.
Descriptor bindings with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptor bindings in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
* [[features-limits-maxDescriptorSetUpdateAfterBindInlineUniformBlocks]]
pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
ifndef::VK_EXT_descriptor_indexing[]
equals pname:maxDescriptorSetInlineUniformBlocks and is reserved for
future use.
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_descriptor_indexing[]
is similar to pname:maxDescriptorSetInlineUniformBlocks but counts
descriptor bindings from descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
endif::VK_EXT_descriptor_indexing[]
If the sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2KHR,
it is filled with the implementation-dependent limits.
include::../validity/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[]
--
endif::VK_EXT_inline_uniform_block[]
ifdef::VK_EXT_conservative_rasterization[]
[open,refpage='VkPhysicalDeviceConservativeRasterizationPropertiesEXT',desc='Structure describing conservative raster properties that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT structure
is defined as:
include::../api/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.txt[]
The members of the
sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT structure
describe the following implementation-dependent limits:
* [[features-limits-primitiveOverestimationSize]]
pname:primitiveOverestimationSize is the size in pixels the generating
primitive is increased at each of its edges during conservative
rasterization overestimation mode.
Even with a size of 0.0, conservative rasterization overestimation rules
still apply and if any part of the pixel rectangle is covered by the
generating primitive, fragments are generated for the entire pixel.
However implementations may: make the pixel coverage area even more
conservative by increasing the size of the generating primitive.
* [[features-limits-maxExtraPrimitiveOverestimationSize]]
pname:maxExtraPrimitiveOverestimationSize is the maximum size in pixels
of extra overestimation the implementation supports in the pipeline
state.
A value of 0.0 means the implementation does not support any additional
overestimation of the generating primitive during conservative
rasterization.
A value above 0.0 allows the application to further increase the size of
the generating primitive during conservative rasterization
overestimation.
* [[features-limits-extraPrimitiveOverestimationSizeGranularity]]
pname:extraPrimitiveOverestimationSizeGranularity is the granularity of
extra overestimation that can be specified in the pipeline state between
0.0 and pname:maxExtraPrimitiveOverestimationSize inclusive.
A value of 0.0 means the implementation can use the smallest
representable non-zero value in the screen space pixel fixed-point grid.
* [[features-limits-primitiveUnderestimation]]
pname:primitiveUnderestimation is true if the implementation supports
the ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT
conservative rasterization mode in addition to
ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
Otherwise the implementation only supports
ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
* [[features-limits-conservativePointAndLineRasterization]]
pname:conservativePointAndLineRasterization is true if the
implementation supports conservative rasterization of point and line
primitives as well as triangle primitives.
Otherwise the implementation only supports triangle primitives.
* [[features-limits-degenerateTrianglesRasterized]]
pname:degenerateTrianglesRasterized is false if the implementation culls
primitives generated from triangles that become zero area after they are
quantized to the fixed-point rasterization pixel grid.
pname:degenerateTrianglesRasterized is true if these primitives are not
culled and the provoking vertex attributes and depth value are used for
the fragments.
The primitive area calculation is done on the primitive generated from
the clipped triangle if applicable.
Zero area primitives are backfacing and the application can: enable
backface culling if desired.
* [[features-limits-degenerateLinesRasterized]]
pname:degenerateLinesRasterized is false if the implementation culls
lines that become zero length after they are quantized to the
fixed-point rasterization pixel grid.
pname:degenerateLinesRasterized is true if zero length lines are not
culled and the provoking vertex attributes and depth value are used for
the fragments.
* [[features-limits-fullyCoveredFragmentShaderInputVariable]]
pname:fullyCoveredFragmentShaderInputVariable is true if the
implementation supports the SPIR-V builtin fragment shader input
variable FullyCoveredEXT which specifies that conservative rasterization
is enabled and the fragment pixel square is fully covered by the
generating primitive.
* [[features-limits-conservativeRasterizationPostDepthCoverage]]
ifdef::VK_EXT_post_depth_coverage[]
pname:conservativeRasterizationPostDepthCoverage is true if the
implementation supports conservative rasterization with the
<<shaders-fragment-earlytest-postdepthcoverage,code:PostDepthCoverage>>
execution mode enabled.
When supported the code:SampleMask built-in input variable will reflect
the coverage after the early per-fragment depth and stencil tests are
applied even when conservative rasterization is enabled.
Otherwise
<<shaders-fragment-earlytest-postdepthcoverage,code:PostDepthCoverage>>
execution mode must: not be used when conservative rasterization is
enabled.
endif::VK_EXT_post_depth_coverage[]
ifndef::VK_EXT_post_depth_coverage[]
pname:conservativeRasterizationPostDepthCoverage must: be false.
endif::VK_EXT_post_depth_coverage[]
include::../validity/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.txt[]
If the sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT
structure is included in the pname:pNext chain of
slink:VkPhysicalDeviceProperties2KHR, it is filled with the
implementation-dependent limits and properties.
--
endif::VK_EXT_conservative_rasterization[]
ifdef::VK_AMD_shader_core_properties[]
[open,refpage='VkPhysicalDeviceShaderCorePropertiesAMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is defined as:
include::../api/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[]
The members of the sname:VkPhysicalDeviceShaderCorePropertiesAMD structure
describe the following implementation-dependent limits:
* [[features-limits-shaderEngineCount]] pname:shaderEngineCount is an
unsigned integer value indicating the number of shader engines found
inside the shader core of the physical device.
* [[features-limits-shaderArraysPerEngineCount]]
pname:shaderArraysPerEngineCount is an unsigned integer value indicating
the number of shader arrays inside a shader engine.
Each shader array has its own scan converter, set of compute units, and
a render back end (color and depth buffers).
Shader arrays within a shader engine share shader processor input (wave
launcher) and shader export (export buffer) units.
Currently, a shader engine can have one or two shader arrays.
* [[features-limits-computeUnitsPerShaderArray]]
pname:computeUnitsPerShaderArray is an unsigned integer value indicating
the number of compute units within a shader array.
A compute unit houses a set of SIMDs along with a sequencer module and a
local data store.
* [[features-limits-simdPerComputeUnit]] pname:simdPerComputeUnit is an
unsigned integer value indicating the number of SIMDs inside a compute
unit.
Each SIMD processes a single instruction at a time.
* [[features-limits-wavefrontSize]] pname:wavefrontSize is an unsigned
integer value indicating the number of channels (or threads) in a
wavefront.
* [[features-limits-sgprsPerSimd]] pname:sgprsPerSimd is an unsigned
integer value indicating the number of physical Scalar General Purpose
Registers (SGPRs) per SIMD.
* [[features-limits-minSgprAllocation]] pname:minSgprAllocation is an
unsigned integer value indicating the minimum number of SGPRs allocated
for a wave.
* [[features-limits-maxSgprAllocation]] pname:maxSgprAllocation is an
unsigned integer value indicating the maximum number of SGPRs allocated
for a wave.
* [[features-limits-sgprAllocationGranularity]]
pname:sgprAllocationGranularity is an unsigned integer value indicating
the granularity of SGPR allocation for a wave.
* [[features-limits-vgprsPerSimd]] pname:vgprsPerSimd is an unsigned
integer value indicating the number of physical Vector General Purpose
Registers (VGPRs) per SIMD.
* [[features-limits-minVgprAllocation]] pname:minVgprAllocation is an
unsigned integer value indicating the minimum number of VGPRs allocated
for a wave.
* [[features-limits-maxVgprAllocation]] pname:maxVgprAllocation is an
unsigned integer value indicating the maximum number of VGPRs allocated
for a wave.
* [[features-limits-vgprAllocationGranularity]]
pname:vgprAllocationGranularity is an unsigned integer value indicating
the granularity of VGPR allocation for a wave.
include::../validity/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[]
If the sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is included
in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it is filled
with the implementation-dependent limits.
--
endif::VK_AMD_shader_core_properties[]
ifdef::VK_NV_shading_rate_image[]
[open,refpage='VkPhysicalDeviceShadingRateImagePropertiesNV',desc='Structure describing shading rate image limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceShadingRateImagePropertiesNV structure is defined
as:
include::../api/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.txt[]
The members of the sname:VkPhysicalDeviceShadingRateImagePropertiesNV
structure describe the following implementation-dependent properties related
to the <<primsrast-shading-rate-image, shading rate image>> feature:
* [[features-limits-shading-rate-texel-size]] pname:shadingRateTexelSize
indicates the width and height of the portion of the framebuffer
corresponding to each texel in the shading rate image.
* [[features-limits-shading-rate-palette-size]]
pname:shadingRatePaletteSize indicates the maximum number of palette
entries supported for the shading rate image.
* [[features-limits-shading-rate-max-coarse-samples]]
pname:shadingRateMaxCoarseSamples specifies the maximum number of
coverage samples supported in a single fragment.
If the product of the fragment size derived from the base shading rate
and the number of coverage samples per pixel exceeds this limit, the
final shading rate will be adjusted so that its product does not exceed
the limit.
include::../validity/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.txt[]
If the sname:VkPhysicalDeviceShadingRateImagePropertiesNV structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it
is filled with the implementation-dependent limits.
--
endif::VK_NV_shading_rate_image[]
ifdef::VK_EXT_transform_feedback[]
[open,refpage='VkPhysicalDeviceTransformFeedbackPropertiesEXT',desc='Structure describing transform feedback properties that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT
structure describe the following implementation-dependent limits:
* [[features-limits-maxTransformFeedbackStreams]]
pname:maxTransformFeedbackStreams is the maximum number of vertex
streams that can be output from geometry shaders declared with the
code:GeometryStreams capability.
If the implementation does not support
sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
then pname:maxTransformFeedbackStreams must: be set to `1`.
* [[features-limits-maxTransformFeedbackBuffers]]
pname:maxTransformFeedbackBuffers is the maximum number of transform
feedback buffers that can be bound for capturing shader outputs from the
last vertex processing stage.
* [[features-limits-maxTransformFeedbackBufferSize]]
pname:maxTransformFeedbackBufferSize is the maximum size that can be
specified when binding a buffer for transform feedback in
flink:vkCmdBindTransformFeedbackBuffersEXT.
* [[features-limits-maxTransformFeedbackStreamDataSize]]
pname:maxTransformFeedbackStreamDataSize is the maximum amount of data
in bytes for each vertex that captured to one or more transform feedback
buffers associated with a specific vertex stream.
* [[features-limits-maxTransformFeedbackBufferDataSize]]
pname:maxTransformFeedbackBufferDataSize is the maximum amount of data
in bytes for each vertex that can be captured to a specific transform
feedback buffer.
* [[features-limits-maxTransformFeedbackBufferDataStride]]
pname:maxTransformFeedbackBufferDataStride is the maximum stride between
each capture of vertex data to the buffer.
* [[features-limits-transformFeedbackQueries]]
pname:transformFeedbackQueries is true if the implementation supports
the ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT query type.
pname:transformFeedbackQueries is false if queries of this type cannot:
be created.
* [[features-limits-transformFeedbackStreamsLinesTriangles]]
pname:transformFeedbackStreamsLinesTriangles is true if the
implementation supports the geometry shader code:OpExecutionMode of
code:OutputLineStrip and code:OutputTriangleStrip in addition to
code:OutputPoints when more than one vertex stream is output.
If pname:transformFeedbackStreamsLinesTriangles is false the
implementation only supports an code:OpExecutionMode of
code:OutputPoints when more than one vertex stream is output from the
geometry shader.
* [[features-limits-transformFeedbackRasterizationStreamSelect]]
pname:transformFeedbackRasterizationStreamSelect is true if the
implementation supports the code:GeometryStreams SPIR-V capability and
the application can use
slink:VkPipelineRasterizationStateStreamCreateInfoEXT to modify which
vertex stream output is used for rasterization.
Otherwise vertex stream `0` must: always be used for rasterization.
* [[features-limits-transformFeedbackDraw]] pname:transformFeedbackDraw is
true if the implementation supports the
flink:vkCmdDrawIndirectByteCountEXT function otherwise the function
must: not be called.
include::../validity/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.txt[]
If the sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2KHR,
it is filled with the implementation-dependent limits and properties.
--
endif::VK_EXT_transform_feedback[]
[[features-limits-minmax]]
=== Limit Requirements
The following table specifies the required: minimum/maximum for all Vulkan
graphics implementations.
Where a limit corresponds to a fine-grained device feature which is
optional:, the feature name is listed with two required: limits, one when
the feature is supported and one when it is not supported.
If an implementation supports a feature, the limits reported are the same
whether or not the feature is enabled.
[[features-limits-types]]
.Required Limit Types
[width="100%",cols="<20%,<50%,<30%",options="header"]
|====
| Type | Limit | Feature
| code:uint32_t | pname:maxImageDimension1D | -
| code:uint32_t | pname:maxImageDimension2D | -
| code:uint32_t | pname:maxImageDimension3D | -
| code:uint32_t | pname:maxImageDimensionCube | -
| code:uint32_t | pname:maxImageArrayLayers | -
| code:uint32_t | pname:maxTexelBufferElements | -
| code:uint32_t | pname:maxUniformBufferRange | -
| code:uint32_t | pname:maxStorageBufferRange | -
| code:uint32_t | pname:maxPushConstantsSize | -
| code:uint32_t | pname:maxMemoryAllocationCount | -
| code:uint32_t | pname:maxSamplerAllocationCount | -
| basetype:VkDeviceSize | pname:bufferImageGranularity | -
| basetype:VkDeviceSize | pname:sparseAddressSpaceSize | sparseBinding
| code:uint32_t | pname:maxBoundDescriptorSets | -
| code:uint32_t | pname:maxPerStageDescriptorSamplers | -
| code:uint32_t | pname:maxPerStageDescriptorUniformBuffers | -
| code:uint32_t | pname:maxPerStageDescriptorStorageBuffers | -
| code:uint32_t | pname:maxPerStageDescriptorSampledImages | -
| code:uint32_t | pname:maxPerStageDescriptorStorageImages | -
| code:uint32_t | pname:maxPerStageDescriptorInputAttachments| -
| code:uint32_t | pname:maxPerStageResources | -
| code:uint32_t | pname:maxDescriptorSetSamplers | -
| code:uint32_t | pname:maxDescriptorSetUniformBuffers | -
| code:uint32_t | pname:maxDescriptorSetUniformBuffersDynamic| -
| code:uint32_t | pname:maxDescriptorSetStorageBuffers | -
| code:uint32_t | pname:maxDescriptorSetStorageBuffersDynamic| -
| code:uint32_t | pname:maxDescriptorSetSampledImages | -
| code:uint32_t | pname:maxDescriptorSetStorageImages | -
| code:uint32_t | pname:maxDescriptorSetInputAttachments | -
| code:uint32_t | pname:maxVertexInputAttributes | -
| code:uint32_t | pname:maxVertexInputBindings | -
| code:uint32_t | pname:maxVertexInputAttributeOffset | -
| code:uint32_t | pname:maxVertexInputBindingStride | -
| code:uint32_t | pname:maxVertexOutputComponents | -
| code:uint32_t | pname:maxTessellationGenerationLevel | pname:tessellationShader
| code:uint32_t | pname:maxTessellationPatchSize | pname:tessellationShader
| code:uint32_t | pname:maxTessellationControlPerVertexInputComponents | pname:tessellationShader
| code:uint32_t | pname:maxTessellationControlPerVertexOutputComponents | pname:tessellationShader
| code:uint32_t | pname:maxTessellationControlPerPatchOutputComponents | pname:tessellationShader
| code:uint32_t | pname:maxTessellationControlTotalOutputComponents | pname:tessellationShader
| code:uint32_t | pname:maxTessellationEvaluationInputComponents | pname:tessellationShader
| code:uint32_t | pname:maxTessellationEvaluationOutputComponents | pname:tessellationShader
| code:uint32_t | pname:maxGeometryShaderInvocations | pname:geometryShader
| code:uint32_t | pname:maxGeometryInputComponents | pname:geometryShader
| code:uint32_t | pname:maxGeometryOutputComponents | pname:geometryShader
| code:uint32_t | pname:maxGeometryOutputVertices | pname:geometryShader
| code:uint32_t | pname:maxGeometryTotalOutputComponents | pname:geometryShader
| code:uint32_t | pname:maxFragmentInputComponents | -
| code:uint32_t | pname:maxFragmentOutputAttachments | -
| code:uint32_t | pname:maxFragmentDualSrcAttachments | pname:dualSrcBlend
| code:uint32_t | pname:maxFragmentCombinedOutputResources | -
| code:uint32_t | pname:maxComputeSharedMemorySize | -
| 3 {times} code:uint32_t | pname:maxComputeWorkGroupCount | -
| code:uint32_t | pname:maxComputeWorkGroupInvocations | -
| 3 {times} code:uint32_t | pname:maxComputeWorkGroupSize | -
| code:uint32_t | pname:subPixelPrecisionBits | -
| code:uint32_t | pname:subTexelPrecisionBits | -
| code:uint32_t | pname:mipmapPrecisionBits | -
| code:uint32_t | pname:maxDrawIndexedIndexValue | pname:fullDrawIndexUint32
| code:uint32_t | pname:maxDrawIndirectCount | pname:multiDrawIndirect
| code:float | pname:maxSamplerLodBias | -
| code:float | pname:maxSamplerAnisotropy | pname:samplerAnisotropy
| code:uint32_t | pname:maxViewports | pname:multiViewport
| 2 {times} code:uint32_t | pname:maxViewportDimensions | -
| 2 {times} code:float | pname:viewportBoundsRange | -
| code:uint32_t | pname:viewportSubPixelBits | -
| code:size_t | pname:minMemoryMapAlignment | -
| basetype:VkDeviceSize | pname:minTexelBufferOffsetAlignment | -
| basetype:VkDeviceSize | pname:minUniformBufferOffsetAlignment | -
| basetype:VkDeviceSize | pname:minStorageBufferOffsetAlignment | -
| code:int32_t | pname:minTexelOffset | -
| code:uint32_t | pname:maxTexelOffset | -
| code:int32_t | pname:minTexelGatherOffset | pname:shaderImageGatherExtended
| code:uint32_t | pname:maxTexelGatherOffset | pname:shaderImageGatherExtended
| code:float | pname:minInterpolationOffset | pname:sampleRateShading
| code:float | pname:maxInterpolationOffset | pname:sampleRateShading
| code:uint32_t | pname:subPixelInterpolationOffsetBits | pname:sampleRateShading
| code:uint32_t | pname:maxFramebufferWidth | -
| code:uint32_t | pname:maxFramebufferHeight | -
| code:uint32_t | pname:maxFramebufferLayers | -
| elink:VkSampleCountFlags | pname:framebufferColorSampleCounts | -
| elink:VkSampleCountFlags | pname:framebufferDepthSampleCounts | -
| elink:VkSampleCountFlags | pname:framebufferStencilSampleCounts | -
| elink:VkSampleCountFlags | pname:framebufferNoAttachmentsSampleCounts | -
| code:uint32_t | pname:maxColorAttachments | -
| elink:VkSampleCountFlags | pname:sampledImageColorSampleCounts | -
| elink:VkSampleCountFlags | pname:sampledImageIntegerSampleCounts | -
| elink:VkSampleCountFlags | pname:sampledImageDepthSampleCounts | -
| elink:VkSampleCountFlags | pname:sampledImageStencilSampleCounts | -
| elink:VkSampleCountFlags | pname:storageImageSampleCounts | pname:shaderStorageImageMultisample
| code:uint32_t | pname:maxSampleMaskWords | -
| basetype:VkBool32 | pname:timestampComputeAndGraphics | -
| code:float | pname:timestampPeriod | -
| code:uint32_t | pname:maxClipDistances | pname:shaderClipDistance
| code:uint32_t | pname:maxCullDistances | pname:shaderCullDistance
| code:uint32_t | pname:maxCombinedClipAndCullDistances | pname:shaderCullDistance
| code:uint32_t | pname:discreteQueuePriorities | -
| 2 {times} code:float | pname:pointSizeRange | pname:largePoints
| 2 {times} code:float | pname:lineWidthRange | pname:wideLines
| code:float | pname:pointSizeGranularity | pname:largePoints
| code:float | pname:lineWidthGranularity | pname:wideLines
| basetype:VkBool32 | pname:strictLines | -
| basetype:VkBool32 | pname:standardSampleLocations | -
| basetype:VkDeviceSize | pname:optimalBufferCopyOffsetAlignment | -
| basetype:VkDeviceSize | pname:optimalBufferCopyRowPitchAlignment | -
| basetype:VkDeviceSize | pname:nonCoherentAtomSize | -
ifdef::VK_EXT_discard_rectangles[]
| code:uint32_t | pname:maxDiscardRectangles | `<<VK_EXT_discard_rectangles>>`
endif::VK_EXT_discard_rectangles[]
ifdef::VK_EXT_sampler_filter_minmax[]
| basetype:VkBool32 | pname:filterMinmaxSingleComponentFormats | `<<VK_EXT_sampler_filter_minmax>>`
| basetype:VkBool32 | pname:filterMinmaxImageComponentMapping | `<<VK_EXT_sampler_filter_minmax>>`
endif::VK_EXT_sampler_filter_minmax[]
ifdef::VK_EXT_conservative_rasterization[]
| basetype:float | pname:primitiveOverestimationSize | `<<VK_EXT_conservative_rasterization>>`
| basetype:VkBool32 | pname:maxExtraPrimitiveOverestimationSize | `<<VK_EXT_conservative_rasterization>>`
| basetype:float | pname:extraPrimitiveOverestimationSizeGranularity | `<<VK_EXT_conservative_rasterization>>`
| basetype:VkBool32 | pname:degenerateTriangleRasterized | `<<VK_EXT_conservative_rasterization>>`
| basetype:float | pname:degenerateLinesRasterized | `<<VK_EXT_conservative_rasterization>>`
| basetype:VkBool32 | pname:fullyCoveredFragmentShaderInputVariable | `<<VK_EXT_conservative_rasterization>>`
| basetype:VkBool32 | pname:conservativeRasterizationPostDepthCoverage | `<<VK_EXT_conservative_rasterization>>`
endif::VK_EXT_conservative_rasterization[]
ifdef::VK_EXT_vertex_attribute_divisor[]
| code:uint32_t | pname:maxVertexAttribDivisor | `<<VK_EXT_vertex_attribute_divisor>>`
endif::VK_EXT_vertex_attribute_divisor[]
ifdef::VK_NV_mesh_shader[]
| code:uint32_t | pname:maxDrawMeshTasksCount | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxTaskWorkGroupInvocations | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxTaskWorkGroupSize | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxTaskTotalMemorySize | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxTaskOutputCount | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxMeshWorkGroupInvocations | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxMeshWorkGroupSize | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxMeshTotalMemorySize | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxMeshOutputVertices | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxMeshOutputPrimitives | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:maxMeshMultiviewViewCount | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:meshOutputPerVertexGranularity | `<<VK_NV_mesh_shader>>`
| code:uint32_t | pname:meshOutputPerPrimitiveGranularity | `<<VK_NV_mesh_shader>>`
endif::VK_NV_mesh_shader[]
ifdef::VK_EXT_transform_feedback[]
| code:uint32_t | pname:maxTransformFeedbackStreams | `<<VK_EXT_transform_feedback>>`
| code:uint32_t | pname:maxTransformFeedbackBuffers | `<<VK_EXT_transform_feedback>>`
| basetype:VkDeviceSize | pname:maxTransformFeedbackBufferSize | `<<VK_EXT_transform_feedback>>`
| code:uint32_t | pname:maxTransformFeedbackStreamDataSize | `<<VK_EXT_transform_feedback>>`
| code:uint32_t | pname:maxTransformFeedbackBufferDataSize | `<<VK_EXT_transform_feedback>>`
| code:uint32_t | pname:maxTransformFeedbackBufferDataStride | `<<VK_EXT_transform_feedback>>`
| code:VkBool32 | pname:transformFeedbackQueries | `<<VK_EXT_transform_feedback>>`
| code:VkBool32 | pname:transformFeedbackStreamsLinesTriangles | `<<VK_EXT_transform_feedback>>`
| code:VkBool32 | pname:transformFeedbackRasterizationStreamSelect | `<<VK_EXT_transform_feedback>>`
| code:VkBool32 | pname:transformFeedbackDraw | `<<VK_EXT_transform_feedback>>`
endif::VK_EXT_transform_feedback[]
|====
[[features-limits-required]]
.Required Limits
[width="100%",cols="<35,<9,<14,<11",options="header"]
|====
| Limit | Unsupported Limit | Supported Limit | Limit Type^1^
| pname:maxImageDimension1D | - | 4096 | min
| pname:maxImageDimension2D | - | 4096 | min
| pname:maxImageDimension3D | - | 256 | min
| pname:maxImageDimensionCube | - | 4096 | min
| pname:maxImageArrayLayers | - | 256 | min
| pname:maxTexelBufferElements | - | 65536 | min
| pname:maxUniformBufferRange | - | 16384 | min
| pname:maxStorageBufferRange | - | 2^27^ | min
| pname:maxPushConstantsSize | - | 128 | min
| pname:maxMemoryAllocationCount | - | 4096 | min
| pname:maxSamplerAllocationCount | - | 4000 | min
| pname:bufferImageGranularity | - | 131072 | max
| pname:sparseAddressSpaceSize | 0 | 2^31^ | min
| pname:maxBoundDescriptorSets | - | 4 | min
| pname:maxPerStageDescriptorSamplers | - | 16 | min
| pname:maxPerStageDescriptorUniformBuffers | - | 12 | min
| pname:maxPerStageDescriptorStorageBuffers | - | 4 | min
| pname:maxPerStageDescriptorSampledImages | - | 16 | min
| pname:maxPerStageDescriptorStorageImages | - | 4 | min
| pname:maxPerStageDescriptorInputAttachments| - | 4 | min
| pname:maxPerStageResources | - | 128 ^2^ | min
| pname:maxDescriptorSetSamplers | - | 96 ^8^ | min, _n_ {times} PerStage
| pname:maxDescriptorSetUniformBuffers | - | 72 ^8^ | min, _n_ {times} PerStage
| pname:maxDescriptorSetUniformBuffersDynamic| - | 8 | min
| pname:maxDescriptorSetStorageBuffers | - | 24 ^8^ | min, _n_ {times} PerStage
| pname:maxDescriptorSetStorageBuffersDynamic| - | 4 | min
| pname:maxDescriptorSetSampledImages | - | 96 ^8^ | min, _n_ {times} PerStage
| pname:maxDescriptorSetStorageImages | - | 24 ^8^ | min, _n_ {times} PerStage
| pname:maxDescriptorSetInputAttachments | - | 4 | min
| pname:maxVertexInputAttributes | - | 16 | min
| pname:maxVertexInputBindings | - | 16 | min
| pname:maxVertexInputAttributeOffset | - | 2047 | min
| pname:maxVertexInputBindingStride | - | 2048 | min
| pname:maxVertexOutputComponents | - | 64 | min
| pname:maxTessellationGenerationLevel | 0 | 64 | min
| pname:maxTessellationPatchSize | 0 | 32 | min
| pname:maxTessellationControlPerVertexInputComponents | 0 |64 | min
| pname:maxTessellationControlPerVertexOutputComponents | 0 |64 | min
| pname:maxTessellationControlPerPatchOutputComponents | 0 |120 | min
| pname:maxTessellationControlTotalOutputComponents | 0 |2048 | min
| pname:maxTessellationEvaluationInputComponents | 0 |64 | min
| pname:maxTessellationEvaluationOutputComponents | 0 |64 | min
| pname:maxGeometryShaderInvocations | 0 | 32 | min
| pname:maxGeometryInputComponents | 0 | 64 | min
| pname:maxGeometryOutputComponents | 0 | 64 | min
| pname:maxGeometryOutputVertices | 0 | 256 | min
| pname:maxGeometryTotalOutputComponents | 0 | 1024 | min
| pname:maxFragmentInputComponents | - | 64 | min
| pname:maxFragmentOutputAttachments | - | 4 | min
| pname:maxFragmentDualSrcAttachments | 0 | 1 | min
| pname:maxFragmentCombinedOutputResources | - | 4 | min
| pname:maxComputeSharedMemorySize | - | 16384 | min
| pname:maxComputeWorkGroupCount | - | (65535,65535,65535) | min
| pname:maxComputeWorkGroupInvocations | - | 128 | min
| pname:maxComputeWorkGroupSize | - | (128,128,64) | min
| pname:subPixelPrecisionBits | - | 4 | min
| pname:subTexelPrecisionBits | - | 4 | min
| pname:mipmapPrecisionBits | - | 4 | min
| pname:maxDrawIndexedIndexValue | 2^24^-1 | 2^32^-1 | min
| pname:maxDrawIndirectCount | 1 | 2^16^-1 | min
| pname:maxSamplerLodBias | - | 2 | min
| pname:maxSamplerAnisotropy | 1 | 16 | min
| pname:maxViewports | 1 | 16 | min
| pname:maxViewportDimensions | - | (4096,4096) ^3^ | min
| pname:viewportBoundsRange | - | (-8192,8191) ^4^ | (max,min)
| pname:viewportSubPixelBits | - | 0 | min
| pname:minMemoryMapAlignment | - | 64 | min
| pname:minTexelBufferOffsetAlignment | - | 256 | max
| pname:minUniformBufferOffsetAlignment | - | 256 | max
| pname:minStorageBufferOffsetAlignment | - | 256 | max
| pname:minTexelOffset | - | -8 | max
| pname:maxTexelOffset | - | 7 | min
| pname:minTexelGatherOffset | 0 | -8 | max
| pname:maxTexelGatherOffset | 0 | 7 | min
| pname:minInterpolationOffset |0.0| -0.5 ^5^ | max
| pname:maxInterpolationOffset |0.0| 0.5 - (1 ULP) ^5^ | min
| pname:subPixelInterpolationOffsetBits | 0 | 4 ^5^ | min
| pname:maxFramebufferWidth | - | 4096 | min
| pname:maxFramebufferHeight | - | 4096 | min
| pname:maxFramebufferLayers | - | 256 | min
| pname:framebufferColorSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
| pname:framebufferDepthSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
| pname:framebufferStencilSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
| pname:framebufferNoAttachmentsSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
| pname:maxColorAttachments | - | 4 | min
| pname:sampledImageColorSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
| pname:sampledImageIntegerSampleCounts | - | ename:VK_SAMPLE_COUNT_1_BIT | min
| pname:sampledImageDepthSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
| pname:sampledImageStencilSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
| pname:storageImageSampleCounts | ename:VK_SAMPLE_COUNT_1_BIT | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
| pname:maxSampleMaskWords | - | 1 | min
| pname:timestampComputeAndGraphics | - | - |implementation dependent
| pname:timestampPeriod | - | - |duration
| pname:maxClipDistances | 0 | 8 | min
| pname:maxCullDistances | 0 | 8 | min
| pname:maxCombinedClipAndCullDistances | 0 | 8 | min
| pname:discreteQueuePriorities | - | 2 | min
| pname:pointSizeRange | (1.0,1.0) | (1.0,64.0 - ULP)^6^| (max,min)
| pname:lineWidthRange | (1.0,1.0) | (1.0,8.0 - ULP)^7^ | (max,min)
| pname:pointSizeGranularity | 0.0 | 1.0 ^6^ | max, fixed point increment
| pname:lineWidthGranularity | 0.0 | 1.0 ^7^ | max, fixed point increment
| pname:strictLines | - | - | implementation dependent
| pname:standardSampleLocations | - | - | implementation dependent
| pname:optimalBufferCopyOffsetAlignment | - | - | recommendation
| pname:optimalBufferCopyRowPitchAlignment | - | - | recommendation
| pname:nonCoherentAtomSize | - | 256 | max
ifdef::VK_KHR_push_descriptor[]
| pname:maxPushDescriptors | - | 32 | min
endif::VK_KHR_push_descriptor[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
| pname:maxMultiviewViewCount | - | 6 | min
| pname:maxMultiviewInstanceIndex | - | 2^27^-1 | min
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_EXT_discard_rectangles[]
| pname:maxDiscardRectangles | 0 | 4 | min
endif::VK_EXT_discard_rectangles[]
ifdef::VK_EXT_sample_locations[]
| pname:sampleLocationSampleCounts | - | ename:VK_SAMPLE_COUNT_4_BIT | min
| pname:maxSampleLocationGridSize | - | (1,1) | min
| pname:sampleLocationCoordinateRange | - | (0.0, 0.9375) | (max,min)
| pname:sampleLocationSubPixelBits | - | 4 | min
| pname:variableSampleLocations | - |false| implementation dependent
endif::VK_EXT_sample_locations[]
ifdef::VK_EXT_external_memory_host[]
| pname:minImportedHostPointerAlignment | - | 65536 | max
endif::VK_EXT_external_memory_host[]
ifdef::VK_NVX_multiview_per_view_attributes[]
| pname:perViewPositionAllComponents | - | - | implementation dependent
endif::VK_NVX_multiview_per_view_attributes[]
ifdef::VK_EXT_sampler_filter_minmax[]
| pname:filterMinmaxSingleComponentFormats | - | - | implementation dependent
| pname:filterMinmaxImageComponentMapping | - | - | implementation dependent
endif::VK_EXT_sampler_filter_minmax[]
ifdef::VK_EXT_blend_operation_advanced[]
| pname:advancedBlendMaxColorAttachments | - | 1 | min
| pname:advancedBlendIndependentBlend | - |false| implementation dependent
| pname:advancedBlendNonPremultipliedSrcColor | - |false| implementation dependent
| pname:advancedBlendNonPremultipliedDstColor | - |false| implementation dependent
| pname:advancedBlendCorrelatedOverlap | - |false| implementation dependent
| pname:advancedBlendAllOperations | - |false| implementation dependent
endif::VK_EXT_blend_operation_advanced[]
ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
| pname:maxPerSetDescriptors | - |1024 | min
| pname:maxMemoryAllocationSize | - | 2^30^ | min
endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
ifdef::VK_EXT_conservative_rasterization[]
| pname:primitiveOverestimationSize | - |0.0 | min
| pname:maxExtraPrimitiveOverestimationSize | - |0.0 | min
| pname:extraPrimitiveOverestimationSizeGranularity | - |0.0 | min
| pname:primitiveUnderestimation | - |false | implementation dependent
| pname:conservativePointAndLineRasterization | - |false | implementation dependent
| pname:degenerateTrianglesRasterized | - |false | implementation dependent
| pname:degenerateLinesRasterized | - |false | implementation dependent
| pname:fullyCoveredFragmentShaderInputVariable | - |false | implementation dependent
| pname:conservativeRasterizationPostDepthCoverage | - |false | implementation dependent
endif::VK_EXT_conservative_rasterization[]
ifdef::VK_EXT_descriptor_indexing[]
| pname:maxUpdateAfterBindDescriptorsInAllPools | - |500000| min
| pname:shaderUniformBufferArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:shaderSampledImageArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:shaderStorageBufferArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:shaderStorageImageArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:shaderInputAttachmentArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:maxPerStageDescriptorUpdateAfterBindSamplers | - |500000 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers | - |12 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers | - |500000 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindSampledImages | - |500000 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindStorageImages | - |500000 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| - |500000 ^9^ | min
| pname:maxPerStageUpdateAfterBindResources | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindSamplers | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindUniformBuffers | - |72 ^8^ ^9^ | min, _n_ {times} PerStage
| pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| - |8 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindStorageBuffers | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| - |4 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindSampledImages | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindStorageImages | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindInputAttachments | - |500000 ^9^ | min
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_inline_uniform_block[]
| pname:maxInlineUniformBlockSize | - | 256 | min
| pname:maxPerStageDescriptorInlineUniformBlocks | - | 4 | min
| pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks | - | 4 | min
| pname:maxDescriptorSetInlineUniformBlocks | - | 4 | min
| pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks | - | 4 | min
endif::VK_EXT_inline_uniform_block[]
ifdef::VK_EXT_vertex_attribute_divisor[]
| pname:maxVertexAttribDivisor | - | 2^16^-1 | min
endif::VK_EXT_vertex_attribute_divisor[]
ifdef::VK_NV_mesh_shader[]
| pname:maxDrawMeshTasksCount | - | 2^32^-1 | min
| pname:maxTaskWorkGroupInvocations | - | 32 | min
| pname:maxTaskWorkGroupSize | - | (32,1,1) | min
| pname:maxTaskTotalMemorySize | - | 16384 | min
| pname:maxTaskOutputCount | - | 2^16^-1 | min
| pname:maxMeshWorkGroupInvocations | - | 32 | min
| pname:maxMeshWorkGroupSize | - | (32,1,1) | min
| pname:maxMeshTotalMemorySize | - | 16384 | min
| pname:maxMeshOutputVertices | - | 256 | min
| pname:maxMeshOutputPrimitives | - | 256 | min
| pname:maxMeshMultiviewViewCount | - | 1 | min
| pname:meshOutputPerVertexGranularity | - | - | implementation dependent
| pname:meshOutputPerPrimitiveGranularity | - | - | implementation dependent
endif::VK_NV_mesh_shader[]
ifdef::VK_EXT_transform_feedback[]
| pname:maxTransformFeedbackStreams | - | 1 | min
| pname:maxTransformFeedbackBuffers | - | 1 | min
| pname:maxTransformFeedbackBufferSize | - | 2^27^ | min
| pname:maxTransformFeedbackStreamDataSize | - | 512 | min
| pname:maxTransformFeedbackBufferDataSize | - | 512 | min
| pname:maxTransformFeedbackBufferDataStride | - | 512 | min
| pname:transformFeedbackQueries | - | false | implementation dependent
| pname:transformFeedbackStreamsLinesTriangles | - | false | implementation dependent
| pname:transformFeedbackRasterizationStreamSelect | - | false | implementation dependent
| pname:transformFeedbackDraw | - | false | implementation dependent
endif::VK_EXT_transform_feedback[]
|====
1::
The *Limit Type* column specifies the limit is either the minimum limit
all implementations must: support or the maximum limit all
implementations must: support.
For bitmasks a minimum limit is the least bits all implementations must:
set, but they may: have additional bits set beyond this minimum.
2::
The pname:maxPerStageResources must: be at least the smallest of the
following:
+
* the sum of the pname:maxPerStageDescriptorUniformBuffers,
pname:maxPerStageDescriptorStorageBuffers,
pname:maxPerStageDescriptorSampledImages,
pname:maxPerStageDescriptorStorageImages,
pname:maxPerStageDescriptorInputAttachments, pname:maxColorAttachments
limits, or
* 128.
+
It may: not be possible to reach this limit in every stage.
3::
See
<<features-limits-maxViewportDimensions,pname:maxViewportDimensions>>
for the required: relationship to other limits.
4::
See <<features-limits-viewportboundsrange,pname:viewportBoundsRange>>
for the required: relationship to other limits.
5::
The values pname:minInterpolationOffset and pname:maxInterpolationOffset
describe the closed interval of supported interpolation offsets:
[pname:minInterpolationOffset, pname:maxInterpolationOffset].
The ULP is determined by pname:subPixelInterpolationOffsetBits.
If pname:subPixelInterpolationOffsetBits is 4, this provides increments
of (1/2^4^) = 0.0625, and thus the range of supported interpolation
offsets would be [eq]#[-0.5, 0.4375]#.
6::
The point size ULP is determined by pname:pointSizeGranularity.
If the pname:pointSizeGranularity is 0.125, the range of supported point
sizes must: be at least [1.0, 63.875].
7::
The line width ULP is determined by pname:lineWidthGranularity.
If the pname:lineWidthGranularity is 0.0625, the range of supported line
widths must: be at least [1.0, 7.9375].
8:: The minimum ptext:maxDescriptorSet* limit is _n_ times the corresponding
_specification_ minimum ptext:maxPerStageDescriptor* limit, where _n_ is
the number of shader stages supported by the slink:VkPhysicalDevice.
If all shader stages are supported, _n_ = 6 (vertex, tessellation
control, tessellation evaluation, geometry, fragment, compute).
ifdef::VK_EXT_descriptor_indexing[]
9:: The ptext:UpdateAfterBind descriptor limits must: each be greater than
or equal to the corresponding ptext:non-UpdateAfterBind limit.
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_sample_locations[]
[[features-limits-multisample]]
== Additional Multisampling Capabilities
[open,refpage='vkGetPhysicalDeviceMultisamplePropertiesEXT',desc='Report sample count specific multisampling capabilities of a physical device',type='protos']
--
In addition to the minimum capabilities described in the previous section
(<<features-limits,Limits>>), implementations may: support additional
multisampling capabilities specific to a particular sample count.
To query additional sample count specific multisampling capabilities, call:
include::../api/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[]
* pname:physicalDevice is the physical device from which to query the
additional multisampling capabilities.
* pname:samples is the sample count to query the capabilities for.
* pname:pMultisampleProperties is a pointer to a structure of type
slink:VkMultisamplePropertiesEXT, in which information about the
additional multisampling capabilities specific to the sample count is
returned.
include::../validity/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[]
--
[open,refpage='VkMultisamplePropertiesEXT',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs']
--
The sname:VkMultisamplePropertiesEXT structure is defined as
include::../api/structs/VkMultisamplePropertiesEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:maxSampleLocationGridSize is the maximum size of the pixel grid in
which sample locations can: vary.
include::../validity/structs/VkMultisamplePropertiesEXT.txt[]
--
If the sample count for which additional multisampling capabilities are
requested using fname:vkGetPhysicalDeviceMultisamplePropertiesEXT is set
in sname:VkPhysicalDeviceSampleLocationsEXT::
<<features-limits-sampleLocationSampleCounts,
pname:sampleLocationSampleCounts>> the pname:width and pname:height members
of sname:VkMultisamplePropertiesEXT::pname:maxSampleLocationGridSize must:
be greater than or equal to the corresponding members of
sname:VkPhysicalDeviceSampleLocationsEXT::
<<features-limits-maxSampleLocationGridSize,pname:maxSampleLocationGridSize>>,
respectively, otherwise both members must: be `0`.
endif::VK_EXT_sample_locations[]
[[features-formats]]
== Formats
The features for the set of formats (elink:VkFormat) supported by the
implementation are queried individually using the
flink:vkGetPhysicalDeviceFormatProperties command.
[[features-formats-definition]]
=== Format Definition
[open,refpage='VkFormat',desc='Available image formats',type='enums']
--
Image formats which can: be passed to, and may: be returned from Vulkan
commands, are:
include::../api/enums/VkFormat.txt[]
* ename:VK_FORMAT_UNDEFINED specifies that the format is not specified.
* ename:VK_FORMAT_R4G4_UNORM_PACK8 specifies a two-component, 8-bit packed
unsigned normalized format that has a 4-bit R component in bits 4..7,
and a 4-bit G component in bits 0..3.
* ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16 specifies a four-component, 16-bit
packed unsigned normalized format that has a 4-bit R component in bits
12..15, a 4-bit G component in bits 8..11, a 4-bit B component in bits
4..7, and a 4-bit A component in bits 0..3.
* ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 specifies a four-component, 16-bit
packed unsigned normalized format that has a 4-bit B component in bits
12..15, a 4-bit G component in bits 8..11, a 4-bit R component in bits
4..7, and a 4-bit A component in bits 0..3.
* ename:VK_FORMAT_R5G6B5_UNORM_PACK16 specifies a three-component, 16-bit
packed unsigned normalized format that has a 5-bit R component in bits
11..15, a 6-bit G component in bits 5..10, and a 5-bit B component in
bits 0..4.
* ename:VK_FORMAT_B5G6R5_UNORM_PACK16 specifies a three-component, 16-bit
packed unsigned normalized format that has a 5-bit B component in bits
11..15, a 6-bit G component in bits 5..10, and a 5-bit R component in
bits 0..4.
* ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16 specifies a four-component, 16-bit
packed unsigned normalized format that has a 5-bit R component in bits
11..15, a 5-bit G component in bits 6..10, a 5-bit B component in bits
1..5, and a 1-bit A component in bit 0.
* ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 specifies a four-component, 16-bit
packed unsigned normalized format that has a 5-bit B component in bits
11..15, a 5-bit G component in bits 6..10, a 5-bit R component in bits
1..5, and a 1-bit A component in bit 0.
* ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 specifies a four-component, 16-bit
packed unsigned normalized format that has a 1-bit A component in bit
15, a 5-bit R component in bits 10..14, a 5-bit G component in bits
5..9, and a 5-bit B component in bits 0..4.
* ename:VK_FORMAT_R8_UNORM specifies a one-component, 8-bit unsigned
normalized format that has a single 8-bit R component.
* ename:VK_FORMAT_R8_SNORM specifies a one-component, 8-bit signed
normalized format that has a single 8-bit R component.
* ename:VK_FORMAT_R8_USCALED specifies a one-component, 8-bit unsigned
scaled integer format that has a single 8-bit R component.
* ename:VK_FORMAT_R8_SSCALED specifies a one-component, 8-bit signed
scaled integer format that has a single 8-bit R component.
* ename:VK_FORMAT_R8_UINT specifies a one-component, 8-bit unsigned
integer format that has a single 8-bit R component.
* ename:VK_FORMAT_R8_SINT specifies a one-component, 8-bit signed integer
format that has a single 8-bit R component.
* ename:VK_FORMAT_R8_SRGB specifies a one-component, 8-bit unsigned
normalized format that has a single 8-bit R component stored with sRGB
nonlinear encoding.
* ename:VK_FORMAT_R8G8_UNORM specifies a two-component, 16-bit unsigned
normalized format that has an 8-bit R component in byte 0, and an 8-bit
G component in byte 1.
* ename:VK_FORMAT_R8G8_SNORM specifies a two-component, 16-bit signed
normalized format that has an 8-bit R component in byte 0, and an 8-bit
G component in byte 1.
* ename:VK_FORMAT_R8G8_USCALED specifies a two-component, 16-bit unsigned
scaled integer format that has an 8-bit R component in byte 0, and an
8-bit G component in byte 1.
* ename:VK_FORMAT_R8G8_SSCALED specifies a two-component, 16-bit signed
scaled integer format that has an 8-bit R component in byte 0, and an
8-bit G component in byte 1.
* ename:VK_FORMAT_R8G8_UINT specifies a two-component, 16-bit unsigned
integer format that has an 8-bit R component in byte 0, and an 8-bit G
component in byte 1.
* ename:VK_FORMAT_R8G8_SINT specifies a two-component, 16-bit signed
integer format that has an 8-bit R component in byte 0, and an 8-bit G
component in byte 1.
* ename:VK_FORMAT_R8G8_SRGB specifies a two-component, 16-bit unsigned
normalized format that has an 8-bit R component stored with sRGB
nonlinear encoding in byte 0, and an 8-bit G component stored with sRGB
nonlinear encoding in byte 1.
* ename:VK_FORMAT_R8G8B8_UNORM specifies a three-component, 24-bit
unsigned normalized format that has an 8-bit R component in byte 0, an
8-bit G component in byte 1, and an 8-bit B component in byte 2.
* ename:VK_FORMAT_R8G8B8_SNORM specifies a three-component, 24-bit signed
normalized format that has an 8-bit R component in byte 0, an 8-bit G
component in byte 1, and an 8-bit B component in byte 2.
* ename:VK_FORMAT_R8G8B8_USCALED specifies a three-component, 24-bit
unsigned scaled format that has an 8-bit R component in byte 0, an 8-bit
G component in byte 1, and an 8-bit B component in byte 2.
* ename:VK_FORMAT_R8G8B8_SSCALED specifies a three-component, 24-bit
signed scaled format that has an 8-bit R component in byte 0, an 8-bit G
component in byte 1, and an 8-bit B component in byte 2.
* ename:VK_FORMAT_R8G8B8_UINT specifies a three-component, 24-bit unsigned
integer format that has an 8-bit R component in byte 0, an 8-bit G
component in byte 1, and an 8-bit B component in byte 2.
* ename:VK_FORMAT_R8G8B8_SINT specifies a three-component, 24-bit signed
integer format that has an 8-bit R component in byte 0, an 8-bit G
component in byte 1, and an 8-bit B component in byte 2.
* ename:VK_FORMAT_R8G8B8_SRGB specifies a three-component, 24-bit unsigned
normalized format that has an 8-bit R component stored with sRGB
nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
nonlinear encoding in byte 1, and an 8-bit B component stored with sRGB
nonlinear encoding in byte 2.
* ename:VK_FORMAT_B8G8R8_UNORM specifies a three-component, 24-bit
unsigned normalized format that has an 8-bit B component in byte 0, an
8-bit G component in byte 1, and an 8-bit R component in byte 2.
* ename:VK_FORMAT_B8G8R8_SNORM specifies a three-component, 24-bit signed
normalized format that has an 8-bit B component in byte 0, an 8-bit G
component in byte 1, and an 8-bit R component in byte 2.
* ename:VK_FORMAT_B8G8R8_USCALED specifies a three-component, 24-bit
unsigned scaled format that has an 8-bit B component in byte 0, an 8-bit
G component in byte 1, and an 8-bit R component in byte 2.
* ename:VK_FORMAT_B8G8R8_SSCALED specifies a three-component, 24-bit
signed scaled format that has an 8-bit B component in byte 0, an 8-bit G
component in byte 1, and an 8-bit R component in byte 2.
* ename:VK_FORMAT_B8G8R8_UINT specifies a three-component, 24-bit unsigned
integer format that has an 8-bit B component in byte 0, an 8-bit G
component in byte 1, and an 8-bit R component in byte 2.
* ename:VK_FORMAT_B8G8R8_SINT specifies a three-component, 24-bit signed
integer format that has an 8-bit B component in byte 0, an 8-bit G
component in byte 1, and an 8-bit R component in byte 2.
* ename:VK_FORMAT_B8G8R8_SRGB specifies a three-component, 24-bit unsigned
normalized format that has an 8-bit B component stored with sRGB
nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
nonlinear encoding in byte 1, and an 8-bit R component stored with sRGB
nonlinear encoding in byte 2.
* ename:VK_FORMAT_R8G8B8A8_UNORM specifies a four-component, 32-bit
unsigned normalized format that has an 8-bit R component in byte 0, an
8-bit G component in byte 1, an 8-bit B component in byte 2, and an
8-bit A component in byte 3.
* ename:VK_FORMAT_R8G8B8A8_SNORM specifies a four-component, 32-bit signed
normalized format that has an 8-bit R component in byte 0, an 8-bit G
component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
component in byte 3.
* ename:VK_FORMAT_R8G8B8A8_USCALED specifies a four-component, 32-bit
unsigned scaled format that has an 8-bit R component in byte 0, an 8-bit
G component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
component in byte 3.
* ename:VK_FORMAT_R8G8B8A8_SSCALED specifies a four-component, 32-bit
signed scaled format that has an 8-bit R component in byte 0, an 8-bit G
component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
component in byte 3.
* ename:VK_FORMAT_R8G8B8A8_UINT specifies a four-component, 32-bit
unsigned integer format that has an 8-bit R component in byte 0, an
8-bit G component in byte 1, an 8-bit B component in byte 2, and an
8-bit A component in byte 3.
* ename:VK_FORMAT_R8G8B8A8_SINT specifies a four-component, 32-bit signed
integer format that has an 8-bit R component in byte 0, an 8-bit G
component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
component in byte 3.
* ename:VK_FORMAT_R8G8B8A8_SRGB specifies a four-component, 32-bit
unsigned normalized format that has an 8-bit R component stored with
sRGB nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
nonlinear encoding in byte 1, an 8-bit B component stored with sRGB
nonlinear encoding in byte 2, and an 8-bit A component in byte 3.
* ename:VK_FORMAT_B8G8R8A8_UNORM specifies a four-component, 32-bit
unsigned normalized format that has an 8-bit B component in byte 0, an
8-bit G component in byte 1, an 8-bit R component in byte 2, and an
8-bit A component in byte 3.
* ename:VK_FORMAT_B8G8R8A8_SNORM specifies a four-component, 32-bit signed
normalized format that has an 8-bit B component in byte 0, an 8-bit G
component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
component in byte 3.
* ename:VK_FORMAT_B8G8R8A8_USCALED specifies a four-component, 32-bit
unsigned scaled format that has an 8-bit B component in byte 0, an 8-bit
G component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
component in byte 3.
* ename:VK_FORMAT_B8G8R8A8_SSCALED specifies a four-component, 32-bit
signed scaled format that has an 8-bit B component in byte 0, an 8-bit G
component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
component in byte 3.
* ename:VK_FORMAT_B8G8R8A8_UINT specifies a four-component, 32-bit
unsigned integer format that has an 8-bit B component in byte 0, an
8-bit G component in byte 1, an 8-bit R component in byte 2, and an
8-bit A component in byte 3.
* ename:VK_FORMAT_B8G8R8A8_SINT specifies a four-component, 32-bit signed
integer format that has an 8-bit B component in byte 0, an 8-bit G
component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
component in byte 3.
* ename:VK_FORMAT_B8G8R8A8_SRGB specifies a four-component, 32-bit
unsigned normalized format that has an 8-bit B component stored with
sRGB nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
nonlinear encoding in byte 1, an 8-bit R component stored with sRGB
nonlinear encoding in byte 2, and an 8-bit A component in byte 3.
* ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32 specifies a four-component, 32-bit
packed unsigned normalized format that has an 8-bit A component in bits
24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
bits 8..15, and an 8-bit R component in bits 0..7.
* ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32 specifies a four-component, 32-bit
packed signed normalized format that has an 8-bit A component in bits
24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
bits 8..15, and an 8-bit R component in bits 0..7.
* ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32 specifies a four-component,
32-bit packed unsigned scaled integer format that has an 8-bit A
component in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit
G component in bits 8..15, and an 8-bit R component in bits 0..7.
* ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32 specifies a four-component,
32-bit packed signed scaled integer format that has an 8-bit A component
in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit G
component in bits 8..15, and an 8-bit R component in bits 0..7.
* ename:VK_FORMAT_A8B8G8R8_UINT_PACK32 specifies a four-component, 32-bit
packed unsigned integer format that has an 8-bit A component in bits
24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
bits 8..15, and an 8-bit R component in bits 0..7.
* ename:VK_FORMAT_A8B8G8R8_SINT_PACK32 specifies a four-component, 32-bit
packed signed integer format that has an 8-bit A component in bits
24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
bits 8..15, and an 8-bit R component in bits 0..7.
* ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32 specifies a four-component, 32-bit
packed unsigned normalized format that has an 8-bit A component in bits
24..31, an 8-bit B component stored with sRGB nonlinear encoding in bits
16..23, an 8-bit G component stored with sRGB nonlinear encoding in bits
8..15, and an 8-bit R component stored with sRGB nonlinear encoding in
bits 0..7.
* ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32 specifies a four-component,
32-bit packed unsigned normalized format that has a 2-bit A component in
bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component
in bits 10..19, and a 10-bit B component in bits 0..9.
* ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32 specifies a four-component,
32-bit packed signed normalized format that has a 2-bit A component in
bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component
in bits 10..19, and a 10-bit B component in bits 0..9.
* ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32 specifies a four-component,
32-bit packed unsigned scaled integer format that has a 2-bit A
component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit
G component in bits 10..19, and a 10-bit B component in bits 0..9.
* ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32 specifies a four-component,
32-bit packed signed scaled integer format that has a 2-bit A component
in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G
component in bits 10..19, and a 10-bit B component in bits 0..9.
* ename:VK_FORMAT_A2R10G10B10_UINT_PACK32 specifies a four-component,
32-bit packed unsigned integer format that has a 2-bit A component in
bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component
in bits 10..19, and a 10-bit B component in bits 0..9.
* ename:VK_FORMAT_A2R10G10B10_SINT_PACK32 specifies a four-component,
32-bit packed signed integer format that has a 2-bit A component in bits
30..31, a 10-bit R component in bits 20..29, a 10-bit G component in
bits 10..19, and a 10-bit B component in bits 0..9.
* ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32 specifies a four-component,
32-bit packed unsigned normalized format that has a 2-bit A component in
bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component
in bits 10..19, and a 10-bit R component in bits 0..9.
* ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32 specifies a four-component,
32-bit packed signed normalized format that has a 2-bit A component in
bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component
in bits 10..19, and a 10-bit R component in bits 0..9.
* ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32 specifies a four-component,
32-bit packed unsigned scaled integer format that has a 2-bit A
component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit
G component in bits 10..19, and a 10-bit R component in bits 0..9.
* ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32 specifies a four-component,
32-bit packed signed scaled integer format that has a 2-bit A component
in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G
component in bits 10..19, and a 10-bit R component in bits 0..9.
* ename:VK_FORMAT_A2B10G10R10_UINT_PACK32 specifies a four-component,
32-bit packed unsigned integer format that has a 2-bit A component in
bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component
in bits 10..19, and a 10-bit R component in bits 0..9.
* ename:VK_FORMAT_A2B10G10R10_SINT_PACK32 specifies a four-component,
32-bit packed signed integer format that has a 2-bit A component in bits
30..31, a 10-bit B component in bits 20..29, a 10-bit G component in
bits 10..19, and a 10-bit R component in bits 0..9.
* ename:VK_FORMAT_R16_UNORM specifies a one-component, 16-bit unsigned
normalized format that has a single 16-bit R component.
* ename:VK_FORMAT_R16_SNORM specifies a one-component, 16-bit signed
normalized format that has a single 16-bit R component.
* ename:VK_FORMAT_R16_USCALED specifies a one-component, 16-bit unsigned
scaled integer format that has a single 16-bit R component.
* ename:VK_FORMAT_R16_SSCALED specifies a one-component, 16-bit signed
scaled integer format that has a single 16-bit R component.
* ename:VK_FORMAT_R16_UINT specifies a one-component, 16-bit unsigned
integer format that has a single 16-bit R component.
* ename:VK_FORMAT_R16_SINT specifies a one-component, 16-bit signed
integer format that has a single 16-bit R component.
* ename:VK_FORMAT_R16_SFLOAT specifies a one-component, 16-bit signed
floating-point format that has a single 16-bit R component.
* ename:VK_FORMAT_R16G16_UNORM specifies a two-component, 32-bit unsigned
normalized format that has a 16-bit R component in bytes 0..1, and a
16-bit G component in bytes 2..3.
* ename:VK_FORMAT_R16G16_SNORM specifies a two-component, 32-bit signed
normalized format that has a 16-bit R component in bytes 0..1, and a
16-bit G component in bytes 2..3.
* ename:VK_FORMAT_R16G16_USCALED specifies a two-component, 32-bit
unsigned scaled integer format that has a 16-bit R component in bytes
0..1, and a 16-bit G component in bytes 2..3.
* ename:VK_FORMAT_R16G16_SSCALED specifies a two-component, 32-bit signed
scaled integer format that has a 16-bit R component in bytes 0..1, and a
16-bit G component in bytes 2..3.
* ename:VK_FORMAT_R16G16_UINT specifies a two-component, 32-bit unsigned
integer format that has a 16-bit R component in bytes 0..1, and a 16-bit
G component in bytes 2..3.
* ename:VK_FORMAT_R16G16_SINT specifies a two-component, 32-bit signed
integer format that has a 16-bit R component in bytes 0..1, and a 16-bit
G component in bytes 2..3.
* ename:VK_FORMAT_R16G16_SFLOAT specifies a two-component, 32-bit signed
floating-point format that has a 16-bit R component in bytes 0..1, and a
16-bit G component in bytes 2..3.
* ename:VK_FORMAT_R16G16B16_UNORM specifies a three-component, 48-bit
unsigned normalized format that has a 16-bit R component in bytes 0..1,
a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes
4..5.
* ename:VK_FORMAT_R16G16B16_SNORM specifies a three-component, 48-bit
signed normalized format that has a 16-bit R component in bytes 0..1, a
16-bit G component in bytes 2..3, and a 16-bit B component in bytes
4..5.
* ename:VK_FORMAT_R16G16B16_USCALED specifies a three-component, 48-bit
unsigned scaled integer format that has a 16-bit R component in bytes
0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
bytes 4..5.
* ename:VK_FORMAT_R16G16B16_SSCALED specifies a three-component, 48-bit
signed scaled integer format that has a 16-bit R component in bytes
0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
bytes 4..5.
* ename:VK_FORMAT_R16G16B16_UINT specifies a three-component, 48-bit
unsigned integer format that has a 16-bit R component in bytes 0..1, a
16-bit G component in bytes 2..3, and a 16-bit B component in bytes
4..5.
* ename:VK_FORMAT_R16G16B16_SINT specifies a three-component, 48-bit
signed integer format that has a 16-bit R component in bytes 0..1, a
16-bit G component in bytes 2..3, and a 16-bit B component in bytes
4..5.
* ename:VK_FORMAT_R16G16B16_SFLOAT specifies a three-component, 48-bit
signed floating-point format that has a 16-bit R component in bytes
0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
bytes 4..5.
* ename:VK_FORMAT_R16G16B16A16_UNORM specifies a four-component, 64-bit
unsigned normalized format that has a 16-bit R component in bytes 0..1,
a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
and a 16-bit A component in bytes 6..7.
* ename:VK_FORMAT_R16G16B16A16_SNORM specifies a four-component, 64-bit
signed normalized format that has a 16-bit R component in bytes 0..1, a
16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
and a 16-bit A component in bytes 6..7.
* ename:VK_FORMAT_R16G16B16A16_USCALED specifies a four-component, 64-bit
unsigned scaled integer format that has a 16-bit R component in bytes
0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
4..5, and a 16-bit A component in bytes 6..7.
* ename:VK_FORMAT_R16G16B16A16_SSCALED specifies a four-component, 64-bit
signed scaled integer format that has a 16-bit R component in bytes
0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
4..5, and a 16-bit A component in bytes 6..7.
* ename:VK_FORMAT_R16G16B16A16_UINT specifies a four-component, 64-bit
unsigned integer format that has a 16-bit R component in bytes 0..1, a
16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
and a 16-bit A component in bytes 6..7.
* ename:VK_FORMAT_R16G16B16A16_SINT specifies a four-component, 64-bit
signed integer format that has a 16-bit R component in bytes 0..1, a
16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
and a 16-bit A component in bytes 6..7.
* ename:VK_FORMAT_R16G16B16A16_SFLOAT specifies a four-component, 64-bit
signed floating-point format that has a 16-bit R component in bytes
0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
4..5, and a 16-bit A component in bytes 6..7.
* ename:VK_FORMAT_R32_UINT specifies a one-component, 32-bit unsigned
integer format that has a single 32-bit R component.
* ename:VK_FORMAT_R32_SINT specifies a one-component, 32-bit signed
integer format that has a single 32-bit R component.
* ename:VK_FORMAT_R32_SFLOAT specifies a one-component, 32-bit signed
floating-point format that has a single 32-bit R component.
* ename:VK_FORMAT_R32G32_UINT specifies a two-component, 64-bit unsigned
integer format that has a 32-bit R component in bytes 0..3, and a 32-bit
G component in bytes 4..7.
* ename:VK_FORMAT_R32G32_SINT specifies a two-component, 64-bit signed
integer format that has a 32-bit R component in bytes 0..3, and a 32-bit
G component in bytes 4..7.
* ename:VK_FORMAT_R32G32_SFLOAT specifies a two-component, 64-bit signed
floating-point format that has a 32-bit R component in bytes 0..3, and a
32-bit G component in bytes 4..7.
* ename:VK_FORMAT_R32G32B32_UINT specifies a three-component, 96-bit
unsigned integer format that has a 32-bit R component in bytes 0..3, a
32-bit G component in bytes 4..7, and a 32-bit B component in bytes
8..11.
* ename:VK_FORMAT_R32G32B32_SINT specifies a three-component, 96-bit
signed integer format that has a 32-bit R component in bytes 0..3, a
32-bit G component in bytes 4..7, and a 32-bit B component in bytes
8..11.
* ename:VK_FORMAT_R32G32B32_SFLOAT specifies a three-component, 96-bit
signed floating-point format that has a 32-bit R component in bytes
0..3, a 32-bit G component in bytes 4..7, and a 32-bit B component in
bytes 8..11.
* ename:VK_FORMAT_R32G32B32A32_UINT specifies a four-component, 128-bit
unsigned integer format that has a 32-bit R component in bytes 0..3, a
32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11,
and a 32-bit A component in bytes 12..15.
* ename:VK_FORMAT_R32G32B32A32_SINT specifies a four-component, 128-bit
signed integer format that has a 32-bit R component in bytes 0..3, a
32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11,
and a 32-bit A component in bytes 12..15.
* ename:VK_FORMAT_R32G32B32A32_SFLOAT specifies a four-component, 128-bit
signed floating-point format that has a 32-bit R component in bytes
0..3, a 32-bit G component in bytes 4..7, a 32-bit B component in bytes
8..11, and a 32-bit A component in bytes 12..15.
* ename:VK_FORMAT_R64_UINT specifies a one-component, 64-bit unsigned
integer format that has a single 64-bit R component.
* ename:VK_FORMAT_R64_SINT specifies a one-component, 64-bit signed
integer format that has a single 64-bit R component.
* ename:VK_FORMAT_R64_SFLOAT specifies a one-component, 64-bit signed
floating-point format that has a single 64-bit R component.
* ename:VK_FORMAT_R64G64_UINT specifies a two-component, 128-bit unsigned
integer format that has a 64-bit R component in bytes 0..7, and a 64-bit
G component in bytes 8..15.
* ename:VK_FORMAT_R64G64_SINT specifies a two-component, 128-bit signed
integer format that has a 64-bit R component in bytes 0..7, and a 64-bit
G component in bytes 8..15.
* ename:VK_FORMAT_R64G64_SFLOAT specifies a two-component, 128-bit signed
floating-point format that has a 64-bit R component in bytes 0..7, and a
64-bit G component in bytes 8..15.
* ename:VK_FORMAT_R64G64B64_UINT specifies a three-component, 192-bit
unsigned integer format that has a 64-bit R component in bytes 0..7, a
64-bit G component in bytes 8..15, and a 64-bit B component in bytes
16..23.
* ename:VK_FORMAT_R64G64B64_SINT specifies a three-component, 192-bit
signed integer format that has a 64-bit R component in bytes 0..7, a
64-bit G component in bytes 8..15, and a 64-bit B component in bytes
16..23.
* ename:VK_FORMAT_R64G64B64_SFLOAT specifies a three-component, 192-bit
signed floating-point format that has a 64-bit R component in bytes
0..7, a 64-bit G component in bytes 8..15, and a 64-bit B component in
bytes 16..23.
* ename:VK_FORMAT_R64G64B64A64_UINT specifies a four-component, 256-bit
unsigned integer format that has a 64-bit R component in bytes 0..7, a
64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23,
and a 64-bit A component in bytes 24..31.
* ename:VK_FORMAT_R64G64B64A64_SINT specifies a four-component, 256-bit
signed integer format that has a 64-bit R component in bytes 0..7, a
64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23,
and a 64-bit A component in bytes 24..31.
* ename:VK_FORMAT_R64G64B64A64_SFLOAT specifies a four-component, 256-bit
signed floating-point format that has a 64-bit R component in bytes
0..7, a 64-bit G component in bytes 8..15, a 64-bit B component in bytes
16..23, and a 64-bit A component in bytes 24..31.
* ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 specifies a three-component,
32-bit packed unsigned floating-point format that has a 10-bit B
component in bits 22..31, an 11-bit G component in bits 11..21, an
11-bit R component in bits 0..10.
See <<fundamentals-fp10>> and <<fundamentals-fp11>>.
* ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 specifies a three-component,
32-bit packed unsigned floating-point format that has a 5-bit shared
exponent in bits 27..31, a 9-bit B component mantissa in bits 18..26, a
9-bit G component mantissa in bits 9..17, and a 9-bit R component
mantissa in bits 0..8.
* ename:VK_FORMAT_D16_UNORM specifies a one-component, 16-bit unsigned
normalized format that has a single 16-bit depth component.
* ename:VK_FORMAT_X8_D24_UNORM_PACK32 specifies a two-component, 32-bit
format that has 24 unsigned normalized bits in the depth component and,
optionally:, 8 bits that are unused.
* ename:VK_FORMAT_D32_SFLOAT specifies a one-component, 32-bit signed
floating-point format that has 32-bits in the depth component.
* ename:VK_FORMAT_S8_UINT specifies a one-component, 8-bit unsigned
integer format that has 8-bits in the stencil component.
* ename:VK_FORMAT_D16_UNORM_S8_UINT specifies a two-component, 24-bit
format that has 16 unsigned normalized bits in the depth component and 8
unsigned integer bits in the stencil component.
* ename:VK_FORMAT_D24_UNORM_S8_UINT specifies a two-component, 32-bit
packed format that has 8 unsigned integer bits in the stencil component,
and 24 unsigned normalized bits in the depth component.
* ename:VK_FORMAT_D32_SFLOAT_S8_UINT specifies a two-component format that
has 32 signed float bits in the depth component and 8 unsigned integer
bits in the stencil component.
There are optionally: 24-bits that are unused.
* ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK specifies a three-component,
block-compressed format where each 64-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized RGB texel data.
This format has no alpha and is considered opaque.
* ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK specifies a three-component,
block-compressed format where each 64-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
nonlinear encoding.
This format has no alpha and is considered opaque.
* ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK specifies a four-component,
block-compressed format where each 64-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized RGB texel data, and
provides 1 bit of alpha.
* ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK specifies a four-component,
block-compressed format where each 64-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
nonlinear encoding, and provides 1 bit of alpha.
* ename:VK_FORMAT_BC2_UNORM_BLOCK specifies a four-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
with the first 64 bits encoding alpha values followed by 64 bits
encoding RGB values.
* ename:VK_FORMAT_BC2_SRGB_BLOCK specifies a four-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
with the first 64 bits encoding alpha values followed by 64 bits
encoding RGB values with sRGB nonlinear encoding.
* ename:VK_FORMAT_BC3_UNORM_BLOCK specifies a four-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
with the first 64 bits encoding alpha values followed by 64 bits
encoding RGB values.
* ename:VK_FORMAT_BC3_SRGB_BLOCK specifies a four-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
with the first 64 bits encoding alpha values followed by 64 bits
encoding RGB values with sRGB nonlinear encoding.
* ename:VK_FORMAT_BC4_UNORM_BLOCK specifies a one-component,
block-compressed format where each 64-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized red texel data.
* ename:VK_FORMAT_BC4_SNORM_BLOCK specifies a one-component,
block-compressed format where each 64-bit compressed texel block encodes
a 4{times}4 rectangle of signed normalized red texel data.
* ename:VK_FORMAT_BC5_UNORM_BLOCK specifies a two-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of unsigned normalized RG texel data with
the first 64 bits encoding red values followed by 64 bits encoding green
values.
* ename:VK_FORMAT_BC5_SNORM_BLOCK specifies a two-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of signed normalized RG texel data with
the first 64 bits encoding red values followed by 64 bits encoding green
values.
* ename:VK_FORMAT_BC6H_UFLOAT_BLOCK specifies a three-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of unsigned floating-point RGB texel data.
* ename:VK_FORMAT_BC6H_SFLOAT_BLOCK specifies a three-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of signed floating-point RGB texel data.
* ename:VK_FORMAT_BC7_UNORM_BLOCK specifies a four-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_BC7_SRGB_BLOCK specifies a four-component,
block-compressed format where each 128-bit compressed texel block
encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
with sRGB nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK specifies a three-component,
ETC2 compressed format where each 64-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized RGB texel data.
This format has no alpha and is considered opaque.
* ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK specifies a three-component, ETC2
compressed format where each 64-bit compressed texel block encodes a
4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
nonlinear encoding.
This format has no alpha and is considered opaque.
* ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK specifies a four-component,
ETC2 compressed format where each 64-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized RGB texel data, and
provides 1 bit of alpha.
* ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK specifies a four-component,
ETC2 compressed format where each 64-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
nonlinear encoding, and provides 1 bit of alpha.
* ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK specifies a four-component,
ETC2 compressed format where each 128-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized RGBA texel data with the
first 64 bits encoding alpha values followed by 64 bits encoding RGB
values.
* ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK specifies a four-component,
ETC2 compressed format where each 128-bit compressed texel block encodes
a 4{times}4 rectangle of unsigned normalized RGBA texel data with the
first 64 bits encoding alpha values followed by 64 bits encoding RGB
values with sRGB nonlinear encoding applied.
* ename:VK_FORMAT_EAC_R11_UNORM_BLOCK specifies a one-component, ETC2
compressed format where each 64-bit compressed texel block encodes a
4{times}4 rectangle of unsigned normalized red texel data.
* ename:VK_FORMAT_EAC_R11_SNORM_BLOCK specifies a one-component, ETC2
compressed format where each 64-bit compressed texel block encodes a
4{times}4 rectangle of signed normalized red texel data.
* ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK specifies a two-component, ETC2
compressed format where each 128-bit compressed texel block encodes a
4{times}4 rectangle of unsigned normalized RG texel data with the first
64 bits encoding red values followed by 64 bits encoding green values.
* ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK specifies a two-component, ETC2
compressed format where each 128-bit compressed texel block encodes a
4{times}4 rectangle of signed normalized RG texel data with the first 64
bits encoding red values followed by 64 bits encoding green values.
* ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
4{times}4 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
5{times}4 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
5{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
5{times}5 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
5{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
6{times}5 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
6{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
6{times}6 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
6{times}6 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes an
8{times}5 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes an
8{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes an
8{times}6 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes an
8{times}6 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes an
8{times}8 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes an
8{times}8 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
10{times}5 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
10{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
10{times}6 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
10{times}6 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
10{times}8 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
10{times}8 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
10{times}10 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
10{times}10 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
12{times}10 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
12{times}10 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
* ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
12{times}12 rectangle of unsigned normalized RGBA texel data.
* ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK specifies a four-component, ASTC
compressed format where each 128-bit compressed texel block encodes a
12{times}12 rectangle of unsigned normalized RGBA texel data with sRGB
nonlinear encoding applied to the RGB components.
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* ename:VK_FORMAT_G8B8G8R8_422_UNORM specifies a four-component, 32-bit
format containing a pair of G components, an R component, and a B
component, collectively encoding a 2{times}1 rectangle of unsigned
normalized RGB texel data.
One G value is present at each _i_ coordinate, with the B and R values
shared across both G values and thus recorded at half the horizontal
resolution of the image.
This format has an 8-bit G component for the even _i_ coordinate in byte
0, an 8-bit B component in byte 1, an 8-bit G component for the odd _i_
coordinate in byte 2, and an 8-bit R component in byte 3.
Images in this format must: be defined with a width that is a multiple
of two.
For the purposes of the constraints on copy extents, this format is
treated as a compressed format with a 2{times}1 compressed texel block.
* ename:VK_FORMAT_B8G8R8G8_422_UNORM specifies a four-component, 32-bit
format containing a pair of G components, an R component, and a B
component, collectively encoding a 2{times}1 rectangle of unsigned
normalized RGB texel data.
One G value is present at each _i_ coordinate, with the B and R values
shared across both G values and thus recorded at half the horizontal
resolution of the image.
This format has an 8-bit B component in byte 0, an 8-bit G component for
the even _i_ coordinate in byte 1, an 8-bit R component in byte 2, and
an 8-bit G component for the odd _i_ coordinate in byte 3.
Images in this format must: be defined with a width that is a multiple
of two.
For the purposes of the constraints on copy extents, this format is
treated as a compressed format with a 2{times}1 compressed texel block.
* ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM specifies an unsigned
normalized _multi-planar format_ that has an 8-bit G component in plane
0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2.
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:[\lfloor i_G \times 0.5
\rfloor = i_B = i_R] and latexmath:[\lfloor j_G \times 0.5 \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.
Images in this format must: be defined with a width and height that is a
multiple of two.
* ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM specifies an unsigned
normalized _multi-planar format_ that has an 8-bit G component in plane
0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
component in byte 0 and an 8-bit R component in byte 1.
The horizontal and vertical dimensions of the BR plane is halved
relative to the image dimensions, and each R and B value is shared with
the G components for which latexmath:[\lfloor i_G \times 0.5 \rfloor =
i_B = i_R] and latexmath:[\lfloor j_G \times 0.5 \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, and
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
Images in this format must: be defined with a width and height that is a
multiple of two.
* ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM specifies an unsigned
normalized _multi-planar format_ that has an 8-bit G component in plane
0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2.
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:[\lfloor i_G \times 0.5 \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.
Images in this format must: be defined with a width that is a multiple
of two.
* ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM specifies an unsigned
normalized _multi-planar format_ that has an 8-bit G component in plane
0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
component in byte 0 and an 8-bit R component in byte 1.
The horizontal dimensions of the BR plane is halved relative to the
image dimensions, and each R and B value is shared with the G components
for which latexmath:[\lfloor i_G \times 0.5 \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, and
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
Images in this format must: be defined with a width that is a multiple
of two.
* ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM specifies an unsigned
normalized _multi-planar format_ that has an 8-bit G component in plane
0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2.
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_R10X6_UNORM_PACK16 specifies a one-component, 16-bit
unsigned normalized format that has a single 10-bit R component in the
top 10 bits of a 16-bit word, with the bottom 6 bits set to 0.
* ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 specifies a two-component,
32-bit unsigned normalized format that has a 10-bit R component in the
top 10 bits of the word in bytes 0..1, and a 10-bit G component in the
top 10 bits of the word in bytes 2..3, with the bottom 6 bits of each
word set to 0.
* ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 specifies a
four-component, 64-bit unsigned normalized format that has a 10-bit R
component in the top 10 bits of the word in bytes 0..1, a 10-bit G
component in the top 10 bits of the word in bytes 2..3, a 10-bit B
component in the top 10 bits of the word in bytes 4..5, and a 10-bit A
component in the top 10 bits of the word in bytes 6..7, with the bottom
6 bits of each word set to 0.
* ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 specifies a
four-component, 64-bit format containing a pair of G components, an R
component, and a B component, collectively encoding a 2{times}1
rectangle of unsigned normalized RGB texel data.
One G value is present at each _i_ coordinate, with the B and R values
shared across both G values and thus recorded at half the horizontal
resolution of the image.
This format has a 10-bit G component for the even _i_ coordinate in the
top 10 bits of the word in bytes 0..1, a 10-bit B component in the top
10 bits of the word in bytes 2..3, a 10-bit G component for the odd _i_
coordinate in the top 10 bits of the word in bytes 4..5, and a 10-bit R
component in the top 10 bits of the word in bytes 6..7, with the bottom
6 bits of each word set to 0.
Images in this format must: be defined with a width that is a multiple
of two.
For the purposes of the constraints on copy extents, this format is
treated as a compressed format with a 2{times}1 compressed texel block.
* ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 specifies a
four-component, 64-bit format containing a pair of G components, an R
component, and a B component, collectively encoding a 2{times}1
rectangle of unsigned normalized RGB texel data.
One G value is present at each _i_ coordinate, with the B and R values
shared across both G values and thus recorded at half the horizontal
resolution of the image.
This format has a 10-bit B component in the top 10 bits of the word in
bytes 0..1, a 10-bit G component for the even _i_ coordinate in the top
10 bits of the word in bytes 2..3, a 10-bit R component in the top 10
bits of the word in bytes 4..5, and a 10-bit G component for the odd _i_
coordinate in the top 10 bits of the word in bytes 6..7, with the bottom
6 bits of each word set to 0.
Images in this format must: be defined with a width that is a multiple
of two.
For the purposes of the constraints on copy extents, this format is
treated as a compressed format with a 2{times}1 compressed texel block.
* ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 10-bit G component
in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
component in the top 10 bits of each 16-bit word of plane 2, with the
bottom 6 bits of each word set to 0.
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:[\lfloor i_G \times 0.5
\rfloor = i_B = i_R] and latexmath:[\lfloor j_G \times 0.5 \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.
Images in this format must: be defined with a width and height that is a
multiple of two.
* ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 10-bit G component
in the top 10 bits of each 16-bit word of plane 0, and a two-component,
32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
of the word in bytes 2..3, the bottom 6 bits of each word set to 0.
The horizontal and vertical dimensions of the BR plane is halved
relative to the image dimensions, and each R and B value is shared with
the G components for which latexmath:[\lfloor i_G \times 0.5 \rfloor =
i_B = i_R] and latexmath:[\lfloor j_G \times 0.5 \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, and
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
Images in this format must: be defined with a width and height that is a
multiple of two.
* ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 10-bit G component
in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
component in the top 10 bits of each 16-bit word of plane 2, with the
bottom 6 bits of each word set to 0.
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:[\lfloor i_G \times 0.5 \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.
Images in this format must: be defined with a width that is a multiple
of two.
* ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 10-bit G component
in the top 10 bits of each 16-bit word of plane 0, and a two-component,
32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
of the word in bytes 2..3, the bottom 6 bits of each word set to 0.
The horizontal dimensions of the BR plane is halved relative to the
image dimensions, and each R and B value is shared with the G components
for which latexmath:[\lfloor i_G \times 0.5 \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, and
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
Images in this format must: be defined with a width that is a multiple
of two.
* ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 10-bit G component
in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
component in the top 10 bits of each 16-bit word of plane 2, with the
bottom 6 bits of each word set to 0.
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_R12X4_UNORM_PACK16 specifies a one-component, 16-bit
unsigned normalized format that has a single 12-bit R component in the
top 12 bits of a 16-bit word, with the bottom 4 bits set to 0.
* ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 specifies a two-component,
32-bit unsigned normalized format that has a 12-bit R component in the
top 12 bits of the word in bytes 0..1, and a 12-bit G component in the
top 12 bits of the word in bytes 2..3, with the bottom 4 bits of each
word set to 0.
* ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 specifies a
four-component, 64-bit unsigned normalized format that has a 12-bit R
component in the top 12 bits of the word in bytes 0..1, a 12-bit G
component in the top 12 bits of the word in bytes 2..3, a 12-bit B
component in the top 12 bits of the word in bytes 4..5, and a 12-bit A
component in the top 12 bits of the word in bytes 6..7, with the bottom
4 bits of each word set to 0.
* ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 specifies a
four-component, 64-bit format containing a pair of G components, an R
component, and a B component, collectively encoding a 2{times}1
rectangle of unsigned normalized RGB texel data.
One G value is present at each _i_ coordinate, with the B and R values
shared across both G values and thus recorded at half the horizontal
resolution of the image.
This format has a 12-bit G component for the even _i_ coordinate in the
top 12 bits of the word in bytes 0..1, a 12-bit B component in the top
12 bits of the word in bytes 2..3, a 12-bit G component for the odd _i_
coordinate in the top 12 bits of the word in bytes 4..5, and a 12-bit R
component in the top 12 bits of the word in bytes 6..7, with the bottom
4 bits of each word set to 0.
Images in this format must: be defined with a width that is a multiple
of two.
For the purposes of the constraints on copy extents, this format is
treated as a compressed format with a 2{times}1 compressed texel block.
* ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 specifies a
four-component, 64-bit format containing a pair of G components, an R
component, and a B component, collectively encoding a 2{times}1
rectangle of unsigned normalized RGB texel data.
One G value is present at each _i_ coordinate, with the B and R values
shared across both G values and thus recorded at half the horizontal
resolution of the image.
This format has a 12-bit B component in the top 12 bits of the word in
bytes 0..1, a 12-bit G component for the even _i_ coordinate in the top
12 bits of the word in bytes 2..3, a 12-bit R component in the top 12
bits of the word in bytes 4..5, and a 12-bit G component for the odd _i_
coordinate in the top 12 bits of the word in bytes 6..7, with the bottom
4 bits of each word set to 0.
Images in this format must: be defined with a width that is a multiple
of two.
For the purposes of the constraints on copy extents, this format is
treated as a compressed format with a 2{times}1 compressed texel block.
* ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 12-bit G component
in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
component in the top 12 bits of each 16-bit word of plane 2, with the
bottom 4 bits of each word set to 0.
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:[\lfloor i_G \times 0.5
\rfloor = i_B = i_R] and latexmath:[\lfloor j_G \times 0.5 \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.
Images in this format must: be defined with a width and height that is a
multiple of two.
* ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 12-bit G component
in the top 12 bits of each 16-bit word of plane 0, and a two-component,
32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
of the word in bytes 2..3, the bottom 4 bits of each word set to 0.
The horizontal and vertical dimensions of the BR plane is halved
relative to the image dimensions, and each R and B value is shared with
the G components for which latexmath:[\lfloor i_G \times 0.5 \rfloor =
i_B = i_R] and latexmath:[\lfloor j_G \times 0.5 \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, and
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
Images in this format must: be defined with a width and height that is a
multiple of two.
* ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 12-bit G component
in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
component in the top 12 bits of each 16-bit word of plane 2, with the
bottom 4 bits of each word set to 0.
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:[\lfloor i_G \times 0.5 \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.
Images in this format must: be defined with a width that is a multiple
of two.
* ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 12-bit G component
in the top 12 bits of each 16-bit word of plane 0, and a two-component,
32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
of the word in bytes 2..3, the bottom 4 bits of each word set to 0.
The horizontal dimensions of the BR plane is halved relative to the
image dimensions, and each R and B value is shared with the G components
for which latexmath:[\lfloor i_G \times 0.5 \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, and
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
Images in this format must: be defined with a width that is a multiple
of two.
* ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 specifies an
unsigned normalized _multi-planar format_ that has a 12-bit G component
in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
component in the top 12 bits of each 16-bit word of plane 2, with the
bottom 4 bits of each word set to 0.
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_G16B16G16R16_422_UNORM specifies a four-component,
64-bit format containing a pair of G components, an R component, and a B
component, collectively encoding a 2{times}1 rectangle of unsigned
normalized RGB texel data.
One G value is present at each _i_ coordinate, with the B and R values
shared across both G values and thus recorded at half the horizontal
resolution of the image.
This format has a 16-bit G component for the even _i_ coordinate in the
word in bytes 0..1, a 16-bit B component in the word in bytes 2..3, a
16-bit G component for the odd _i_ coordinate in the word in bytes 4..5,
and a 16-bit R component in the word in bytes 6..7.
Images in this format must: be defined with a width that is a multiple
of two.
For the purposes of the constraints on copy extents, this format is
treated as a compressed format with a 2{times}1 compressed texel block.
* ename:VK_FORMAT_B16G16R16G16_422_UNORM specifies a four-component,
64-bit format containing a pair of G components, an R component, and a B
component, collectively encoding a 2{times}1 rectangle of unsigned
normalized RGB texel data.
One G value is present at each _i_ coordinate, with the B and R values
shared across both G values and thus recorded at half the horizontal
resolution of the image.
This format has a 16-bit B component in the word in bytes 0..1, a 16-bit
G component for the even _i_ coordinate in the word in bytes 2..3, a
16-bit R component in the word in bytes 4..5, and a 16-bit G component
for the odd _i_ coordinate in the word in bytes 6..7.
Images in this format must: be defined with a width that is a multiple
of two.
For the purposes of the constraints on copy extents, this format is
treated as a compressed format with a 2{times}1 compressed texel block.
* ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM specifies an unsigned
normalized _multi-planar format_ that has a 16-bit G component in each
16-bit word of plane 0, a 16-bit B component in each 16-bit word of
plane 1, and a 16-bit R component in each 16-bit word of plane 2.
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:[\lfloor i_G \times 0.5
\rfloor = i_B = i_R] and latexmath:[\lfloor j_G \times 0.5 \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.
Images in this format must: be defined with a width and height that is a
multiple of two.
* ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM specifies an unsigned
normalized _multi-planar format_ that has a 16-bit G component in each
16-bit word of plane 0, and a two-component, 32-bit BR plane 1
consisting of a 16-bit B component in the word in bytes 0..1, and a
16-bit R component in the word in bytes 2..3.
The horizontal and vertical dimensions of the BR plane is halved
relative to the image dimensions, and each R and B value is shared with
the G components for which latexmath:[\lfloor i_G \times 0.5 \rfloor =
i_B = i_R] and latexmath:[\lfloor j_G \times 0.5 \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, and
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
Images in this format must: be defined with a width and height that is a
multiple of two.
* ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM specifies an unsigned
normalized _multi-planar format_ that has a 16-bit G component in each
16-bit word of plane 0, a 16-bit B component in each 16-bit word of
plane 1, and a 16-bit R component in each 16-bit word of plane 2.
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:[\lfloor i_G \times 0.5 \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.
Images in this format must: be defined with a width that is a multiple
of two.
* ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM specifies an unsigned
normalized _multi-planar format_ that has a 16-bit G component in each
16-bit word of plane 0, and a two-component, 32-bit BR plane 1
consisting of a 16-bit B component in the word in bytes 0..1, and a
16-bit R component in the word in bytes 2..3.
The horizontal dimensions of the BR plane is halved relative to the
image dimensions, and each R and B value is shared with the G components
for which latexmath:[\lfloor i_G \times 0.5 \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, and
ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
Images in this format must: be defined with a width that is a multiple
of two.
* ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM specifies an unsigned
normalized _multi-planar format_ that has a 16-bit G component in each
16-bit word of plane 0, a 16-bit B component in each 16-bit word of
plane 1, and a 16-bit R component in each 16-bit word of plane 2.
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_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
--
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
[[features-formats-compatible-planes]]
==== Compatible formats of planes of multi-planar formats
Individual planes of multi-planar formats are _compatible_ with single-plane
formats if they occupy the same number of bits per data element.
In the following table, individual planes of a _multi-planar_ format are
compatible with the format listed against the relevant plane index for that
multi-planar format.
.Plane Format Compatibility Table
[width="95%",cols="1,6,3,3",options="header"]
|====
^| Plane ^| Compatible format for plane ^| Width relative to the width _w_ of the plane with the largest dimensions ^| Height relative to the height _h_ of the plane with the largest dimensions
4+| *ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM*
^| 0 ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h/2
^| 2 ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h/2
4+| *ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM*
^| 0 ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R8G8_UNORM ^| w/2 ^| h/2
4+| *ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM*
^| 0 ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h
^| 2 ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h
4+| *ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM*
^| 0 ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R8G8_UNORM ^| w/2 ^| h
4+| *ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM*
^| 0 ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
^| 2 ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
4+| *ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h/2
^| 2 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h/2
4+| *ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 ^| w/2 ^| h/2
4+| *ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h
^| 2 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h
4+| *ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 ^| w/2 ^| h
4+| *ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
^| 2 ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
4+| *ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h/2
^| 2 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h/2
4+| *ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 ^| w/2 ^| h/2
4+| *ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h
^| 2 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h
4+| *ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 ^| w/2 ^| h
4+| *ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16*
^| 0 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
^| 2 ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
4+| *ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM*
^| 0 ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h/2
^| 2 ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h/2
4+| *ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM*
^| 0 ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R16G16_UNORM ^| w/2 ^| h/2
4+| *ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM*
^| 0 ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h
^| 2 ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h
4+| *ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM*
^| 0 ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R16G16_UNORM ^| w/2 ^| h
4+| *ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM*
^| 0 ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
^| 1 ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
^| 2 ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
|====
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
[[features-formats-packed]]
==== Packed Formats
For the purposes of address alignment when accessing buffer memory
containing vertex attribute or texel data, the following formats are
considered _packed_ - whole texels or attributes are stored in a single data
element, rather than individual components occupying a single data element:
* <<features-formats-packed-8-bit,Packed into 8-bit data types>>:
** ename:VK_FORMAT_R4G4_UNORM_PACK8
* <<features-formats-packed-16-bit,Packed into 16-bit data types>>:
** ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
** ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16
** ename:VK_FORMAT_R5G6B5_UNORM_PACK16
** ename:VK_FORMAT_B5G6R5_UNORM_PACK16
** ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16
** ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16
** ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
* <<features-formats-packed-32-bit,Packed into 32-bit data types>>:
** ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32
** ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32
** ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32
** ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32
** ename:VK_FORMAT_A8B8G8R8_UINT_PACK32
** ename:VK_FORMAT_A8B8G8R8_SINT_PACK32
** ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32
** ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32
** ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32
** ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32
** ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32
** ename:VK_FORMAT_A2R10G10B10_UINT_PACK32
** ename:VK_FORMAT_A2R10G10B10_SINT_PACK32
** ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
** ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32
** ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32
** ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32
** ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
** ename:VK_FORMAT_A2B10G10R10_SINT_PACK32
** ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
** ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
** ename:VK_FORMAT_X8_D24_UNORM_PACK32
==== Identification of Formats
A "`format`" is represented by a single enum value.
The name of a format is usually built up by using the following pattern:
....
VK_FORMAT_{component-format|compression-scheme}_{numeric-format}
....
The component-format indicates either the size of the R, G, B, and A
components (if they are present) in the case of a color format, or the size
of the depth (D) and stencil (S) components (if they are present) in the
case of a depth/stencil format (see below).
An X indicates a component that is unused, but may: be present for padding.
<<<
[[features-formats-numericformat]]
.Interpretation of Numeric Format
[width="95%",cols="2,10",options="header"]
|====
| Numeric format | Description
| etext:UNORM | The components are unsigned normalized values in the range [eq]#[0,1]#
| etext:SNORM | The components are signed normalized values in the range [eq]#[-1,1]#
| etext:USCALED | The components are unsigned integer values that get converted to floating-point in the range [0,2^n^-1]
| etext:SSCALED | The components are signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1]
| etext:UINT | The components are unsigned integer values in the range [0,2^n^-1]
| etext:SINT | The components are signed integer values in the range [-2^n-1^,2^n-1^-1]
| etext:UFLOAT | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)
| etext:SFLOAT | The components are signed floating-point numbers
| etext:SRGB | The R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value
|====
The suffix etext:_PACKnn indicates that the format is packed into an
underlying type with nn bits.
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
The suffix etext:_mPACKnn is a short-hand that indicates that the format has
several components (which may or may not be stored in separate _planes_)
that are each packed into an underlying type with nn bits.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
The suffix etext:_BLOCK indicates that the format is a block-compressed
format, with the representation of multiple pixels encoded interdependently
within a region.
[[features-formats-compressionscheme]]
.Interpretation of Compression Scheme
[width="95%",cols="2,10",options="header"]
|====
| Compression scheme | Description
| etext:BC | Block Compression. See <<appendix-compressedtex-bc>>.
| etext:ETC2 | Ericsson Texture Compression. See <<appendix-compressedtex-etc2>>.
| etext:EAC | ETC2 Alpha Compression. See <<appendix-compressedtex-etc2>>.
| etext:ASTC | Adaptive Scalable Texture Compression (LDR Profile). See <<appendix-compressedtex-astc>>.
|====
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
For _multi-planar_ images, the components in separate _planes_ are separated
by underscores, and the number of planes is indicated by the addition of a
etext:_2PLANE or etext:_3PLANE suffix.
Similarly, the separate aspects of depth-stencil formats are separated by
underscores, although these are not considered separate planes.
Formats are suffixed by etext:_422 to indicate that planes other than the
first are reduced in size by a factor of two horizontally or that the R and
B values appear at half the horizontal frequency of the G values, etext:_420
to indicate that planes other than the first are reduced in size by a factor
of two both horizontally and vertically, and etext:_444 for consistency to
indicate that all three planes of a three-planar image are the same size.
[NOTE]
.Note
====
No common format has a single plane containing both R and B channels but
does not store these channels at reduced horizontal resolution.
====
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
==== Representation
Color formats must: be represented in memory in exactly the form indicated
by the format's name.
This means that promoting one format to another with more bits per component
and/or additional components must: not occur for color formats.
Depth/stencil formats have more relaxed requirements as discussed
<<features-formats-depth-stencil,below>>.
Each format has an _element size_, the number of bytes used to stored one
element or one compressed block, with the value of the element size listed
in slink:VkFormat.
The representation of non-packed formats is that the first component
specified in the name of the format is in the lowest memory addresses and
the last component specified is in the highest memory addresses.
See <<features-formats-non-packed,Byte mappings for non-packed/compressed
color formats>>.
The in-memory ordering of bytes within a component is determined by the host
endianness.
[[features-formats-non-packed]]
.Byte mappings for non-packed/compressed color formats
[options="header",cols="16*1,10",width="100%"]
|====
>|0 >|1 >|2 >|3 >|4 >|5 >|6 >|7 >|8 >|9 >|10 >|11 >|12 >|13 >|14 >|15 ^| {leftarrow} Byte
^|R 16+>s|etext:VK_FORMAT_R8_*
^|R ^|G 15+>s|etext:VK_FORMAT_R8G8_*
^|R ^|G ^|B 14+>s|etext:VK_FORMAT_R8G8B8_*
^|B ^|G ^|R 14+>s|etext:VK_FORMAT_B8G8R8_*
^|R ^|G ^|B ^|A 13+>s|etext:VK_FORMAT_R8G8B8A8_*
^|B ^|G ^|R ^|A 13+>s|etext:VK_FORMAT_B8G8R8A8_*
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
^|G~0~ ^|B ^|G~1~ ^|R 13+>s|etext:VK_FORMAT_G8B8G8R8_422_UNORM
^|B ^|G~0~ ^|R ^|G~1~ 13+>s|etext:VK_FORMAT_B8G8R8G8_422_UNORM
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
2+^|R 15+>s|etext:VK_FORMAT_R16_*
2+^|R 2+^|G 13+>s|etext:VK_FORMAT_R16G16_*
2+^|R 2+^|G 2+^|B 11+>s|etext:VK_FORMAT_R16G16B16_*
2+^|R 2+^|G 2+^|B 2+^|A 9+>s|etext:VK_FORMAT_R16G16B16A16_*
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
2+^|G~0~ 2+^|B 2+^|G~1~ 2+^|R 9+>s|etext:VK_FORMAT_G10X6B10X6G10X6R10X6_4PACK16_422_UNORM
etext:VK_FORMAT_G12X4B12X4G12X4R12X4_4PACK16_422_UNORM
etext:VK_FORMAT_G16B16G16R16_UNORM
2+^|B 2+^|G~0~ 2+^|R 2+^|G~1~ 9+>s|etext:VK_FORMAT_B10X6G10X6R10X6G10X6_4PACK16_422_UNORM
etext:VK_FORMAT_B12X4G12X4R12X4G12X4_4PACK16_422_UNORM
etext:VK_FORMAT_B16G16R16G16_422_UNORM
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
4+^|R 13+>s|etext:VK_FORMAT_R32_*
4+^|R 4+^|G 9+>s|etext:VK_FORMAT_R32G32_*
4+^|R 4+^|G 4+^|B 5+>s|etext:VK_FORMAT_R32G32B32_*
4+^|R 4+^|G 4+^|B 4+^|A >s|etext:VK_FORMAT_R32G32B32A32_*
8+^|R 9+>s|etext:VK_FORMAT_R64_*
8+^|R 8+^|G >s|etext:VK_FORMAT_R64G64_*
17+^s|etext:VK_FORMAT_R64G64B64_* as etext:VK_FORMAT_R64G64_* but with B in bytes 16-23
17+^s|etext:VK_FORMAT_R64G64B64A64_* as etext:VK_FORMAT_R64G64B64_* but with A in bytes 24-31
|====
Packed formats store multiple components within one underlying type.
The bit representation is that the first component specified in the name of
the format is in the most-significant bits and the last component specified
is in the least-significant bits of the underlying type.
The in-memory ordering of bytes comprising the underlying type is determined
by the host endianness.
[[features-formats-packed-8-bit]]
.Bit mappings for packed 8-bit formats
[options="header",cols="8*1",width="100%"]
|====
8+^h| Bit
>|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~
8+^h| ename:VK_FORMAT_R4G4_UNORM_PACK8
4+^s|R 4+^s|G
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
|====
[[features-formats-packed-16-bit]]
.Bit mappings for packed 16-bit formats
[options="header",cols="16*1",width="100%"]
|====
16+^h| Bit
>|~15~ >|~14~ >|~13~ >|~12~ >|~11~ >|~10~ >|~9~ >|~8~ >|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~
16+^h|ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
4+^s|R 4+^s|G 4+^s|B 4+^s|A
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
16+^h|ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16
4+^s|B 4+^s|G 4+^s|R 4+^s|A
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
16+^h|ename:VK_FORMAT_R5G6B5_UNORM_PACK16
5+^s|R 6+^s|G 5+^s|B
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
16+^h|ename:VK_FORMAT_B5G6R5_UNORM_PACK16
5+^s|B 6+^s|G 5+^s|R
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
16+^h|ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16
5+^s|R 5+^s|G 5+^s|B 1+^s|A
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~0~
16+^h|ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16
5+^s|B 5+^s|G 5+^s|R 1+^s|A
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~0~
16+^h|ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
1+^s|A 5+^s|R 5+^s|G 5+^s|B
^| ~0~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
16+^h|ename:VK_FORMAT_R10X6_UNORM_PACK16
10+^s|R 6+^s|X
^| ~9~ ^| ~8~ ^| ~7~ ^| ~6~ ^| ~5~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
16+^h|ename:VK_FORMAT_R12X4_UNORM_PACK16
12+^s|R 4+^s|X
^| ~11~ ^| ~10~
^| ~9~ ^| ~8~ ^| ~7~ ^| ~6~ ^| ~5~
^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
|====
[[features-formats-packed-32-bit]]
.Bit mappings for packed 32-bit formats
[cols="32*1",options="header"]
|====
32+^h|Bit
>|~31~ >|~30~ >|~29~ >|~28~ >|~27~ >|~26~ >|~25~ >|~24~ >|~23~ >|~22~ >|~21~ >|~20~ >|~19~ >|~18~ >|~17~ >|~16~
>|~15~ >|~14~ >|~13~ >|~12~ >|~11~ >|~10~ >|~9~ >|~8~ >|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~
32+^h|etext:VK_FORMAT_A8B8G8R8_*_PACK32
8+^s|A 8+^s|B 8+^s|G 8+^s|R
^|~7~ ^|~6~ ^|~5~ ^|~4~
^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~7~ ^|~6~ ^|~5~ ^|~4~
^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~7~ ^|~6~ ^|~5~ ^|~4~
^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~7~ ^|~6~ ^|~5~ ^|~4~
^|~3~ ^|~2~ ^|~1~ ^|~0~
32+^h|etext:VK_FORMAT_A2R10G10B10_*_PACK32
2+^s|A 10+^s|R 10+^s|G 10+^s|B
^|~1~ ^|~0~
^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
32+^h|etext:VK_FORMAT_A2B10G10R10_*_PACK32
2+^s|A 10+^s|B 10+^s|G 10+^s|R
^|~1~ ^|~0~
^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
32+^h|ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
10+^s|B 11+^s|G 11+^s|R
^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~10~ ^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~10~ ^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
32+^h|ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
5+^s|E 9+^s|B 9+^s|G 9+^s|R
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~8~ ^|~7~ ^|~6~ ^|~5~
^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
32+^h|ename:VK_FORMAT_X8_D24_UNORM_PACK32
8+^s|X 24+^s|D
^|~7~ ^|~6~ ^|~5~ ^|~4~
^|~3~ ^|~2~ ^|~1~ ^|~0~
^|~23~ ^|~22~ ^|~21~ ^|~20~
^|~19~ ^|~18~ ^|~17~ ^|~16~
^|~15~ ^|~14~ ^|~13~ ^|~12~
^|~11~ ^|~10~ ^|~9~ ^|~8~
^|~7~ ^|~6~ ^|~5~ ^|~4~
^|~3~ ^|~2~ ^|~1~ ^|~0~
|====
[[features-formats-depth-stencil]]
==== Depth/Stencil Formats
Depth/stencil formats are considered opaque and need not be stored in the
exact number of bits per texel or component ordering indicated by the format
enum.
However, implementations must: not substitute a different depth or stencil
precision than that described in the format (e.g. D16 must: not be
implemented as D24 or D32).
[[features-formats-compatibility-classes]]
==== Format Compatibility Classes
Uncompressed color formats are _compatible_ with each other if they occupy
the same number of bits per data element.
Compressed color formats are compatible with each other if the only
difference between them is the numerical type of the uncompressed pixels
(e.g. signed vs.
unsigned, or SRGB vs.
UNORM encoding).
Each depth/stencil format is only compatible with itself.
In the <<features-formats-compatibility,following>> table, all the formats
in the same row are compatible.
[[features-formats-compatibility]]
.Compatible formats
[width="90%",cols="4,10",options="header"]
|====
| Class | Formats
| 8-bit | ename:VK_FORMAT_R4G4_UNORM_PACK8, +
ename:VK_FORMAT_R8_UNORM, +
ename:VK_FORMAT_R8_SNORM, +
ename:VK_FORMAT_R8_USCALED, +
ename:VK_FORMAT_R8_SSCALED, +
ename:VK_FORMAT_R8_UINT, +
ename:VK_FORMAT_R8_SINT, +
ename:VK_FORMAT_R8_SRGB
| 16-bit | ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16, +
ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16, +
ename:VK_FORMAT_R5G6B5_UNORM_PACK16, +
ename:VK_FORMAT_B5G6R5_UNORM_PACK16, +
ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16, +
ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16, +
ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16, +
ename:VK_FORMAT_R8G8_UNORM, +
ename:VK_FORMAT_R8G8_SNORM, +
ename:VK_FORMAT_R8G8_USCALED, +
ename:VK_FORMAT_R8G8_SSCALED, +
ename:VK_FORMAT_R8G8_UINT, +
ename:VK_FORMAT_R8G8_SINT, +
ename:VK_FORMAT_R8G8_SRGB, +
ename:VK_FORMAT_R16_UNORM, +
ename:VK_FORMAT_R16_SNORM, +
ename:VK_FORMAT_R16_USCALED, +
ename:VK_FORMAT_R16_SSCALED, +
ename:VK_FORMAT_R16_UINT, +
ename:VK_FORMAT_R16_SINT, +
ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ename:VK_FORMAT_R16_SFLOAT
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ename:VK_FORMAT_R16_SFLOAT, +
ename:VK_FORMAT_R10X6_UNORM_PACK16, +
ename:VK_FORMAT_R12X4_UNORM_PACK16
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
| 24-bit | ename:VK_FORMAT_R8G8B8_UNORM, +
ename:VK_FORMAT_R8G8B8_SNORM, +
ename:VK_FORMAT_R8G8B8_USCALED, +
ename:VK_FORMAT_R8G8B8_SSCALED, +
ename:VK_FORMAT_R8G8B8_UINT, +
ename:VK_FORMAT_R8G8B8_SINT, +
ename:VK_FORMAT_R8G8B8_SRGB, +
ename:VK_FORMAT_B8G8R8_UNORM, +
ename:VK_FORMAT_B8G8R8_SNORM, +
ename:VK_FORMAT_B8G8R8_USCALED, +
ename:VK_FORMAT_B8G8R8_SSCALED, +
ename:VK_FORMAT_B8G8R8_UINT, +
ename:VK_FORMAT_B8G8R8_SINT, +
ename:VK_FORMAT_B8G8R8_SRGB
| 32-bit | ename:VK_FORMAT_R8G8B8A8_UNORM, +
ename:VK_FORMAT_R8G8B8A8_SNORM, +
ename:VK_FORMAT_R8G8B8A8_USCALED, +
ename:VK_FORMAT_R8G8B8A8_SSCALED, +
ename:VK_FORMAT_R8G8B8A8_UINT, +
ename:VK_FORMAT_R8G8B8A8_SINT, +
ename:VK_FORMAT_R8G8B8A8_SRGB, +
ename:VK_FORMAT_B8G8R8A8_UNORM, +
ename:VK_FORMAT_B8G8R8A8_SNORM, +
ename:VK_FORMAT_B8G8R8A8_USCALED, +
ename:VK_FORMAT_B8G8R8A8_SSCALED, +
ename:VK_FORMAT_B8G8R8A8_UINT, +
ename:VK_FORMAT_B8G8R8A8_SINT, +
ename:VK_FORMAT_B8G8R8A8_SRGB, +
ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32, +
ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32, +
ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32, +
ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32, +
ename:VK_FORMAT_A8B8G8R8_UINT_PACK32, +
ename:VK_FORMAT_A8B8G8R8_SINT_PACK32, +
ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32, +
ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32, +
ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32, +
ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32, +
ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32, +
ename:VK_FORMAT_A2R10G10B10_UINT_PACK32, +
ename:VK_FORMAT_A2R10G10B10_SINT_PACK32, +
ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32, +
ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32, +
ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32, +
ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32, +
ename:VK_FORMAT_A2B10G10R10_UINT_PACK32, +
ename:VK_FORMAT_A2B10G10R10_SINT_PACK32, +
ename:VK_FORMAT_R16G16_UNORM, +
ename:VK_FORMAT_R16G16_SNORM, +
ename:VK_FORMAT_R16G16_USCALED, +
ename:VK_FORMAT_R16G16_SSCALED, +
ename:VK_FORMAT_R16G16_UINT, +
ename:VK_FORMAT_R16G16_SINT, +
ename:VK_FORMAT_R16G16_SFLOAT, +
ename:VK_FORMAT_R32_UINT, +
ename:VK_FORMAT_R32_SINT, +
ename:VK_FORMAT_R32_SFLOAT, +
ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32, +
ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, +
ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16, +
ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16
| 32-bit G8B8G8R8 | ename:VK_FORMAT_G8B8G8R8_422_UNORM
| 32-bit B8G8R8G8 | ename:VK_FORMAT_B8G8R8G8_422_UNORM
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
| 48-bit | ename:VK_FORMAT_R16G16B16_UNORM, +
ename:VK_FORMAT_R16G16B16_SNORM, +
ename:VK_FORMAT_R16G16B16_USCALED, +
ename:VK_FORMAT_R16G16B16_SSCALED, +
ename:VK_FORMAT_R16G16B16_UINT, +
ename:VK_FORMAT_R16G16B16_SINT, +
ename:VK_FORMAT_R16G16B16_SFLOAT
| 64-bit | ename:VK_FORMAT_R16G16B16A16_UNORM, +
ename:VK_FORMAT_R16G16B16A16_SNORM, +
ename:VK_FORMAT_R16G16B16A16_USCALED, +
ename:VK_FORMAT_R16G16B16A16_SSCALED, +
ename:VK_FORMAT_R16G16B16A16_UINT, +
ename:VK_FORMAT_R16G16B16A16_SINT, +
ename:VK_FORMAT_R16G16B16A16_SFLOAT, +
ename:VK_FORMAT_R32G32_UINT, +
ename:VK_FORMAT_R32G32_SINT, +
ename:VK_FORMAT_R32G32_SFLOAT, +
ename:VK_FORMAT_R64_UINT, +
ename:VK_FORMAT_R64_SINT, +
ename:VK_FORMAT_R64_SFLOAT
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
| 64-bit R10G10B10A10 | ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
| 64-bit G10B10G10R10 | ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
| 64-bit B10G10R10G10 | ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
| 64-bit R12G12B12A12 | ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
| 64-bit G12B12G12R12 | ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
| 64-bit B12G12R12G12 | ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
| 64-bit G16B16G16R16 | ename:VK_FORMAT_G16B16G16R16_422_UNORM
| 64-bit B16G16R16G16 | ename:VK_FORMAT_B16G16R16G16_422_UNORM
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
| 96-bit | ename:VK_FORMAT_R32G32B32_UINT, +
ename:VK_FORMAT_R32G32B32_SINT, +
ename:VK_FORMAT_R32G32B32_SFLOAT
| 128-bit | ename:VK_FORMAT_R32G32B32A32_UINT, +
ename:VK_FORMAT_R32G32B32A32_SINT, +
ename:VK_FORMAT_R32G32B32A32_SFLOAT, +
ename:VK_FORMAT_R64G64_UINT, +
ename:VK_FORMAT_R64G64_SINT, +
ename:VK_FORMAT_R64G64_SFLOAT
| 192-bit | ename:VK_FORMAT_R64G64B64_UINT, +
ename:VK_FORMAT_R64G64B64_SINT, +
ename:VK_FORMAT_R64G64B64_SFLOAT
| 256-bit | ename:VK_FORMAT_R64G64B64A64_UINT, +
ename:VK_FORMAT_R64G64B64A64_SINT, +
ename:VK_FORMAT_R64G64B64A64_SFLOAT
| BC1_RGB | ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK, +
ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK
| BC1_RGBA | ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK, +
ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK
| BC2 | ename:VK_FORMAT_BC2_UNORM_BLOCK, +
ename:VK_FORMAT_BC2_SRGB_BLOCK
| BC3 | ename:VK_FORMAT_BC3_UNORM_BLOCK, +
ename:VK_FORMAT_BC3_SRGB_BLOCK
| BC4 | ename:VK_FORMAT_BC4_UNORM_BLOCK, +
ename:VK_FORMAT_BC4_SNORM_BLOCK
| BC5 | ename:VK_FORMAT_BC5_UNORM_BLOCK, +
ename:VK_FORMAT_BC5_SNORM_BLOCK
| BC6H | ename:VK_FORMAT_BC6H_UFLOAT_BLOCK, +
ename:VK_FORMAT_BC6H_SFLOAT_BLOCK
| BC7 | ename:VK_FORMAT_BC7_UNORM_BLOCK, +
ename:VK_FORMAT_BC7_SRGB_BLOCK
| ETC2_RGB | ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, +
ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
| ETC2_RGBA | ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, +
ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
| ETC2_EAC_RGBA | ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, +
ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
| EAC_R | ename:VK_FORMAT_EAC_R11_UNORM_BLOCK, +
ename:VK_FORMAT_EAC_R11_SNORM_BLOCK
| EAC_RG | ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK, +
ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK
| ASTC_4x4 | ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK
| ASTC_5x4 | ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK
| ASTC_5x5 | ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK
| ASTC_6x5 | ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK
| ASTC_6x6 | ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK
| ASTC_8x5 | ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK
| ASTC_8x6 | ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK
| ASTC_8x8 | ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK
| ASTC_10x5 | ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK
| ASTC_10x6 | ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK
| ASTC_10x8 | ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK
| ASTC_10x10 | ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK
| ASTC_12x10 | ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK
| ASTC_12x12 | ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK, +
ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK
| D16 | ename:VK_FORMAT_D16_UNORM
| D24 | ename:VK_FORMAT_X8_D24_UNORM_PACK32
| D32 | ename:VK_FORMAT_D32_SFLOAT
| S8 | ename:VK_FORMAT_S8_UINT
| D16S8 | ename:VK_FORMAT_D16_UNORM_S8_UINT
| D24S8 | ename:VK_FORMAT_D24_UNORM_S8_UINT
| D32S8 | ename:VK_FORMAT_D32_SFLOAT_S8_UINT
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
| 8-bit 3-plane 420 | ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
| 8-bit 2-plane 420 | ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
| 8-bit 3-plane 422 | ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM
| 8-bit 2-plane 422 | ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM
| 8-bit 3-plane 444 | ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM
| 10-bit 3-plane 420 | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
| 10-bit 2-plane 420 | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
| 10-bit 3-plane 422 | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
| 10-bit 2-plane 422 | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
| 10-bit 3-plane 444 | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
| 12-bit 3-plane 420 | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
| 12-bit 2-plane 420 | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
| 12-bit 3-plane 422 | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
| 12-bit 2-plane 422 | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
| 12-bit 3-plane 444 | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
| 16-bit 3-plane 420 | ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM
| 16-bit 2-plane 420 | ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM
| 16-bit 3-plane 422 | ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM
| 16-bit 2-plane 422 | ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM
| 16-bit 3-plane 444 | ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
|====
[[features-formats-properties]]
=== Format Properties
[open,refpage='vkGetPhysicalDeviceFormatProperties',desc='Lists physical device\'s format capabilities',type='protos']
--
To query supported format features which are properties of the physical
device, call:
include::../api/protos/vkGetPhysicalDeviceFormatProperties.txt[]
* pname:physicalDevice is the physical device from which to query the
format properties.
* pname:format is the format whose properties are queried.
* pname:pFormatProperties is a pointer to a slink:VkFormatProperties
structure in which physical device properties for pname:format are
returned.
include::../validity/protos/vkGetPhysicalDeviceFormatProperties.txt[]
--
[open,refpage='VkFormatProperties',desc='Structure specifying image format properties',type='structs']
--
The sname:VkFormatProperties structure is defined as:
include::../api/structs/VkFormatProperties.txt[]
* pname:linearTilingFeatures is a bitmask of elink:VkFormatFeatureFlagBits
specifying features supported by images created with a pname:tiling
parameter of ename:VK_IMAGE_TILING_LINEAR.
* pname:optimalTilingFeatures is a bitmask of
elink:VkFormatFeatureFlagBits specifying features supported by images
created with a pname:tiling parameter of ename:VK_IMAGE_TILING_OPTIMAL.
* pname:bufferFeatures is a bitmask of elink:VkFormatFeatureFlagBits
specifying features supported by buffers.
[NOTE]
.Note
====
ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
If no format feature flags are supported, then the only possible use would
be image transfers - which alone are not useful.
As such, if no format feature flags are supported, the format itself is not
supported, and images of that format cannot be created.
endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
If no format feature flags are supported, the format itself is not
supported, and images of that format cannot be created.
endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
====
If pname:format is a block-compression format, then pname:bufferFeatures
must: not support any features for the format.
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
If pname:format is a multi-plane format then pname:linearTilingFeatures and
pname:optimalTilingFeatures must: not contain
ename:VK_FORMAT_FEATURE_DISJOINT_BIT.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
include::../validity/structs/VkFormatProperties.txt[]
--
[open,refpage='VkFormatFeatureFlagBits',desc='Bitmask specifying features supported by a buffer',type='enums']
--
Bits which can: be set in the slink:VkFormatProperties features
pname:linearTilingFeatures, pname:optimalTilingFeatures,
ifdef::VK_EXT_image_drm_format_modifier[]
<<VkDrmFormatModifierPropertiesEXT,pname:drmFormatModifierTilingFeatures>>,
endif::VK_EXT_image_drm_format_modifier[]
and pname:bufferFeatures are:
include::../api/enums/VkFormatFeatureFlagBits.txt[]
The following bits may: be set in
ifndef::VK_EXT_image_drm_format_modifier[]
pname:linearTilingFeatures and pname:optimalTilingFeatures,
endif::VK_EXT_image_drm_format_modifier[]
ifdef::VK_EXT_image_drm_format_modifier[]
pname:linearTilingFeatures, pname:optimalTilingFeatures, and
<<VkDrmFormatModifierPropertiesEXT,pname:drmFormatModifierTilingFeatures>>,
endif::VK_EXT_image_drm_format_modifier[]
specifying that the features are supported by <<VkImage,images>> or
<<VkImageView,image views>> created with the queried
flink:vkGetPhysicalDeviceFormatProperties::pname:format:
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT specifies that an image view
can: be <<descriptorsets-sampledimage, sampled from>>.
* ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT specifies that an image view
can: be used as a <<descriptorsets-storageimage, storage images>>.
* ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT specifies that an image
view can: be used as storage image that supports atomic operations.
* ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT specifies that an image
view can: be used as a framebuffer color attachment and as an input
attachment.
* ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT specifies that an
image view can: be used as a framebuffer color attachment that supports
blending and as an input attachment.
* ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT specifies that an
image view can: be used as a framebuffer depth/stencil attachment and as
an input attachment.
* ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT specifies that an image can: be
used as pname:srcImage for the fname:vkCmdBlitImage command.
* ename:VK_FORMAT_FEATURE_BLIT_DST_BIT specifies that an image can: be
used as pname:dstImage for the fname:vkCmdBlitImage command.
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT specifies that
if ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT is also set, an image view
can: be used with a sampler that has either of pname:magFilter or
pname:minFilter set to ename:VK_FILTER_LINEAR, or pname:mipmapMode set
to ename:VK_SAMPLER_MIPMAP_MODE_LINEAR.
If ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT is also set, an image can be
used as the pname:srcImage to flink:vkCmdBlitImage with a pname:filter
of ename:VK_FILTER_LINEAR.
This bit must: only be exposed for formats that also support the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT or
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT.
+
If the format being queried is a depth/stencil format, this bit only
specifies that the depth aspect (not the stencil aspect) of an image of this
format supports linear filtering, and that linear filtering of the depth
aspect is supported whether depth compare is enabled in the sampler or not.
If this bit is not present, linear filtering with depth compare disabled is
unsupported and linear filtering with depth compare enabled is supported,
but may: compute the filtered value in an implementation-dependent manner
which differs from the normal rules of linear filtering.
The resulting value must: be in the range [eq]#[0,1]# and should: be
proportional to, or a weighted average of, the number of comparison passes
or failures.
ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
* ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT specifies that an image can: be
used as a source image for <<copies, copy commands>>.
* ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT specifies that an image can: be
used as a destination image for <<copies, copy commands>> and <<clears,
clear commands>>.
endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
ifdef::VK_EXT_sampler_filter_minmax[]
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT specifies
sname:VkImage can: be used as a sampled image with a min or max
elink:VkSamplerReductionModeEXT.
This bit must: only be exposed for formats that also support the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
endif::VK_EXT_sampler_filter_minmax[]
ifdef::VK_IMG_filter_cubic[]
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG specifies
that sname:VkImage can: be used with a sampler that has either of
pname:magFilter or pname:minFilter set to ename:VK_FILTER_CUBIC_IMG, or
be the source image for a blit with pname:filter set to
ename:VK_FILTER_CUBIC_IMG.
This bit must: only be exposed for formats that also support the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
If the format being queried is a depth/stencil format, this only
specifies that the depth aspect is cubic filterable.
endif::VK_IMG_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT specifies that an
application can: define a <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
conversion>> using this format as a source, and that an image of this
format can: be used with a sname:VkSamplerYcbcrConversionCreateInfo
pname:xChromaOffset and/or pname:yChromaOffset of
ename:VK_CHROMA_LOCATION_MIDPOINT.
Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
ename:VK_CHROMA_LOCATION_COSITED_EVEN.
If a format does not incorporate chroma downsampling (it is not a
"`422`" or "`420`" format) but the implementation supports sampler
Y'C~B~C~R~ conversion for this format, the implementation must: set
ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT.
* ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT specifies that an
application can: define a <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
conversion>> using this format as a source, and that an image of this
format can: be used with a sname:VkSamplerYcbcrConversionCreateInfo
pname:xChromaOffset and/or pname:yChromaOffset of
ename:VK_CHROMA_LOCATION_COSITED_EVEN.
Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
ename:VK_CHROMA_LOCATION_MIDPOINT.
If neither ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT nor
ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT is set, the
application must: not define a <<samplers-YCbCr-conversion,sampler
Y'C~B~C~R~ conversion>> using this format as a source.
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
specifies that the format can do linear sampler filtering
(min/magFilter) whilst sampler Y'C~B~C~R~ conversion is enabled.
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
specifies that the format can have different chroma, min, and mag
filters.
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
specifies that reconstruction is explicit, as described in
<<textures-chroma-reconstruction>>.
If this bit is not present, reconstruction is implicit by default.
* ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
specifies that reconstruction can: be forcibly made explicit by setting
slink:VkSamplerYcbcrConversionCreateInfo::pname:forceExplicitReconstruction
to ename:VK_TRUE.
* ename:VK_FORMAT_FEATURE_DISJOINT_BIT specifies that a multi-planar image
can: have the ename:VK_IMAGE_CREATE_DISJOINT_BIT set during image
creation.
An implementation must: not set ename:VK_FORMAT_FEATURE_DISJOINT_BIT for
_single-plane formats_.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
The following bits may: be set in pname:bufferFeatures, specifying that the
features are supported by <<VkBuffer,buffers>> or <<VkBufferView,buffer
views>> created with the queried
flink:vkGetPhysicalDeviceProperties::pname:format:
* ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT specifies that the
format can: be used to create a buffer view that can: be bound to a
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor.
* ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT specifies that the
format can: be used to create a buffer view that can: be bound to a
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor.
* ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT specifies that
atomic operations are supported on
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER with this format.
* ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT specifies that the format can:
be used as a vertex attribute format
(sname:VkVertexInputAttributeDescription::pname:format).
--
[open,refpage='VkFormatFeatureFlags',desc='Bitmask of VkFormatFeatureFlagBits',type='enums']
--
include::../api/flags/VkFormatFeatureFlags.txt[]
sname:VkFormatFeatureFlags is a bitmask type for setting a mask of zero or
more slink:VkFormatFeatureFlagBits.
--
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[open,refpage='vkGetPhysicalDeviceFormatProperties2',desc='Lists physical device\'s format capabilities',type='protos']
--
To query supported format features which are properties of the physical
device, call:
ifdef::VK_VERSION_1_1[]
include::../api/protos/vkGetPhysicalDeviceFormatProperties2.txt[]
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
ifdef::VK_KHR_get_physical_device_properties2[]
include::../api/protos/vkGetPhysicalDeviceFormatProperties2KHR.txt[]
endif::VK_KHR_get_physical_device_properties2[]
* pname:physicalDevice is the physical device from which to query the
format properties.
* pname:format is the format whose properties are queried.
* pname:pFormatProperties is a pointer to a slink:VkFormatProperties2
structure in which physical device properties for pname:format are
returned.
fname:vkGetPhysicalDeviceFormatProperties2 behaves similarly to
flink:vkGetPhysicalDeviceFormatProperties, with the ability to return
extended information in a pname:pNext chain of output structures.
include::../validity/protos/vkGetPhysicalDeviceFormatProperties2.txt[]
--
[open,refpage='VkFormatProperties2',desc='Structure specifying image format properties',type='structs']
--
The sname:VkFormatProperties2 structure is defined as:
include::../api/structs/VkFormatProperties2.txt[]
ifdef::VK_KHR_get_physical_device_properties2[]
or the equivalent
include::../api/structs/VkFormatProperties2KHR.txt[]
endif::VK_KHR_get_physical_device_properties2[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:formatProperties is a structure of type slink:VkFormatProperties
describing features supported by the requested format.
include::../validity/structs/VkFormatProperties2.txt[]
--
ifdef::VK_EXT_image_drm_format_modifier[]
[open,refpage='VkDrmFormatModifierPropertiesListEXT',desc='Structure specifying the list of DRM format modifiers supported for a format',type='structs']
--
To obtain the list of <<glossary-drm-format-modifier,Linux DRM format
modifiers>> compatible with a elink:VkFormat, add
slink:VkDrmFormatModifierPropertiesListEXT to the pname:pNext chain of
slink:VkFormatProperties2.
The slink:VkDrmFormatModifierPropertiesListEXT structure is defined as:
include::../api/structs/VkDrmFormatModifierPropertiesListEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:drmFormatModifierCount is an inout parameter related to the number
of modifiers compatible with the pname:format, as descibed below.
* pname:pDrmFormatModifierProperties is either `NULL` or an array of
slink:VkDrmFormatModifierPropertiesEXT structures.
If pname:pDrmFormatModifierProperties is `NULL`, then the function returns
in pname:drmFormatModifierCount the number of modifiers compatible with the
queried pname:format.
Otherwise, the application must: set pname:drmFormatModifierCount to the
length of the array pname:pDrmFormatModifierProperties; the function will
write at most pname:drmFormatModifierCount elements to the array, and will
return in pname:drmFormatModifierCount the number of elements written.
Among the elements in array pname:pDrmFormatModifierProperties, each
returned pname:drmFormatModifier must: be unique.
include::../validity/structs/VkDrmFormatModifierPropertiesListEXT.txt[]
--
[open,refpage='VkDrmFormatModifierPropertiesEXT',desc='Structure specifying properties of a format when combined with a DRM format modifier',type='structs']
--
The slink:VkDrmFormatModifierPropertiesEXT structure describes properties of
a elink:VkFormat when that format is combined with a
<<glossary-drm-format-modifier,Linux DRM format modifier>>.
These properties, like those of slink:VkFormatProperties2, are independent
of any particular image.
The slink:VkDrmFormatModifierPropertiesEXT structure is defined as:
include::../api/structs/VkDrmFormatModifierPropertiesEXT.txt[]
* pname:drmFormatModifier is a _Linux DRM format modifier_.
* pname:drmFormatModifierPlaneCount is the number of _memory planes_ in
any image created with pname:format and pname:drmFormatModifier.
An image's _memory planecount_ is distinct from its _format planecount_,
as explained below.
* pname:drmFormatModifierTilingFeatures is a bitmask of
elink:VkFormatFeatureFlagBits that are supported by any image created
with pname:format and pname:drmFormatModifier.
The returned pname:drmFormatModifierTilingFeatures must: contain at least
one bit.
The implementation must: not return etext:DRM_FORMAT_MOD_INVALID in
pname:drmFormatModifier.
An image's _memory planecount_ (as returned by
pname:drmFormatModifierPlaneCount) is distinct from its _format planecount_
(in the sense of
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar>>
Y'C~B~C~R~ formats).
In elink:VkImageAspectFlags, each
etext:VK_IMAGE_ASPECT_MEMORY_PLANE___i___BIT_EXT represents a _memory plane_
and each etext:VK_IMAGE_ASPECT_PLANE___i___BIT a _format plane_.
An image's set of _format planes_ is an ordered partition of the image's
*content* into separable groups of format channels.
The ordered partition is encoded in the name of each elink:VkFormat.
For example, ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM contains two _format
planes_; the first plane contains the green channel and the second plane
contains the blue channel and red channel.
If the format name does not contain `PLANE`, then the format contains a
single plane; for example, ename:VK_FORMAT_R8G8B8A8_UNORM.
Some commands, such as flink:vkCmdBufferToImage, do not operate on all
format channels in the image, but instead operate only on the _format
planes_ explicitly chosen by the application and operate on each _format
plane_ independently.
An image's set of _memory planes_ is an ordered partition of the image's
*memory* rather than the image's *content*.
Each _memory plane_ is a contiguous range of memory.
The union of an image's _memory planes_ is not necessarily contiguous.
If an image is <<glossary-linear-resource,linear>>, then the partition is
the same for _memory planes_ and for _format planes_.
Therefore, if the returned pname:drmFormatModifier is
ename:DRM_FORMAT_MOD_LINEAR, then pname:drmFormatModifierPlaneCount must:
equal the _format planecount_, and pname:drmFormatModifierTilingFeatures
must: be identical to the
slink:VkFormatProperties2::pname:linearTilingFeatures returned in the same
pname:pNext chain.
If an image is <<glossary-linear-resource,non-linear>>, then the partition
of the image's *memory* into _memory planes_ is implementation-specific and
may: be unrelated to the partition of the image's *content* into _format
planes_.
For example, consider an image whose pname:format is
ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, pname:tiling is
ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, whose pname:drmFormatModifier
is not ename:DRM_FORMAT_MOD_LINEAR, and pname:flags lacks
ename:VK_IMAGE_CREATE_DISJOINT_BIT.
The image has 3 _format planes_, and commands such
flink:vkCmdCopyBufferToImage act on each _format plane_ independently as if
the data of each _format plane_ were separable from the data of the other
planes.
In a straightforward implementation, the implementation may: store the
image's content in 3 adjacent _memory planes_ where each _memory plane_
corresponds exactly to a _format plane_.
However, the implementation may: also store the image's content in a single
_memory plane_ where all format channels are combined using an
implementation-private block-compressed format; or the implementation may:
store the image's content in a collection of 7 adjacent _memory planes_
using an implementation-private sharding technique.
Because the image is non-linear and non-disjoint, the implementation has
much freedom when choosing the image's placement in memory.
The _memory planecount_ applies to function parameters and structures only
when the API specifies an explicit requirement on
pname:drmFormatModifierPlaneCount.
In all other cases, the _memory planecount_ is ignored.
include::../validity/structs/VkDrmFormatModifierPropertiesEXT.txt[]
--
endif::VK_EXT_image_drm_format_modifier[]
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[[features-required-format-support]]
=== Required Format Support
Implementations must: support at least the following set of features on the
listed formats.
For images, these features must: be supported for every elink:VkImageType
(including arrayed and cube variants) unless otherwise noted.
These features are supported on existing formats without needing to
advertise an extension or needing to explicitly enable them.
Support for additional functionality beyond the requirements listed here is
queried using the flink:vkGetPhysicalDeviceFormatProperties command.
[NOTE]
.Note
====
The required formats are supported for all elink:VkImageCreateFlags values
as long as those flag values are otherwise allowed.
====
The following tables show which feature bits must: be supported for each
format.
ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
Formats that are required to support
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must: also support
ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT and
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT.
endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
.Key for format feature tables
[width="70%",cols="1,10"]
|====
^|{sym1} | This feature must: be supported on the named format
^|{sym2} | This feature must: be supported on at least some
of the named formats, with more information in the table
where the symbol appears
|====
.Feature bits in pname:optimalTilingFeatures
[width="70%"]
|====
ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
|ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
|ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
|ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
|ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT
|ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
|ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
|ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
|ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
|ename:VK_FORMAT_FEATURE_BLIT_DST_BIT
|ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
|ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
ifdef::VK_EXT_sampler_filter_minmax[]
|ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT
endif::VK_EXT_sampler_filter_minmax[]
|====
.Feature bits in pname:bufferFeatures
[width="70%"]
|====
|ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
|ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
|ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
|ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
|====
<<<
[[features-formats-mandatory-features-subbyte]]
.Mandatory format support: sub-byte channels
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_UNDEFINED | | | | | | | | | | | | |
| ename:VK_FORMAT_R4G4_UNORM_PACK8 | | | | | | | | | | | | |
| ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16 | | | | | | | | | | | | |
| ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 | {sym1} | {sym1} | {sym1} | | | | | | | | | |
| ename:VK_FORMAT_R5G6B5_UNORM_PACK16 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | |
| ename:VK_FORMAT_B5G6R5_UNORM_PACK16 | | | | | | | | | | | | |
| ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16 | | | | | | | | | | | | |
| ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 | | | | | | | | | | | | |
| ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | |
|====
<<<
[[features-formats-mandatory-features-2byte]]
.Mandatory format support: 1-3 byte-sized channels
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_R8_UNORM | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R8_SNORM | {sym1} | {sym1} | {sym1} | | | | | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R8_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R8_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R8_UINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R8_SINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R8_SRGB | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8_UNORM | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R8G8_SNORM | {sym1} | {sym1} | {sym1} | | | | | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R8G8_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8_UINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R8G8_SINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R8G8_SRGB | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8B8_UNORM | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8B8_SNORM | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8B8_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8B8_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8B8_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8B8_SINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8B8_SRGB | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8_UNORM | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8_SNORM | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8_SINT | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8_SRGB | | | | | | | | | | | | |
|====
<<<
[[features-formats-mandatory-features-4byte]]
.Mandatory format support: 4 byte-sized channels
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_R8G8B8A8_UNORM | {sym1} | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R8G8B8A8_SNORM | {sym1} | {sym1} | {sym1} | {sym1} | | | | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R8G8B8A8_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8B8A8_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R8G8B8A8_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R8G8B8A8_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R8G8B8A8_SRGB | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | |
| ename:VK_FORMAT_B8G8R8A8_UNORM | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | |
| ename:VK_FORMAT_B8G8R8A8_SNORM | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8A8_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8A8_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8A8_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8A8_SINT | | | | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8A8_SRGB | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | |
| ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32 | {sym1} | {sym1} | {sym1} | | | | | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A8B8G8R8_UINT_PACK32 | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_A8B8G8R8_SINT_PACK32 | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | |
|====
<<<
[[features-formats-mandatory-features-10bit]]
.Mandatory format support: 10-bit channels
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A2R10G10B10_UINT_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A2R10G10B10_SINT_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | |
| ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32 | | | | | | | | | | | | |
| ename:VK_FORMAT_A2B10G10R10_UINT_PACK32 | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | | {sym1} | |
| ename:VK_FORMAT_A2B10G10R10_SINT_PACK32 | | | | | | | | | | | | |
|====
<<<
[[features-formats-mandatory-features-16bit]]
.Mandatory format support: 16-bit channels
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_R16_UNORM | | | | | | | | | | {sym1} | | |
| ename:VK_FORMAT_R16_SNORM | | | | | | | | | | {sym1} | | |
| ename:VK_FORMAT_R16_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R16_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R16_UINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R16_SINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R16_SFLOAT | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R16G16_UNORM | | | | | | | | | | {sym1} | | |
| ename:VK_FORMAT_R16G16_SNORM | | | | | | | | | | {sym1} | | |
| ename:VK_FORMAT_R16G16_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16_UINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R16G16_SINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R16G16_SFLOAT | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | |
| ename:VK_FORMAT_R16G16B16_UNORM | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16B16_SNORM | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16B16_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16B16_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16B16_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16B16_SINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16B16_SFLOAT | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16B16A16_UNORM | | | | | | | | | | {sym1} | | |
| ename:VK_FORMAT_R16G16B16A16_SNORM | | | | | | | | | | {sym1} | | |
| ename:VK_FORMAT_R16G16B16A16_USCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16B16A16_SSCALED | | | | | | | | | | | | |
| ename:VK_FORMAT_R16G16B16A16_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R16G16B16A16_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R16G16B16A16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} |
|====
<<<
[[features-formats-mandatory-features-32bit]]
.Mandatory format support: 32-bit channels
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_R32_UINT | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | {sym1}
| ename:VK_FORMAT_R32_SINT | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | {sym1}
| ename:VK_FORMAT_R32_SFLOAT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R32G32_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R32G32_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R32G32_SFLOAT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R32G32B32_UINT | | | | | | | | | | {sym1} | | |
| ename:VK_FORMAT_R32G32B32_SINT | | | | | | | | | | {sym1} | | |
| ename:VK_FORMAT_R32G32B32_SFLOAT | | | | | | | | | | {sym1} | | |
| ename:VK_FORMAT_R32G32B32A32_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R32G32B32A32_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
| ename:VK_FORMAT_R32G32B32A32_SFLOAT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} |
|====
<<<
[[features-formats-mandatory-features-64bit]]
.Mandatory format support: 64-bit/uneven channels
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_R64_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64_SINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64_SFLOAT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64G64_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64G64_SINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64G64_SFLOAT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64G64B64_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64G64B64_SINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64G64B64_SFLOAT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64G64B64A64_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64G64B64A64_SINT | | | | | | | | | | | | |
| ename:VK_FORMAT_R64G64B64A64_SFLOAT | | | | | | | | | | | | |
| ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 | {sym1} | {sym1} | {sym1} | | | | | | | | {sym1} | |
| ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 | {sym1} | {sym1} | {sym1} | | | | | | | | | |
|====
<<<
[[features-formats-mandatory-features-depth-stencil]]
.Mandatory format support: depth/stencil with elink:VkImageType ename:VK_IMAGE_TYPE_2D
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_D16_UNORM | {sym1} | {sym1} | | | | | | | {sym1} | | | |
| ename:VK_FORMAT_X8_D24_UNORM_PACK32 | | | | | | | | | {sym2} | | | |
| ename:VK_FORMAT_D32_SFLOAT | {sym1} | {sym1} | | | | | | | {sym2} | | | |
| ename:VK_FORMAT_S8_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_D16_UNORM_S8_UINT | | | | | | | | | | | | |
| ename:VK_FORMAT_D24_UNORM_S8_UINT | | | | | | | | | {sym2} | | | |
| ename:VK_FORMAT_D32_SFLOAT_S8_UINT | | | | | | | | | {sym2} | | | |
14+| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT feature must: be
supported for at least one of ename:VK_FORMAT_X8_D24_UNORM_PACK32 and
ename:VK_FORMAT_D32_SFLOAT, and must: be supported for at least one of
ename:VK_FORMAT_D24_UNORM_S8_UINT and ename:VK_FORMAT_D32_SFLOAT_S8_UINT.
|====
<<<
[[features-formats-mandatory-features-bcn]]
.Mandatory format support: BC compressed formats with elink:VkImageType ename:VK_IMAGE_TYPE_2D and ename:VK_IMAGE_TYPE_3D
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC2_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC2_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC3_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC3_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC4_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC4_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC5_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC6H_UFLOAT_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC6H_SFLOAT_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC7_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_BC7_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
14+| The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be
supported in pname:optimalTilingFeatures for all the formats in at least
one of: this table, <<features-formats-mandatory-features-etc>>, or
<<features-formats-mandatory-features-astc>>.
|====
<<<
[[features-formats-mandatory-features-etc]]
.Mandatory format support: ETC2 and EAC compressed formats with elink:VkImageType ename:VK_IMAGE_TYPE_2D
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_EAC_R11_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_EAC_R11_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be
supported in pname:optimalTilingFeatures for all the formats in at least
one of: this table, <<features-formats-mandatory-features-bcn>>, or
<<features-formats-mandatory-features-astc>>.
|====
<<<
[[features-formats-mandatory-features-astc]]
.Mandatory format support: ASTC LDR compressed formats with elink:VkImageType ename:VK_IMAGE_TYPE_2D
[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow}
11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow}
1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow}
s| Format
| ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
| ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | |
14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be
supported in pname:optimalTilingFeatures for all the formats in at least
one of: this table, <<features-formats-mandatory-features-bcn>>, or
<<features-formats-mandatory-features-etc>>.
|====
ifdef::VK_IMG_filter_cubic[]
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG must: be
supported for the following formats:
* ename:VK_FORMAT_R4G4_UNORM_PACK8
* ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
* ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16
* ename:VK_FORMAT_R5G6B5_UNORM_PACK16
* ename:VK_FORMAT_B5G6R5_UNORM_PACK16
* ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16
* ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16
* ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
* ename:VK_FORMAT_R8_UNORM
* ename:VK_FORMAT_R8_SNORM
* ename:VK_FORMAT_R8_SRGB
* ename:VK_FORMAT_R8G8_UNORM
* ename:VK_FORMAT_R8G8_SNORM
* ename:VK_FORMAT_R8G8_SRGB
* ename:VK_FORMAT_R8G8B8_UNORM
* ename:VK_FORMAT_R8G8B8_SNORM
* ename:VK_FORMAT_R8G8B8_SRGB
* ename:VK_FORMAT_B8G8R8_UNORM
* ename:VK_FORMAT_B8G8R8_SNORM
* ename:VK_FORMAT_B8G8R8_SRGB
* ename:VK_FORMAT_R8G8B8A8_UNORM
* ename:VK_FORMAT_R8G8B8A8_SNORM
* ename:VK_FORMAT_R8G8B8A8_SRGB
* ename:VK_FORMAT_B8G8R8A8_UNORM
* ename:VK_FORMAT_B8G8R8A8_SNORM
* ename:VK_FORMAT_B8G8R8A8_SRGB
* ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32
* ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32
* ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32
* ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32
* ename:VK_FORMAT_A8B8G8R8_UINT_PACK32
* ename:VK_FORMAT_A8B8G8R8_SINT_PACK32
* ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32
If ETC2 compressed formats are supported, the following additional formats
must: support ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG:
* ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
* ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
* ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
* ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
* ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
* ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
endif::VK_IMG_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
To be used with sname:VkImageView with pname:subresourceRange.aspectMask =
ename:VK_IMAGE_ASPECT_COLOR_BIT, <<samplers-YCbCr-conversion,sampler
Y'C~B~C~R~ conversion>> must: be enabled for the following formats:
[[features-formats-requiring-sampler-ycbcr-conversion]]
.Formats requiring sampler Y'C~B~C~R~ conversion for ename:VK_IMAGE_ASPECT_COLOR_BIT image views
[width="100%",cols="18,^3,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
|====
11+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT .11+^.^| {downarrow}
10+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT .10+^.^| {downarrow}
9+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT .9+^.^| {downarrow}
8+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT .8+^.^| {downarrow}
7+>| ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT .7+^.^| {downarrow}
6+>| ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT .6+^.^| {downarrow}
5+>| ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT .5+^.^| {downarrow}
4+>| ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT .4+^.^| {downarrow}
3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .3+^.^| {downarrow}
2+>| ename:VK_FORMAT_FEATURE_DISJOINT_BIT .2+^.^| {downarrow}
s| Format s| Planes
| ename:VK_FORMAT_G8B8G8R8_422_UNORM | 1 | | | | | | | | | |
| ename:VK_FORMAT_B8G8R8G8_422_UNORM | 1 | | | | | | | | | |
| ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM | 3 | | {sym1} | {sym1} | {sym1} | {sym1} | | | | |
| ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM | 2 | | {sym1} | {sym1} | {sym1} | {sym1} | | | | |
| ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM | 3 | | | | | | | | | |
| ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM | 2 | | | | | | | | | |
| ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM | 3 | | | | | | | | | |
| ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 | 1 | | | | | | | | | |
| ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 | 1 | | | | | | | | | |
| ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 | 1 | | | | | | | | | |
| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 | 3 | | | | | | | | | |
| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 | 2 | | | | | | | | | |
| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 | 3 | | | | | | | | | |
| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 | 2 | | | | | | | | | |
| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 | 3 | | | | | | | | | |
| ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 | 1 | | | | | | | | | |
| ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 | 1 | | | | | | | | | |
| ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 | 1 | | | | | | | | | |
| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 | 3 | | | | | | | | | |
| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 | 2 | | | | | | | | | |
| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 | 3 | | | | | | | | | |
| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 | 2 | | | | | | | | | |
| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 | 3 | | | | | | | | | |
| ename:VK_FORMAT_G16B16G16R16_422_UNORM | 1 | | | | | | | | | |
| ename:VK_FORMAT_B16G16R16G16_422_UNORM | 1 | | | | | | | | | |
| ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM | 3 | | | | | | | | | |
| ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM | 2 | | | | | | | | | |
| ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM | 3 | | | | | | | | | |
| ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM | 2 | | | | | | | | | |
| ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM | 3 | | | | | | | | | |
12+| Format features marked {sym1} must: be supported only if slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures is enabled
|====
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
== Additional Image Capabilities
In addition to the minimum capabilities described in the previous sections
(<<features-limits,Limits>> and <<features-formats,Formats>>),
implementations may: support additional capabilities for certain types of
images.
For example, larger dimensions or additional sample counts for certain image
types, or additional capabilities for _linear_ tiling format images.
[open,refpage='vkGetPhysicalDeviceImageFormatProperties',desc='Lists physical device\'s image format capabilities',type='protos']
--
To query additional capabilities specific to image types, call:
include::../api/protos/vkGetPhysicalDeviceImageFormatProperties.txt[]
* pname:physicalDevice is the physical device from which to query the
image capabilities.
* pname:format is a elink:VkFormat value specifying the image format,
corresponding to slink:VkImageCreateInfo::pname:format.
* pname:type is a elink:VkImageType value specifying the image type,
corresponding to slink:VkImageCreateInfo::pname:imageType.
* pname:tiling is a elink:VkImageTiling value specifying the image tiling,
corresponding to slink:VkImageCreateInfo::pname:tiling.
* pname:usage is a bitmask of elink:VkImageUsageFlagBits specifying the
intended usage of the image, corresponding to
slink:VkImageCreateInfo::pname:usage.
* pname:flags is a bitmask of elink:VkImageCreateFlagBits specifying
additional parameters of the image, corresponding to
slink:VkImageCreateInfo::pname:flags.
* pname:pImageFormatProperties points to an instance of the
slink:VkImageFormatProperties structure in which capabilities are
returned.
The pname:format, pname:type, pname:tiling, pname:usage, and pname:flags
parameters correspond to parameters that would be consumed by
flink:vkCreateImage (as members of sname:VkImageCreateInfo).
If pname:format is not a supported image format, or if the combination of
pname:format, pname:type, pname:tiling, pname:usage, and pname:flags is not
supported for images, then fname:vkGetPhysicalDeviceImageFormatProperties
returns ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
The limitations on an image format that are reported by
fname:vkGetPhysicalDeviceImageFormatProperties have the following property:
if code:usage1 and code:usage2 of type elink:VkImageUsageFlags are such that
the bits set in code:usage1 are a subset of the bits set in code:usage2, and
code:flags1 and code:flags2 of type elink:VkImageCreateFlags are such that
the bits set in code:flags1 are a subset of the bits set in code:flags2,
then the limitations for code:usage1 and code:flags1 must: be no more strict
than the limitations for code:usage2 and code:flags2, for all values of
pname:format, pname:type, and pname:tiling.
ifdef::VK_EXT_image_drm_format_modifier[]
.Valid Usage
****
* [[VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-02248]]
pname:tiling must: not be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
(Use flink:vkGetPhysicalDeviceImageFormatProperties2 instead).
****
endif::VK_EXT_image_drm_format_modifier[]
include::../validity/protos/vkGetPhysicalDeviceImageFormatProperties.txt[]
--
[open,refpage='VkImageFormatProperties',desc='Structure specifying an image format properties',type='structs']
--
The sname:VkImageFormatProperties structure is defined as:
include::../api/structs/VkImageFormatProperties.txt[]
* pname:maxExtent are the maximum image dimensions.
See the <<features-extentperimagetype,Allowed Extent Values>> section
below for how these values are constrained by pname:type.
* pname:maxMipLevels is the maximum number of mipmap levels.
pname:maxMipLevels must: be equal to the number of levels in the
complete mipmap chain based on the [eq]#pname:maxExtent.width#,
[eq]#pname:maxExtent.height#, and [eq]#pname:maxExtent.depth#, except
when one of the following conditions is true, in which case it may:
instead be `1`:
** fname:vkGetPhysicalDeviceImageFormatProperties::pname:tiling was
ename:VK_IMAGE_TILING_LINEAR
ifdef::VK_EXT_image_drm_format_modifier[]
** slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling was
ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
endif::VK_EXT_image_drm_format_modifier[]
ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
** the slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext chain
included an instance of slink:VkPhysicalDeviceExternalImageFormatInfo
with a handle type included in the pname:handleTypes member for which
mipmap image support is not required
endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
** image pname:format is one of those listed in
<<features-formats-requiring-sampler-ycbcr-conversion>>
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* pname:maxArrayLayers is the maximum number of array layers.
* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, then
pname:maxArrayLayers must: either be equal to 1 or be no less than
slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers.
* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL and pname:type is
ename:VK_IMAGE_TYPE_3D, then pname:maxArrayLayers must: either be equal
to 1 or be no less than
slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers.
* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL and pname:type is not
ename:VK_IMAGE_TYPE_3D, then pname:maxArrayLayers must: be no less than
slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers.
ifdef::VK_EXT_image_drm_format_modifier[]
* If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
pname:maxArrayLayers must: not be 0.
endif::VK_EXT_image_drm_format_modifier[]
* pname:sampleCounts is a bitmask of elink:VkSampleCountFlagBits
specifying all the supported sample counts for this image as described
<<features-supported-sample-counts, below>>.
* pname:maxResourceSize is an upper bound on the total image size in
bytes, inclusive of all image subresources.
Implementations may: have an address space limit on total size of a
resource, which is advertised by this property.
pname:maxResourceSize must: be at least 2^31^.
[NOTE]
.Note
====
There is no mechanism to query the size of an image before creating it, to
compare that size against pname:maxResourceSize.
If an application attempts to create an image that exceeds this limit, the
creation will fail and flink:vkCreateImage will return
ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
While the advertised limit must: be at least 2^31^, it may: not be possible
to create an image that approaches that size, particularly for
ename:VK_IMAGE_TYPE_1D.
====
If the combination of parameters to
fname:vkGetPhysicalDeviceImageFormatProperties is not supported by the
implementation for use in flink:vkCreateImage, then all members of
sname:VkImageFormatProperties will be filled with zero.
[NOTE]
.Note
====
Filling sname:VkImageFormatProperties with zero for unsupported formats is
an exception to the usual rule that output structures have undefined:
contents on error.
This exception was unintentional, but is preserved for backwards
compatibility.
====
include::../validity/structs/VkImageFormatProperties.txt[]
--
ifdef::VK_NV_external_memory_capabilities[]
include::./VK_NV_external_memory_capabilities/external_image_format.txt[]
endif::VK_NV_external_memory_capabilities[]
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[open,refpage='vkGetPhysicalDeviceImageFormatProperties2',desc='Lists physical device\'s image format capabilities',type='protos']
--
To query additional capabilities specific to image types, call:
ifdef::VK_VERSION_1_1[]
include::../api/protos/vkGetPhysicalDeviceImageFormatProperties2.txt[]
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
ifdef::VK_KHR_get_physical_device_properties2[]
include::../api/protos/vkGetPhysicalDeviceImageFormatProperties2KHR.txt[]
endif::VK_KHR_get_physical_device_properties2[]
* pname:physicalDevice is the physical device from which to query the
image capabilities.
* pname:pImageFormatInfo points to an instance of the
slink:VkPhysicalDeviceImageFormatInfo2 structure, describing the
parameters that would be consumed by flink:vkCreateImage.
* pname:pImageFormatProperties points to an instance of the
slink:VkImageFormatProperties2 structure in which capabilities are
returned.
fname:vkGetPhysicalDeviceImageFormatProperties2 behaves similarly to
flink:vkGetPhysicalDeviceImageFormatProperties, with the ability to return
extended information in a pname:pNext chain of output structures.
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
.Valid Usage
****
* [[VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-01868]]
If the pname:pNext chain of pname:pImageFormatProperties contains an
instance of slink:VkAndroidHardwareBufferUsageANDROID, the pname:pNext
chain of pname:pImageFormatInfo must: contain an instance of
slink:VkPhysicalDeviceExternalImageFormatInfo with pname:handleType set
to
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
****
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
include::../validity/protos/vkGetPhysicalDeviceImageFormatProperties2.txt[]
--
[open,refpage='VkPhysicalDeviceImageFormatInfo2',desc='Structure specifying image creation parameters',type='structs']
--
The sname:VkPhysicalDeviceImageFormatInfo2 structure is defined as:
include::../api/structs/VkPhysicalDeviceImageFormatInfo2.txt[]
ifdef::VK_KHR_get_physical_device_properties2[]
or the equivalent
include::../api/structs/VkPhysicalDeviceImageFormatInfo2KHR.txt[]
endif::VK_KHR_get_physical_device_properties2[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
The pname:pNext chain of sname:VkPhysicalDeviceImageFormatInfo2 is used
to provide additional image parameters to
fname:vkGetPhysicalDeviceImageFormatProperties2.
* pname:format is a elink:VkFormat value indicating the image format,
corresponding to slink:VkImageCreateInfo::pname:format.
* pname:type is a elink:VkImageType value indicating the image type,
corresponding to slink:VkImageCreateInfo::pname:imageType.
* pname:tiling is a elink:VkImageTiling value indicating the image tiling,
corresponding to slink:VkImageCreateInfo::pname:tiling.
* pname:usage is a bitmask of elink:VkImageUsageFlagBits indicating the
intended usage of the image, corresponding to
slink:VkImageCreateInfo::pname:usage.
* pname:flags is a bitmask of elink:VkImageCreateFlagBits indicating
additional parameters of the image, corresponding to
slink:VkImageCreateInfo::pname:flags.
The members of sname:VkPhysicalDeviceImageFormatInfo2 correspond to the
arguments to flink:vkGetPhysicalDeviceImageFormatProperties, with
pname:sType and pname:pNext added for extensibility.
ifdef::VK_EXT_image_drm_format_modifier[]
.Valid Usage
****
* [[VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02249]]
pname:tiling must: be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT if
and only if the pname:pNext chain contains
slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT.
* [[VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02313]]
If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and
pname:flags contains ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, then the
pname:pNext chain must: contain slink:VkImageFormatListCreateInfoKHR
with non-zero pname:viewFormatCount.
****
endif::VK_EXT_image_drm_format_modifier[]
include::../validity/structs/VkPhysicalDeviceImageFormatInfo2.txt[]
--
[open,refpage='VkImageFormatProperties2',desc='Structure specifying an image format properties',type='structs']
--
The sname:VkImageFormatProperties2 structure is defined as:
include::../api/structs/VkImageFormatProperties2.txt[]
ifdef::VK_KHR_get_physical_device_properties2[]
or the equivalent
include::../api/structs/VkImageFormatProperties2KHR.txt[]
endif::VK_KHR_get_physical_device_properties2[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
The pname:pNext chain of sname:VkImageFormatProperties2 is used to allow
the specification of additional capabilities to be returned from
fname:vkGetPhysicalDeviceImageFormatProperties2.
* pname:imageFormatProperties is an instance of a
slink:VkImageFormatProperties structure in which capabilities are
returned.
If the combination of parameters to
fname:vkGetPhysicalDeviceImageFormatProperties2 is not supported by the
implementation for use in flink:vkCreateImage, then all members of
pname:imageFormatProperties will be filled with zero.
[NOTE]
.Note
====
Filling pname:imageFormatProperties with zero for unsupported formats is an
exception to the usual rule that output structures have undefined: contents
on error.
This exception was unintentional, but is preserved for backwards
compatibility.
This exeption only applies to pname:imageFormatProperties, not pname:sType,
pname:pNext, or any structures chained from pname:pNext.
====
include::../validity/structs/VkImageFormatProperties2.txt[]
--
ifdef::VK_AMD_texture_gather_bias_lod[]
[open,refpage='VkTextureLODGatherFormatPropertiesAMD',desc='Structure informing whether or not texture gather bias/LOD functionality is supported for a given image format and a given physical device.',type='structs']
--
To determine if texture gather functions that take explicit LOD and/or bias
argument values can be used with a given image format, add
slink:VkImageFormatProperties2 to the pname:pNext chain of the
slink:VkPhysicalDeviceImageFormatInfo2 structure and
slink:VkTextureLODGatherFormatPropertiesAMD to the pname:pNext chain of the
slink:VkImageFormatProperties2 structure.
The sname:VkTextureLODGatherFormatPropertiesAMD structure is defined as:
include::../api/structs/VkTextureLODGatherFormatPropertiesAMD.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL`.
* pname:supportsTextureGatherLODBiasAMD tells if the image format can be
used with texture gather bias/LOD functions, as introduced by the
`<<VK_AMD_texture_gather_bias_lod>>` extension.
This field is set by the implementation.
User-specified value is ignored.
--
endif::VK_AMD_texture_gather_bias_lod[]
ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
[open,refpage='VkPhysicalDeviceExternalImageFormatInfo',desc='Structure specifying external image creation parameters',type='structs']
--
To determine the image capabilities compatible with an external memory
handle type, add slink:VkPhysicalDeviceExternalImageFormatInfo to the
pname:pNext chain of the slink:VkPhysicalDeviceImageFormatInfo2 structure
and sname:VkExternalImageFormatProperties to the pname:pNext chain of the
slink:VkImageFormatProperties2 structure.
The sname:VkPhysicalDeviceExternalImageFormatInfo structure is defined as:
include::../api/structs/VkPhysicalDeviceExternalImageFormatInfo.txt[]
ifdef::VK_KHR_external_memory_capabilities[]
or the equivalent
include::../api/structs/VkPhysicalDeviceExternalImageFormatInfoKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
specifying the memory handle type that will be used with the memory
associated with the image.
If pname:handleType is 0, flink:vkGetPhysicalDeviceImageFormatProperties2
will behave as if slink:VkPhysicalDeviceExternalImageFormatInfo was not
present, and slink:VkExternalImageFormatProperties will be ignored.
If pname:handleType is not compatible with the pname:format, pname:type,
pname:tiling, pname:usage, and pname:flags specified in
slink:VkPhysicalDeviceImageFormatInfo2, then
flink:vkGetPhysicalDeviceImageFormatProperties2 returns
ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
include::../validity/structs/VkPhysicalDeviceExternalImageFormatInfo.txt[]
--
[open,refpage='VkExternalMemoryHandleTypeFlagBits',desc='Bit specifying external memory handle types',type='enums']
--
Possible values of
slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType, specifying
an external memory handle type, are:
include::../api/enums/VkExternalMemoryHandleTypeFlagBits.txt[]
ifdef::VK_KHR_external_memory_capabilities[]
or the equivalent
include::../api/enums/VkExternalMemoryHandleTypeFlagBitsKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX
file descriptor handle that has only limited valid usage outside of
Vulkan and other compatible APIs.
It must: be compatible with the POSIX system calls ftext:dup,
ftext:dup2, ftext:close, and the non-standard system call ftext:dup3.
Additionally, it must: be transportable over a socket using an
code:SCM_RIGHTS control message.
It owns a reference to the underlying memory resource represented by its
Vulkan memory object.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
handle that has only limited valid usage outside of Vulkan and other
compatible APIs.
It must: be compatible with the functions ftext:DuplicateHandle,
ftext:CloseHandle, ftext:CompareObjectHandles,
ftext:GetHandleInformation, and ftext:SetHandleInformation.
It owns a reference to the underlying memory resource represented by its
Vulkan memory object.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
global share handle that has only limited valid usage outside of Vulkan
and other compatible APIs.
It is not compatible with any native APIs.
It does not own a reference to the underlying memory resource
represented its Vulkan memory object, and will therefore become invalid
when all Vulkan memory objects associated with it are destroyed.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT specifies an NT
handle returned by code:IDXGIResource1::code:CreateSharedHandle
referring to a Direct3D 10 or 11 texture resource.
It owns a reference to the memory used by the Direct3D resource.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT specifies a
global share handle returned by code:IDXGIResource::code:GetSharedHandle
referring to a Direct3D 10 or 11 texture resource.
It does not own a reference to the underlying Direct3D resource, and
will therefore become invalid when all Vulkan memory objects and
Direct3D resources associated with it are destroyed.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT specifies an NT
handle returned by code:ID3D12Device::code:CreateSharedHandle referring
to a Direct3D 12 heap resource.
It owns a reference to the resources used by the Direct3D heap.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT specifies an NT
handle returned by code:ID3D12Device::code:CreateSharedHandle referring
to a Direct3D 12 committed resource.
It owns a reference to the memory used by the Direct3D resource.
ifdef::VK_EXT_external_memory_host[]
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT specifies a
host pointer returned by a host memory allocation command.
It does not own a reference to the underlying memory resource, and will
therefore become invalid if the host memory is freed.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
specifies a host pointer to _host mapped foreign memory_.
It does not own a reference to the underlying memory resource, and will
therefore become invalid if the foreign memory is unmapped or otherwise
becomes no longer available.
endif::VK_EXT_external_memory_host[]
ifdef::VK_EXT_external_memory_dma_buf[]
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT is a file
descriptor for a Linux dma_buf.
It owns a reference to the underlying memory resource represented by its
Vulkan memory object.
endif::VK_EXT_external_memory_dma_buf[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
specifies an code:AHardwareBuffer object defined by the Android NDK.
See <<memory-external-android-hardware-buffer,Android Hardware Buffers>>
for more details of this handle type.
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
<<<
Some external memory handle types can only be shared within the same
underlying physical device and/or the same driver version, as defined in the
following table:
[[external-memory-handle-types-compatibility]]
.External memory handle types compatibility
|====
| Handle type | sname:VkPhysicalDeviceIDProperties::pname:driverUUID | sname:VkPhysicalDeviceIDProperties::pname:deviceUUID
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT | Must match | Must match
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT | Must match | Must match
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT | Must match | Must match
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT | Must match | Must match
ifdef::VK_EXT_external_memory_host[]
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT | No restriction | No restriction
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT | No restriction | No restriction
endif::VK_EXT_external_memory_host[]
ifdef::VK_EXT_external_memory_dma_buf[]
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT | No restriction | No restriction
endif::VK_EXT_external_memory_dma_buf[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID | No restriction | No restriction
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
|====
ifdef::VK_EXT_external_memory_host[]
[NOTE]
.Note
====
The above table does not restrict the drivers and devices with which
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT and
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT may:
be shared, as these handle types inherently mean memory that does not come
from the same device, as they import memory from the host or a foreign
device, respectively.
====
endif::VK_EXT_external_memory_host[]
ifdef::VK_EXT_external_memory_dma_buf[]
[NOTE]
.Note
====
Even though the above table does not restrict the drivers and devices with
which ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT may: be shared,
query mechanisms exist in the Vulkan API that prevent the import of
incompatible dma-bufs (such as flink:vkGetMemoryFdPropertiesKHR) and that
prevent incompatible usage of dma-bufs (such as
slink:VkPhysicalDeviceExternalBufferInfoKHR and
slink:VkPhysicalDeviceExternalImageFormatInfoKHR).
====
endif::VK_EXT_external_memory_dma_buf[]
--
[open,refpage='VkExternalMemoryHandleTypeFlags',desc='Bitmask of VkExternalMemoryHandleTypeFlagBits',type='enums']
--
include::../api/flags/VkExternalMemoryHandleTypeFlags.txt[]
ifdef::VK_KHR_external_memory_capabilities[]
or the equivalent
include::../api/flags/VkExternalMemoryHandleTypeFlagsKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
sname:VkExternalMemoryHandleTypeFlags is a bitmask type for setting a mask
of zero or more slink:VkExternalMemoryHandleTypeFlagBits.
--
[open,refpage='VkExternalImageFormatProperties',desc='Structure specifying supported external handle properties',type='structs']
--
The sname:VkExternalImageFormatProperties structure is defined as:
include::../api/structs/VkExternalImageFormatProperties.txt[]
ifdef::VK_KHR_external_memory_capabilities[]
or the equivalent
include::../api/structs/VkExternalImageFormatPropertiesKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:externalMemoryProperties is an instance of the
slink:VkExternalMemoryProperties structure specifying various
capabilities of the external handle type when used with the specified
image creation parameters.
include::../validity/structs/VkExternalImageFormatProperties.txt[]
--
[open,refpage='VkExternalMemoryProperties',desc='Structure specifying external memory handle type capabilities',type='structs']
--
The sname:VkExternalMemoryProperties structure is defined as:
include::../api/structs/VkExternalMemoryProperties.txt[]
ifdef::VK_KHR_external_memory_capabilities[]
or the equivalent
include::../api/structs/VkExternalMemoryPropertiesKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
* pname:externalMemoryFeatures is a bitmask of
elink:VkExternalMemoryFeatureFlagBits specifying the features of
pname:handleType.
* pname:exportFromImportedHandleTypes is a bitmask of
slink:VkExternalMemoryHandleTypeFlagBits specifying which types of
imported handle pname:handleType can: be exported from.
* pname:compatibleHandleTypes is a bitmask of
slink:VkExternalMemoryHandleTypeFlagBits specifying handle types which
can: be specified at the same time as pname:handleType when creating an
image compatible with external memory.
pname:compatibleHandleTypes must: include at least pname:handleType.
Inclusion of a handle type in pname:compatibleHandleTypes does not imply the
values returned in slink:VkImageFormatProperties2 will be the same when
slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType is set to
that type.
The application is responsible for querying the capabilities of all handle
types intended for concurrent use in a single image and intersecting them to
obtain the compatible set of capabilities.
include::../validity/structs/VkExternalMemoryProperties.txt[]
--
[open,refpage='VkExternalMemoryFeatureFlagBits',desc='Bitmask specifying features of an external memory handle type',type='enums']
--
Bits which may: be set in
slink:VkExternalMemoryProperties::pname:externalMemoryFeatures, specifying
features of an external memory handle type, are:
include::../api/enums/VkExternalMemoryFeatureFlagBits.txt[]
ifdef::VK_KHR_external_memory_capabilities[]
or the equivalent
include::../api/enums/VkExternalMemoryFeatureFlagBitsKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
* ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT specifies that
images or buffers created with the specified parameters and handle type
must: use the mechanisms defined in the `<<VK_NV_dedicated_allocation>>`
extension to create (or import) a dedicated allocation for the image or
buffer.
* ename:VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT specifies that handles
of this type can: be exported from Vulkan memory objects.
* ename:VK_INTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT specifies that handles
of this type can: be imported as Vulkan memory objects.
Because their semantics in external APIs roughly align with that of an image
or buffer with a dedicated allocation in Vulkan, implementations are
required: to report ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for
the following external handle types:
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
for images only
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
Implementations must: not report
ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for buffers with
external handle type
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
--
[open,refpage='VkExternalMemoryFeatureFlags',desc='Bitmask of VkExternalMemoryFeatureFlagBits',type='enums']
--
include::../api/flags/VkExternalMemoryFeatureFlags.txt[]
ifdef::VK_KHR_external_memory_capabilities[]
or the equivalent
include::../api/flags/VkExternalMemoryFeatureFlagsKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
sname:VkExternalMemoryFeatureFlags is a bitmask type for setting a mask of
zero or more slink:VkExternalMemoryFeatureFlagBits.
--
endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
ifdef::VK_EXT_image_drm_format_modifier[]
[open,refpage='VkPhysicalDeviceImageDrmFormatModifierInfoEXT',desc='Structure specifying a DRM format modifier as image creation parameter',type='structs']
--
To query the image capabilities that are compatible with a
<<glossary-drm-format-modifier,Linux DRM format modifier>>, set
slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling to
ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and add
slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT to the pname:pNext chain
of slink:VkPhysicalDeviceImageFormatInfo2.
The slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure is defined
as:
include::../api/structs/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:drmFormatModifier is the image's _Linux DRM format modifier_,
corresponding to
slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:modifier or
to slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pModifiers.
* pname:sharingMode specifies how the image will be accessed by multiple
queue families.
* pname:queueFamilyIndexCount is the number of entries in the
pname:pQueueFamilyIndices array.
* pname:pQueueFamilyIndices is a list of queue families that will access
the image (ignored if pname:sharingMode is not
ename:VK_SHARING_MODE_CONCURRENT).
If the pname:drmFormatModifier is incompatible with the parameters specified
in slink:VkPhysicalDeviceImageFormatInfo2 and its pname:pNext chain, then
flink:vkGetPhysicalDeviceImageFormatProperties2 returns
ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
The implementation must: support the query of any pname:drmFormatModifier,
including unknown and invalid modifier values.
.Valid Usage
****
* [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02314]]
If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, then
pname:pQueueFamilyIndices must: be a valid pointer to an array of
pname:queueFamilyIndexCount basetype:uint32_t values.
* [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02315]]
If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, then
pname:queueFamilyIndexCount must: be greater than `1`.
* [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02316]]
If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
of pname:pQueueFamilyIndices must: be unique and must: be less than the
pname:pQueueFamilyPropertyCount returned by
flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
pname:physicalDevice that was used to create pname:device.
****
include::../validity/structs/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.txt[]
--
endif::VK_EXT_image_drm_format_modifier[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
[open,refpage='VkSamplerYcbcrConversionImageFormatProperties',desc='Structure specifying combined image sampler descriptor count for multi-planar images',type='structs']
--
To determine the number of combined image samplers required to support a
multi-planar format, add slink:VkSamplerYcbcrConversionImageFormatProperties
to the pname:pNext chain of the slink:VkImageFormatProperties2 structure in
a call to fname:vkGetPhysicalDeviceImageFormatProperties2.
The sname:VkSamplerYcbcrConversionImageFormatProperties structure is defined
as:
include::../api/structs/VkSamplerYcbcrConversionImageFormatProperties.txt[]
ifdef::VK_KHR_sampler_ycbcr_conversion[]
or the equivalent
include::../api/structs/VkSamplerYcbcrConversionImageFormatPropertiesKHR.txt[]
endif::VK_KHR_sampler_ycbcr_conversion[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:combinedImageSamplerDescriptorCount is the number of combined
image sampler descriptors that the implementation uses to access the
format.
include::../validity/structs/VkSamplerYcbcrConversionImageFormatProperties.txt[]
--
pname:combinedImageSamplerDescriptorCount affects only the count towards the
pname:maxDescriptorSetSamplers, pname:maxDescriptorSetSampledImages,
pname:maxPerStageDescriptorSamplers, and
pname:maxPerStageDescriptorSampledImages limits, and does not affect binding
numbers in the slink:VkDescriptorSetLayoutBinding.
pname:combinedImageSamplerDescriptorCount is a number between 1 and the
number of planes in the format.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
[open,refpage='VkAndroidHardwareBufferUsageANDROID',desc='Struct containing Android hardware buffer usage flags',type='structs']
--
To obtain optimal Android hardware buffer usage flags for specific image
creation parameters, attach an instance of
sname:VkAndroidHardwareBufferUsageANDROID to the pname:pNext chain of a
slink:VkImageFormatProperties2 structure passed to
slink:vkGetPhysicalDeviceImageFormatProperties2.
This structure is defined as:
include::../api/structs/VkAndroidHardwareBufferUsageANDROID.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:androidHardwareBufferUsage returns the Android hardware buffer
usage flags.
The pname:androidHardwareBufferUsage field must: include Android hardware
buffer usage flags listed in the
<<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage
Equivalence>> table when the corresponding Vulkan image usage or image
creation flags are included in the pname:usage or pname:flags fields of
slink:VkPhysicalDeviceImageFormatInfo2.
It must: include at least one GPU usage flag
(code:AHARDWAREBUFFER_USAGE_GPU_*), even if none of the corresponding Vulkan
usages or flags are requested.
.Note
[NOTE]
====
Requiring at least one GPU usage flag ensures that Android hardware buffer
memory will be allocated in a memory pool accessible to the Vulkan
implementation, and that specializing the memory layout based on usage flags
does not prevent it from being compatible with Vulkan.
Implementations may: avoid unnecessary restrictions caused by this
requirement by using vendor usage flags to indicate that only the Vulkan
uses indicated in slink:VkImageFormatProperties2 are required.
====
include::../validity/structs/VkAndroidHardwareBufferUsageANDROID.txt[]
--
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[[features-supported-sample-counts]]
=== Supported Sample Counts
fname:vkGetPhysicalDeviceImageFormatProperties returns a bitmask of
elink:VkSampleCountFlagBits in pname:sampleCounts specifying the supported
sample counts for the image parameters.
pname:sampleCounts will be set to ename:VK_SAMPLE_COUNT_1_BIT if at least
one of the following conditions is true:
* pname:tiling is ename:VK_IMAGE_TILING_LINEAR
* pname:type is not ename:VK_IMAGE_TYPE_2D
* pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
* Neither the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag nor the
ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT flag in
sname:VkFormatProperties::pname:optimalTilingFeatures returned by
flink:vkGetPhysicalDeviceFormatProperties is set
ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
* pname:VkPhysicalDeviceExternalImageFormatInfoKHR::pname:handleType is an
external handle type for which multisampled image support is not
required.
endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
ifdef::VK_NV_shading_rate_image[]
* pname:usage contains ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV
endif::VK_NV_shading_rate_image[]
Otherwise, the bits set in pname:sampleCounts will be the sample counts
supported for the specified values of pname:usage and pname:format.
For each bit set in pname:usage, the supported sample counts relate to the
limits in sname:VkPhysicalDeviceLimits as follows:
* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and
pname:format is a floating- or fixed-point color format, a superset of
sname:VkPhysicalDeviceLimits::pname:framebufferColorSampleCounts
* If pname:usage includes
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
includes a depth aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:framebufferDepthSampleCounts
* If pname:usage includes
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
includes a stencil aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:framebufferStencilSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
pname:format includes a color aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
pname:format includes a depth aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
pname:format is an integer format, a superset of
sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, a superset of
sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts
If multiple bits are set in pname:usage, pname:sampleCounts will be the
intersection of the per-usage values described above.
If none of the bits described above are set in pname:usage, then there is no
corresponding limit in sname:VkPhysicalDeviceLimits.
In this case, pname:sampleCounts must: include at least
ename:VK_SAMPLE_COUNT_1_BIT.
[[features-extentperimagetype]]
=== Allowed Extent Values Based On Image Type
Implementations may: support extent values larger than the
<<features-limits-minmax, required minimum/maximum values>> for certain
types of images subject to the constraints below.
[NOTE]
.Note
====
Implementations must: support images with dimensions up to the
<<features-limits-minmax, required minimum/maximum values>> for all types of
images.
It follows that the query for additional capabilities must: return extent
values that are at least as large as the required values.
====
For ename:VK_IMAGE_TYPE_1D:
* [eq]#pname:maxExtent.width {geq}
slink:VkPhysicalDeviceLimits.pname:maxImageDimension1D#
* [eq]#pname:maxExtent.height = 1#
* [eq]#pname:maxExtent.depth = 1#
For ename:VK_IMAGE_TYPE_2D when pname:flags does not contain
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT:
* [eq]#pname:maxExtent.width {geq}
slink:VkPhysicalDeviceLimits.pname:maxImageDimension2D#
* [eq]#pname:maxExtent.height {geq}
slink:VkPhysicalDeviceLimits.pname:maxImageDimension2D#
* [eq]#pname:maxExtent.depth = 1#
For ename:VK_IMAGE_TYPE_2D when pname:flags contains
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT:
* [eq]#pname:maxExtent.width {geq}
slink:VkPhysicalDeviceLimits.pname:maxImageDimensionCube#
* [eq]#pname:maxExtent.height {geq}
slink:VkPhysicalDeviceLimits.pname:maxImageDimensionCube#
* [eq]#pname:maxExtent.depth = 1#
For ename:VK_IMAGE_TYPE_3D:
* [eq]#pname:maxExtent.width {geq}
slink:VkPhysicalDeviceLimits.pname:maxImageDimension3D#
* [eq]#pname:maxExtent.height {geq}
slink:VkPhysicalDeviceLimits.pname:maxImageDimension3D#
* [eq]#pname:maxExtent.depth {geq}
slink:VkPhysicalDeviceLimits.pname:maxImageDimension3D#
ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
== Additional Buffer Capabilities
In addition to the capabilities described in the previous sections
(<<features-limits,Limits>> and <<features-formats,Formats>>),
implementations may support additional buffer capabilities.
[open,refpage='vkGetPhysicalDeviceExternalBufferProperties',desc='Query external handle types supported by buffers',type='protos']
--
To query the external handle types supported by buffers, call:
ifdef::VK_VERSION_1_1[]
include::../api/protos/vkGetPhysicalDeviceExternalBufferProperties.txt[]
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1+VK_KHR_external_memory_capabilities[or the equivalent command]
ifdef::VK_KHR_external_memory_capabilities[]
include::../api/protos/vkGetPhysicalDeviceExternalBufferPropertiesKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
* pname:physicalDevice is the physical device from which to query the
buffer capabilities.
* pname:pExternalBufferInfo points to an instance of the
slink:VkPhysicalDeviceExternalBufferInfo structure, describing the
parameters that would be consumed by flink:vkCreateBuffer.
* pname:pExternalBufferProperties points to an instance of the
slink:VkExternalBufferProperties structure in which capabilities are
returned.
include::../validity/protos/vkGetPhysicalDeviceExternalBufferProperties.txt[]
--
[open,refpage='VkPhysicalDeviceExternalBufferInfo',desc='Structure specifying buffer creation parameters',type='structs']
--
The sname:VkPhysicalDeviceExternalBufferInfo structure is defined as:
include::../api/structs/VkPhysicalDeviceExternalBufferInfo.txt[]
ifdef::VK_KHR_external_memory_capabilities[]
or the equivalent
include::../api/structs/VkPhysicalDeviceExternalBufferInfoKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
* pname:sType is the type of this structure
* pname:pNext is NULL or a pointer to an extension-specific structure.
* pname:flags is a bitmask of elink:VkBufferCreateFlagBits describing
additional parameters of the buffer, corresponding to
slink:VkBufferCreateInfo::pname:flags.
* pname:usage is a bitmask of elink:VkBufferUsageFlagBits describing the
intended usage of the buffer, corresponding to
slink:VkBufferCreateInfo::pname:usage.
* pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
specifying the memory handle type that will be used with the memory
associated with the buffer.
include::../validity/structs/VkPhysicalDeviceExternalBufferInfo.txt[]
--
[open,refpage='VkExternalBufferProperties',desc='Structure specifying supported external handle capabilities',type='structs']
--
The sname:VkExternalBufferProperties structure is defined as:
include::../api/structs/VkExternalBufferProperties.txt[]
ifdef::VK_KHR_external_memory_capabilities[]
or the equivalent
include::../api/structs/VkExternalBufferPropertiesKHR.txt[]
endif::VK_KHR_external_memory_capabilities[]
* pname:sType is the type of this structure
* pname:pNext is NULL or a pointer to an extension-specific structure.
* pname:externalMemoryProperties is an instance of the
slink:VkExternalMemoryProperties structure specifying various
capabilities of the external handle type when used with the specified
buffer creation parameters.
include::../validity/structs/VkExternalBufferProperties.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
== Optional Semaphore Capabilities
[open,refpage='vkGetPhysicalDeviceExternalSemaphoreProperties',desc='Function for querying external semaphore handle capabilities.',type='protos']
--
Semaphores may: support import and export of their
<<synchronization-semaphores-payloads, payload>> to external handles.
To query the external handle types supported by semaphores, call:
ifdef::VK_VERSION_1_1[]
include::../api/protos/vkGetPhysicalDeviceExternalSemaphoreProperties.txt[]
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1+VK_KHR_external_semaphore_capabilities[or the equivalent command]
ifdef::VK_KHR_external_semaphore_capabilities[]
include::../api/protos/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.txt[]
endif::VK_KHR_external_semaphore_capabilities[]
* pname:physicalDevice is the physical device from which to query the
semaphore capabilities.
* pname:pExternalSemaphoreInfo points to an instance of the
slink:VkPhysicalDeviceExternalSemaphoreInfo structure, describing the
parameters that would be consumed by flink:vkCreateSemaphore.
* pname:pExternalSemaphoreProperties points to an instance of the
slink:VkExternalSemaphoreProperties structure in which capabilities are
returned.
include::../validity/protos/vkGetPhysicalDeviceExternalSemaphoreProperties.txt[]
--
[open,refpage='VkPhysicalDeviceExternalSemaphoreInfo',desc='Structure specifying semaphore creation parameters.',type='structs']
--
The sname:VkPhysicalDeviceExternalSemaphoreInfo structure is defined as:
include::../api/structs/VkPhysicalDeviceExternalSemaphoreInfo.txt[]
ifdef::VK_KHR_external_semaphore_capabilities[]
or the equivalent
include::../api/structs/VkPhysicalDeviceExternalSemaphoreInfoKHR.txt[]
endif::VK_KHR_external_semaphore_capabilities[]
* pname:sType is the type of this structure
* pname:pNext is NULL or a pointer to an extension-specific structure.
* pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
specifying the external semaphore handle type for which capabilities
will be returned.
include::../validity/structs/VkPhysicalDeviceExternalSemaphoreInfo.txt[]
--
[open,refpage='VkExternalSemaphoreHandleTypeFlagBits',desc='Bitmask of valid external semaphore handle types',type='enums']
--
Bits which may: be set in
slink:VkPhysicalDeviceExternalSemaphoreInfo::pname:handleType, specifying an
external semaphore handle type, are:
include::../api/enums/VkExternalSemaphoreHandleTypeFlagBits.txt[]
ifdef::VK_KHR_external_semaphore_capabilities[]
or the equivalent
include::../api/enums/VkExternalSemaphoreHandleTypeFlagBitsKHR.txt[]
endif::VK_KHR_external_semaphore_capabilities[]
* ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX
file descriptor handle that has only limited valid usage outside of
Vulkan and other compatible APIs.
It must: be compatible with the POSIX system calls code:dup, code:dup2,
code:close, and the non-standard system call code:dup3.
Additionally, it must: be transportable over a socket using an
code:SCM_RIGHTS control message.
It owns a reference to the underlying synchronization primitive
represented by its Vulkan semaphore object.
* ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
handle that has only limited valid usage outside of Vulkan and other
compatible APIs.
It must: be compatible with the functions code:DuplicateHandle,
code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation,
and code:SetHandleInformation.
It owns a reference to the underlying synchronization primitive
represented by its Vulkan semaphore object.
* ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
global share handle that has only limited valid usage outside of Vulkan
and other compatible APIs.
It is not compatible with any native APIs.
It does not own a reference to the underlying synchronization primitive
represented its Vulkan semaphore object, and will therefore become
invalid when all Vulkan semaphore objects associated with it are
destroyed.
* ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT specifies an NT
handle returned by code:ID3D12Device::code:CreateSharedHandle referring
to a Direct3D 12 fence.
It owns a reference to the underlying synchronization primitive
associated with the Direct3D fence.
* ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT specifies a POSIX
file descriptor handle to a Linux Sync File or Android Fence object.
It can be used with any native API accepting a valid sync file or fence
as input.
It owns a reference to the underlying synchronization primitive
associated with the file descriptor.
Implementations which support importing this handle type must: accept
any type of sync or fence FD supported by the native system they are
running on.
[NOTE]
.Note
====
Handles of type ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
generated by the implementation may represent either Linux Sync Files or
Android Fences at the implementation's discretion.
Applications should: only use operations defined for both types of file
descriptors, unless they know via means external to Vulkan the type of the
file descriptor, or are prepared to deal with the system-defined operation
failures resulting from using the wrong type.
====
<<<
Some external semaphore handle types can only be shared within the same
underlying physical device and/or the same driver version, as defined in the
following table:
[[external-semaphore-handle-types-compatibility]]
.External semaphore handle types compatibility
|====
| Handle type | sname:VkPhysicalDeviceIDProperties::pname:driverUUID | sname:VkPhysicalDeviceIDProperties::pname:deviceUUID
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT | Must match | Must match
| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT | No restriction | No restriction
|====
--
[open,refpage='VkExternalSemaphoreHandleTypeFlags',desc='Bitmask of VkExternalSemaphoreHandleTypeFlagBits',type='enums']
--
include::../api/flags/VkExternalSemaphoreHandleTypeFlags.txt[]
ifdef::VK_KHR_external_semaphore_capabilities[]
or the equivalent
include::../api/flags/VkExternalSemaphoreHandleTypeFlagsKHR.txt[]
endif::VK_KHR_external_semaphore_capabilities[]
sname:VkExternalSemaphoreHandleTypeFlags is a bitmask type for setting a
mask of zero or more slink:VkExternalSemaphoreHandleTypeFlagBits.
--
[open,refpage='VkExternalSemaphoreProperties',desc='Structure describing supported external semaphore handle features',type='structs']
--
The sname:VkExternalSemaphoreProperties structure is defined as:
include::../api/structs/VkExternalSemaphoreProperties.txt[]
ifdef::VK_KHR_external_semaphore_capabilities[]
or the equivalent
include::../api/structs/VkExternalSemaphorePropertiesKHR.txt[]
endif::VK_KHR_external_semaphore_capabilities[]
* pname:exportFromImportedHandleTypes is a bitmask of
elink:VkExternalSemaphoreHandleTypeFlagBits specifying which types of
imported handle pname:handleType can: be exported from.
* pname:compatibleHandleTypes is a bitmask of
elink:VkExternalSemaphoreHandleTypeFlagBits specifying handle types
which can: be specified at the same time as pname:handleType when
creating a semaphore.
* pname:externalSemaphoreFeatures is a bitmask of
elink:VkExternalSemaphoreFeatureFlagBits describing the features of
pname:handleType.
If pname:handleType is not supported by the implementation, then
slink:VkExternalSemaphoreProperties::pname:externalSemaphoreFeatures will be
set to zero.
include::../validity/structs/VkExternalSemaphoreProperties.txt[]
--
[open,refpage='VkExternalSemaphoreFeatureFlagBits',desc='Bitfield describing features of an external semaphore handle type',type='enums']
--
Possible values of
slink:VkExternalSemaphoreProperties::pname:externalSemaphoreFeatures,
specifying the features of an external semaphore handle type, are:
include::../api/enums/VkExternalSemaphoreFeatureFlagBits.txt[]
ifdef::VK_KHR_external_semaphore_capabilities[]
or the equivalent
include::../api/enums/VkExternalSemaphoreFeatureFlagBitsKHR.txt[]
endif::VK_KHR_external_semaphore_capabilities[]
* ename:VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT specifies that
handles of this type can: be exported from Vulkan semaphore objects.
* ename:VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT specifies that
handles of this type can: be imported as Vulkan semaphore objects.
--
[open,refpage='VkExternalSemaphoreFeatureFlags',desc='Bitmask of VkExternalSemaphoreFeatureFlagBitsKHR',type='enums']
--
include::../api/flags/VkExternalSemaphoreFeatureFlags.txt[]
ifdef::VK_KHR_external_semaphore_capabilities[]
or the equivalent
include::../api/flags/VkExternalSemaphoreFeatureFlagsKHR.txt[]
endif::VK_KHR_external_semaphore_capabilities[]
sname:VkExternalSemaphoreFeatureFlags is a bitmask type for setting a mask
of zero or more slink:VkExternalSemaphoreFeatureFlagBits.
--
endif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
ifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
== Optional Fence Capabilities
[open,refpage='vkGetPhysicalDeviceExternalFenceProperties',desc='Function for querying external fence handle capabilities.',type='protos']
--
Fences may: support import and export of their
<<synchronization-fences-payloads, payload>> to external handles.
To query the external handle types supported by fences, call:
ifdef::VK_VERSION_1_1[]
include::../api/protos/vkGetPhysicalDeviceExternalFenceProperties.txt[]
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1+VK_KHR_external_fence_capabilities[or the equivalent command]
ifdef::VK_KHR_external_fence_capabilities[]
include::../api/protos/vkGetPhysicalDeviceExternalFencePropertiesKHR.txt[]
endif::VK_KHR_external_fence_capabilities[]
* pname:physicalDevice is the physical device from which to query the
fence capabilities.
* pname:pExternalFenceInfo points to an instance of the
slink:VkPhysicalDeviceExternalFenceInfo structure, describing the
parameters that would be consumed by flink:vkCreateFence.
* pname:pExternalFenceProperties points to an instance of the
slink:VkExternalFenceProperties structure in which capabilities are
returned.
include::../validity/protos/vkGetPhysicalDeviceExternalFenceProperties.txt[]
--
[open,refpage='VkPhysicalDeviceExternalFenceInfo',desc='Structure specifying fence creation parameters.',type='structs']
--
The sname:VkPhysicalDeviceExternalFenceInfo structure is defined as:
include::../api/structs/VkPhysicalDeviceExternalFenceInfo.txt[]
ifdef::VK_KHR_external_fence_capabilities[]
or the equivalent
include::../api/structs/VkPhysicalDeviceExternalFenceInfoKHR.txt[]
endif::VK_KHR_external_fence_capabilities[]
* pname:sType is the type of this structure
* pname:pNext is NULL or a pointer to an extension-specific structure.
* pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
indicating an external fence handle type for which capabilities will be
returned.
[NOTE]
.Note
====
Handles of type ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT generated by
the implementation may represent either Linux Sync Files or Android Fences
at the implementation's discretion.
Applications should: only use operations defined for both types of file
descriptors, unless they know via means external to Vulkan the type of the
file descriptor, or are prepared to deal with the system-defined operation
failures resulting from using the wrong type.
====
include::../validity/structs/VkPhysicalDeviceExternalFenceInfo.txt[]
--
[open,refpage='VkExternalFenceHandleTypeFlagBits',desc='Bitmask of valid external fence handle types',type='enums']
--
Bits which may: be set in
slink:VkPhysicalDeviceExternalFenceInfo::pname:handleType, and in the
pname:exportFromImportedHandleTypes and pname:compatibleHandleTypes members
of slink:VkExternalFenceProperties, to indicate external fence handle types,
are:
include::../api/enums/VkExternalFenceHandleTypeFlagBits.txt[]
ifdef::VK_KHR_external_fence_capabilities[]
or the equivalent
include::../api/enums/VkExternalFenceHandleTypeFlagBitsKHR.txt[]
endif::VK_KHR_external_fence_capabilities[]
* ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX file
descriptor handle that has only limited valid usage outside of Vulkan
and other compatible APIs.
It must: be compatible with the POSIX system calls code:dup, code:dup2,
code:close, and the non-standard system call code:dup3.
Additionally, it must: be transportable over a socket using an
code:SCM_RIGHTS control message.
It owns a reference to the underlying synchronization primitive
represented by its Vulkan fence object.
* ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
handle that has only limited valid usage outside of Vulkan and other
compatible APIs.
It must: be compatible with the functions code:DuplicateHandle,
code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation,
and code:SetHandleInformation.
It owns a reference to the underlying synchronization primitive
represented by its Vulkan fence object.
* ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
global share handle that has only limited valid usage outside of Vulkan
and other compatible APIs.
It is not compatible with any native APIs.
It does not own a reference to the underlying synchronization primitive
represented by its Vulkan fence object, and will therefore become
invalid when all Vulkan fence objects associated with it are destroyed.
* ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT specifies a POSIX file
descriptor handle to a Linux Sync File or Android Fence.
It can be used with any native API accepting a valid sync file or fence
as input.
It owns a reference to the underlying synchronization primitive
associated with the file descriptor.
Implementations which support importing this handle type must: accept
any type of sync or fence FD supported by the native system they are
running on.
<<<
Some external fence handle types can only be shared within the same
underlying physical device and/or the same driver version, as defined in the
following table:
[[external-fence-handle-types-compatibility]]
.External fence handle types compatibility
|====
| Handle type | sname:VkPhysicalDeviceIDProperties::pname:driverUUID | sname:VkPhysicalDeviceIDProperties::pname:deviceUUID
| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match
| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match
| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match
| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT | No restriction | No restriction
|====
--
[open,refpage='VkExternalFenceHandleTypeFlags',desc='Bitmask of VkExternalFenceHandleTypeFlagBits',type='enums']
--
include::../api/flags/VkExternalFenceHandleTypeFlags.txt[]
ifdef::VK_KHR_external_fence_capabilities[]
or the equivalent
include::../api/flags/VkExternalFenceHandleTypeFlagsKHR.txt[]
endif::VK_KHR_external_fence_capabilities[]
sname:VkExternalFenceHandleTypeFlags is a bitmask type for setting a mask of
zero or more slink:VkExternalFenceHandleTypeFlagBits.
--
[open,refpage='VkExternalFenceProperties',desc='Structure describing supported external fence handle features',type='structs']
--
The sname:VkExternalFenceProperties structure is defined as:
include::../api/structs/VkExternalFenceProperties.txt[]
ifdef::VK_KHR_external_fence_capabilities[]
or the equivalent
include::../api/structs/VkExternalFencePropertiesKHR.txt[]
endif::VK_KHR_external_fence_capabilities[]
* pname:exportFromImportedHandleTypes is a bitmask of
elink:VkExternalFenceHandleTypeFlagBits indicating which types of
imported handle pname:handleType can: be exported from.
* pname:compatibleHandleTypes is a bitmask of
elink:VkExternalFenceHandleTypeFlagBits specifying handle types which
can: be specified at the same time as pname:handleType when creating a
fence.
* pname:externalFenceFeatures is a bitmask of
elink:VkExternalFenceFeatureFlagBits indicating the features of
pname:handleType.
If pname:handleType is not supported by the implementation, then
slink:VkExternalFenceProperties::pname:externalFenceFeatures will be set to
zero.
include::../validity/structs/VkExternalFenceProperties.txt[]
--
[open,refpage='VkExternalFenceFeatureFlagBits',desc='Bitfield describing features of an external fence handle type',type='enums']
--
Bits which may: be set in
slink:VkExternalFenceProperties::pname:externalFenceFeatures, indicating
features of a fence external handle type, are:
include::../api/enums/VkExternalFenceFeatureFlagBits.txt[]
ifdef::VK_KHR_external_fence_capabilities[]
or the equivalent
include::../api/enums/VkExternalFenceFeatureFlagBitsKHR.txt[]
endif::VK_KHR_external_fence_capabilities[]
* ename:VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT specifies handles of this
type can: be exported from Vulkan fence objects.
* ename:VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT specifies handles of this
type can: be imported to Vulkan fence objects.
--
[open,refpage='VkExternalFenceFeatureFlags',desc='Bitmask of VkExternalFenceFeatureFlagBits',type='enums']
--
include::../api/flags/VkExternalFenceFeatureFlags.txt[]
ifdef::VK_KHR_external_fence_capabilities[]
or the equivalent
include::../api/flags/VkExternalFenceFeatureFlagsKHR.txt[]
endif::VK_KHR_external_fence_capabilities[]
sname:VkExternalFenceFeatureFlags is a bitmask type for setting a mask of
zero or more slink:VkExternalFenceFeatureFlagBits.
--
endif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
ifdef::VK_EXT_calibrated_timestamps[]
[[features-timestamp-calibration]]
== Timestamp Calibration Capabilities
[open,refpage='vkGetPhysicalDeviceCalibrateableTimeDomainsEXT',desc='Query calibrateable time domains',type='protos']
--
To query the set of time domains for which a physical device supports
timestamp calibration, call:
include::../api/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.txt[]
* pname:physicalDevice is the physical device from which to query the set
of calibrateable time domains.
* pname:pTimeDomainCount is a pointer to an integer related to the number
of calibrateable time domains available or queried, as described below.
* pname:pTimeDomains is either `NULL` or a pointer to an array of
elink:VkTimeDomainEXT values, indicating the supported calibrateable
time domains.
If pname:pTimeDomains is `NULL`, then the number of calibrateable time
domains supported for the given pname:physicalDevice is returned in
pname:pTimeDomainCount.
Otherwise, pname:pTimeDomainCount must: point to a variable set by the user
to the number of elements in the pname:pTimeDomains array, and on return the
variable is overwritten with the number of values actually written to
pname:pTimeDomains.
If the value of pname:pTimeDomainCount is less than the number of
calibrateable time domains supported, at most pname:pTimeDomainCount values
will be written to pname:pTimeDomains.
If pname:pTimeDomainCount is smaller than the number of calibrateable time
domains supported for the given pname:physicalDevice, ename:VK_INCOMPLETE
will be returned instead of ename:VK_SUCCESS to indicate that not all the
available values were returned.
include::../validity/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.txt[]
--
endif::VK_EXT_calibrated_timestamps[]