31. 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
The features and limits are reported via basic structures (that is
VkPhysicalDeviceFeatures and VkPhysicalDeviceLimits), as well as
extensible structures ( |
31.1. 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.
To query supported features, call:
void vkGetPhysicalDeviceFeatures(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceFeatures* pFeatures);
-
physicalDevice
is the physical device from which to query the supported features. -
pFeatures
is a pointer to a VkPhysicalDeviceFeatures structure in which the physical device features are returned. For each feature, a value ofVK_TRUE
specifies that the feature is supported on this physical device, andVK_FALSE
specifies that the feature is not supported.
Fine-grained features used by a logical device must be enabled at
VkDevice
creation time.
If a feature is enabled that the physical device does not support,
VkDevice
creation will fail.
If an application uses a feature without enabling it at 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
VkPhysicalDeviceFeatures
structure via the pEnabledFeatures
member of the VkDeviceCreateInfo
structure that is passed into the
vkCreateDevice
call.
If a member of pEnabledFeatures
is set to VK_TRUE
or
VK_FALSE
, then the device will be created with the indicated feature
enabled or disabled, respectively.
Features can also be enabled by using the VkPhysicalDeviceFeatures2
structure.
If an application wishes to enable all features supported by a device, it
can simply pass in the VkPhysicalDeviceFeatures
structure that was
previously returned by vkGetPhysicalDeviceFeatures
.
To disable an individual feature, the application can set the desired
member to VK_FALSE
in the same structure.
Setting pEnabledFeatures
to NULL
and not including a VkPhysicalDeviceFeatures2 in the pNext
member of VkDeviceCreateInfo
is equivalent to setting all members of the structure to VK_FALSE
.
Note
Some features, such as |
To query supported features defined by the core or extensions, call:
void vkGetPhysicalDeviceFeatures2(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceFeatures2* pFeatures);
or the equivalent command
void vkGetPhysicalDeviceFeatures2KHR(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceFeatures2* pFeatures);
-
physicalDevice
is the physical device from which to query the supported features. -
pFeatures
is a pointer to a VkPhysicalDeviceFeatures2 structure in which the physical device features are returned.
Each structure in pFeatures
and its pNext
chain contain members
corresponding to fine-grained features.
vkGetPhysicalDeviceFeatures2
writes each member to a boolean value
indicating whether that feature is supported.
The VkPhysicalDeviceFeatures2
structure is defined as:
typedef struct VkPhysicalDeviceFeatures2 {
VkStructureType sType;
void* pNext;
VkPhysicalDeviceFeatures features;
} VkPhysicalDeviceFeatures2;
or the equivalent
typedef VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR;
The VkPhysicalDeviceFeatures2
structure is defined as:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
features
is a structure of type VkPhysicalDeviceFeatures describing the fine-grained features of the Vulkan 1.0 API.
The pNext
chain of this structure is used to extend the structure with
features defined by extensions.
This structure can be used in vkGetPhysicalDeviceFeatures2 or can be
in the pNext
chain of a VkDeviceCreateInfo structure, in which
case it controls which features are enabled in the device in lieu of
pEnabledFeatures
.
The VkPhysicalDeviceFeatures
structure is defined as:
typedef struct VkPhysicalDeviceFeatures {
VkBool32 robustBufferAccess;
VkBool32 fullDrawIndexUint32;
VkBool32 imageCubeArray;
VkBool32 independentBlend;
VkBool32 geometryShader;
VkBool32 tessellationShader;
VkBool32 sampleRateShading;
VkBool32 dualSrcBlend;
VkBool32 logicOp;
VkBool32 multiDrawIndirect;
VkBool32 drawIndirectFirstInstance;
VkBool32 depthClamp;
VkBool32 depthBiasClamp;
VkBool32 fillModeNonSolid;
VkBool32 depthBounds;
VkBool32 wideLines;
VkBool32 largePoints;
VkBool32 alphaToOne;
VkBool32 multiViewport;
VkBool32 samplerAnisotropy;
VkBool32 textureCompressionETC2;
VkBool32 textureCompressionASTC_LDR;
VkBool32 textureCompressionBC;
VkBool32 occlusionQueryPrecise;
VkBool32 pipelineStatisticsQuery;
VkBool32 vertexPipelineStoresAndAtomics;
VkBool32 fragmentStoresAndAtomics;
VkBool32 shaderTessellationAndGeometryPointSize;
VkBool32 shaderImageGatherExtended;
VkBool32 shaderStorageImageExtendedFormats;
VkBool32 shaderStorageImageMultisample;
VkBool32 shaderStorageImageReadWithoutFormat;
VkBool32 shaderStorageImageWriteWithoutFormat;
VkBool32 shaderUniformBufferArrayDynamicIndexing;
VkBool32 shaderSampledImageArrayDynamicIndexing;
VkBool32 shaderStorageBufferArrayDynamicIndexing;
VkBool32 shaderStorageImageArrayDynamicIndexing;
VkBool32 shaderClipDistance;
VkBool32 shaderCullDistance;
VkBool32 shaderFloat64;
VkBool32 shaderInt64;
VkBool32 shaderInt16;
VkBool32 shaderResourceResidency;
VkBool32 shaderResourceMinLod;
VkBool32 sparseBinding;
VkBool32 sparseResidencyBuffer;
VkBool32 sparseResidencyImage2D;
VkBool32 sparseResidencyImage3D;
VkBool32 sparseResidency2Samples;
VkBool32 sparseResidency4Samples;
VkBool32 sparseResidency8Samples;
VkBool32 sparseResidency16Samples;
VkBool32 sparseResidencyAliased;
VkBool32 variableMultisampleRate;
VkBool32 inheritedQueries;
} VkPhysicalDeviceFeatures;
The members of the VkPhysicalDeviceFeatures
structure describe the
following features:
-
robustBufferAccess
specifies that accesses to buffers are bounds-checked against the range of the buffer descriptor (as determined byVkDescriptorBufferInfo
::range
,VkBufferViewCreateInfo
::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
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
OpImageTexelPointer
and the object pointed to is not wholly contained within the bound range. This includes accesses performed via variable pointers where the buffer descriptor being accessed cannot be statically determined. Uninitialized pointers and pointers equal toOpConstantNull
are treated as pointing to a zero-sized object, so all accesses through such pointers are considered to be out of bounds.NoteIf a SPIR-V
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 (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:
-
vertexBufferRangeSize
, ifbindingStride
== 0; or -
(
vertexBufferRangeSize
- (vertexBufferRangeSize
%bindingStride
))
where
vertexBufferRangeSize
is the byte size of the memory range bound to the vertex buffer binding andbindingStride
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 (0,0,0,x) vectors, as described above.
-
-
-
If
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.
-
-
fullDrawIndexUint32
specifies the full 32-bit range of indices is supported for indexed draw calls when using a VkIndexType ofVK_INDEX_TYPE_UINT32
.maxDrawIndexedIndexValue
is the maximum index value that may be used (aside from the primitive restart index, which is always 232-1 when the VkIndexType isVK_INDEX_TYPE_UINT32
). If this feature is supported,maxDrawIndexedIndexValue
must be 232-1; otherwise it must be no smaller than 224-1. See maxDrawIndexedIndexValue. -
imageCubeArray
specifies whether image views with a VkImageViewType ofVK_IMAGE_VIEW_TYPE_CUBE_ARRAY
can be created, and that the correspondingSampledCubeArray
andImageCubeArray
SPIR-V capabilities can be used in shader code. -
independentBlend
specifies whether theVkPipelineColorBlendAttachmentState
settings are controlled independently per-attachment. If this feature is not enabled, theVkPipelineColorBlendAttachmentState
settings for all color attachments must be identical. Otherwise, a differentVkPipelineColorBlendAttachmentState
can be provided for each bound color attachment. -
geometryShader
specifies whether geometry shaders are supported. If this feature is not enabled, theVK_SHADER_STAGE_GEOMETRY_BIT
andVK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
enum values must not be used. This also specifies whether shader modules can declare theGeometry
capability. -
tessellationShader
specifies whether tessellation control and evaluation shaders are supported. If this feature is not enabled, theVK_SHADER_STAGE_TESSELLATION_CONTROL_BIT
,VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
,VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
,VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
, andVK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
enum values must not be used. This also specifies whether shader modules can declare theTessellation
capability. -
sampleRateShading
specifies whether Sample Shading and multisample interpolation are supported. If this feature is not enabled, thesampleShadingEnable
member of theVkPipelineMultisampleStateCreateInfo
structure must be set toVK_FALSE
and theminSampleShading
member is ignored. This also specifies whether shader modules can declare theSampleRateShading
capability. -
dualSrcBlend
specifies whether blend operations which take two sources are supported. If this feature is not enabled, theVK_BLEND_FACTOR_SRC1_COLOR
,VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR
,VK_BLEND_FACTOR_SRC1_ALPHA
, andVK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
enum values must not be used as source or destination blending factors. See Dual-Source Blending. -
logicOp
specifies whether logic operations are supported. If this feature is not enabled, thelogicOpEnable
member of theVkPipelineColorBlendStateCreateInfo
structure must be set toVK_FALSE
, and thelogicOp
member is ignored. -
multiDrawIndirect
specifies whether multiple draw indirect is supported. If this feature is not enabled, thedrawCount
parameter to thevkCmdDrawIndirect
andvkCmdDrawIndexedIndirect
commands must be 0 or 1. ThemaxDrawIndirectCount
member of theVkPhysicalDeviceLimits
structure must also be 1 if this feature is not supported. See maxDrawIndirectCount. -
drawIndirectFirstInstance
specifies whether indirect draw calls support thefirstInstance
parameter. If this feature is not enabled, thefirstInstance
member of allVkDrawIndirectCommand
andVkDrawIndexedIndirectCommand
structures that are provided to thevkCmdDrawIndirect
andvkCmdDrawIndexedIndirect
commands must be 0. -
depthClamp
specifies whether depth clamping is supported. If this feature is not enabled, thedepthClampEnable
member of theVkPipelineRasterizationStateCreateInfo
structure must be set toVK_FALSE
. Otherwise, settingdepthClampEnable
toVK_TRUE
will enable depth clamping. -
depthBiasClamp
specifies whether depth bias clamping is supported. If this feature is not enabled, thedepthBiasClamp
member of theVkPipelineRasterizationStateCreateInfo
structure must be set to 0.0 unless theVK_DYNAMIC_STATE_DEPTH_BIAS
dynamic state is enabled, and thedepthBiasClamp
parameter tovkCmdSetDepthBias
must be set to 0.0. -
fillModeNonSolid
specifies whether point and wireframe fill modes are supported. If this feature is not enabled, theVK_POLYGON_MODE_POINT
andVK_POLYGON_MODE_LINE
enum values must not be used. -
depthBounds
specifies whether depth bounds tests are supported. If this feature is not enabled, thedepthBoundsTestEnable
member of theVkPipelineDepthStencilStateCreateInfo
structure must be set toVK_FALSE
. WhendepthBoundsTestEnable
is set toVK_FALSE
, theminDepthBounds
andmaxDepthBounds
members of theVkPipelineDepthStencilStateCreateInfo
structure are ignored. -
wideLines
specifies whether lines with width other than 1.0 are supported. If this feature is not enabled, thelineWidth
member of theVkPipelineRasterizationStateCreateInfo
structure must be set to 1.0 unless theVK_DYNAMIC_STATE_LINE_WIDTH
dynamic state is enabled, and thelineWidth
parameter tovkCmdSetLineWidth
must be set to 1.0. When this feature is supported, the range and granularity of supported line widths are indicated by thelineWidthRange
andlineWidthGranularity
members of theVkPhysicalDeviceLimits
structure, respectively. -
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 thepointSizeRange
andpointSizeGranularity
members of theVkPhysicalDeviceLimits
structure, respectively. -
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 thealphaToOneEnable
member of theVkPipelineMultisampleStateCreateInfo
structure must be set toVK_FALSE
. Otherwise settingalphaToOneEnable
toVK_TRUE
will enable alpha-to-one behavior. -
multiViewport
specifies whether more than one viewport is supported. If this feature is not enabled:-
The
viewportCount
andscissorCount
members of theVkPipelineViewportStateCreateInfo
structure must be set to 1. -
The
firstViewport
andviewportCount
parameters to thevkCmdSetViewport
command must be set to 0 and 1, respectively. -
The
firstScissor
andscissorCount
parameters to thevkCmdSetScissor
command must be set to 0 and 1, respectively.
-
-
samplerAnisotropy
specifies whether anisotropic filtering is supported. If this feature is not enabled, theanisotropyEnable
member of theVkSamplerCreateInfo
structure must beVK_FALSE
. -
textureCompressionETC2
specifies whether all of the ETC2 and EAC compressed texture formats are supported. If this feature is enabled, then theVK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
,VK_FORMAT_FEATURE_BLIT_SRC_BIT
andVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
features must be supported inoptimalTilingFeatures
for the following formats:-
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
-
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
-
VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
-
VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
-
VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
-
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
-
VK_FORMAT_EAC_R11_UNORM_BLOCK
-
VK_FORMAT_EAC_R11_SNORM_BLOCK
-
VK_FORMAT_EAC_R11G11_UNORM_BLOCK
-
VK_FORMAT_EAC_R11G11_SNORM_BLOCK
To query for additional properties, or if the feature is not enabled, vkGetPhysicalDeviceFormatProperties and vkGetPhysicalDeviceImageFormatProperties can be used to check for supported properties of individual formats as normal.
-
-
textureCompressionASTC_LDR
specifies whether all of the ASTC LDR compressed texture formats are supported. If this feature is enabled, then theVK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
,VK_FORMAT_FEATURE_BLIT_SRC_BIT
andVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
features must be supported inoptimalTilingFeatures
for the following formats:-
VK_FORMAT_ASTC_4x4_UNORM_BLOCK
-
VK_FORMAT_ASTC_4x4_SRGB_BLOCK
-
VK_FORMAT_ASTC_5x4_UNORM_BLOCK
-
VK_FORMAT_ASTC_5x4_SRGB_BLOCK
-
VK_FORMAT_ASTC_5x5_UNORM_BLOCK
-
VK_FORMAT_ASTC_5x5_SRGB_BLOCK
-
VK_FORMAT_ASTC_6x5_UNORM_BLOCK
-
VK_FORMAT_ASTC_6x5_SRGB_BLOCK
-
VK_FORMAT_ASTC_6x6_UNORM_BLOCK
-
VK_FORMAT_ASTC_6x6_SRGB_BLOCK
-
VK_FORMAT_ASTC_8x5_UNORM_BLOCK
-
VK_FORMAT_ASTC_8x5_SRGB_BLOCK
-
VK_FORMAT_ASTC_8x6_UNORM_BLOCK
-
VK_FORMAT_ASTC_8x6_SRGB_BLOCK
-
VK_FORMAT_ASTC_8x8_UNORM_BLOCK
-
VK_FORMAT_ASTC_8x8_SRGB_BLOCK
-
VK_FORMAT_ASTC_10x5_UNORM_BLOCK
-
VK_FORMAT_ASTC_10x5_SRGB_BLOCK
-
VK_FORMAT_ASTC_10x6_UNORM_BLOCK
-
VK_FORMAT_ASTC_10x6_SRGB_BLOCK
-
VK_FORMAT_ASTC_10x8_UNORM_BLOCK
-
VK_FORMAT_ASTC_10x8_SRGB_BLOCK
-
VK_FORMAT_ASTC_10x10_UNORM_BLOCK
-
VK_FORMAT_ASTC_10x10_SRGB_BLOCK
-
VK_FORMAT_ASTC_12x10_UNORM_BLOCK
-
VK_FORMAT_ASTC_12x10_SRGB_BLOCK
-
VK_FORMAT_ASTC_12x12_UNORM_BLOCK
-
VK_FORMAT_ASTC_12x12_SRGB_BLOCK
To query for additional properties, or if the feature is not enabled, vkGetPhysicalDeviceFormatProperties and vkGetPhysicalDeviceImageFormatProperties can be used to check for supported properties of individual formats as normal.
-
-
textureCompressionBC
specifies whether all of the BC compressed texture formats are supported. If this feature is enabled, then theVK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
,VK_FORMAT_FEATURE_BLIT_SRC_BIT
andVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
features must be supported inoptimalTilingFeatures
for the following formats:-
VK_FORMAT_BC1_RGB_UNORM_BLOCK
-
VK_FORMAT_BC1_RGB_SRGB_BLOCK
-
VK_FORMAT_BC1_RGBA_UNORM_BLOCK
-
VK_FORMAT_BC1_RGBA_SRGB_BLOCK
-
VK_FORMAT_BC2_UNORM_BLOCK
-
VK_FORMAT_BC2_SRGB_BLOCK
-
VK_FORMAT_BC3_UNORM_BLOCK
-
VK_FORMAT_BC3_SRGB_BLOCK
-
VK_FORMAT_BC4_UNORM_BLOCK
-
VK_FORMAT_BC4_SNORM_BLOCK
-
VK_FORMAT_BC5_UNORM_BLOCK
-
VK_FORMAT_BC5_SNORM_BLOCK
-
VK_FORMAT_BC6H_UFLOAT_BLOCK
-
VK_FORMAT_BC6H_SFLOAT_BLOCK
-
VK_FORMAT_BC7_UNORM_BLOCK
-
VK_FORMAT_BC7_SRGB_BLOCK
To query for additional properties, or if the feature is not enabled, vkGetPhysicalDeviceFormatProperties and vkGetPhysicalDeviceImageFormatProperties can be used to check for supported properties of individual formats as normal.
-
-
occlusionQueryPrecise
specifies whether occlusion queries returning actual sample counts are supported. Occlusion queries are created in aVkQueryPool
by specifying thequeryType
ofVK_QUERY_TYPE_OCCLUSION
in theVkQueryPoolCreateInfo
structure which is passed tovkCreateQueryPool
. If this feature is enabled, queries of this type can enableVK_QUERY_CONTROL_PRECISE_BIT
in theflags
parameter tovkCmdBeginQuery
. 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 andVK_QUERY_CONTROL_PRECISE_BIT
is set, occlusion queries will report the actual number of samples passed. -
pipelineStatisticsQuery
specifies whether the pipeline statistics queries are supported. If this feature is not enabled, queries of typeVK_QUERY_TYPE_PIPELINE_STATISTICS
cannot be created, and none of the VkQueryPipelineStatisticFlagBits bits can be set in thepipelineStatistics
member of theVkQueryPoolCreateInfo
structure. -
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 theNonWritable
decoration (or thereadonly
memory qualifier in GLSL). -
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 theNonWritable
decoration (or thereadonly
memory qualifier in GLSL). -
shaderTessellationAndGeometryPointSize
specifies whether thePointSize
built-in decoration is available in the tessellation control, tessellation evaluation, and geometry shader stages. If this feature is not enabled, members decorated with thePointSize
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 theTessellationPointSize
capability for tessellation control and evaluation shaders, or if the shader modules can declare theGeometryPointSize
capability for geometry shaders. An implementation supporting this feature must also support one or both of thetessellationShader
orgeometryShader
features. -
shaderImageGatherExtended
specifies whether the extended set of image gather instructions are available in shader code. If this feature is not enabled, theOpImage
*Gather
instructions do not support theOffset
andConstOffsets
operands. This also specifies whether shader modules can declare theImageGatherExtended
capability. -
shaderStorageImageExtendedFormats
specifies whether all the extended storage image formats are available in shader code. If this feature is enabled then theVK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
feature must be supported inoptimalTilingFeatures
for all of the extended formats. To query for additional properties, or if the feature is not enabled, vkGetPhysicalDeviceFormatProperties and vkGetPhysicalDeviceImageFormatProperties can be used to check for supported properties of individual formats as normal. -
shaderStorageImageMultisample
specifies whether multisampled storage images are supported. If this feature is not enabled, images that are created with ausage
that includesVK_IMAGE_USAGE_STORAGE_BIT
must be created withsamples
equal toVK_SAMPLE_COUNT_1_BIT
. This also specifies whether shader modules can declare theStorageImageMultisample
capability. -
shaderStorageImageReadWithoutFormat
specifies whether storage images require a format qualifier to be specified when reading from storage images. If this feature is not enabled, theOpImageRead
instruction must not have anOpTypeImage
ofUnknown
. This also specifies whether shader modules can declare theStorageImageReadWithoutFormat
capability. -
shaderStorageImageWriteWithoutFormat
specifies whether storage images require a format qualifier to be specified when writing to storage images. If this feature is not enabled, theOpImageWrite
instruction must not have anOpTypeImage
ofUnknown
. This also specifies whether shader modules can declare theStorageImageWriteWithoutFormat
capability. -
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 ofVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
orVK_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 theUniformBufferArrayDynamicIndexing
capability. -
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 ofVK_DESCRIPTOR_TYPE_SAMPLER
,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
, orVK_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 theSampledImageArrayDynamicIndexing
capability. -
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 ofVK_DESCRIPTOR_TYPE_STORAGE_BUFFER
orVK_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 theStorageBufferArrayDynamicIndexing
capability. -
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 ofVK_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 theStorageImageArrayDynamicIndexing
capability. -
shaderClipDistance
specifies whether clip distances are supported in shader code. If this feature is not enabled, any members decorated with theClipDistance
built-in decoration must not be read from or written to in shader modules. This also specifies whether shader modules can declare theClipDistance
capability. -
shaderCullDistance
specifies whether cull distances are supported in shader code. If this feature is not enabled, any members decorated with theCullDistance
built-in decoration must not be read from or written to in shader modules. This also specifies whether shader modules can declare theCullDistance
capability. -
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 theFloat64
capability. -
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 theInt64
capability. -
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 theInt16
capability. -
shaderResourceResidency
specifies whether image operations that return resource residency information are supported in shader code. If this feature is not enabled, theOpImageSparse
* instructions must not be used in shader code. This also specifies whether shader modules can declare theSparseResidency
capability. The feature requires at least one of thesparseResidency*
features to be supported. -
shaderResourceMinLod
specifies whether image operations that specify the minimum resource LOD are supported in shader code. If this feature is not enabled, theMinLod
image operand must not be used in shader code. This also specifies whether shader modules can declare theMinLod
capability. -
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 thevkBindBufferMemory
andvkBindImageMemory
commands. In this case, buffers and images must not be created withVK_BUFFER_CREATE_SPARSE_BINDING_BIT
andVK_IMAGE_CREATE_SPARSE_BINDING_BIT
set in theflags
member of theVkBufferCreateInfo
andVkImageCreateInfo
structures, respectively. Otherwise resource memory can be managed as described in Sparse Resource Features. -
sparseResidencyBuffer
specifies whether the device can access partially resident buffers. If this feature is not enabled, buffers must not be created withVK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
set in theflags
member of theVkBufferCreateInfo
structure. -
sparseResidencyImage2D
specifies whether the device can access partially resident 2D images with 1 sample per pixel. If this feature is not enabled, images with animageType
ofVK_IMAGE_TYPE_2D
andsamples
set toVK_SAMPLE_COUNT_1_BIT
must not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
set in theflags
member of theVkImageCreateInfo
structure. -
sparseResidencyImage3D
specifies whether the device can access partially resident 3D images. If this feature is not enabled, images with animageType
ofVK_IMAGE_TYPE_3D
must not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
set in theflags
member of theVkImageCreateInfo
structure. -
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 animageType
ofVK_IMAGE_TYPE_2D
andsamples
set toVK_SAMPLE_COUNT_2_BIT
must not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
set in theflags
member of theVkImageCreateInfo
structure. -
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 animageType
ofVK_IMAGE_TYPE_2D
andsamples
set toVK_SAMPLE_COUNT_4_BIT
must not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
set in theflags
member of theVkImageCreateInfo
structure. -
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 animageType
ofVK_IMAGE_TYPE_2D
andsamples
set toVK_SAMPLE_COUNT_8_BIT
must not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
set in theflags
member of theVkImageCreateInfo
structure. -
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 animageType
ofVK_IMAGE_TYPE_2D
andsamples
set toVK_SAMPLE_COUNT_16_BIT
must not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
set in theflags
member of theVkImageCreateInfo
structure. -
sparseResidencyAliased
specifies whether the physical device can correctly access data aliased into multiple locations. If this feature is not enabled, theVK_BUFFER_CREATE_SPARSE_ALIASED_BIT
andVK_IMAGE_CREATE_SPARSE_ALIASED_BIT
enum values must not be used inflags
members of theVkBufferCreateInfo
andVkImageCreateInfo
structures, respectively. -
variableMultisampleRate
specifies whether all pipelines that will be bound to a command buffer during a subpass with no attachments must have the same value forVkPipelineMultisampleStateCreateInfo
::rasterizationSamples
. If set toVK_TRUE
, the implementation supports variable multisample rates in a subpass with no attachments. If set toVK_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. -
inheritedQueries
specifies whether a secondary command buffer may be executed while a query is active.
The VkPhysicalDeviceVariablePointerFeatures
structure is defined as:
typedef struct VkPhysicalDeviceVariablePointerFeatures {
VkStructureType sType;
void* pNext;
VkBool32 variablePointersStorageBuffer;
VkBool32 variablePointers;
} VkPhysicalDeviceVariablePointerFeatures;
or the equivalent
typedef VkPhysicalDeviceVariablePointerFeatures VkPhysicalDeviceVariablePointerFeaturesKHR;
The members of the VkPhysicalDeviceVariablePointerFeatures
structure
describe the following features:
-
variablePointersStorageBuffer
specifies whether the implementation supports the SPIR-VVariablePointersStorageBuffer
capability. When this feature is not enabled, shader modules must not declare theSPV_KHR_variable_pointers
extension or theVariablePointersStorageBuffer
capability. -
variablePointers
specifies whether the implementation supports the SPIR-VVariablePointers
capability. When this feature is not enabled, shader modules must not declare theVariablePointers
capability.
If the VkPhysicalDeviceVariablePointerFeatures
structure is included
in the pNext
chain of VkPhysicalDeviceFeatures2, it is filled
with values indicating whether each feature is supported.
VkPhysicalDeviceVariablePointerFeatures
can also be used in the
pNext
chain of VkDeviceCreateInfo to enable the features.
The VkPhysicalDeviceMultiviewFeatures
structure is defined as:
typedef struct VkPhysicalDeviceMultiviewFeatures {
VkStructureType sType;
void* pNext;
VkBool32 multiview;
VkBool32 multiviewGeometryShader;
VkBool32 multiviewTessellationShader;
} VkPhysicalDeviceMultiviewFeatures;
or the equivalent
typedef VkPhysicalDeviceMultiviewFeatures VkPhysicalDeviceMultiviewFeaturesKHR;
The members of the VkPhysicalDeviceMultiviewFeatures
structure
describe the following features:
-
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. -
multiviewGeometryShader
specifies whether the implementation supports multiview rendering within a render pass, with 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. -
multiviewTessellationShader
specifies whether the implementation supports multiview rendering within a render pass, with 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 VkPhysicalDeviceMultiviewFeatures
structure is included in the
pNext
chain of VkPhysicalDeviceFeatures2, it is filled with
values indicating whether each feature is supported.
VkPhysicalDeviceMultiviewFeatures
can also be used in the pNext
chain of VkDeviceCreateInfo to enable the features.
To query 64-bit atomic support for signed and unsigned integers call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDeviceShaderAtomicInt64FeaturesKHR
structure included in the
pNext
chain of its pFeatures
parameter.
The VkPhysicalDeviceShaderAtomicInt64FeaturesKHR structure is defined as:
typedef struct VkPhysicalDeviceShaderAtomicInt64FeaturesKHR {
VkStructureType sType;
void* pNext;
VkBool32 shaderBufferInt64Atomics;
VkBool32 shaderSharedInt64Atomics;
} VkPhysicalDeviceShaderAtomicInt64FeaturesKHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
shaderBufferInt64Atomics
indicates whether shaders can support 64-bit unsigned and signed integer atomic operations on buffers. -
shaderSharedInt64Atomics
indicates whether shaders can support 64-bit unsigned and signed integer atomic operations on shared memory.
To query 8-bit storage features additionally supported call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDevice8BitStorageFeaturesKHR
structure included in the
pNext
chain of its pFeatures
parameter.
The VkPhysicalDevice8BitStorageFeaturesKHR
structure can also be in
the pNext
chain of a VkDeviceCreateInfo structure, in which case
it controls which additional features are enabled in the device.
The VkPhysicalDevice8BitStorageFeaturesKHR structure is defined as:
typedef struct VkPhysicalDevice8BitStorageFeaturesKHR {
VkStructureType sType;
void* pNext;
VkBool32 storageBuffer8BitAccess;
VkBool32 uniformAndStorageBuffer8BitAccess;
VkBool32 storagePushConstant8;
} VkPhysicalDevice8BitStorageFeaturesKHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
storageBuffer8BitAccess
indicates whether objects in theStorageBuffer
storage class with theBlock
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 theStorageBuffer8BitAccess
capability. -
uniformAndStorageBuffer8BitAccess
indicates whether objects in theUniform
storage class with theBlock
decoration and in theStorageBuffer
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 theUniformAndStorageBuffer8BitAccess
capability. -
storagePushConstant8
indicates whether objects in thePushConstant
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 theStoragePushConstant8
capability.
To query 16-bit storage features additionally supported call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDevice16BitStorageFeatures
structure included in the
pNext
chain of its pFeatures
parameter.
The VkPhysicalDevice16BitStorageFeatures
structure can also be in the
pNext
chain of a VkDeviceCreateInfo structure, in which case it
controls which additional features are enabled in the device.
The VkPhysicalDevice16BitStorageFeatures structure is defined as:
typedef struct VkPhysicalDevice16BitStorageFeatures {
VkStructureType sType;
void* pNext;
VkBool32 storageBuffer16BitAccess;
VkBool32 uniformAndStorageBuffer16BitAccess;
VkBool32 storagePushConstant16;
VkBool32 storageInputOutput16;
} VkPhysicalDevice16BitStorageFeatures;
or the equivalent
typedef VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
storageBuffer16BitAccess
specifies whether objects in theStorageBuffer
storage class with theBlock
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 theStorageBuffer16BitAccess
capability. -
uniformAndStorageBuffer16BitAccess
specifies whether objects in theUniform
storage class with theBlock
decoration and in theStorageBuffer
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 theUniformAndStorageBuffer16BitAccess
capability. -
storagePushConstant16
specifies whether objects in thePushConstant
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 theStoragePushConstant16
capability. -
storageInputOutput16
specifies whether objects in theInput
andOutput
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 theStorageInputOutput16
capability.
To query features additionally supported by the
VK_KHR_shader_float16_int8
extension, call
vkGetPhysicalDeviceFeatures2KHR with a
VkPhysicalDeviceFloat16Int8FeaturesKHR
structure in the pNext
chain.
The VkPhysicalDeviceFloat16Int8FeaturesKHR
structure can also be in
the pNext
chain of a VkDeviceCreateInfo structure, in which case
it controls which additional features are enabled in the device.
The VkPhysicalDeviceFloat16Int8FeaturesKHR
structure is defined as:
typedef struct VkPhysicalDeviceFloat16Int8FeaturesKHR {
VkStructureType sType;
void* pNext;
VkBool32 shaderFloat16;
VkBool32 shaderInt8;
} VkPhysicalDeviceFloat16Int8FeaturesKHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
shaderFloat16
indicates whether 16-bit floats (halfs) are supported in shader code. This also indicates whether shader modules can declare theFloat16
capability. -
shaderInt8
indicates whether 8-bit integers (signed and unsigned) are supported in shader code. This also indicates whether shader modules can declare theInt8
capability.
The VkPhysicalDeviceSamplerYcbcrConversionFeatures
structure is
defined as:
typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures {
VkStructureType sType;
void* pNext;
VkBool32 samplerYcbcrConversion;
} VkPhysicalDeviceSamplerYcbcrConversionFeatures;
or the equivalent
typedef VkPhysicalDeviceSamplerYcbcrConversionFeatures VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR;
The members of the VkPhysicalDeviceSamplerYcbcrConversionFeatures
structure describe the following feature:
-
samplerYcbcrConversion
specifies whether the implementation supports sampler Y’CBCR conversion. IfsamplerYcbcrConversion
isVK_FALSE
, sampler Y’CBCR conversion is not supported, and samplers using sampler Y’CBCR conversion must not be used.
The VkPhysicalDeviceProtectedMemoryFeatures
structure is defined as:
typedef struct VkPhysicalDeviceProtectedMemoryFeatures {
VkStructureType sType;
void* pNext;
VkBool32 protectedMemory;
} VkPhysicalDeviceProtectedMemoryFeatures;
-
protectedMemory
specifies whether protected memory is supported.
If the VkPhysicalDeviceProtectedMemoryFeatures
structure is included
in the pNext
chain of VkPhysicalDeviceFeatures2, it is filled
with a value indicating whether the feature is supported.
The VkPhysicalDeviceShaderDrawParameterFeatures
structure is defined
as:
typedef struct VkPhysicalDeviceShaderDrawParameterFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderDrawParameters;
} VkPhysicalDeviceShaderDrawParameterFeatures;
If the VkPhysicalDeviceShaderDrawParameterFeatures
structure is
included in the pNext
chain of VkPhysicalDeviceFeatures2, it is
filled with a value indicating whether the feature is supported.
To query memory model features additionally supported call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDeviceVulkanMemoryModelFeaturesKHR
structure included in the
pNext
chain of its pFeatures
parameter.
The VkPhysicalDeviceVulkanMemoryModelFeaturesKHR
structure can also
be in the pNext
chain of a VkDeviceCreateInfo structure, in
which case it controls which additional features are enabled in the device.
The VkPhysicalDeviceVulkanMemoryModelFeaturesKHR structure is defined as:
typedef struct VkPhysicalDeviceVulkanMemoryModelFeaturesKHR {
VkStructureType sType;
void* pNext;
VkBool32 vulkanMemoryModel;
VkBool32 vulkanMemoryModelDeviceScope;
VkBool32 vulkanMemoryModelAvailabilityVisibilityChains;
} VkPhysicalDeviceVulkanMemoryModelFeaturesKHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
vulkanMemoryModel
indicates whether the Vulkan Memory Model is supported, as defined in Vulkan Memory Model. This also indicates whether shader modules can declare theVulkanMemoryModelKHR
capability. -
vulkanMemoryModelDeviceScope
indicates whether the Vulkan Memory Model can useDevice
scope synchronization. This also indicates whether shader modules can declare theVulkanMemoryModelDeviceScopeKHR
capability. -
vulkanMemoryModelAvailabilityVisibilityChains
indicates whether the Vulkan Memory Model can use availability and visibility chains with more than one element.
31.1.1. Feature Requirements
All Vulkan graphics implementations must support the following features:
-
variablePointersStorageBuffer
, if theVK_KHR_variable_pointers
extension is supported. -
storageBuffer8BitAccess
, if theVK_KHR_8bit_storage
extension is supported.
All other features defined in the Specification are optional.
31.2. Limits
There are a variety of implementation-dependent limits.
The VkPhysicalDeviceLimits
are properties of the physical device.
These are available in the limits
member of the
VkPhysicalDeviceProperties structure which is returned from
vkGetPhysicalDeviceProperties.
The VkPhysicalDeviceLimits
structure is defined as:
typedef struct VkPhysicalDeviceLimits {
uint32_t maxImageDimension1D;
uint32_t maxImageDimension2D;
uint32_t maxImageDimension3D;
uint32_t maxImageDimensionCube;
uint32_t maxImageArrayLayers;
uint32_t maxTexelBufferElements;
uint32_t maxUniformBufferRange;
uint32_t maxStorageBufferRange;
uint32_t maxPushConstantsSize;
uint32_t maxMemoryAllocationCount;
uint32_t maxSamplerAllocationCount;
VkDeviceSize bufferImageGranularity;
VkDeviceSize sparseAddressSpaceSize;
uint32_t maxBoundDescriptorSets;
uint32_t maxPerStageDescriptorSamplers;
uint32_t maxPerStageDescriptorUniformBuffers;
uint32_t maxPerStageDescriptorStorageBuffers;
uint32_t maxPerStageDescriptorSampledImages;
uint32_t maxPerStageDescriptorStorageImages;
uint32_t maxPerStageDescriptorInputAttachments;
uint32_t maxPerStageResources;
uint32_t maxDescriptorSetSamplers;
uint32_t maxDescriptorSetUniformBuffers;
uint32_t maxDescriptorSetUniformBuffersDynamic;
uint32_t maxDescriptorSetStorageBuffers;
uint32_t maxDescriptorSetStorageBuffersDynamic;
uint32_t maxDescriptorSetSampledImages;
uint32_t maxDescriptorSetStorageImages;
uint32_t maxDescriptorSetInputAttachments;
uint32_t maxVertexInputAttributes;
uint32_t maxVertexInputBindings;
uint32_t maxVertexInputAttributeOffset;
uint32_t maxVertexInputBindingStride;
uint32_t maxVertexOutputComponents;
uint32_t maxTessellationGenerationLevel;
uint32_t maxTessellationPatchSize;
uint32_t maxTessellationControlPerVertexInputComponents;
uint32_t maxTessellationControlPerVertexOutputComponents;
uint32_t maxTessellationControlPerPatchOutputComponents;
uint32_t maxTessellationControlTotalOutputComponents;
uint32_t maxTessellationEvaluationInputComponents;
uint32_t maxTessellationEvaluationOutputComponents;
uint32_t maxGeometryShaderInvocations;
uint32_t maxGeometryInputComponents;
uint32_t maxGeometryOutputComponents;
uint32_t maxGeometryOutputVertices;
uint32_t maxGeometryTotalOutputComponents;
uint32_t maxFragmentInputComponents;
uint32_t maxFragmentOutputAttachments;
uint32_t maxFragmentDualSrcAttachments;
uint32_t maxFragmentCombinedOutputResources;
uint32_t maxComputeSharedMemorySize;
uint32_t maxComputeWorkGroupCount[3];
uint32_t maxComputeWorkGroupInvocations;
uint32_t maxComputeWorkGroupSize[3];
uint32_t subPixelPrecisionBits;
uint32_t subTexelPrecisionBits;
uint32_t mipmapPrecisionBits;
uint32_t maxDrawIndexedIndexValue;
uint32_t maxDrawIndirectCount;
float maxSamplerLodBias;
float maxSamplerAnisotropy;
uint32_t maxViewports;
uint32_t maxViewportDimensions[2];
float viewportBoundsRange[2];
uint32_t viewportSubPixelBits;
size_t minMemoryMapAlignment;
VkDeviceSize minTexelBufferOffsetAlignment;
VkDeviceSize minUniformBufferOffsetAlignment;
VkDeviceSize minStorageBufferOffsetAlignment;
int32_t minTexelOffset;
uint32_t maxTexelOffset;
int32_t minTexelGatherOffset;
uint32_t maxTexelGatherOffset;
float minInterpolationOffset;
float maxInterpolationOffset;
uint32_t subPixelInterpolationOffsetBits;
uint32_t maxFramebufferWidth;
uint32_t maxFramebufferHeight;
uint32_t maxFramebufferLayers;
VkSampleCountFlags framebufferColorSampleCounts;
VkSampleCountFlags framebufferDepthSampleCounts;
VkSampleCountFlags framebufferStencilSampleCounts;
VkSampleCountFlags framebufferNoAttachmentsSampleCounts;
uint32_t maxColorAttachments;
VkSampleCountFlags sampledImageColorSampleCounts;
VkSampleCountFlags sampledImageIntegerSampleCounts;
VkSampleCountFlags sampledImageDepthSampleCounts;
VkSampleCountFlags sampledImageStencilSampleCounts;
VkSampleCountFlags storageImageSampleCounts;
uint32_t maxSampleMaskWords;
VkBool32 timestampComputeAndGraphics;
float timestampPeriod;
uint32_t maxClipDistances;
uint32_t maxCullDistances;
uint32_t maxCombinedClipAndCullDistances;
uint32_t discreteQueuePriorities;
float pointSizeRange[2];
float lineWidthRange[2];
float pointSizeGranularity;
float lineWidthGranularity;
VkBool32 strictLines;
VkBool32 standardSampleLocations;
VkDeviceSize optimalBufferCopyOffsetAlignment;
VkDeviceSize optimalBufferCopyRowPitchAlignment;
VkDeviceSize nonCoherentAtomSize;
} VkPhysicalDeviceLimits;
-
maxImageDimension1D
is the maximum dimension (width
) supported for all images created with animageType
ofVK_IMAGE_TYPE_1D
. -
maxImageDimension2D
is the maximum dimension (width
orheight
) supported for all images created with animageType
ofVK_IMAGE_TYPE_2D
and withoutVK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
set inflags
. -
maxImageDimension3D
is the maximum dimension (width
,height
, ordepth
) supported for all images created with animageType
ofVK_IMAGE_TYPE_3D
. -
maxImageDimensionCube
is the maximum dimension (width
orheight
) supported for all images created with animageType
ofVK_IMAGE_TYPE_2D
and withVK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
set inflags
. -
maxImageArrayLayers
is the maximum number of layers (arrayLayers
) for an image. -
maxTexelBufferElements
is the maximum number of addressable texels for a buffer view created on a buffer which was created with theVK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
orVK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
set in theusage
member of theVkBufferCreateInfo
structure. -
maxUniformBufferRange
is the maximum value that can be specified in therange
member of any VkDescriptorBufferInfo structures passed to a call to vkUpdateDescriptorSets for descriptors of typeVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
orVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
. -
maxStorageBufferRange
is the maximum value that can be specified in therange
member of any VkDescriptorBufferInfo structures passed to a call to vkUpdateDescriptorSets for descriptors of typeVK_DESCRIPTOR_TYPE_STORAGE_BUFFER
orVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
. -
maxPushConstantsSize
is the maximum size, in bytes, of the pool of push constant memory. For each of the push constant ranges indicated by thepPushConstantRanges
member of theVkPipelineLayoutCreateInfo
structure, (offset
+size
) must be less than or equal to this limit. -
maxMemoryAllocationCount
is the maximum number of device memory allocations, as created by vkAllocateMemory, which can simultaneously exist. -
maxSamplerAllocationCount
is the maximum number of sampler objects, as created by vkCreateSampler, which can simultaneously exist on a device. -
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 sameVkDeviceMemory
object without aliasing. See Buffer-Image Granularity for more details. -
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. -
maxBoundDescriptorSets
is the maximum number of descriptor sets that can be simultaneously used by a pipeline. AllDescriptorSet
decorations in shader modules must have a value less thanmaxBoundDescriptorSets
. See Descriptor Sets. -
maxPerStageDescriptorSamplers
is the maximum number of samplers that can be accessible to a single shader stage in a pipeline layout. Descriptors with a type ofVK_DESCRIPTOR_TYPE_SAMPLER
orVK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
count against this limit. A descriptor is accessible to a shader stage when thestageFlags
member of theVkDescriptorSetLayoutBinding
structure has the bit for that shader stage set. See Sampler and Combined Image Sampler. -
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 ofVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
orVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
count against this limit. A descriptor is accessible to a shader stage when thestageFlags
member of theVkDescriptorSetLayoutBinding
structure has the bit for that shader stage set. See Uniform Buffer and Dynamic Uniform Buffer. -
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 ofVK_DESCRIPTOR_TYPE_STORAGE_BUFFER
orVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
count against this limit. A descriptor is accessible to a pipeline shader stage when thestageFlags
member of theVkDescriptorSetLayoutBinding
structure has the bit for that shader stage set. See Storage Buffer and Dynamic Storage Buffer. -
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 ofVK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
,VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
, orVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
count against this limit. A descriptor is accessible to a pipeline shader stage when thestageFlags
member of theVkDescriptorSetLayoutBinding
structure has the bit for that shader stage set. See Combined Image Sampler, Sampled Image, and Uniform Texel Buffer. -
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 ofVK_DESCRIPTOR_TYPE_STORAGE_IMAGE
, orVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
count against this limit. A descriptor is accessible to a pipeline shader stage when thestageFlags
member of theVkDescriptorSetLayoutBinding
structure has the bit for that shader stage set. See Storage Image, and Storage Texel Buffer. -
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 ofVK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
count against this limit. A descriptor is accessible to a pipeline shader stage when thestageFlags
member of theVkDescriptorSetLayoutBinding
structure has the bit for that shader stage set. These are only supported for the fragment stage. See Input Attachment. -
maxPerStageResources
is the maximum number of resources that can be accessible to a single shader stage in a pipeline layout. Descriptors with a type ofVK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
,VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
,VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
,VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
,VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
,VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
,VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
,VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
,VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
, orVK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
count against this limit. For the fragment shader stage the framebuffer color attachments also count against this limit. -
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 ofVK_DESCRIPTOR_TYPE_SAMPLER
orVK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
count against this limit. See Sampler and Combined Image Sampler. -
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 ofVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
orVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
count against this limit. See Uniform Buffer and Dynamic Uniform Buffer. -
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 ofVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
count against this limit. See Dynamic Uniform Buffer. -
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 ofVK_DESCRIPTOR_TYPE_STORAGE_BUFFER
orVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
count against this limit. See Storage Buffer and Dynamic Storage Buffer. -
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 ofVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
count against this limit. See Dynamic Storage Buffer. -
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 ofVK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
,VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
, orVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
count against this limit. See Combined Image Sampler, Sampled Image, and Uniform Texel Buffer. -
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 ofVK_DESCRIPTOR_TYPE_STORAGE_IMAGE
, orVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
count against this limit. See Storage Image, and Storage Texel Buffer. -
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 ofVK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
count against this limit. See Input Attachment. -
maxVertexInputAttributes
is the maximum number of vertex input attributes that can be specified for a graphics pipeline. These are described in the array ofVkVertexInputAttributeDescription
structures that are provided at graphics pipeline creation time via thepVertexAttributeDescriptions
member of theVkPipelineVertexInputStateCreateInfo
structure. See Vertex Attributes and Vertex Input Description. -
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 ofVkVertexInputBindingDescription
structures that are provided at graphics pipeline creation time via thepVertexBindingDescriptions
member of theVkPipelineVertexInputStateCreateInfo
structure. Thebinding
member ofVkVertexInputBindingDescription
must be less than this limit. See Vertex Input Description. -
maxVertexInputAttributeOffset
is the maximum vertex input attribute offset that can be added to the vertex input binding stride. Theoffset
member of theVkVertexInputAttributeDescription
structure must be less than or equal to this limit. See Vertex Input Description. -
maxVertexInputBindingStride
is the maximum vertex input binding stride that can be specified in a vertex input binding. Thestride
member of theVkVertexInputBindingDescription
structure must be less than or equal to this limit. See Vertex Input Description. -
maxVertexOutputComponents
is the maximum number of components of output variables which can be output by a vertex shader. See Vertex Shaders. -
maxTessellationGenerationLevel
is the maximum tessellation generation level supported by the fixed-function tessellation primitive generator. See Tessellation. -
maxTessellationPatchSize
is the maximum patch size, in vertices, of patches that can be processed by the tessellation control shader and tessellation primitive generator. ThepatchControlPoints
member of theVkPipelineTessellationStateCreateInfo
structure specified at pipeline creation time and the value provided in theOutputVertices
execution mode of shader modules must be less than or equal to this limit. See Tessellation. -
maxTessellationControlPerVertexInputComponents
is the maximum number of components of input variables which can be provided as per-vertex inputs to the tessellation control shader stage. -
maxTessellationControlPerVertexOutputComponents
is the maximum number of components of per-vertex output variables which can be output from the tessellation control shader stage. -
maxTessellationControlPerPatchOutputComponents
is the maximum number of components of per-patch output variables which can be output from the tessellation control shader stage. -
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. -
maxTessellationEvaluationInputComponents
is the maximum number of components of input variables which can be provided as per-vertex inputs to the tessellation evaluation shader stage. -
maxTessellationEvaluationOutputComponents
is the maximum number of components of per-vertex output variables which can be output from the tessellation evaluation shader stage. -
maxGeometryShaderInvocations
is the maximum invocation count supported for instanced geometry shaders. The value provided in theInvocations
execution mode of shader modules must be less than or equal to this limit. See Geometry Shading. -
maxGeometryInputComponents
is the maximum number of components of input variables which can be provided as inputs to the geometry shader stage. -
maxGeometryOutputComponents
is the maximum number of components of output variables which can be output from the geometry shader stage. -
maxGeometryOutputVertices
is the maximum number of vertices which can be emitted by any geometry shader. -
maxGeometryTotalOutputComponents
is the maximum total number of components of output, across all emitted vertices, which can be output from the geometry shader stage. -
maxFragmentInputComponents
is the maximum number of components of input variables which can be provided as inputs to the fragment shader stage. -
maxFragmentOutputAttachments
is the maximum number of output attachments which can be written to by the fragment shader stage. -
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 Dual-Source Blending and dualSrcBlend. -
maxFragmentCombinedOutputResources
is the total number of storage buffers, storage images, and output buffers which can be used in the fragment shader stage. -
maxComputeSharedMemorySize
is the maximum total storage size, in bytes, available for variables declared with theWorkgroup
storage class in shader modules (or with theshared
storage qualifier in GLSL) in the compute shader stage. The amount of storage consumed by the variables declared with theWorkgroup
storage class is implementation-dependent. However, the amount of storage consumed may not exceed the largest block size that would be obtained if all active variables declared withWorkgroup
storage class were assigned offsets in an arbitrary order by successively taking the smallest valid offset according to the Standard Storage Buffer Layout rules. (This is equivalent to using the GLSL std430 layout rules.) -
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 Dispatching Commands. -
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 theLocalSize
execution mode in shader modules and by the object decorated by theWorkgroupSize
decoration must be less than or equal to this limit. -
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. Thex
,y
, andz
sizes specified by theLocalSize
execution mode and by the object decorated by theWorkgroupSize
decoration in shader modules must be less than or equal to the corresponding limit. -
subPixelPrecisionBits
is the number of bits of subpixel precision in framebuffer coordinates xf and yf. See Rasterization. -
subTexelPrecisionBits
is the number of bits of precision in the division along an axis of an image used for minification and magnification filters. 2subTexelPrecisionBits
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. -
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. 2mipmapPrecisionBits
is the actual number of divisions. -
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 fullDrawIndexUint32. -
maxDrawIndirectCount
is the maximum draw count that is supported for indirect draw calls. See multiDrawIndirect. -
maxSamplerLodBias
is the maximum absolute sampler LOD bias. The sum of themipLodBias
member of theVkSamplerCreateInfo
structure and theBias
operand of image sampling operations in shader modules (or 0 if noBias
operand is provided to an image sampling operation) are clamped to the range [-maxSamplerLodBias
,+maxSamplerLodBias
]. See [samplers-mipLodBias]. -
maxSamplerAnisotropy
is the maximum degree of sampler anisotropy. The maximum degree of anisotropic filtering used for an image sampling operation is the minimum of themaxAnisotropy
member of theVkSamplerCreateInfo
structure and this limit. See [samplers-maxAnisotropy]. -
maxViewports
is the maximum number of active viewports. TheviewportCount
member of theVkPipelineViewportStateCreateInfo
structure that is provided at pipeline creation must be less than or equal to this limit. -
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 Controlling the Viewport. -
viewportBoundsRange
[2] is the [minimum, maximum] range that the corners of a viewport must be contained in. This range must be at least [-2 ×size
, 2 ×size
- 1], wheresize
= max(maxViewportDimensions
[0],maxViewportDimensions
[1]). See Controlling the Viewport.NoteThe intent of the
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 [-size
+ 1, 2 ×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. -
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. -
minMemoryMapAlignment
is the minimum required alignment, in bytes, of host visible memory allocations within the host address space. When mapping a memory allocation with vkMapMemory, subtractingoffset
bytes from the returned pointer will always produce an integer multiple of this limit. See Host Access to Device Memory Objects. -
minTexelBufferOffsetAlignment
is the minimum required alignment, in bytes, for theoffset
member of theVkBufferViewCreateInfo
structure for texel buffers. When a buffer view is created for a buffer which was created withVK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
orVK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
set in theusage
member of theVkBufferCreateInfo
structure, theoffset
must be an integer multiple of this limit. -
minUniformBufferOffsetAlignment
is the minimum required alignment, in bytes, for theoffset
member of theVkDescriptorBufferInfo
structure for uniform buffers. When a descriptor of typeVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
orVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
is updated, theoffset
must be an integer multiple of this limit. Similarly, dynamic offsets for uniform buffers must be multiples of this limit. -
minStorageBufferOffsetAlignment
is the minimum required alignment, in bytes, for theoffset
member of theVkDescriptorBufferInfo
structure for storage buffers. When a descriptor of typeVK_DESCRIPTOR_TYPE_STORAGE_BUFFER
orVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
is updated, theoffset
must be an integer multiple of this limit. Similarly, dynamic offsets for storage buffers must be multiples of this limit. -
minTexelOffset
is the minimum offset value for theConstOffset
image operand of any of theOpImageSample
* orOpImageFetch
* image instructions. -
maxTexelOffset
is the maximum offset value for theConstOffset
image operand of any of theOpImageSample
* orOpImageFetch
* image instructions. -
minTexelGatherOffset
is the minimum offset value for theOffset
orConstOffsets
image operands of any of theOpImage
*Gather
image instructions. -
maxTexelGatherOffset
is the maximum offset value for theOffset
orConstOffsets
image operands of any of theOpImage
*Gather
image instructions. -
minInterpolationOffset
is the minimum negative offset value for theoffset
operand of theInterpolateAtOffset
extended instruction. -
maxInterpolationOffset
is the maximum positive offset value for theoffset
operand of theInterpolateAtOffset
extended instruction. -
subPixelInterpolationOffsetBits
is the number of subpixel fractional bits that thex
andy
offsets to theInterpolateAtOffset
extended instruction may be rounded to as fixed-point values. -
maxFramebufferWidth
is the maximum width for a framebuffer. Thewidth
member of theVkFramebufferCreateInfo
structure must be less than or equal to this limit. -
maxFramebufferHeight
is the maximum height for a framebuffer. Theheight
member of theVkFramebufferCreateInfo
structure must be less than or equal to this limit. -
maxFramebufferLayers
is the maximum layer count for a layered framebuffer. Thelayers
member of theVkFramebufferCreateInfo
structure must be less than or equal to this limit. -
framebufferColorSampleCounts
is a bitmask1 of 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. -
framebufferDepthSampleCounts
is a bitmask1 of VkSampleCountFlagBits indicating the supported depth sample counts for all framebuffer depth/stencil attachments, when the format includes a depth component. -
framebufferStencilSampleCounts
is a bitmask1 of VkSampleCountFlagBits indicating the supported stencil sample counts for all framebuffer depth/stencil attachments, when the format includes a stencil component. -
framebufferNoAttachmentsSampleCounts
is a bitmask1 of VkSampleCountFlagBits indicating the supported sample counts for a framebuffer with no attachments. -
maxColorAttachments
is the maximum number of color attachments that can be used by a subpass in a render pass. ThecolorAttachmentCount
member of theVkSubpassDescription
structure must be less than or equal to this limit. -
sampledImageColorSampleCounts
is a bitmask1 of VkSampleCountFlagBits indicating the sample counts supported for all 2D images created withVK_IMAGE_TILING_OPTIMAL
,usage
containingVK_IMAGE_USAGE_SAMPLED_BIT
, and a non-integer color format. -
sampledImageIntegerSampleCounts
is a bitmask1 of VkSampleCountFlagBits indicating the sample counts supported for all 2D images created withVK_IMAGE_TILING_OPTIMAL
,usage
containingVK_IMAGE_USAGE_SAMPLED_BIT
, and an integer color format. -
sampledImageDepthSampleCounts
is a bitmask1 of VkSampleCountFlagBits indicating the sample counts supported for all 2D images created withVK_IMAGE_TILING_OPTIMAL
,usage
containingVK_IMAGE_USAGE_SAMPLED_BIT
, and a depth format. -
sampledImageStencilSampleCounts
is a bitmask1 of VkSampleCountFlagBits indicating the sample supported for all 2D images created withVK_IMAGE_TILING_OPTIMAL
,usage
containingVK_IMAGE_USAGE_SAMPLED_BIT
, and a stencil format. -
storageImageSampleCounts
is a bitmask1 of VkSampleCountFlagBits indicating the sample counts supported for all 2D images created withVK_IMAGE_TILING_OPTIMAL
, andusage
containingVK_IMAGE_USAGE_STORAGE_BIT
. -
maxSampleMaskWords
is the maximum number of array elements of a variable decorated with theSampleMask
built-in decoration. -
timestampComputeAndGraphics
specifies support for timestamps on all graphics and compute queues. If this limit is set toVK_TRUE
, all queues that advertise theVK_QUEUE_GRAPHICS_BIT
orVK_QUEUE_COMPUTE_BIT
in theVkQueueFamilyProperties
::queueFlags
supportVkQueueFamilyProperties
::timestampValidBits
of at least 36. See Timestamp Queries. -
timestampPeriod
is the number of nanoseconds required for a timestamp query to be incremented by 1. See Timestamp Queries. -
maxClipDistances
is the maximum number of clip distances that can be used in a single shader stage. The size of any array declared with theClipDistance
built-in decoration in a shader module must be less than or equal to this limit. -
maxCullDistances
is the maximum number of cull distances that can be used in a single shader stage. The size of any array declared with theCullDistance
built-in decoration in a shader module must be less than or equal to this limit. -
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 theClipDistance
andCullDistance
built-in decoration used by a single shader stage in a shader module must be less than or equal to this limit. -
discreteQueuePriorities
is the number of discrete priorities that can be assigned to a queue based on the value of each member ofVkDeviceQueueCreateInfo
::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 Queue Priority. -
pointSizeRange
[2] is the range [minimum
,maximum
] of supported sizes for points. Values written to variables decorated with thePointSize
built-in decoration are clamped to this range. -
lineWidthRange
[2] is the range [minimum
,maximum
] of supported widths for lines. Values specified by thelineWidth
member of theVkPipelineRasterizationStateCreateInfo
or thelineWidth
parameter tovkCmdSetLineWidth
are clamped to this range. -
pointSizeGranularity
is the granularity of supported point sizes. Not all point sizes in the range defined bypointSizeRange
are supported. This limit specifies the granularity (or increment) between successive supported point sizes. -
lineWidthGranularity
is the granularity of supported line widths. Not all line widths in the range defined bylineWidthRange
are supported. This limit specifies the granularity (or increment) between successive supported line widths. -
strictLines
specifies whether lines are rasterized according to the preferred method of rasterization. If set toVK_FALSE
, lines may be rasterized under a relaxed set of rules. If set toVK_TRUE
, lines are rasterized as per the strict definition. See Basic Line Segment Rasterization. -
standardSampleLocations
specifies whether rasterization uses the standard sample locations as documented in Multisampling. If set toVK_TRUE
, the implementation uses the documented sample locations. If set toVK_FALSE
, the implementation may use different sample locations. -
optimalBufferCopyOffsetAlignment
is the optimal buffer offset alignment in bytes forvkCmdCopyBufferToImage
andvkCmdCopyImageToBuffer
. The per texel alignment requirements are enforced, but applications should use the optimal alignment for optimal performance and power use. -
optimalBufferCopyRowPitchAlignment
is the optimal buffer row pitch alignment in bytes forvkCmdCopyBufferToImage
andvkCmdCopyImageToBuffer
. 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. -
nonCoherentAtomSize
is the size and alignment in bytes that bounds concurrent access to host-mapped device memory.
- 1
-
For all bitmasks of 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 vkGetPhysicalDeviceImageFormatProperties as described in Supported Sample Counts.
Bits which may be set in the sample count limits returned by VkPhysicalDeviceLimits, as well as in other queries and structures representing image sample counts, are:
typedef enum VkSampleCountFlagBits {
VK_SAMPLE_COUNT_1_BIT = 0x00000001,
VK_SAMPLE_COUNT_2_BIT = 0x00000002,
VK_SAMPLE_COUNT_4_BIT = 0x00000004,
VK_SAMPLE_COUNT_8_BIT = 0x00000008,
VK_SAMPLE_COUNT_16_BIT = 0x00000010,
VK_SAMPLE_COUNT_32_BIT = 0x00000020,
VK_SAMPLE_COUNT_64_BIT = 0x00000040,
} VkSampleCountFlagBits;
-
VK_SAMPLE_COUNT_1_BIT
specifies an image with one sample per pixel. -
VK_SAMPLE_COUNT_2_BIT
specifies an image with 2 samples per pixel. -
VK_SAMPLE_COUNT_4_BIT
specifies an image with 4 samples per pixel. -
VK_SAMPLE_COUNT_8_BIT
specifies an image with 8 samples per pixel. -
VK_SAMPLE_COUNT_16_BIT
specifies an image with 16 samples per pixel. -
VK_SAMPLE_COUNT_32_BIT
specifies an image with 32 samples per pixel. -
VK_SAMPLE_COUNT_64_BIT
specifies an image with 64 samples per pixel.
typedef VkFlags VkSampleCountFlags;
VkSampleCountFlags
is a bitmask type for setting a mask of zero or
more VkSampleCountFlagBits.
The VkPhysicalDevicePushDescriptorPropertiesKHR
structure is defined
as:
typedef struct VkPhysicalDevicePushDescriptorPropertiesKHR {
VkStructureType sType;
void* pNext;
uint32_t maxPushDescriptors;
} VkPhysicalDevicePushDescriptorPropertiesKHR;
The members of the VkPhysicalDevicePushDescriptorPropertiesKHR
structure describe the following implementation-dependent limits:
If the VkPhysicalDevicePushDescriptorPropertiesKHR
structure is
included in the pNext
chain of VkPhysicalDeviceProperties2, it
is filled with the implementation-dependent limits.
The VkPhysicalDeviceMultiviewProperties
structure is defined as:
typedef struct VkPhysicalDeviceMultiviewProperties {
VkStructureType sType;
void* pNext;
uint32_t maxMultiviewViewCount;
uint32_t maxMultiviewInstanceIndex;
} VkPhysicalDeviceMultiviewProperties;
or the equivalent
typedef VkPhysicalDeviceMultiviewProperties VkPhysicalDeviceMultiviewPropertiesKHR;
The members of the VkPhysicalDeviceMultiviewProperties
structure
describe the following implementation-dependent limits:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
maxMultiviewViewCount
is one greater than the maximum view index that can be used in a subpass. -
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.
If the VkPhysicalDeviceMultiviewProperties
structure is included in
the pNext
chain of VkPhysicalDeviceProperties2, it is filled
with the implementation-dependent limits.
The members of the VkPhysicalDeviceFloatControlsPropertiesKHR
structure describe the following implementation-dependent limits:
typedef struct VkPhysicalDeviceFloatControlsPropertiesKHR {
VkStructureType sType;
void* pNext;
VkBool32 separateDenormSettings;
VkBool32 separateRoundingModeSettings;
VkBool32 shaderSignedZeroInfNanPreserveFloat16;
VkBool32 shaderSignedZeroInfNanPreserveFloat32;
VkBool32 shaderSignedZeroInfNanPreserveFloat64;
VkBool32 shaderDenormPreserveFloat16;
VkBool32 shaderDenormPreserveFloat32;
VkBool32 shaderDenormPreserveFloat64;
VkBool32 shaderDenormFlushToZeroFloat16;
VkBool32 shaderDenormFlushToZeroFloat32;
VkBool32 shaderDenormFlushToZeroFloat64;
VkBool32 shaderRoundingModeRTEFloat16;
VkBool32 shaderRoundingModeRTEFloat32;
VkBool32 shaderRoundingModeRTEFloat64;
VkBool32 shaderRoundingModeRTZFloat16;
VkBool32 shaderRoundingModeRTZFloat32;
VkBool32 shaderRoundingModeRTZFloat64;
} VkPhysicalDeviceFloatControlsPropertiesKHR;
-
separateDenormSettings
is a boolean value indicating whether the implementation supports separate settings for 16-bit and 64-bit denormals. -
separateRoundingModeSettings
is a boolean value indicating whether the implementation supports separate rounding modes for 16-bit and 64-bit floating point instructions. -
shaderSignedZeroInfNanPreserveFloat16
is a boolean value indicating whether sign of a zero, Nans and \(\pm\infty\) can be preserved in 16-bit floating-point computations. It also indicates whether theSignedZeroInfNanPreserve
execution mode can be used for 16-bit floating-point types. -
shaderSignedZeroInfNanPreserveFloat32
is a boolean value indicating whether sign of a zero, Nans and \(\pm\infty\) can be preserved in 32-bit floating-point computations. It also indicates whether theSignedZeroInfNanPreserve
execution mode can be used for 32-bit floating-point types. -
shaderSignedZeroInfNanPreserveFloat64
is a boolean value indicating whether sign of a zero, Nans and \(\pm\infty\) can be preserved in 64-bit floating-point computations. It also indicates whether theSignedZeroInfNanPreserve
execution mode can be used for 64-bit floating-point types. -
shaderDenormPreserveFloat16
is a boolean value indicating whether denormals can be preserved in 16-bit floating-point computations. It also indicates whether theDenormPreserve
execution mode can be used for 16-bit floating-point types. -
shaderDenormPreserveFloat32
is a boolean value indicating whether denormals can be preserved in 32-bit floating-point computations. It also indicates whether theDenormPreserve
execution mode can be used for 32-bit floating-point types. -
shaderDenormPreserveFloat64
is a boolean value indicating whether denormals can be preserved in 64-bit floating-point computations. It also indicates whether theDenormPreserve
execution mode can be used for 64-bit floating-point types. -
shaderDenormFlushToZeroFloat16
is a boolean value indicating whether denormals can be flushed to zero in 16-bit floating-point computations. It also indicates whether theDenormFlushToZero
execution mode can be used for 16-bit floating-point types. -
shaderDenormFlushToZeroFloat32
is a boolean value indicating whether denormals can be flushed to zero in 32-bit floating-point computations. It also indicates whether theDenormFlushToZero
execution mode can be used for 32-bit floating-point types. -
shaderDenormFlushToZeroFloat64
is a boolean value indicating whether denormals can be flushed to zero in 64-bit floating-point computations. It also indicates whether theDenormFlushToZero
execution mode can be used for 64-bit floating-point types. -
shaderRoundingModeRTEFloat16
is a boolean value indicating whether an implementation supports the round-to-nearest-even rounding mode for 16-bit floating-point arithmetic and conversion instructions. It also indicates whether theRoundingModeRTE
execution mode can be used for 16-bit floating-point types. -
shaderRoundingModeRTEFloat32
is a boolean value indicating whether an implementation supports the round-to-nearest-even rounding mode for 32-bit floating-point arithmetic and conversion instructions. It also indicates whether theRoundingModeRTE
execution mode can be used for 32-bit floating-point types. -
shaderRoundingModeRTEFloat64
is a boolean value indicating whether an implementation supports the round-to-nearest-even rounding mode for 64-bit floating-point arithmetic and conversion instructions. It also indicates whether theRoundingModeRTE
execution mode can be used for 64-bit floating-point types. -
shaderRoundingModeRTZFloat16
is a boolean value indicating whether an implementation supports the round-towards-zero rounding mode for 16-bit floating-point arithmetic and conversion instructions. It also indicates whether theRoundingModeRTZ
execution mode can be used for 16-bit floating-point types. -
shaderRoundingModeRTZFloat32
is a boolean value indicating whether an implementation supports the round-towards-zero rounding mode for 32-bit floating-point arithmetic and conversion instructions. It also indicates whether theRoundingModeRTZ
execution mode can be used for 32-bit floating-point types. -
shaderRoundingModeRTZFloat64
is a boolean value indicating whether an implementation supports the round-towards-zero rounding mode for 64-bit floating-point arithmetic and conversion instructions. It also indicates whether theRoundingModeRTZ
execution mode can be used for 64-bit floating-point types.
If the VkPhysicalDeviceFloatControlsPropertiesKHR
structure is
included in the pNext
chain of VkPhysicalDeviceProperties2, it
is filled with the implementation-dependent limits.
The VkPhysicalDevicePointClippingProperties
structure is defined as:
typedef struct VkPhysicalDevicePointClippingProperties {
VkStructureType sType;
void* pNext;
VkPointClippingBehavior pointClippingBehavior;
} VkPhysicalDevicePointClippingProperties;
or the equivalent
typedef VkPhysicalDevicePointClippingProperties VkPhysicalDevicePointClippingPropertiesKHR;
The members of the VkPhysicalDevicePointClippingProperties
structure
describe the following implementation-dependent limit:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
pointClippingBehavior
is the point clipping behavior supported by the implementation, and is of type VkPointClippingBehavior.
If the VkPhysicalDevicePointClippingProperties
structure is included
in the pNext
chain of VkPhysicalDeviceProperties2, it is filled
with the implementation-dependent limits.
The VkPhysicalDeviceSubgroupProperties
structure is defined as:
typedef struct VkPhysicalDeviceSubgroupProperties {
VkStructureType sType;
void* pNext;
uint32_t subgroupSize;
VkShaderStageFlags supportedStages;
VkSubgroupFeatureFlags supportedOperations;
VkBool32 quadOperationsInAllStages;
} VkPhysicalDeviceSubgroupProperties;
The members of the VkPhysicalDeviceSubgroupProperties
structure
describe the following implementation-dependent limits:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
subgroupSize
is the number of invocations in each subgroup. This will match anySubgroupSize
decorated variable used in any shader module created on this device.subgroupSize
is at least 1 if any of the physical device’s queues supportVK_QUEUE_GRAPHICS_BIT
orVK_QUEUE_COMPUTE_BIT
. -
supportedStages
is a bitfield of VkShaderStageFlagBits describing the shader stages that subgroup operations are supported in.supportedStages
will have theVK_SHADER_STAGE_COMPUTE_BIT
bit set if any of the physical device’s queues supportVK_QUEUE_COMPUTE_BIT
. -
supportedOperations
is a bitmask of VkSubgroupFeatureFlagBits specifying the sets of subgroup operations supported on this device.supportedOperations
will have theVK_SUBGROUP_FEATURE_BASIC_BIT
bit set if any of the physical device’s queues supportVK_QUEUE_GRAPHICS_BIT
orVK_QUEUE_COMPUTE_BIT
. -
quadOperationsInAllStages
is a boolean that specifies whether quad subgroup operations are available in all stages, or are restricted to fragment and compute stages.
If the VkPhysicalDeviceSubgroupProperties
structure is included in the
pNext
chain of VkPhysicalDeviceProperties2, it is filled with
the implementation-dependent limits.
Bits which can be set in
VkPhysicalDeviceSubgroupProperties::supportedOperations
to
specify supported subgroup operations are:
typedef enum VkSubgroupFeatureFlagBits {
VK_SUBGROUP_FEATURE_BASIC_BIT = 0x00000001,
VK_SUBGROUP_FEATURE_VOTE_BIT = 0x00000002,
VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 0x00000004,
VK_SUBGROUP_FEATURE_BALLOT_BIT = 0x00000008,
VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 0x00000010,
VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020,
VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040,
VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080,
} VkSubgroupFeatureFlagBits;
-
VK_SUBGROUP_FEATURE_BASIC_BIT
specifies the device will accept SPIR-V shader modules that contain theGroupNonUniform
capability. -
VK_SUBGROUP_FEATURE_VOTE_BIT
specifies the device will accept SPIR-V shader modules that contain theGroupNonUniformVote
capability. -
VK_SUBGROUP_FEATURE_ARITHMETIC_BIT
specifies the device will accept SPIR-V shader modules that contain theGroupNonUniformArithmetic
capability. -
VK_SUBGROUP_FEATURE_BALLOT_BIT
specifies the device will accept SPIR-V shader modules that contain theGroupNonUniformBallot
capability. -
VK_SUBGROUP_FEATURE_SHUFFLE_BIT
specifies the device will accept SPIR-V shader modules that contain theGroupNonUniformShuffle
capability. -
VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
specifies the device will accept SPIR-V shader modules that contain theGroupNonUniformShuffleRelative
capability. -
VK_SUBGROUP_FEATURE_CLUSTERED_BIT
specifies the device will accept SPIR-V shader modules that contain theGroupNonUniformClustered
capability. -
VK_SUBGROUP_FEATURE_QUAD_BIT
specifies the device will accept SPIR-V shader modules that contain theGroupNonUniformQuad
capability.
typedef VkFlags VkSubgroupFeatureFlags;
VkSubgroupFeatureFlags
is a bitmask type for setting a mask of zero or
more VkSubgroupFeatureFlagBits.
The VkPhysicalDeviceProtectedMemoryProperties
structure is defined as:
typedef struct VkPhysicalDeviceProtectedMemoryProperties {
VkStructureType sType;
void* pNext;
VkBool32 protectedNoFault;
} VkPhysicalDeviceProtectedMemoryProperties;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
protectedNoFault
specifies whether the undefined behavior may include process termination or device loss. IfprotectedNoFault
isVK_FALSE
, undefined behavior may include process termination or device loss. IfprotectedNoFault
isVK_TRUE
, undefined behavior will not include process termination or device loss.
If the VkPhysicalDeviceProtectedMemoryProperties
structure is included
in the pNext
chain of VkPhysicalDeviceProperties2, it is filled
with a value indicating the implementation-dependent behavior.
The VkPhysicalDeviceMaintenance3Properties
structure is defined as:
typedef struct VkPhysicalDeviceMaintenance3Properties {
VkStructureType sType;
void* pNext;
uint32_t maxPerSetDescriptors;
VkDeviceSize maxMemoryAllocationSize;
} VkPhysicalDeviceMaintenance3Properties;
or the equivalent
typedef VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR;
The members of the VkPhysicalDeviceMaintenance3Properties
structure
describe the following implementation-dependent limits:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
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 vkGetDescriptorSetLayoutSupport. -
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 VkPhysicalDeviceMaintenance3Properties
structure is included in
the pNext
chain of VkPhysicalDeviceProperties2, it is filled
with the implementation-dependent limits.
The VkPhysicalDeviceDepthStencilResolvePropertiesKHR
structure is
defined as:
typedef struct VkPhysicalDeviceDepthStencilResolvePropertiesKHR {
VkStructureType sType;
void* pNext;
VkResolveModeFlagsKHR supportedDepthResolveModes;
VkResolveModeFlagsKHR supportedStencilResolveModes;
VkBool32 independentResolveNone;
VkBool32 independentResolve;
} VkPhysicalDeviceDepthStencilResolvePropertiesKHR;
The members of the VkPhysicalDeviceDepthStencilResolvePropertiesKHR
structure describe the following implementation-dependent limits:
-
supportedDepthResolveModes
is a bitmask of VkResolveModeFlagBitsKHR indicating the set of supported depth resolve modes.VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR
must be included in the set but implementations may support additional modes. -
supportedStencilResolveModes
is a bitmask of VkResolveModeFlagBitsKHR indicating the set of supported stencil resolve modes.VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR
must be included in the set but implementations may support additional modes.VK_RESOLVE_MODE_AVERAGE_BIT_KHR
must not be included in the set. -
independentResolveNone
isVK_TRUE
if the implementation supports setting the depth and stencil resolve modes to different values when one of those modes isVK_RESOLVE_MODE_NONE_KHR
. Otherwise the implementation only supports setting both modes to the same value. -
independentResolve
isVK_TRUE
if the implementation supports all combinations of the supported depth and stencil resolve modes.
31.2.1. 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.
Type | Limit | Feature |
---|---|---|
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
- |
|
|
|
|
|
- |
|
|
- |
3 × |
|
- |
|
|
- |
3 × |
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
- |
|
|
|
|
|
|
2 × |
|
- |
2 × |
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
- |
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
- |
2 × |
|
|
2 × |
|
|
|
|
|
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
Limit | Unsupported Limit | Supported Limit | Limit Type1 |
---|---|---|---|
|
- |
4096 |
min |
|
- |
4096 |
min |
|
- |
256 |
min |
|
- |
4096 |
min |
|
- |
256 |
min |
|
- |
65536 |
min |
|
- |
16384 |
min |
|
- |
227 |
min |
|
- |
128 |
min |
|
- |
4096 |
min |
|
- |
4000 |
min |
|
- |
131072 |
max |
|
0 |
231 |
min |
|
- |
4 |
min |
|
- |
16 |
min |
|
- |
12 |
min |
|
- |
4 |
min |
|
- |
16 |
min |
|
- |
4 |
min |
|
- |
4 |
min |
|
- |
128 2 |
min |
|
- |
96 8 |
min, n × PerStage |
|
- |
72 8 |
min, n × PerStage |
|
- |
8 |
min |
|
- |
24 8 |
min, n × PerStage |
|
- |
4 |
min |
|
- |
96 8 |
min, n × PerStage |
|
- |
24 8 |
min, n × PerStage |
|
- |
4 |
min |
|
- |
16 |
min |
|
- |
16 |
min |
|
- |
2047 |
min |
|
- |
2048 |
min |
|
- |
64 |
min |
|
0 |
64 |
min |
|
0 |
32 |
min |
|
0 |
64 |
min |
|
0 |
64 |
min |
|
0 |
120 |
min |
|
0 |
2048 |
min |
|
0 |
64 |
min |
|
0 |
64 |
min |
|
0 |
32 |
min |
|
0 |
64 |
min |
|
0 |
64 |
min |
|
0 |
256 |
min |
|
0 |
1024 |
min |
|
- |
64 |
min |
|
- |
4 |
min |
|
0 |
1 |
min |
|
- |
4 |
min |
|
- |
16384 |
min |
|
- |
(65535,65535,65535) |
min |
|
- |
128 |
min |
|
- |
(128,128,64) |
min |
|
- |
4 |
min |
|
- |
4 |
min |
|
- |
4 |
min |
|
224-1 |
232-1 |
min |
|
1 |
216-1 |
min |
|
- |
2 |
min |
|
1 |
16 |
min |
|
1 |
16 |
min |
|
- |
(4096,4096) 3 |
min |
|
- |
(-8192,8191) 4 |
(max,min) |
|
- |
0 |
min |
|
- |
64 |
min |
|
- |
256 |
max |
|
- |
256 |
max |
|
- |
256 |
max |
|
- |
-8 |
max |
|
- |
7 |
min |
|
0 |
-8 |
max |
|
0 |
7 |
min |
|
0.0 |
-0.5 5 |
max |
|
0.0 |
0.5 - (1 ULP) 5 |
min |
|
0 |
4 5 |
min |
|
- |
4096 |
min |
|
- |
4096 |
min |
|
- |
256 |
min |
|
- |
( |
min |
|
- |
( |
min |
|
- |
( |
min |
|
- |
( |
min |
|
- |
4 |
min |
|
- |
( |
min |
|
- |
|
min |
|
- |
( |
min |
|
- |
( |
min |
|
|
( |
min |
|
- |
1 |
min |
|
- |
- |
implementation dependent |
|
- |
- |
duration |
|
0 |
8 |
min |
|
0 |
8 |
min |
|
0 |
8 |
min |
|
- |
2 |
min |
|
(1.0,1.0) |
(1.0,64.0 - ULP)6 |
(max,min) |
|
(1.0,1.0) |
(1.0,8.0 - ULP)7 |
(max,min) |
|
0.0 |
1.0 6 |
max, fixed point increment |
|
0.0 |
1.0 7 |
max, fixed point increment |
|
- |
- |
implementation dependent |
|
- |
- |
implementation dependent |
|
- |
- |
recommendation |
|
- |
- |
recommendation |
|
- |
256 |
max |
|
- |
32 |
min |
|
- |
6 |
min |
|
- |
227-1 |
min |
|
- |
1024 |
min |
|
- |
230 |
min |
- 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
maxPerStageResources
must be at least the smallest of the following:-
the sum of the
maxPerStageDescriptorUniformBuffers
,maxPerStageDescriptorStorageBuffers
,maxPerStageDescriptorSampledImages
,maxPerStageDescriptorStorageImages
,maxPerStageDescriptorInputAttachments
,maxColorAttachments
limits, or -
128.
It may not be possible to reach this limit in every stage.
-
- 3
-
See
maxViewportDimensions
for the required relationship to other limits. - 4
-
See
viewportBoundsRange
for the required relationship to other limits. - 5
-
The values
minInterpolationOffset
andmaxInterpolationOffset
describe the closed interval of supported interpolation offsets: [minInterpolationOffset
,maxInterpolationOffset
]. The ULP is determined bysubPixelInterpolationOffsetBits
. IfsubPixelInterpolationOffsetBits
is 4, this provides increments of (1/24) = 0.0625, and thus the range of supported interpolation offsets would be [-0.5, 0.4375]. - 6
-
The point size ULP is determined by
pointSizeGranularity
. If thepointSizeGranularity
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
lineWidthGranularity
. If thelineWidthGranularity
is 0.0625, the range of supported line widths must be at least [1.0, 7.9375]. - 8
-
The minimum
maxDescriptorSet*
limit is n times the corresponding specification minimummaxPerStageDescriptor*
limit, where n is the number of shader stages supported by the VkPhysicalDevice. If all shader stages are supported, n = 6 (vertex, tessellation control, tessellation evaluation, geometry, fragment, compute).
31.3. Formats
The features for the set of formats (VkFormat) supported by the implementation are queried individually using the vkGetPhysicalDeviceFormatProperties command.
31.3.1. Format Definition
The following image formats can be passed to, and may be returned from Vulkan commands. The memory required to store each format is discussed with that format, and also summarized in the Representation and Texel Block Size section and the Compatible formats table.
typedef enum VkFormat {
VK_FORMAT_UNDEFINED = 0,
VK_FORMAT_R4G4_UNORM_PACK8 = 1,
VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
VK_FORMAT_R8_UNORM = 9,
VK_FORMAT_R8_SNORM = 10,
VK_FORMAT_R8_USCALED = 11,
VK_FORMAT_R8_SSCALED = 12,
VK_FORMAT_R8_UINT = 13,
VK_FORMAT_R8_SINT = 14,
VK_FORMAT_R8_SRGB = 15,
VK_FORMAT_R8G8_UNORM = 16,
VK_FORMAT_R8G8_SNORM = 17,
VK_FORMAT_R8G8_USCALED = 18,
VK_FORMAT_R8G8_SSCALED = 19,
VK_FORMAT_R8G8_UINT = 20,
VK_FORMAT_R8G8_SINT = 21,
VK_FORMAT_R8G8_SRGB = 22,
VK_FORMAT_R8G8B8_UNORM = 23,
VK_FORMAT_R8G8B8_SNORM = 24,
VK_FORMAT_R8G8B8_USCALED = 25,
VK_FORMAT_R8G8B8_SSCALED = 26,
VK_FORMAT_R8G8B8_UINT = 27,
VK_FORMAT_R8G8B8_SINT = 28,
VK_FORMAT_R8G8B8_SRGB = 29,
VK_FORMAT_B8G8R8_UNORM = 30,
VK_FORMAT_B8G8R8_SNORM = 31,
VK_FORMAT_B8G8R8_USCALED = 32,
VK_FORMAT_B8G8R8_SSCALED = 33,
VK_FORMAT_B8G8R8_UINT = 34,
VK_FORMAT_B8G8R8_SINT = 35,
VK_FORMAT_B8G8R8_SRGB = 36,
VK_FORMAT_R8G8B8A8_UNORM = 37,
VK_FORMAT_R8G8B8A8_SNORM = 38,
VK_FORMAT_R8G8B8A8_USCALED = 39,
VK_FORMAT_R8G8B8A8_SSCALED = 40,
VK_FORMAT_R8G8B8A8_UINT = 41,
VK_FORMAT_R8G8B8A8_SINT = 42,
VK_FORMAT_R8G8B8A8_SRGB = 43,
VK_FORMAT_B8G8R8A8_UNORM = 44,
VK_FORMAT_B8G8R8A8_SNORM = 45,
VK_FORMAT_B8G8R8A8_USCALED = 46,
VK_FORMAT_B8G8R8A8_SSCALED = 47,
VK_FORMAT_B8G8R8A8_UINT = 48,
VK_FORMAT_B8G8R8A8_SINT = 49,
VK_FORMAT_B8G8R8A8_SRGB = 50,
VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
VK_FORMAT_R16_UNORM = 70,
VK_FORMAT_R16_SNORM = 71,
VK_FORMAT_R16_USCALED = 72,
VK_FORMAT_R16_SSCALED = 73,
VK_FORMAT_R16_UINT = 74,
VK_FORMAT_R16_SINT = 75,
VK_FORMAT_R16_SFLOAT = 76,
VK_FORMAT_R16G16_UNORM = 77,
VK_FORMAT_R16G16_SNORM = 78,
VK_FORMAT_R16G16_USCALED = 79,
VK_FORMAT_R16G16_SSCALED = 80,
VK_FORMAT_R16G16_UINT = 81,
VK_FORMAT_R16G16_SINT = 82,
VK_FORMAT_R16G16_SFLOAT = 83,
VK_FORMAT_R16G16B16_UNORM = 84,
VK_FORMAT_R16G16B16_SNORM = 85,
VK_FORMAT_R16G16B16_USCALED = 86,
VK_FORMAT_R16G16B16_SSCALED = 87,
VK_FORMAT_R16G16B16_UINT = 88,
VK_FORMAT_R16G16B16_SINT = 89,
VK_FORMAT_R16G16B16_SFLOAT = 90,
VK_FORMAT_R16G16B16A16_UNORM = 91,
VK_FORMAT_R16G16B16A16_SNORM = 92,
VK_FORMAT_R16G16B16A16_USCALED = 93,
VK_FORMAT_R16G16B16A16_SSCALED = 94,
VK_FORMAT_R16G16B16A16_UINT = 95,
VK_FORMAT_R16G16B16A16_SINT = 96,
VK_FORMAT_R16G16B16A16_SFLOAT = 97,
VK_FORMAT_R32_UINT = 98,
VK_FORMAT_R32_SINT = 99,
VK_FORMAT_R32_SFLOAT = 100,
VK_FORMAT_R32G32_UINT = 101,
VK_FORMAT_R32G32_SINT = 102,
VK_FORMAT_R32G32_SFLOAT = 103,
VK_FORMAT_R32G32B32_UINT = 104,
VK_FORMAT_R32G32B32_SINT = 105,
VK_FORMAT_R32G32B32_SFLOAT = 106,
VK_FORMAT_R32G32B32A32_UINT = 107,
VK_FORMAT_R32G32B32A32_SINT = 108,
VK_FORMAT_R32G32B32A32_SFLOAT = 109,
VK_FORMAT_R64_UINT = 110,
VK_FORMAT_R64_SINT = 111,
VK_FORMAT_R64_SFLOAT = 112,
VK_FORMAT_R64G64_UINT = 113,
VK_FORMAT_R64G64_SINT = 114,
VK_FORMAT_R64G64_SFLOAT = 115,
VK_FORMAT_R64G64B64_UINT = 116,
VK_FORMAT_R64G64B64_SINT = 117,
VK_FORMAT_R64G64B64_SFLOAT = 118,
VK_FORMAT_R64G64B64A64_UINT = 119,
VK_FORMAT_R64G64B64A64_SINT = 120,
VK_FORMAT_R64G64B64A64_SFLOAT = 121,
VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
VK_FORMAT_D16_UNORM = 124,
VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
VK_FORMAT_D32_SFLOAT = 126,
VK_FORMAT_S8_UINT = 127,
VK_FORMAT_D16_UNORM_S8_UINT = 128,
VK_FORMAT_D24_UNORM_S8_UINT = 129,
VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
VK_FORMAT_BC2_UNORM_BLOCK = 135,
VK_FORMAT_BC2_SRGB_BLOCK = 136,
VK_FORMAT_BC3_UNORM_BLOCK = 137,
VK_FORMAT_BC3_SRGB_BLOCK = 138,
VK_FORMAT_BC4_UNORM_BLOCK = 139,
VK_FORMAT_BC4_SNORM_BLOCK = 140,
VK_FORMAT_BC5_UNORM_BLOCK = 141,
VK_FORMAT_BC5_SNORM_BLOCK = 142,
VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
VK_FORMAT_BC7_UNORM_BLOCK = 145,
VK_FORMAT_BC7_SRGB_BLOCK = 146,
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000,
VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001,
VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002,
VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003,
VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004,
VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005,
VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006,
VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007,
VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008,
VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009,
VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010,
VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011,
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012,
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013,
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014,
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015,
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016,
VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017,
VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018,
VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019,
VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020,
VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021,
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022,
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023,
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024,
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025,
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026,
VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027,
VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028,
VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029,
VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030,
VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031,
VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032,
VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033,
VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM,
VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM,
VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM,
VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16,
VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16,
VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM,
VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM,
VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
} VkFormat;
-
VK_FORMAT_UNDEFINED
specifies that the format is not specified. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
VK_FORMAT_R8_UNORM
specifies a one-component, 8-bit unsigned normalized format that has a single 8-bit R component. -
VK_FORMAT_R8_SNORM
specifies a one-component, 8-bit signed normalized format that has a single 8-bit R component. -
VK_FORMAT_R8_USCALED
specifies a one-component, 8-bit unsigned scaled integer format that has a single 8-bit R component. -
VK_FORMAT_R8_SSCALED
specifies a one-component, 8-bit signed scaled integer format that has a single 8-bit R component. -
VK_FORMAT_R8_UINT
specifies a one-component, 8-bit unsigned integer format that has a single 8-bit R component. -
VK_FORMAT_R8_SINT
specifies a one-component, 8-bit signed integer format that has a single 8-bit R component. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
VK_FORMAT_R16_UNORM
specifies a one-component, 16-bit unsigned normalized format that has a single 16-bit R component. -
VK_FORMAT_R16_SNORM
specifies a one-component, 16-bit signed normalized format that has a single 16-bit R component. -
VK_FORMAT_R16_USCALED
specifies a one-component, 16-bit unsigned scaled integer format that has a single 16-bit R component. -
VK_FORMAT_R16_SSCALED
specifies a one-component, 16-bit signed scaled integer format that has a single 16-bit R component. -
VK_FORMAT_R16_UINT
specifies a one-component, 16-bit unsigned integer format that has a single 16-bit R component. -
VK_FORMAT_R16_SINT
specifies a one-component, 16-bit signed integer format that has a single 16-bit R component. -
VK_FORMAT_R16_SFLOAT
specifies a one-component, 16-bit signed floating-point format that has a single 16-bit R component. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
VK_FORMAT_R32_UINT
specifies a one-component, 32-bit unsigned integer format that has a single 32-bit R component. -
VK_FORMAT_R32_SINT
specifies a one-component, 32-bit signed integer format that has a single 32-bit R component. -
VK_FORMAT_R32_SFLOAT
specifies a one-component, 32-bit signed floating-point format that has a single 32-bit R component. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
VK_FORMAT_R64_UINT
specifies a one-component, 64-bit unsigned integer format that has a single 64-bit R component. -
VK_FORMAT_R64_SINT
specifies a one-component, 64-bit signed integer format that has a single 64-bit R component. -
VK_FORMAT_R64_SFLOAT
specifies a one-component, 64-bit signed floating-point format that has a single 64-bit R component. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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. -
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 Unsigned 10-Bit Floating-Point Numbers and Unsigned 11-Bit Floating-Point Numbers. -
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. -
VK_FORMAT_D16_UNORM
specifies a one-component, 16-bit unsigned normalized format that has a single 16-bit depth component. -
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. -
VK_FORMAT_D32_SFLOAT
specifies a one-component, 32-bit signed floating-point format that has 32-bits in the depth component. -
VK_FORMAT_S8_UINT
specifies a one-component, 8-bit unsigned integer format that has 8-bits in the stencil component. -
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. -
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. -
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. -
VK_FORMAT_BC1_RGB_UNORM_BLOCK
specifies a three-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data. This format has no alpha and is considered opaque. -
VK_FORMAT_BC1_RGB_SRGB_BLOCK
specifies a three-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data with sRGB nonlinear encoding. This format has no alpha and is considered opaque. -
VK_FORMAT_BC1_RGBA_UNORM_BLOCK
specifies a four-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data, and provides 1 bit of alpha. -
VK_FORMAT_BC1_RGBA_SRGB_BLOCK
specifies a four-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data with sRGB nonlinear encoding, and provides 1 bit of alpha. -
VK_FORMAT_BC2_UNORM_BLOCK
specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with the first 64 bits encoding alpha values followed by 64 bits encoding RGB values. -
VK_FORMAT_BC2_SRGB_BLOCK
specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×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. -
VK_FORMAT_BC3_UNORM_BLOCK
specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with the first 64 bits encoding alpha values followed by 64 bits encoding RGB values. -
VK_FORMAT_BC3_SRGB_BLOCK
specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×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. -
VK_FORMAT_BC4_UNORM_BLOCK
specifies a one-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized red texel data. -
VK_FORMAT_BC4_SNORM_BLOCK
specifies a one-component, block-compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of signed normalized red texel data. -
VK_FORMAT_BC5_UNORM_BLOCK
specifies a two-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RG texel data with the first 64 bits encoding red values followed by 64 bits encoding green values. -
VK_FORMAT_BC5_SNORM_BLOCK
specifies a two-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of signed normalized RG texel data with the first 64 bits encoding red values followed by 64 bits encoding green values. -
VK_FORMAT_BC6H_UFLOAT_BLOCK
specifies a three-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned floating-point RGB texel data. -
VK_FORMAT_BC6H_SFLOAT_BLOCK
specifies a three-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of signed floating-point RGB texel data. -
VK_FORMAT_BC7_UNORM_BLOCK
specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_BC7_SRGB_BLOCK
specifies a four-component, block-compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
specifies a three-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data. This format has no alpha and is considered opaque. -
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
specifies a three-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data with sRGB nonlinear encoding. This format has no alpha and is considered opaque. -
VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
specifies a four-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data, and provides 1 bit of alpha. -
VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
specifies a four-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGB texel data with sRGB nonlinear encoding, and provides 1 bit of alpha. -
VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
specifies a four-component, ETC2 compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with the first 64 bits encoding alpha values followed by 64 bits encoding RGB values. -
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
specifies a four-component, ETC2 compressed format where each 128-bit compressed texel block encodes a 4×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. -
VK_FORMAT_EAC_R11_UNORM_BLOCK
specifies a one-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized red texel data. -
VK_FORMAT_EAC_R11_SNORM_BLOCK
specifies a one-component, ETC2 compressed format where each 64-bit compressed texel block encodes a 4×4 rectangle of signed normalized red texel data. -
VK_FORMAT_EAC_R11G11_UNORM_BLOCK
specifies a two-component, ETC2 compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RG texel data with the first 64 bits encoding red values followed by 64 bits encoding green values. -
VK_FORMAT_EAC_R11G11_SNORM_BLOCK
specifies a two-component, ETC2 compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of signed normalized RG texel data with the first 64 bits encoding red values followed by 64 bits encoding green values. -
VK_FORMAT_ASTC_4x4_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_4x4_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 4×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_5x4_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 5×4 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_5x4_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 5×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_5x5_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 5×5 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_5x5_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 5×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_6x5_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 6×5 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_6x5_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 6×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_6x6_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 6×6 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_6x6_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 6×6 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_8x5_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×5 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_8x5_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_8x6_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×6 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_8x6_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×6 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_8x8_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×8 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_8x8_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes an 8×8 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_10x5_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×5 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_10x5_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_10x6_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×6 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_10x6_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×6 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_10x8_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×8 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_10x8_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×8 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_10x10_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×10 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_10x10_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 10×10 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_12x10_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 12×10 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_12x10_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 12×10 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
VK_FORMAT_ASTC_12x12_UNORM_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 12×12 rectangle of unsigned normalized RGBA texel data. -
VK_FORMAT_ASTC_12x12_SRGB_BLOCK
specifies a four-component, ASTC compressed format where each 128-bit compressed texel block encodes a 12×12 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear encoding applied to the RGB components. -
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×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×1 compressed texel block. -
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×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×1 compressed texel block. -
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 \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\) and \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_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. -
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 \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\) and \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane, andVK_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. -
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 \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_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. -
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 \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane, andVK_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. -
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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_IMAGE_ASPECT_PLANE_2_BIT
for the R plane. -
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. -
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. -
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. -
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×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×1 compressed texel block. -
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×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×1 compressed texel block. -
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 \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\) and \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_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. -
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 \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\) and \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane, andVK_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. -
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 \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_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. -
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 \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane, andVK_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. -
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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_IMAGE_ASPECT_PLANE_2_BIT
for the R plane. -
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. -
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. -
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. -
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×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×1 compressed texel block. -
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×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×1 compressed texel block. -
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 \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\) and \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_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. -
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 \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\) and \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane, andVK_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. -
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 \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_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. -
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 \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane, andVK_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. -
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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_IMAGE_ASPECT_PLANE_2_BIT
for the R plane. -
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×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×1 compressed texel block. -
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×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×1 compressed texel block. -
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 \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\) and \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_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. -
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 \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\) and \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane, andVK_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. -
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 \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_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. -
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 \(\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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane, andVK_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. -
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 vkGetImageSubresourceLayout, usingVK_IMAGE_ASPECT_PLANE_0_BIT
for the G plane,VK_IMAGE_ASPECT_PLANE_1_BIT
for the B plane, andVK_IMAGE_ASPECT_PLANE_2_BIT
for the R plane.
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 texel block. 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 | 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 |
---|---|---|---|
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h/2 |
2 |
|
w/2 |
h/2 |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h/2 |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h |
2 |
|
w/2 |
h |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h |
|
|||
0 |
|
w |
h |
1 |
|
w |
h |
2 |
|
w |
h |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h/2 |
2 |
|
w/2 |
h/2 |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h/2 |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h |
2 |
|
w/2 |
h |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h |
|
|||
0 |
|
w |
h |
1 |
|
w |
h |
2 |
|
w |
h |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h/2 |
2 |
|
w/2 |
h/2 |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h/2 |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h |
2 |
|
w/2 |
h |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h |
|
|||
0 |
|
w |
h |
1 |
|
w |
h |
2 |
|
w |
h |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h/2 |
2 |
|
w/2 |
h/2 |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h/2 |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h |
2 |
|
w/2 |
h |
|
|||
0 |
|
w |
h |
1 |
|
w/2 |
h |
|
|||
0 |
|
w |
h |
1 |
|
w |
h |
2 |
|
w |
h |
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 bitfields of a single 8-, 16-, or 32-bit fundamental data type.
-
-
VK_FORMAT_R4G4_UNORM_PACK8
-
-
Packed into 16-bit data types:
-
VK_FORMAT_R4G4B4A4_UNORM_PACK16
-
VK_FORMAT_B4G4R4A4_UNORM_PACK16
-
VK_FORMAT_R5G6B5_UNORM_PACK16
-
VK_FORMAT_B5G6R5_UNORM_PACK16
-
VK_FORMAT_R5G5B5A1_UNORM_PACK16
-
VK_FORMAT_B5G5R5A1_UNORM_PACK16
-
VK_FORMAT_A1R5G5B5_UNORM_PACK16
-
-
Packed into 32-bit data types:
-
VK_FORMAT_A8B8G8R8_UNORM_PACK32
-
VK_FORMAT_A8B8G8R8_SNORM_PACK32
-
VK_FORMAT_A8B8G8R8_USCALED_PACK32
-
VK_FORMAT_A8B8G8R8_SSCALED_PACK32
-
VK_FORMAT_A8B8G8R8_UINT_PACK32
-
VK_FORMAT_A8B8G8R8_SINT_PACK32
-
VK_FORMAT_A8B8G8R8_SRGB_PACK32
-
VK_FORMAT_A2R10G10B10_UNORM_PACK32
-
VK_FORMAT_A2R10G10B10_SNORM_PACK32
-
VK_FORMAT_A2R10G10B10_USCALED_PACK32
-
VK_FORMAT_A2R10G10B10_SSCALED_PACK32
-
VK_FORMAT_A2R10G10B10_UINT_PACK32
-
VK_FORMAT_A2R10G10B10_SINT_PACK32
-
VK_FORMAT_A2B10G10R10_UNORM_PACK32
-
VK_FORMAT_A2B10G10R10_SNORM_PACK32
-
VK_FORMAT_A2B10G10R10_USCALED_PACK32
-
VK_FORMAT_A2B10G10R10_SSCALED_PACK32
-
VK_FORMAT_A2B10G10R10_UINT_PACK32
-
VK_FORMAT_A2B10G10R10_SINT_PACK32
-
VK_FORMAT_B10G11R11_UFLOAT_PACK32
-
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
-
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.
Numeric format | Description |
---|---|
|
The components are unsigned normalized values in the range [0,1] |
|
The components are signed normalized values in the range [-1,1] |
|
The components are unsigned integer values that get converted to floating-point in the range [0,2n-1] |
|
The components are signed integer values that get converted to floating-point in the range [-2n-1,2n-1-1] |
|
The components are unsigned integer values in the range [0,2n-1] |
|
The components are signed integer values in the range [-2n-1,2n-1-1] |
|
The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats) |
|
The components are signed floating-point numbers |
|
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 _PACKnn
indicates that the format is packed into an
underlying type with nn bits.
The suffix _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.
The suffix _BLOCK
indicates that the format is a block-compressed
format, with the representation of multiple pixels encoded interdependently
within a region.
Compression scheme | Description |
---|---|
|
Block Compression. See Block-Compressed Image Formats. |
|
Ericsson Texture Compression. See ETC Compressed Image Formats. |
|
ETC2 Alpha Compression. See ETC Compressed Image Formats. |
|
Adaptive Scalable Texture Compression (LDR Profile). See ASTC Compressed Image Formats. |
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
_2PLANE
or _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 _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, _420
to indicate that planes other than the first are reduced in size by a factor
of two both horizontally and vertically, and _444
for consistency to
indicate that all three planes of a three-planar image are the same size.
Note
No common format has a single plane containing both R and B channels but does not store these channels at reduced horizontal resolution. |
Representation and Texel Block Size
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 below.
Each format has a texel block size, the number of bytes used to store one texel block (a single addressable element of an uncompressed image, or a single compressed block of a compressed image). The texel block size for each format is shown in the Compatible formats table.
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 Byte mappings for non-packed/compressed color formats. The in-memory ordering of bytes within a component is determined by the host endianness.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ← Byte |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
R |
|
|||||||||||||||
R |
G |
|
||||||||||||||
R |
G |
B |
|
|||||||||||||
B |
G |
R |
|
|||||||||||||
R |
G |
B |
A |
|
||||||||||||
B |
G |
R |
A |
|
||||||||||||
G0 |
B |
G1 |
R |
|
||||||||||||
B |
G0 |
R |
G1 |
|
||||||||||||
R |
|
|||||||||||||||
R |
G |
|
||||||||||||||
R |
G |
B |
|
|||||||||||||
R |
G |
B |
A |
|
||||||||||||
G0 |
B |
G1 |
R |
|
||||||||||||
B |
G0 |
R |
G1 |
|
||||||||||||
R |
|
|||||||||||||||
R |
G |
|
||||||||||||||
R |
G |
B |
|
|||||||||||||
R |
G |
B |
A |
|
||||||||||||
R |
|
|||||||||||||||
R |
G |
|
||||||||||||||
|
||||||||||||||||
|
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.
Bit | |||||||
---|---|---|---|---|---|---|---|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|||||||
R |
G |
||||||
3 |
2 |
1 |
0 |
3 |
2 |
1 |
0 |
Bit | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|||||||||||||||
R |
G |
B |
A |
||||||||||||
3 |
2 |
1 |
0 |
3 |
2 |
1 |
0 |
3 |
2 |
1 |
0 |
3 |
2 |
1 |
0 |
|
|||||||||||||||
B |
G |
R |
A |
||||||||||||
3 |
2 |
1 |
0 |
3 |
2 |
1 |
0 |
3 |
2 |
1 |
0 |
3 |
2 |
1 |
0 |
|
|||||||||||||||
R |
G |
B |
|||||||||||||
4 |
3 |
2 |
1 |
0 |
5 |
4 |
3 |
2 |
1 |
0 |
4 |
3 |
2 |
1 |
0 |
|
|||||||||||||||
B |
G |
R |
|||||||||||||
4 |
3 |
2 |
1 |
0 |
5 |
4 |
3 |
2 |
1 |
0 |
4 |
3 |
2 |
1 |
0 |
|
|||||||||||||||
R |
G |
B |
A |
||||||||||||
4 |
3 |
2 |
1 |
0 |
4 |
3 |
2 |
1 |
0 |
4 |
3 |
2 |
1 |
0 |
0 |
|
|||||||||||||||
B |
G |
R |
A |
||||||||||||
4 |
3 |
2 |
1 |
0 |
4 |
3 |
2 |
1 |
0 |
4 |
3 |
2 |
1 |
0 |
0 |
|
|||||||||||||||
A |
R |
G |
B |
||||||||||||
0 |
4 |
3 |
2 |
1 |
0 |
4 |
3 |
2 |
1 |
0 |
4 |
3 |
2 |
1 |
0 |
|
|||||||||||||||
R |
X |
||||||||||||||
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|||||||||||||||
R |
X |
||||||||||||||
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
3 |
2 |
1 |
0 |
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 |
|
|||||||||||||||||||||||||||||||
A |
B |
G |
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 |
|
|||||||||||||||||||||||||||||||
A |
R |
G |
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 |
|
|||||||||||||||||||||||||||||||
A |
B |
G |
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 |
|
|||||||||||||||||||||||||||||||
B |
G |
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 |
|
|||||||||||||||||||||||||||||||
E |
B |
G |
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 |
|
|||||||||||||||||||||||||||||||
X |
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 |
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).
Format Compatibility Classes
Uncompressed color formats are compatible with each other if they occupy the same number of bits per texel block. 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 following table, all the formats in the same row are compatible.
Class, Texel Block Size, # Texels/Block | Formats |
---|---|
8-bit |
|
16-bit |
|
24-bit |
|
32-bit |
|
32-bit G8B8G8R8 |
|
32-bit B8G8R8G8 |
|
48-bit |
|
64-bit |
|
64-bit R10G10B10A10 |
|
64-bit G10B10G10R10 |
|
64-bit B10G10R10G10 |
|
64-bit R12G12B12A12 |
|
64-bit G12B12G12R12 |
|
64-bit B12G12R12G12 |
|
64-bit G16B16G16R16 |
|
64-bit B16G16R16G16 |
|
96-bit |
|
128-bit |
|
192-bit |
|
256-bit |
|
BC1_RGB (64 bit) |
|
BC1_RGBA (64 bit) |
|
BC2 (128 bit) |
|
BC3 (128 bit) |
|
BC4 (64 bit) |
|
BC5 (128 bit) |
|
BC6H (128 bit) |
|
BC7 (128 bit) |
|
ETC2_RGB (64 bit) |
|
ETC2_RGBA (64 bit) |
|
ETC2_EAC_RGBA (64 bit) |
|
EAC_R (64 bit) |
|
EAC_RG (128 bit) |
|
ASTC_4x4 (128 bit) |
|
ASTC_5x4 (128 bit) |
|
ASTC_5x5 (128 bit) |
|
ASTC_6x5 (128 bit) |
|
ASTC_6x6 (128 bit) |
|
ASTC_8x5 (128 bit) |
|
ASTC_8x6 (128 bit) |
|
ASTC_8x8 (128 bit) |
|
ASTC_10x5 (128 bit) |
|
ASTC_10x6 (128 bit) |
|
ASTC_10x8 (128 bit) |
|
ASTC_10x10 (128 bit) |
|
ASTC_12x10 (128 bit) |
|
ASTC_12x12 (128 bit) |
|
D16 (16 bit) |
|
D24 (32 bit) |
|
D32 (32 bit) |
|
S8 (8 bit) |
|
D16S8 (24 bit) |
|
D24S8 (32 bit) |
|
D32S8 (40 bit) |
|
8-bit 3-plane 420 |
|
8-bit 2-plane 420 |
|
8-bit 3-plane 422 |
|
8-bit 2-plane 422 |
|
8-bit 3-plane 444 |
|
10-bit 3-plane 420 |
|
10-bit 2-plane 420 |
|
10-bit 3-plane 422 |
|
10-bit 2-plane 422 |
|
10-bit 3-plane 444 |
|
12-bit 3-plane 420 |
|
12-bit 2-plane 420 |
|
12-bit 3-plane 422 |
|
12-bit 2-plane 422 |
|
12-bit 3-plane 444 |
|
16-bit 3-plane 420 |
|
16-bit 2-plane 420 |
|
16-bit 3-plane 422 |
|
16-bit 2-plane 422 |
|
16-bit 3-plane 444 |
|
31.3.2. Format Properties
To query supported format features which are properties of the physical device, call:
void vkGetPhysicalDeviceFormatProperties(
VkPhysicalDevice physicalDevice,
VkFormat format,
VkFormatProperties* pFormatProperties);
-
physicalDevice
is the physical device from which to query the format properties. -
format
is the format whose properties are queried. -
pFormatProperties
is a pointer to a VkFormatProperties structure in which physical device properties forformat
are returned.
The VkFormatProperties
structure is defined as:
typedef struct VkFormatProperties {
VkFormatFeatureFlags linearTilingFeatures;
VkFormatFeatureFlags optimalTilingFeatures;
VkFormatFeatureFlags bufferFeatures;
} VkFormatProperties;
-
linearTilingFeatures
is a bitmask of VkFormatFeatureFlagBits specifying features supported by images created with atiling
parameter ofVK_IMAGE_TILING_LINEAR
. -
optimalTilingFeatures
is a bitmask of VkFormatFeatureFlagBits specifying features supported by images created with atiling
parameter ofVK_IMAGE_TILING_OPTIMAL
. -
bufferFeatures
is a bitmask of VkFormatFeatureFlagBits specifying features supported by buffers.
Note
If no format feature flags are supported, the format itself is not supported, and images of that format cannot be created. |
If format
is a block-compressed format, then bufferFeatures
must not support any features for the format.
If format
is a multi-plane format then linearTilingFeatures
and
optimalTilingFeatures
must not contain
VK_FORMAT_FEATURE_DISJOINT_BIT
.
Bits which can be set in the VkFormatProperties features
linearTilingFeatures
, optimalTilingFeatures
,
and bufferFeatures
are:
typedef enum VkFormatFeatureFlagBits {
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 0x00004000,
VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 0x00008000,
VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000,
VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000,
VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000,
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,
VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT,
VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT,
VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT,
VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,
} VkFormatFeatureFlagBits;
The following bits may be set in
linearTilingFeatures
and optimalTilingFeatures
,
specifying that the features are supported by images or
image views created with the queried
vkGetPhysicalDeviceFormatProperties::format
:
-
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
specifies that an image view can be sampled from. -
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
specifies that an image view can be used as a storage images. -
VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
specifies that an image view can be used as storage image that supports atomic operations. -
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
specifies that an image view can be used as a framebuffer color attachment and as an input attachment. -
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. -
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. -
VK_FORMAT_FEATURE_BLIT_SRC_BIT
specifies that an image can be used assrcImage
for thevkCmdBlitImage
command. -
VK_FORMAT_FEATURE_BLIT_DST_BIT
specifies that an image can be used asdstImage
for thevkCmdBlitImage
command. -
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
specifies that ifVK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
is also set, an image view can be used with a sampler that has either ofmagFilter
orminFilter
set toVK_FILTER_LINEAR
, ormipmapMode
set toVK_SAMPLER_MIPMAP_MODE_LINEAR
. IfVK_FORMAT_FEATURE_BLIT_SRC_BIT
is also set, an image can be used as thesrcImage
to vkCmdBlitImage with afilter
ofVK_FILTER_LINEAR
. This bit must only be exposed for formats that also support theVK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
orVK_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 [0,1] and should be proportional to, or a weighted average of, the number of comparison passes or failures.
-
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
specifies that an image can be used as a source image for copy commands. -
VK_FORMAT_FEATURE_TRANSFER_DST_BIT
specifies that an image can be used as a destination image for copy commands and clear commands. -
VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
specifies that an application can define a sampler Y’CBCR conversion using this format as a source, and that an image of this format can be used with aVkSamplerYcbcrConversionCreateInfo
xChromaOffset
and/oryChromaOffset
ofVK_CHROMA_LOCATION_MIDPOINT
. Otherwise bothxChromaOffset
andyChromaOffset
must beVK_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’CBCR conversion for this format, the implementation must setVK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
. -
VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
specifies that an application can define a sampler Y’CBCR conversion using this format as a source, and that an image of this format can be used with aVkSamplerYcbcrConversionCreateInfo
xChromaOffset
and/oryChromaOffset
ofVK_CHROMA_LOCATION_COSITED_EVEN
. Otherwise bothxChromaOffset
andyChromaOffset
must beVK_CHROMA_LOCATION_MIDPOINT
. If neitherVK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
norVK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
is set, the application must not define a sampler Y’CBCR conversion using this format as a source. -
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
specifies that the format can do linear sampler filtering (min/magFilter) whilst sampler Y’CBCR conversion is enabled. -
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
specifies that the format can have different chroma, min, and mag filters. -
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
specifies that reconstruction is explicit, as described in Chroma Reconstruction. If this bit is not present, reconstruction is implicit by default. -
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
specifies that reconstruction can be forcibly made explicit by setting VkSamplerYcbcrConversionCreateInfo::forceExplicitReconstruction
toVK_TRUE
. -
VK_FORMAT_FEATURE_DISJOINT_BIT
specifies that a multi-planar image can have theVK_IMAGE_CREATE_DISJOINT_BIT
set during image creation. An implementation must not setVK_FORMAT_FEATURE_DISJOINT_BIT
for single-plane formats.
The following bits may be set in bufferFeatures
, specifying that the
features are supported by buffers or buffer
views created with the queried
vkGetPhysicalDeviceProperties::format
:
-
VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
specifies that the format can be used to create a buffer view that can be bound to aVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
descriptor. -
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
specifies that the format can be used to create a buffer view that can be bound to aVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
descriptor. -
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
specifies that atomic operations are supported onVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
with this format. -
VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
specifies that the format can be used as a vertex attribute format (VkVertexInputAttributeDescription
::format
).
typedef VkFlags VkFormatFeatureFlags;
VkFormatFeatureFlags
is a bitmask type for setting a mask of zero or
more VkFormatFeatureFlagBits.
To query supported format features which are properties of the physical device, call:
void vkGetPhysicalDeviceFormatProperties2(
VkPhysicalDevice physicalDevice,
VkFormat format,
VkFormatProperties2* pFormatProperties);
or the equivalent command
void vkGetPhysicalDeviceFormatProperties2KHR(
VkPhysicalDevice physicalDevice,
VkFormat format,
VkFormatProperties2* pFormatProperties);
-
physicalDevice
is the physical device from which to query the format properties. -
format
is the format whose properties are queried. -
pFormatProperties
is a pointer to a VkFormatProperties2 structure in which physical device properties forformat
are returned.
vkGetPhysicalDeviceFormatProperties2
behaves similarly to
vkGetPhysicalDeviceFormatProperties, with the ability to return
extended information in a pNext
chain of output structures.
The VkFormatProperties2
structure is defined as:
typedef struct VkFormatProperties2 {
VkStructureType sType;
void* pNext;
VkFormatProperties formatProperties;
} VkFormatProperties2;
or the equivalent
typedef VkFormatProperties2 VkFormatProperties2KHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
formatProperties
is a structure of type VkFormatProperties describing features supported by the requested format.
31.3.3. 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 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 vkGetPhysicalDeviceFormatProperties command.
Note
Unless otherwise excluded below, the required formats are supported for all VkImageCreateFlags values as long as those flag values are otherwise allowed. |
The following tables show which feature bits must be supported for each
format.
Formats that are required to support
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
must also support
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
and
VK_FORMAT_FEATURE_TRANSFER_DST_BIT
.
✓ |
This feature must be supported on the named format |
† |
This feature must be supported on at least some of the named formats, with more information in the table where the symbol appears |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
||||||||
|
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
✓ |
||||||||||||
|
✓ |
||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
||||||||||||
|
✓ |
||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
||||||||||||
|
✓ |
||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
||||||||||||
|
✓ |
||||||||||||
|
✓ |
||||||||||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||||
|
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
✓ |
✓ |
✓ |
✓ |
|||||||||
|
✓ |
✓ |
✓ |
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
✓ |
✓ |
✓ |
||||||||||
|
† |
||||||||||||
|
✓ |
✓ |
† |
||||||||||
|
|||||||||||||
|
|||||||||||||
|
† |
||||||||||||
|
† |
||||||||||||
|
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
The |
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
The |
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
|
↓ |
||||||||||||
Format |
|||||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
|
† |
† |
† |
||||||||||
The |
To be used with VkImageView
with subresourceRange.aspectMask
=
VK_IMAGE_ASPECT_COLOR_BIT
, sampler
Y’CBCR conversion must be enabled for the following formats:
|
↓ |
||||||||||
|
↓ |
||||||||||
|
↓ |
||||||||||
|
↓ |
||||||||||
|
↓ |
||||||||||
|
↓ |
||||||||||
|
↓ |
||||||||||
|
↓ |
||||||||||
|
↓ |
||||||||||
|
↓ |
||||||||||
Format |
Planes |
||||||||||
|
1 |
||||||||||
|
1 |
||||||||||
|
3 |
✓ |
✓ |
✓ |
✓ |
||||||
|
2 |
✓ |
✓ |
✓ |
✓ |
||||||
|
3 |
||||||||||
|
2 |
||||||||||
|
3 |
||||||||||
|
1 |
||||||||||
|
1 |
||||||||||
|
1 |
||||||||||
|
3 |
||||||||||
|
2 |
||||||||||
|
3 |
||||||||||
|
2 |
||||||||||
|
3 |
||||||||||
|
1 |
||||||||||
|
1 |
||||||||||
|
1 |
||||||||||
|
3 |
||||||||||
|
2 |
||||||||||
|
3 |
||||||||||
|
2 |
||||||||||
|
3 |
||||||||||
|
1 |
||||||||||
|
1 |
||||||||||
|
3 |
||||||||||
|
2 |
||||||||||
|
3 |
||||||||||
|
2 |
||||||||||
|
3 |
||||||||||
Format features marked ✓ must be supported only if VkPhysicalDeviceSamplerYcbcrConversionFeatures is enabled,
and only with VkImageType |
Implementations are not required to support the
VK_IMAGE_CREATE_SPARSE_BINDING_BIT
,
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
, or
VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
VkImageCreateFlags for the
above formats that require sampler Y’CBCR
conversion.
To determine whether the implementation supports sparse image creation flags
with these formats use vkGetPhysicalDeviceImageFormatProperties or
vkGetPhysicalDeviceImageFormatProperties2.
31.4. Additional Image Capabilities
In addition to the minimum capabilities described in the previous sections (Limits and 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.
To query additional capabilities specific to image types, call:
VkResult vkGetPhysicalDeviceImageFormatProperties(
VkPhysicalDevice physicalDevice,
VkFormat format,
VkImageType type,
VkImageTiling tiling,
VkImageUsageFlags usage,
VkImageCreateFlags flags,
VkImageFormatProperties* pImageFormatProperties);
-
physicalDevice
is the physical device from which to query the image capabilities. -
format
is a VkFormat value specifying the image format, corresponding to VkImageCreateInfo::format
. -
type
is a VkImageType value specifying the image type, corresponding to VkImageCreateInfo::imageType
. -
tiling
is a VkImageTiling value specifying the image tiling, corresponding to VkImageCreateInfo::tiling
. -
usage
is a bitmask of VkImageUsageFlagBits specifying the intended usage of the image, corresponding to VkImageCreateInfo::usage
. -
flags
is a bitmask of VkImageCreateFlagBits specifying additional parameters of the image, corresponding to VkImageCreateInfo::flags
. -
pImageFormatProperties
points to an instance of the VkImageFormatProperties structure in which capabilities are returned.
The format
, type
, tiling
, usage
, and flags
parameters correspond to parameters that would be consumed by
vkCreateImage (as members of VkImageCreateInfo
).
If format
is not a supported image format, or if the combination of
format
, type
, tiling
, usage
, and flags
is not
supported for images, then vkGetPhysicalDeviceImageFormatProperties
returns VK_ERROR_FORMAT_NOT_SUPPORTED
.
The limitations on an image format that are reported by
vkGetPhysicalDeviceImageFormatProperties
have the following property:
if usage1
and usage2
of type VkImageUsageFlags are such that
the bits set in usage1
are a subset of the bits set in usage2
, and
flags1
and flags2
of type VkImageCreateFlags are such that
the bits set in flags1
are a subset of the bits set in flags2
,
then the limitations for usage1
and flags1
must be no more strict
than the limitations for usage2
and flags2
, for all values of
format
, type
, and tiling
.
The VkImageFormatProperties
structure is defined as:
typedef struct VkImageFormatProperties {
VkExtent3D maxExtent;
uint32_t maxMipLevels;
uint32_t maxArrayLayers;
VkSampleCountFlags sampleCounts;
VkDeviceSize maxResourceSize;
} VkImageFormatProperties;
-
maxExtent
are the maximum image dimensions. See the Allowed Extent Values section below for how these values are constrained bytype
. -
maxMipLevels
is the maximum number of mipmap levels.maxMipLevels
must be equal to the number of levels in the complete mipmap chain based on themaxExtent.width
,maxExtent.height
, andmaxExtent.depth
, except when one of the following conditions is true, in which case it may instead be1
:-
vkGetPhysicalDeviceImageFormatProperties
::tiling
wasVK_IMAGE_TILING_LINEAR
-
the VkPhysicalDeviceImageFormatInfo2::
pNext
chain included an instance of VkPhysicalDeviceExternalImageFormatInfo with a handle type included in thehandleTypes
member for which mipmap image support is not required -
image
format
is one of those listed in Formats requiring sampler Y’CBCR conversion forVK_IMAGE_ASPECT_COLOR_BIT
image views
-
-
maxArrayLayers
is the maximum number of array layers.maxArrayLayers
must be no less than VkPhysicalDeviceLimits::maxImageArrayLayers
, except when one of the following conditions is true, in which case it may instead be1
:-
tiling
isVK_IMAGE_TILING_LINEAR
-
tiling
isVK_IMAGE_TILING_OPTIMAL
andtype
isVK_IMAGE_TYPE_3D
-
format
is one of those listed in Formats requiring sampler Y’CBCR conversion forVK_IMAGE_ASPECT_COLOR_BIT
image views
-
-
sampleCounts
is a bitmask of VkSampleCountFlagBits specifying all the supported sample counts for this image as described below. -
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.maxResourceSize
must be at least 231.
Note
There is no mechanism to query the size of an image before creating it, to
compare that size against |
If the combination of parameters to
vkGetPhysicalDeviceImageFormatProperties
is not supported by the
implementation for use in vkCreateImage, then all members of
VkImageFormatProperties
will be filled with zero.
Note
Filling |
To query additional capabilities specific to image types, call:
VkResult vkGetPhysicalDeviceImageFormatProperties2(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
VkImageFormatProperties2* pImageFormatProperties);
or the equivalent command
VkResult vkGetPhysicalDeviceImageFormatProperties2KHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
VkImageFormatProperties2* pImageFormatProperties);
-
physicalDevice
is the physical device from which to query the image capabilities. -
pImageFormatInfo
points to an instance of the VkPhysicalDeviceImageFormatInfo2 structure, describing the parameters that would be consumed by vkCreateImage. -
pImageFormatProperties
points to an instance of the VkImageFormatProperties2 structure in which capabilities are returned.
vkGetPhysicalDeviceImageFormatProperties2
behaves similarly to
vkGetPhysicalDeviceImageFormatProperties, with the ability to return
extended information in a pNext
chain of output structures.
The VkPhysicalDeviceImageFormatInfo2
structure is defined as:
typedef struct VkPhysicalDeviceImageFormatInfo2 {
VkStructureType sType;
const void* pNext;
VkFormat format;
VkImageType type;
VkImageTiling tiling;
VkImageUsageFlags usage;
VkImageCreateFlags flags;
} VkPhysicalDeviceImageFormatInfo2;
or the equivalent
typedef VkPhysicalDeviceImageFormatInfo2 VkPhysicalDeviceImageFormatInfo2KHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. ThepNext
chain ofVkPhysicalDeviceImageFormatInfo2
is used to provide additional image parameters tovkGetPhysicalDeviceImageFormatProperties2
. -
format
is a VkFormat value indicating the image format, corresponding to VkImageCreateInfo::format
. -
type
is a VkImageType value indicating the image type, corresponding to VkImageCreateInfo::imageType
. -
tiling
is a VkImageTiling value indicating the image tiling, corresponding to VkImageCreateInfo::tiling
. -
usage
is a bitmask of VkImageUsageFlagBits indicating the intended usage of the image, corresponding to VkImageCreateInfo::usage
. -
flags
is a bitmask of VkImageCreateFlagBits indicating additional parameters of the image, corresponding to VkImageCreateInfo::flags
.
The members of VkPhysicalDeviceImageFormatInfo2
correspond to the
arguments to vkGetPhysicalDeviceImageFormatProperties, with
sType
and pNext
added for extensibility.
The VkImageFormatProperties2
structure is defined as:
typedef struct VkImageFormatProperties2 {
VkStructureType sType;
void* pNext;
VkImageFormatProperties imageFormatProperties;
} VkImageFormatProperties2;
or the equivalent
typedef VkImageFormatProperties2 VkImageFormatProperties2KHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. ThepNext
chain ofVkImageFormatProperties2
is used to allow the specification of additional capabilities to be returned fromvkGetPhysicalDeviceImageFormatProperties2
. -
imageFormatProperties
is an instance of a VkImageFormatProperties structure in which capabilities are returned.
If the combination of parameters to
vkGetPhysicalDeviceImageFormatProperties2
is not supported by the
implementation for use in vkCreateImage, then all members of
imageFormatProperties
will be filled with zero.
Note
Filling |
To determine the image capabilities compatible with an external memory
handle type, add VkPhysicalDeviceExternalImageFormatInfo to the
pNext
chain of the VkPhysicalDeviceImageFormatInfo2 structure
and VkExternalImageFormatProperties
to the pNext
chain of the
VkImageFormatProperties2 structure.
The VkPhysicalDeviceExternalImageFormatInfo
structure is defined as:
typedef struct VkPhysicalDeviceExternalImageFormatInfo {
VkStructureType sType;
const void* pNext;
VkExternalMemoryHandleTypeFlagBits handleType;
} VkPhysicalDeviceExternalImageFormatInfo;
or the equivalent
typedef VkPhysicalDeviceExternalImageFormatInfo VkPhysicalDeviceExternalImageFormatInfoKHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
handleType
is a VkExternalMemoryHandleTypeFlagBits value specifying the memory handle type that will be used with the memory associated with the image.
If handleType
is 0, vkGetPhysicalDeviceImageFormatProperties2
will behave as if VkPhysicalDeviceExternalImageFormatInfo was not
present, and VkExternalImageFormatProperties will be ignored.
If handleType
is not compatible with the format
, type
,
tiling
, usage
, and flags
specified in
VkPhysicalDeviceImageFormatInfo2, then
vkGetPhysicalDeviceImageFormatProperties2 returns
VK_ERROR_FORMAT_NOT_SUPPORTED
.
Possible values of
VkPhysicalDeviceExternalImageFormatInfo::handleType
, specifying
an external memory handle type, are:
typedef enum VkExternalMemoryHandleTypeFlagBits {
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 0x00000008,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 0x00000020,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 0x00000040,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,
} VkExternalMemoryHandleTypeFlagBits;
or the equivalent
typedef VkExternalMemoryHandleTypeFlagBits VkExternalMemoryHandleTypeFlagBitsKHR;
-
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 callsdup
,dup2
,close
, and the non-standard system calldup3
. Additionally, it must be transportable over a socket using anSCM_RIGHTS
control message. It owns a reference to the underlying memory resource represented by its Vulkan memory object. -
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 functionsDuplicateHandle
,CloseHandle
,CompareObjectHandles
,GetHandleInformation
, andSetHandleInformation
. It owns a reference to the underlying memory resource represented by its Vulkan memory object. -
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. -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
specifies an NT handle returned byIDXGIResource1
::CreateSharedHandle
referring to a Direct3D 10 or 11 texture resource. It owns a reference to the memory used by the Direct3D resource. -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
specifies a global share handle returned byIDXGIResource
::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. -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
specifies an NT handle returned byID3D12Device
::CreateSharedHandle
referring to a Direct3D 12 heap resource. It owns a reference to the resources used by the Direct3D heap. -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
specifies an NT handle returned byID3D12Device
::CreateSharedHandle
referring to a Direct3D 12 committed resource. It owns a reference to the memory used by the Direct3D resource.
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:
Handle type |
|
|
|
Must match |
Must match |
|
Must match |
Must match |
|
Must match |
Must match |
|
Must match |
Must match |
|
Must match |
Must match |
|
Must match |
Must match |
|
Must match |
Must match |
typedef VkFlags VkExternalMemoryHandleTypeFlags;
or the equivalent
typedef VkExternalMemoryHandleTypeFlags VkExternalMemoryHandleTypeFlagsKHR;
VkExternalMemoryHandleTypeFlags
is a bitmask type for setting a mask
of zero or more VkExternalMemoryHandleTypeFlagBits.
The VkExternalImageFormatProperties
structure is defined as:
typedef struct VkExternalImageFormatProperties {
VkStructureType sType;
void* pNext;
VkExternalMemoryProperties externalMemoryProperties;
} VkExternalImageFormatProperties;
or the equivalent
typedef VkExternalImageFormatProperties VkExternalImageFormatPropertiesKHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
externalMemoryProperties
is an instance of the VkExternalMemoryProperties structure specifying various capabilities of the external handle type when used with the specified image creation parameters.
The VkExternalMemoryProperties
structure is defined as:
typedef struct VkExternalMemoryProperties {
VkExternalMemoryFeatureFlags externalMemoryFeatures;
VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes;
VkExternalMemoryHandleTypeFlags compatibleHandleTypes;
} VkExternalMemoryProperties;
or the equivalent
typedef VkExternalMemoryProperties VkExternalMemoryPropertiesKHR;
-
externalMemoryFeatures
is a bitmask of VkExternalMemoryFeatureFlagBits specifying the features ofhandleType
. -
exportFromImportedHandleTypes
is a bitmask of VkExternalMemoryHandleTypeFlagBits specifying which types of imported handlehandleType
can be exported from. -
compatibleHandleTypes
is a bitmask of VkExternalMemoryHandleTypeFlagBits specifying handle types which can be specified at the same time ashandleType
when creating an image compatible with external memory.
compatibleHandleTypes
must include at least handleType
.
Inclusion of a handle type in compatibleHandleTypes
does not imply the
values returned in VkImageFormatProperties2 will be the same when
VkPhysicalDeviceExternalImageFormatInfo::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.
Bits which may be set in
VkExternalMemoryProperties::externalMemoryFeatures
, specifying
features of an external memory handle type, are:
typedef enum VkExternalMemoryFeatureFlagBits {
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 0x00000001,
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 0x00000002,
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 0x00000004,
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT,
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT,
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT,
} VkExternalMemoryFeatureFlagBits;
or the equivalent
typedef VkExternalMemoryFeatureFlagBits VkExternalMemoryFeatureFlagBitsKHR;
-
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 by VkMemoryDedicatedRequirements and VkMemoryDedicatedAllocateInfo to create (or import) a dedicated allocation for the image or buffer. -
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
specifies that handles of this type can be exported from Vulkan memory objects. -
VK_EXTERNAL_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 VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
for
the following external handle types:
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
typedef VkFlags VkExternalMemoryFeatureFlags;
or the equivalent
typedef VkExternalMemoryFeatureFlags VkExternalMemoryFeatureFlagsKHR;
VkExternalMemoryFeatureFlags
is a bitmask type for setting a mask of
zero or more VkExternalMemoryFeatureFlagBits.
To determine the number of combined image samplers required to support a
multi-planar format, add VkSamplerYcbcrConversionImageFormatProperties
to the pNext
chain of the VkImageFormatProperties2 structure in
a call to vkGetPhysicalDeviceImageFormatProperties2
.
The VkSamplerYcbcrConversionImageFormatProperties
structure is defined
as:
typedef struct VkSamplerYcbcrConversionImageFormatProperties {
VkStructureType sType;
void* pNext;
uint32_t combinedImageSamplerDescriptorCount;
} VkSamplerYcbcrConversionImageFormatProperties;
or the equivalent
typedef VkSamplerYcbcrConversionImageFormatProperties VkSamplerYcbcrConversionImageFormatPropertiesKHR;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to an extension-specific structure. -
combinedImageSamplerDescriptorCount
is the number of combined image sampler descriptors that the implementation uses to access the format.
combinedImageSamplerDescriptorCount
affects only the count towards the
maxDescriptorSetSamplers
, maxDescriptorSetSampledImages
,
maxPerStageDescriptorSamplers
, and
maxPerStageDescriptorSampledImages
limits, and does not affect binding
numbers in the VkDescriptorSetLayoutBinding.
combinedImageSamplerDescriptorCount
is a number between 1 and the
number of planes in the format.
31.4.1. Supported Sample Counts
vkGetPhysicalDeviceImageFormatProperties
returns a bitmask of
VkSampleCountFlagBits in sampleCounts
specifying the supported
sample counts for the image parameters.
sampleCounts
will be set to VK_SAMPLE_COUNT_1_BIT
if at least
one of the following conditions is true:
-
tiling
isVK_IMAGE_TILING_LINEAR
-
type
is notVK_IMAGE_TYPE_2D
-
flags
containsVK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
-
Neither the
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
flag nor theVK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
flag inVkFormatProperties
::optimalTilingFeatures
returned by vkGetPhysicalDeviceFormatProperties is set -
VkPhysicalDeviceExternalImageFormatInfoKHR::
handleType
is an external handle type for which multisampled image support is not required. -
format
is one of those listed in Formats requiring sampler Y’CBCR conversion forVK_IMAGE_ASPECT_COLOR_BIT
image views
Otherwise, the bits set in sampleCounts
will be the sample counts
supported for the specified values of usage
and format
.
For each bit set in usage
, the supported sample counts relate to the
limits in VkPhysicalDeviceLimits
as follows:
-
If
usage
includesVK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
andformat
is a floating- or fixed-point color format, a superset ofVkPhysicalDeviceLimits
::framebufferColorSampleCounts
-
If
usage
includesVK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
, andformat
includes a depth aspect, a superset ofVkPhysicalDeviceLimits
::framebufferDepthSampleCounts
-
If
usage
includesVK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
, andformat
includes a stencil aspect, a superset ofVkPhysicalDeviceLimits
::framebufferStencilSampleCounts
-
If
usage
includesVK_IMAGE_USAGE_SAMPLED_BIT
, andformat
includes a color aspect, a superset ofVkPhysicalDeviceLimits
::sampledImageColorSampleCounts
-
If
usage
includesVK_IMAGE_USAGE_SAMPLED_BIT
, andformat
includes a depth aspect, a superset ofVkPhysicalDeviceLimits
::sampledImageDepthSampleCounts
-
If
usage
includesVK_IMAGE_USAGE_SAMPLED_BIT
, andformat
is an integer format, a superset ofVkPhysicalDeviceLimits
::sampledImageIntegerSampleCounts
-
If
usage
includesVK_IMAGE_USAGE_STORAGE_BIT
, a superset ofVkPhysicalDeviceLimits
::storageImageSampleCounts
If multiple bits are set in usage
, sampleCounts
will be the
intersection of the per-usage values described above.
If none of the bits described above are set in usage
, then there is no
corresponding limit in VkPhysicalDeviceLimits
.
In this case, sampleCounts
must include at least
VK_SAMPLE_COUNT_1_BIT
.
31.4.2. Allowed Extent Values Based On Image Type
Implementations may support extent values larger than the required minimum/maximum values for certain types of images subject to the constraints below.
Note
Implementations must support images with dimensions up to the 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 VK_IMAGE_TYPE_1D
:
-
maxExtent.width
≥ VkPhysicalDeviceLimits.maxImageDimension1D
-
maxExtent.height
= 1 -
maxExtent.depth
= 1
For VK_IMAGE_TYPE_2D
when flags
does not contain
VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
:
-
maxExtent.width
≥ VkPhysicalDeviceLimits.maxImageDimension2D
-
maxExtent.height
≥ VkPhysicalDeviceLimits.maxImageDimension2D
-
maxExtent.depth
= 1
For VK_IMAGE_TYPE_2D
when flags
contains
VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
:
-
maxExtent.width
≥ VkPhysicalDeviceLimits.maxImageDimensionCube
-
maxExtent.height
≥ VkPhysicalDeviceLimits.maxImageDimensionCube
-
maxExtent.depth
= 1
For VK_IMAGE_TYPE_3D
:
-
maxExtent.width
≥ VkPhysicalDeviceLimits.maxImageDimension3D
-
maxExtent.height
≥ VkPhysicalDeviceLimits.maxImageDimension3D
-
maxExtent.depth
≥ VkPhysicalDeviceLimits.maxImageDimension3D
31.5. Additional Buffer Capabilities
In addition to the capabilities described in the previous sections (Limits and Formats), implementations may support additional buffer capabilities.
To query the external handle types supported by buffers, call:
void vkGetPhysicalDeviceExternalBufferProperties(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
VkExternalBufferProperties* pExternalBufferProperties);
or the equivalent command
void vkGetPhysicalDeviceExternalBufferPropertiesKHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
VkExternalBufferProperties* pExternalBufferProperties);
-
physicalDevice
is the physical device from which to query the buffer capabilities. -
pExternalBufferInfo
points to an instance of the VkPhysicalDeviceExternalBufferInfo structure, describing the parameters that would be consumed by vkCreateBuffer. -
pExternalBufferProperties
points to an instance of the VkExternalBufferProperties structure in which capabilities are returned.
The VkPhysicalDeviceExternalBufferInfo
structure is defined as:
typedef struct VkPhysicalDeviceExternalBufferInfo {
VkStructureType sType;
const void* pNext;
VkBufferCreateFlags flags;
VkBufferUsageFlags usage;
VkExternalMemoryHandleTypeFlagBits handleType;
} VkPhysicalDeviceExternalBufferInfo;
or the equivalent
typedef VkPhysicalDeviceExternalBufferInfo VkPhysicalDeviceExternalBufferInfoKHR;
-
sType
is the type of this structure -
pNext
is NULL or a pointer to an extension-specific structure. -
flags
is a bitmask of VkBufferCreateFlagBits describing additional parameters of the buffer, corresponding to VkBufferCreateInfo::flags
. -
usage
is a bitmask of VkBufferUsageFlagBits describing the intended usage of the buffer, corresponding to VkBufferCreateInfo::usage
. -
handleType
is a VkExternalMemoryHandleTypeFlagBits value specifying the memory handle type that will be used with the memory associated with the buffer.
The VkExternalBufferProperties
structure is defined as:
typedef struct VkExternalBufferProperties {
VkStructureType sType;
void* pNext;
VkExternalMemoryProperties externalMemoryProperties;
} VkExternalBufferProperties;
or the equivalent
typedef VkExternalBufferProperties VkExternalBufferPropertiesKHR;
-
sType
is the type of this structure -
pNext
is NULL or a pointer to an extension-specific structure. -
externalMemoryProperties
is an instance of the VkExternalMemoryProperties structure specifying various capabilities of the external handle type when used with the specified buffer creation parameters.
31.6. Optional Semaphore Capabilities
Semaphores may support import and export of their payload to external handles. To query the external handle types supported by semaphores, call:
void vkGetPhysicalDeviceExternalSemaphoreProperties(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
or the equivalent command
void vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
-
physicalDevice
is the physical device from which to query the semaphore capabilities. -
pExternalSemaphoreInfo
points to an instance of the VkPhysicalDeviceExternalSemaphoreInfo structure, describing the parameters that would be consumed by vkCreateSemaphore. -
pExternalSemaphoreProperties
points to an instance of the VkExternalSemaphoreProperties structure in which capabilities are returned.
The VkPhysicalDeviceExternalSemaphoreInfo
structure is defined as:
typedef struct VkPhysicalDeviceExternalSemaphoreInfo {
VkStructureType sType;
const void* pNext;
VkExternalSemaphoreHandleTypeFlagBits handleType;
} VkPhysicalDeviceExternalSemaphoreInfo;
or the equivalent
typedef VkPhysicalDeviceExternalSemaphoreInfo VkPhysicalDeviceExternalSemaphoreInfoKHR;
-
sType
is the type of this structure -
pNext
is NULL or a pointer to an extension-specific structure. -
handleType
is a VkExternalSemaphoreHandleTypeFlagBits value specifying the external semaphore handle type for which capabilities will be returned.
Bits which may be set in
VkPhysicalDeviceExternalSemaphoreInfo::handleType
, specifying an
external semaphore handle type, are:
typedef enum VkExternalSemaphoreHandleTypeFlagBits {
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,
} VkExternalSemaphoreHandleTypeFlagBits;
or the equivalent
typedef VkExternalSemaphoreHandleTypeFlagBits VkExternalSemaphoreHandleTypeFlagBitsKHR;
-
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 callsdup
,dup2
,close
, and the non-standard system calldup3
. Additionally, it must be transportable over a socket using anSCM_RIGHTS
control message. It owns a reference to the underlying synchronization primitive represented by its Vulkan semaphore object. -
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 functionsDuplicateHandle
,CloseHandle
,CompareObjectHandles
,GetHandleInformation
, andSetHandleInformation
. It owns a reference to the underlying synchronization primitive represented by its Vulkan semaphore object. -
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. -
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
specifies an NT handle returned byID3D12Device
::CreateSharedHandle
referring to a Direct3D 12 fence. It owns a reference to the underlying synchronization primitive associated with the Direct3D fence. -
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
Handles of 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:
Handle type |
|
|
|
Must match |
Must match |
|
Must match |
Must match |
|
Must match |
Must match |
|
Must match |
Must match |
|
No restriction |
No restriction |
typedef VkFlags VkExternalSemaphoreHandleTypeFlags;
or the equivalent
typedef VkExternalSemaphoreHandleTypeFlags VkExternalSemaphoreHandleTypeFlagsKHR;
VkExternalSemaphoreHandleTypeFlags
is a bitmask type for setting a
mask of zero or more VkExternalSemaphoreHandleTypeFlagBits.
The VkExternalSemaphoreProperties
structure is defined as:
typedef struct VkExternalSemaphoreProperties {
VkStructureType sType;
void* pNext;
VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes;
VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes;
VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures;
} VkExternalSemaphoreProperties;
or the equivalent
typedef VkExternalSemaphoreProperties VkExternalSemaphorePropertiesKHR;
-
exportFromImportedHandleTypes
is a bitmask of VkExternalSemaphoreHandleTypeFlagBits specifying which types of imported handlehandleType
can be exported from. -
compatibleHandleTypes
is a bitmask of VkExternalSemaphoreHandleTypeFlagBits specifying handle types which can be specified at the same time ashandleType
when creating a semaphore. -
externalSemaphoreFeatures
is a bitmask of VkExternalSemaphoreFeatureFlagBits describing the features ofhandleType
.
If handleType
is not supported by the implementation, then
VkExternalSemaphoreProperties::externalSemaphoreFeatures
will be
set to zero.
Possible values of
VkExternalSemaphoreProperties::externalSemaphoreFeatures
,
specifying the features of an external semaphore handle type, are:
typedef enum VkExternalSemaphoreFeatureFlagBits {
VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 0x00000001,
VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 0x00000002,
VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT,
VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT,
} VkExternalSemaphoreFeatureFlagBits;
or the equivalent
typedef VkExternalSemaphoreFeatureFlagBits VkExternalSemaphoreFeatureFlagBitsKHR;
-
VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT
specifies that handles of this type can be exported from Vulkan semaphore objects. -
VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT
specifies that handles of this type can be imported as Vulkan semaphore objects.
typedef VkFlags VkExternalSemaphoreFeatureFlags;
or the equivalent
typedef VkExternalSemaphoreFeatureFlags VkExternalSemaphoreFeatureFlagsKHR;
VkExternalSemaphoreFeatureFlags
is a bitmask type for setting a mask
of zero or more VkExternalSemaphoreFeatureFlagBits.
31.7. Optional Fence Capabilities
Fences may support import and export of their payload to external handles. To query the external handle types supported by fences, call:
void vkGetPhysicalDeviceExternalFenceProperties(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
VkExternalFenceProperties* pExternalFenceProperties);
or the equivalent command
void vkGetPhysicalDeviceExternalFencePropertiesKHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
VkExternalFenceProperties* pExternalFenceProperties);
-
physicalDevice
is the physical device from which to query the fence capabilities. -
pExternalFenceInfo
points to an instance of the VkPhysicalDeviceExternalFenceInfo structure, describing the parameters that would be consumed by vkCreateFence. -
pExternalFenceProperties
points to an instance of the VkExternalFenceProperties structure in which capabilities are returned.
The VkPhysicalDeviceExternalFenceInfo
structure is defined as:
typedef struct VkPhysicalDeviceExternalFenceInfo {
VkStructureType sType;
const void* pNext;
VkExternalFenceHandleTypeFlagBits handleType;
} VkPhysicalDeviceExternalFenceInfo;
or the equivalent
typedef VkPhysicalDeviceExternalFenceInfo VkPhysicalDeviceExternalFenceInfoKHR;
-
sType
is the type of this structure -
pNext
is NULL or a pointer to an extension-specific structure. -
handleType
is a VkExternalFenceHandleTypeFlagBits value indicating an external fence handle type for which capabilities will be returned.
Note
Handles of type |
Bits which may be set in
VkPhysicalDeviceExternalFenceInfo::handleType
, and in the
exportFromImportedHandleTypes
and compatibleHandleTypes
members
of VkExternalFenceProperties, to indicate external fence handle types,
are:
typedef enum VkExternalFenceHandleTypeFlagBits {
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000008,
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT,
} VkExternalFenceHandleTypeFlagBits;
or the equivalent
typedef VkExternalFenceHandleTypeFlagBits VkExternalFenceHandleTypeFlagBitsKHR;
-
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 callsdup
,dup2
,close
, and the non-standard system calldup3
. Additionally, it must be transportable over a socket using anSCM_RIGHTS
control message. It owns a reference to the underlying synchronization primitive represented by its Vulkan fence object. -
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 functionsDuplicateHandle
,CloseHandle
,CompareObjectHandles
,GetHandleInformation
, andSetHandleInformation
. It owns a reference to the underlying synchronization primitive represented by its Vulkan fence object. -
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. -
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:
Handle type |
|
|
|
Must match |
Must match |
|
Must match |
Must match |
|
Must match |
Must match |
|
No restriction |
No restriction |
typedef VkFlags VkExternalFenceHandleTypeFlags;
or the equivalent
typedef VkExternalFenceHandleTypeFlags VkExternalFenceHandleTypeFlagsKHR;
VkExternalFenceHandleTypeFlags
is a bitmask type for setting a mask of
zero or more VkExternalFenceHandleTypeFlagBits.
The VkExternalFenceProperties
structure is defined as:
typedef struct VkExternalFenceProperties {
VkStructureType sType;
void* pNext;
VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes;
VkExternalFenceHandleTypeFlags compatibleHandleTypes;
VkExternalFenceFeatureFlags externalFenceFeatures;
} VkExternalFenceProperties;
or the equivalent
typedef VkExternalFenceProperties VkExternalFencePropertiesKHR;
-
exportFromImportedHandleTypes
is a bitmask of VkExternalFenceHandleTypeFlagBits indicating which types of imported handlehandleType
can be exported from. -
compatibleHandleTypes
is a bitmask of VkExternalFenceHandleTypeFlagBits specifying handle types which can be specified at the same time ashandleType
when creating a fence. -
externalFenceFeatures
is a bitmask of VkExternalFenceFeatureFlagBits indicating the features ofhandleType
.
If handleType
is not supported by the implementation, then
VkExternalFenceProperties::externalFenceFeatures
will be set to
zero.
Bits which may be set in
VkExternalFenceProperties::externalFenceFeatures
, indicating
features of a fence external handle type, are:
typedef enum VkExternalFenceFeatureFlagBits {
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 0x00000001,
VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 0x00000002,
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT,
VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT,
} VkExternalFenceFeatureFlagBits;
or the equivalent
typedef VkExternalFenceFeatureFlagBits VkExternalFenceFeatureFlagBitsKHR;
-
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT
specifies handles of this type can be exported from Vulkan fence objects. -
VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT
specifies handles of this type can be imported to Vulkan fence objects.
typedef VkFlags VkExternalFenceFeatureFlags;
or the equivalent
typedef VkExternalFenceFeatureFlags VkExternalFenceFeatureFlagsKHR;
VkExternalFenceFeatureFlags
is a bitmask type for setting a mask of
zero or more VkExternalFenceFeatureFlagBits.