32. Features
Features describe functionality which is not supported on all implementations. Features are properties of the physical device. Features are optional, and must be explicitly enabled before use. Support for features is reported and enabled on a per-feature basis.
Note
Features are reported via the basic VkPhysicalDeviceFeatures
structure, as well as the extensible structure
|
For convenience, new core versions of Vulkan may introduce new unified feature structures for features promoted from extensions. At the same time, the extension’s original feature structure (if any) is also promoted to the core API, and is an alias of the extension’s structure. This results in multiple names for the same feature: in the original extension’s feature structure and the promoted structure alias, in the unified feature structure. When a feature was implicitly supported and enabled in the extension, but an explicit name was added during promotion, then the extension itself acts as an alias for the feature as listed in the table below.
All aliases of the same feature in the core API must be reported consistently: either all must be reported as supported, or none of them. When a promoted extension is available, any corresponding feature aliases must be supported.
Extension | Feature(s) |
---|
To query supported features, call:
// Provided by VK_VERSION_1_0
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 and return
VK_ERROR_FEATURE_NOT_PRESENT
.
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
chain
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:
// Provided by VK_VERSION_1_1
void vkGetPhysicalDeviceFeatures2(
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 contains 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:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceFeatures2 {
VkStructureType sType;
void* pNext;
VkPhysicalDeviceFeatures features;
} VkPhysicalDeviceFeatures2;
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure. -
features
is a VkPhysicalDeviceFeatures structure 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
included in the pNext
chain of a VkDeviceCreateInfo structure,
in which case it controls which features are enabled on the device in lieu
of pEnabledFeatures
.
The VkPhysicalDeviceFeatures
structure is defined as:
// Provided by VK_VERSION_1_0
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;
This structure describes 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. Buffer accesses through buffer device addresses are not bounds-checked.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 is determined to be out of bounds, then any other access of the same type (load, store, or atomic) to the same buffer that accesses an address less than 16 bytes away from the out of bounds address may also be considered out of bounds.
-
If the access is a load that reads from the same memory locations as a prior store in the same shader invocation, with no other intervening accesses to the same memory locations in that shader invocation, then the result of the load may be the value stored by the store instruction, even if the access is out of bounds. If the load is
Volatile
, then an out of bounds load must return the appropriate out of bounds value.
-
-
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, applications must not perform out of bounds accesses .
-
-
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. SeemaxDrawIndexedIndexValue
. -
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 the VkPipelineMultisampleStateCreateInfo 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 the VkPipelineColorBlendStateCreateInfo 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. SeemaxDrawIndirectCount
. -
drawIndirectFirstInstance
specifies whether indirect drawing 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 the VkPipelineRasterizationStateCreateInfo 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 the VkPipelineRasterizationStateCreateInfo 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 the VkPipelineDepthStencilStateCreateInfo structure must be set toVK_FALSE
. WhendepthBoundsTestEnable
is set toVK_FALSE
, theminDepthBounds
andmaxDepthBounds
members of the VkPipelineDepthStencilStateCreateInfo structure are ignored. -
wideLines
specifies whether lines with width other than 1.0 are supported. If this feature is not enabled, thelineWidth
member of the VkPipelineRasterizationStateCreateInfo 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 fragment shader color output in the Multisample Coverage fragment operation. If this feature is not enabled, then thealphaToOneEnable
member of the VkPipelineMultisampleStateCreateInfo 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 the VkPipelineViewportStateCreateInfo 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 the VkSamplerCreateInfo 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 the VkQueryPoolCreateInfo 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 the VkQueryPoolCreateInfo 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 buffer, 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 buffer, 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 “storage image extended formats” below are supported; if this feature is supported, then theVK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
must be supported inoptimalTilingFeatures
for the following formats:-
VK_FORMAT_R16G16_SFLOAT
-
VK_FORMAT_B10G11R11_UFLOAT_PACK32
-
VK_FORMAT_R16_SFLOAT
-
VK_FORMAT_R16G16B16A16_UNORM
-
VK_FORMAT_A2B10G10R10_UNORM_PACK32
-
VK_FORMAT_R16G16_UNORM
-
VK_FORMAT_R8G8_UNORM
-
VK_FORMAT_R16_UNORM
-
VK_FORMAT_R8_UNORM
-
VK_FORMAT_R16G16B16A16_SNORM
-
VK_FORMAT_R16G16_SNORM
-
VK_FORMAT_R8G8_SNORM
-
VK_FORMAT_R16_SNORM
-
VK_FORMAT_R8_SNORM
-
VK_FORMAT_R16G16_SINT
-
VK_FORMAT_R8G8_SINT
-
VK_FORMAT_R16_SINT
-
VK_FORMAT_R8_SINT
-
VK_FORMAT_A2B10G10R10_UINT_PACK32
-
VK_FORMAT_R16G16_UINT
-
VK_FORMAT_R8G8_UINT
-
VK_FORMAT_R16_UINT
-
VK_FORMAT_R8_UINT
NoteshaderStorageImageExtendedFormats
feature only adds a guarantee of format support, which is specified for the whole physical device. Therefore enabling or disabling the feature via vkCreateDevice has no practical effect.To query for additional properties, or if the feature is not supported, vkGetPhysicalDeviceFormatProperties and vkGetPhysicalDeviceImageFormatProperties can be used to check for supported properties of individual formats, as usual rules allow.
VK_FORMAT_R32G32_UINT
,VK_FORMAT_R32G32_SINT
, andVK_FORMAT_R32G32_SFLOAT
fromStorageImageExtendedFormats
SPIR-V capability, are already covered by core Vulkan mandatory format support. -
-
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
andImageMSArray
capabilities. -
shaderStorageImageReadWithoutFormat
specifies whether storage images and storage texel buffers require a format qualifier to be specified when reading.shaderStorageImageReadWithoutFormat
applies only to formats listed in the storage without format list. -
shaderStorageImageWriteWithoutFormat
specifies whether storage images and storage texel buffers require a format qualifier to be specified when writing.shaderStorageImageWriteWithoutFormat
applies only to formats listed in the storage without format list. -
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. Declaring and using 64-bit floats is enabled for all storage classes that SPIR-V allows with 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. Declaring and using 64-bit integers is enabled for all storage classes that SPIR-V allows with 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. However, this only enables a subset of the storage classes that SPIR-V allows for theInt16
SPIR-V capability: Declaring and using 16-bit integers in thePrivate
,Workgroup
, andFunction
storage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant
,Uniform
,StorageBuffer
,Input
,Output
, andPushConstant
) is not enabled. -
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 specifying 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 the VkBufferCreateInfo and VkImageCreateInfo 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 the VkBufferCreateInfo 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 the VkImageCreateInfo 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 the VkImageCreateInfo 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 the VkImageCreateInfo 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 the VkImageCreateInfo 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 the VkImageCreateInfo 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 the VkImageCreateInfo 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 the VkBufferCreateInfo and VkImageCreateInfo structures, respectively. -
variableMultisampleRate
specifies whether all pipelines that will be bound to a command buffer during a subpass which uses no attachments must have the same value for VkPipelineMultisampleStateCreateInfo::rasterizationSamples
. If set toVK_TRUE
, the implementation supports variable multisample rates in a subpass which uses 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 VkPhysicalDeviceVulkan11Features
structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceVulkan11Features {
VkStructureType sType;
void* pNext;
VkBool32 storageBuffer16BitAccess;
VkBool32 uniformAndStorageBuffer16BitAccess;
VkBool32 storagePushConstant16;
VkBool32 storageInputOutput16;
VkBool32 multiview;
VkBool32 multiviewGeometryShader;
VkBool32 multiviewTessellationShader;
VkBool32 variablePointersStorageBuffer;
VkBool32 variablePointers;
VkBool32 protectedMemory;
VkBool32 samplerYcbcrConversion;
VkBool32 shaderDrawParameters;
} VkPhysicalDeviceVulkan11Features;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
storageBuffer16BitAccess
specifies whether objects in theStorageBuffer
, orPhysicalStorageBuffer
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 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. -
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. -
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. -
protectedMemory
specifies whether protected memory is supported. -
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. -
shaderDrawParameters
specifies whether the implementation supports the SPIR-VDrawParameters
capability. When this feature is not enabled, shader modules must not declare theSPV_KHR_shader_draw_parameters
extension or theDrawParameters
capability.
If the VkPhysicalDeviceVulkan11Features
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceVulkan11Features
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceVulkan12Features
structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceVulkan12Features {
VkStructureType sType;
void* pNext;
VkBool32 samplerMirrorClampToEdge;
VkBool32 drawIndirectCount;
VkBool32 storageBuffer8BitAccess;
VkBool32 uniformAndStorageBuffer8BitAccess;
VkBool32 storagePushConstant8;
VkBool32 shaderBufferInt64Atomics;
VkBool32 shaderSharedInt64Atomics;
VkBool32 shaderFloat16;
VkBool32 shaderInt8;
VkBool32 descriptorIndexing;
VkBool32 shaderInputAttachmentArrayDynamicIndexing;
VkBool32 shaderUniformTexelBufferArrayDynamicIndexing;
VkBool32 shaderStorageTexelBufferArrayDynamicIndexing;
VkBool32 shaderUniformBufferArrayNonUniformIndexing;
VkBool32 shaderSampledImageArrayNonUniformIndexing;
VkBool32 shaderStorageBufferArrayNonUniformIndexing;
VkBool32 shaderStorageImageArrayNonUniformIndexing;
VkBool32 shaderInputAttachmentArrayNonUniformIndexing;
VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing;
VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing;
VkBool32 descriptorBindingUniformBufferUpdateAfterBind;
VkBool32 descriptorBindingSampledImageUpdateAfterBind;
VkBool32 descriptorBindingStorageImageUpdateAfterBind;
VkBool32 descriptorBindingStorageBufferUpdateAfterBind;
VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind;
VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind;
VkBool32 descriptorBindingUpdateUnusedWhilePending;
VkBool32 descriptorBindingPartiallyBound;
VkBool32 descriptorBindingVariableDescriptorCount;
VkBool32 runtimeDescriptorArray;
VkBool32 samplerFilterMinmax;
VkBool32 scalarBlockLayout;
VkBool32 imagelessFramebuffer;
VkBool32 uniformBufferStandardLayout;
VkBool32 shaderSubgroupExtendedTypes;
VkBool32 separateDepthStencilLayouts;
VkBool32 hostQueryReset;
VkBool32 timelineSemaphore;
VkBool32 bufferDeviceAddress;
VkBool32 bufferDeviceAddressCaptureReplay;
VkBool32 bufferDeviceAddressMultiDevice;
VkBool32 vulkanMemoryModel;
VkBool32 vulkanMemoryModelDeviceScope;
VkBool32 vulkanMemoryModelAvailabilityVisibilityChains;
VkBool32 shaderOutputViewportIndex;
VkBool32 shaderOutputLayer;
VkBool32 subgroupBroadcastDynamicId;
} VkPhysicalDeviceVulkan12Features;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
samplerMirrorClampToEdge
indicates whether the implementation supports theVK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
sampler address mode. If this feature is not enabled, theVK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
sampler address mode must not be used. -
drawIndirectCount
indicates whether the implementation supports the vkCmdDrawIndirectCount and vkCmdDrawIndexedIndirectCount functions. If this feature is not enabled, these functions must not be used. -
storageBuffer8BitAccess
indicates whether objects in theStorageBuffer
, orPhysicalStorageBuffer
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 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. -
shaderBufferInt64Atomics
indicates whether shaders can perform 64-bit unsigned and signed integer atomic operations on buffers. -
shaderSharedInt64Atomics
indicates whether shaders can perform 64-bit unsigned and signed integer atomic operations on shared memory. -
shaderFloat16
indicates whether 16-bit floats (halfs) are supported in shader code. This also indicates whether shader modules can declare theFloat16
capability. However, this only enables a subset of the storage classes that SPIR-V allows for theFloat16
SPIR-V capability: Declaring and using 16-bit floats in thePrivate
,Workgroup
, andFunction
storage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant
,Uniform
,StorageBuffer
,Input
,Output
, andPushConstant
) is not enabled. -
shaderInt8
indicates whether 8-bit integers (signed and unsigned) are supported in shader code. This also indicates whether shader modules can declare theInt8
capability. However, this only enables a subset of the storage classes that SPIR-V allows for theInt8
SPIR-V capability: Declaring and using 8-bit integers in thePrivate
,Workgroup
, andFunction
storage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant
,Uniform
,StorageBuffer
,Input
,Output
, andPushConstant
) is not enabled. -
descriptorIndexing
indicates whether the implementation supports the minimum set of descriptor indexing features as described in the Feature Requirements section. Enabling thedescriptorIndexing
member when vkCreateDevice is called does not imply the other minimum descriptor indexing features are also enabled. Those other descriptor indexing features must be enabled individually as needed by the application. -
shaderInputAttachmentArrayDynamicIndexing
indicates whether arrays of input attachments can be indexed by dynamically uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theInputAttachmentArrayDynamicIndexing
capability. -
shaderUniformTexelBufferArrayDynamicIndexing
indicates whether arrays of uniform texel buffers can be indexed by dynamically uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformTexelBufferArrayDynamicIndexing
capability. -
shaderStorageTexelBufferArrayDynamicIndexing
indicates whether arrays of storage texel buffers can be indexed by dynamically uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageTexelBufferArrayDynamicIndexing
capability. -
shaderUniformBufferArrayNonUniformIndexing
indicates whether arrays of uniform buffers can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
orVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformBufferArrayNonUniformIndexing
capability. -
shaderSampledImageArrayNonUniformIndexing
indicates whether arrays of samplers or sampled images can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_SAMPLER
,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
, orVK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theSampledImageArrayNonUniformIndexing
capability. -
shaderStorageBufferArrayNonUniformIndexing
indicates whether arrays of storage buffers can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_STORAGE_BUFFER
orVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageBufferArrayNonUniformIndexing
capability. -
shaderStorageImageArrayNonUniformIndexing
indicates whether arrays of storage images can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_STORAGE_IMAGE
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageImageArrayNonUniformIndexing
capability. -
shaderInputAttachmentArrayNonUniformIndexing
indicates whether arrays of input attachments can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theInputAttachmentArrayNonUniformIndexing
capability. -
shaderUniformTexelBufferArrayNonUniformIndexing
indicates whether arrays of uniform texel buffers can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformTexelBufferArrayNonUniformIndexing
capability. -
shaderStorageTexelBufferArrayNonUniformIndexing
indicates whether arrays of storage texel buffers can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageTexelBufferArrayNonUniformIndexing
capability. -
descriptorBindingUniformBufferUpdateAfterBind
indicates whether the implementation supports updating uniform buffer descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
. -
descriptorBindingSampledImageUpdateAfterBind
indicates whether the implementation supports updating sampled image descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_SAMPLER
,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
, orVK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
. -
descriptorBindingStorageImageUpdateAfterBind
indicates whether the implementation supports updating storage image descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_STORAGE_IMAGE
. -
descriptorBindingStorageBufferUpdateAfterBind
indicates whether the implementation supports updating storage buffer descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_STORAGE_BUFFER
. -
descriptorBindingUniformTexelBufferUpdateAfterBind
indicates whether the implementation supports updating uniform texel buffer descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
. -
descriptorBindingStorageTexelBufferUpdateAfterBind
indicates whether the implementation supports updating storage texel buffer descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
. -
descriptorBindingUpdateUnusedWhilePending
indicates whether the implementation supports updating descriptors while the set is in use. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT
must not be used. -
descriptorBindingPartiallyBound
indicates whether the implementation supports statically using a descriptor set binding in which some descriptors are not valid. If this feature is not enabled,VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT
must not be used. -
descriptorBindingVariableDescriptorCount
indicates whether the implementation supports descriptor sets with a variable-sized last binding. If this feature is not enabled,VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
must not be used. -
runtimeDescriptorArray
indicates whether the implementation supports the SPIR-VRuntimeDescriptorArray
capability. If this feature is not enabled, descriptors must not be declared in runtime arrays. -
samplerFilterMinmax
indicates whether the implementation supports a minimum set of required formats supporting min/max filtering as defined by thefilterMinmaxSingleComponentFormats
property minimum requirements. If this feature is not enabled, then VkSamplerReductionModeCreateInfo must only useVK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
. -
scalarBlockLayout
indicates that the implementation supports the layout of resource blocks in shaders using scalar alignment. -
imagelessFramebuffer
indicates that the implementation supports specifying the image view for attachments at render pass begin time via VkRenderPassAttachmentBeginInfo. -
uniformBufferStandardLayout
indicates that the implementation supports the same layouts for uniform buffers as for storage and other kinds of buffers. See Standard Buffer Layout. -
shaderSubgroupExtendedTypes
is a boolean specifying whether subgroup operations can use 8-bit integer, 16-bit integer, 64-bit integer, 16-bit floating-point, and vectors of these types in group operations with subgroup scope, if the implementation supports the types. -
separateDepthStencilLayouts
indicates whether the implementation supports aVkImageMemoryBarrier
for a depth/stencil image with only one ofVK_IMAGE_ASPECT_DEPTH_BIT
orVK_IMAGE_ASPECT_STENCIL_BIT
set, and whetherVK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL
,VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
,VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
, orVK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
can be used. -
hostQueryReset
indicates that the implementation supports resetting queries from the host with vkResetQueryPool. -
timelineSemaphore
indicates whether semaphores created with a VkSemaphoreType ofVK_SEMAPHORE_TYPE_TIMELINE
are supported. -
bufferDeviceAddress
indicates that the implementation supports accessing buffer memory in shaders as storage buffers via an address queried from vkGetBufferDeviceAddress. -
bufferDeviceAddressCaptureReplay
indicates that the implementation supports saving and reusing buffer and device addresses, e.g. for trace capture and replay. -
bufferDeviceAddressMultiDevice
indicates that the implementation supports thebufferDeviceAddress
feature for logical devices created with multiple physical devices. If this feature is not supported, buffer addresses must not be queried on a logical device created with more than one physical device. -
vulkanMemoryModel
indicates whether shader modules can declare theVulkanMemoryModel
capability. -
vulkanMemoryModelDeviceScope
indicates whether the Vulkan Memory Model can useDevice
scope synchronization. This also indicates whether shader modules can declare theVulkanMemoryModelDeviceScope
capability. -
vulkanMemoryModelAvailabilityVisibilityChains
indicates whether the Vulkan Memory Model can use availability and visibility chains with more than one element. -
shaderOutputViewportIndex
indicates whether the implementation supports theShaderViewportIndex
SPIR-V capability enabling variables decorated with theViewportIndex
built-in to be exported from vertex or tessellation evaluation shaders. If this feature is not enabled, theViewportIndex
built-in decoration must not be used on outputs in vertex or tessellation evaluation shaders. -
shaderOutputLayer
indicates whether the implementation supports theShaderLayer
SPIR-V capability enabling variables decorated with theLayer
built-in to be exported from vertex or tessellation evaluation shaders. If this feature is not enabled, theLayer
built-in decoration must not be used on outputs in vertex or tessellation evaluation shaders. -
If
subgroupBroadcastDynamicId
isVK_TRUE
, the “Id” operand ofOpGroupNonUniformBroadcast
can be dynamically uniform within a subgroup, and the “Index” operand ofOpGroupNonUniformQuadBroadcast
can be dynamically uniform within the derivative group. If it isVK_FALSE
, these operands must be constants.
If the VkPhysicalDeviceVulkan12Features
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceVulkan12Features
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceVulkan13Features
structure is defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceVulkan13Features {
VkStructureType sType;
void* pNext;
VkBool32 robustImageAccess;
VkBool32 inlineUniformBlock;
VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind;
VkBool32 pipelineCreationCacheControl;
VkBool32 privateData;
VkBool32 shaderDemoteToHelperInvocation;
VkBool32 shaderTerminateInvocation;
VkBool32 subgroupSizeControl;
VkBool32 computeFullSubgroups;
VkBool32 synchronization2;
VkBool32 textureCompressionASTC_HDR;
VkBool32 shaderZeroInitializeWorkgroupMemory;
VkBool32 dynamicRendering;
VkBool32 shaderIntegerDotProduct;
VkBool32 maintenance4;
} VkPhysicalDeviceVulkan13Features;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
robustImageAccess
indicates whether image accesses are tightly bounds-checked against the dimensions of the image view. Invalid texels resulting from out of bounds image loads will be replaced as described in Texel Replacement, with either (0,0,1) or (0,0,0) values inserted for missing G, B, or A components based on the format. -
inlineUniformBlock
indicates whether the implementation supports inline uniform block descriptors. If this feature is not enabled,VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
must not be used. -
descriptorBindingInlineUniformBlockUpdateAfterBind
indicates whether the implementation supports updating inline uniform block descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
. -
pipelineCreationCacheControl
indicates that the implementation supports:-
The following can be used in
Vk*PipelineCreateInfo
::flags
:-
VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT
-
VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
-
-
The following can be used in VkPipelineCacheCreateInfo::
flags
:-
VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT
-
-
-
privateData
indicates whether the implementation supports private data. See Private Data. -
shaderDemoteToHelperInvocation
indicates whether the implementation supports the SPIR-VDemoteToHelperInvocationEXT
capability. -
shaderTerminateInvocation
specifies whether the implementation supports SPIR-V modules that use theSPV_KHR_terminate_invocation
extension. -
subgroupSizeControl
indicates whether the implementation supports controlling shader subgroup sizes via theVK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
flag and the VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure. -
computeFullSubgroups
indicates whether the implementation supports requiring full subgroups in compute shaders via theVK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT
flag. -
synchronization2
indicates whether the implementation supports the new set of synchronization commands introduced in
.VK_KHR_synchronization2
-
textureCompressionASTC_HDR
indicates whether all of the ASTC HDR 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_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_12x12_SFLOAT_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.
-
-
shaderZeroInitializeWorkgroupMemory
specifies whether the implementation supports initializing a variable in Workgroup storage class. -
dynamicRendering
specifies that the implementation supports dynamic render pass instances using the vkCmdBeginRendering command. -
shaderIntegerDotProduct
specifies whether shader modules can declare theDotProductInputAllKHR
,DotProductInput4x8BitKHR
,DotProductInput4x8BitPackedKHR
andDotProductKHR
capabilities. -
maintenance4
indicates that the implementation supports the following:-
The application may destroy a VkPipelineLayout object immediately after using it to create another object.
-
LocalSizeId
can be used as an alternative toLocalSize
to specify the local workgroup size with specialization constants. -
Images created with identical creation parameters will always have the same alignment requirements.
-
The size memory requirement of a buffer or image is never greater than that of another buffer or image created with a greater or equal size.
-
Push constants do not have to be initialized before they are dynamically accessed.
-
The interface matching rules allow a larger output vector to match with a smaller input vector, with additional values being discarded.
-
If the VkPhysicalDeviceVulkan13Features
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceVulkan13Features
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceVariablePointersFeatures
structure is defined as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceVariablePointersFeatures {
VkStructureType sType;
void* pNext;
VkBool32 variablePointersStorageBuffer;
VkBool32 variablePointers;
} VkPhysicalDeviceVariablePointersFeatures;
// Provided by VK_VERSION_1_1
typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
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 VkPhysicalDeviceVariablePointersFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceVariablePointersFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceMultiviewFeatures
structure is defined as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceMultiviewFeatures {
VkStructureType sType;
void* pNext;
VkBool32 multiview;
VkBool32 multiviewGeometryShader;
VkBool32 multiviewTessellationShader;
} VkPhysicalDeviceMultiviewFeatures;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
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 the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceMultiviewFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceShaderAtomicInt64Features structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceShaderAtomicInt64Features {
VkStructureType sType;
void* pNext;
VkBool32 shaderBufferInt64Atomics;
VkBool32 shaderSharedInt64Atomics;
} VkPhysicalDeviceShaderAtomicInt64Features;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
If the VkPhysicalDeviceShaderAtomicInt64Features
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceShaderAtomicInt64Features
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDevice8BitStorageFeatures structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDevice8BitStorageFeatures {
VkStructureType sType;
void* pNext;
VkBool32 storageBuffer8BitAccess;
VkBool32 uniformAndStorageBuffer8BitAccess;
VkBool32 storagePushConstant8;
} VkPhysicalDevice8BitStorageFeatures;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
storageBuffer8BitAccess
indicates whether objects in theStorageBuffer
, orPhysicalStorageBuffer
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 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.
If the VkPhysicalDevice8BitStorageFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDevice8BitStorageFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDevice16BitStorageFeatures structure is defined as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDevice16BitStorageFeatures {
VkStructureType sType;
void* pNext;
VkBool32 storageBuffer16BitAccess;
VkBool32 uniformAndStorageBuffer16BitAccess;
VkBool32 storagePushConstant16;
VkBool32 storageInputOutput16;
} VkPhysicalDevice16BitStorageFeatures;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
storageBuffer16BitAccess
specifies whether objects in theStorageBuffer
, orPhysicalStorageBuffer
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 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.
If the VkPhysicalDevice16BitStorageFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDevice16BitStorageFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceShaderFloat16Int8Features
structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceShaderFloat16Int8Features {
VkStructureType sType;
void* pNext;
VkBool32 shaderFloat16;
VkBool32 shaderInt8;
} VkPhysicalDeviceShaderFloat16Int8Features;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
shaderFloat16
indicates whether 16-bit floats (halfs) are supported in shader code. This also indicates whether shader modules can declare theFloat16
capability. However, this only enables a subset of the storage classes that SPIR-V allows for theFloat16
SPIR-V capability: Declaring and using 16-bit floats in thePrivate
,Workgroup
, andFunction
storage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant
,Uniform
,StorageBuffer
,Input
,Output
, andPushConstant
) is not enabled. -
shaderInt8
indicates whether 8-bit integers (signed and unsigned) are supported in shader code. This also indicates whether shader modules can declare theInt8
capability. However, this only enables a subset of the storage classes that SPIR-V allows for theInt8
SPIR-V capability: Declaring and using 8-bit integers in thePrivate
,Workgroup
, andFunction
storage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant
,Uniform
,StorageBuffer
,Input
,Output
, andPushConstant
) is not enabled.
If the VkPhysicalDeviceShaderFloat16Int8Features
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceShaderFloat16Int8Features
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceSamplerYcbcrConversionFeatures
structure is
defined as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures {
VkStructureType sType;
void* pNext;
VkBool32 samplerYcbcrConversion;
} VkPhysicalDeviceSamplerYcbcrConversionFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
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.
If the VkPhysicalDeviceSamplerYcbcrConversionFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceSamplerYcbcrConversionFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceProtectedMemoryFeatures
structure is defined as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceProtectedMemoryFeatures {
VkStructureType sType;
void* pNext;
VkBool32 protectedMemory;
} VkPhysicalDeviceProtectedMemoryFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
protectedMemory
specifies whether protected memory is supported.
If the VkPhysicalDeviceProtectedMemoryFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceProtectedMemoryFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceShaderDrawParametersFeatures
structure is defined
as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceShaderDrawParametersFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderDrawParameters;
} VkPhysicalDeviceShaderDrawParametersFeatures;
// Provided by VK_VERSION_1_1
typedef VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
If the VkPhysicalDeviceShaderDrawParametersFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceShaderDrawParametersFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceDescriptorIndexingFeatures
structure is defined
as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceDescriptorIndexingFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderInputAttachmentArrayDynamicIndexing;
VkBool32 shaderUniformTexelBufferArrayDynamicIndexing;
VkBool32 shaderStorageTexelBufferArrayDynamicIndexing;
VkBool32 shaderUniformBufferArrayNonUniformIndexing;
VkBool32 shaderSampledImageArrayNonUniformIndexing;
VkBool32 shaderStorageBufferArrayNonUniformIndexing;
VkBool32 shaderStorageImageArrayNonUniformIndexing;
VkBool32 shaderInputAttachmentArrayNonUniformIndexing;
VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing;
VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing;
VkBool32 descriptorBindingUniformBufferUpdateAfterBind;
VkBool32 descriptorBindingSampledImageUpdateAfterBind;
VkBool32 descriptorBindingStorageImageUpdateAfterBind;
VkBool32 descriptorBindingStorageBufferUpdateAfterBind;
VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind;
VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind;
VkBool32 descriptorBindingUpdateUnusedWhilePending;
VkBool32 descriptorBindingPartiallyBound;
VkBool32 descriptorBindingVariableDescriptorCount;
VkBool32 runtimeDescriptorArray;
} VkPhysicalDeviceDescriptorIndexingFeatures;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
shaderInputAttachmentArrayDynamicIndexing
indicates whether arrays of input attachments can be indexed by dynamically uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theInputAttachmentArrayDynamicIndexing
capability. -
shaderUniformTexelBufferArrayDynamicIndexing
indicates whether arrays of uniform texel buffers can be indexed by dynamically uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformTexelBufferArrayDynamicIndexing
capability. -
shaderStorageTexelBufferArrayDynamicIndexing
indicates whether arrays of storage texel buffers can be indexed by dynamically uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageTexelBufferArrayDynamicIndexing
capability. -
shaderUniformBufferArrayNonUniformIndexing
indicates whether arrays of uniform buffers can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
orVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformBufferArrayNonUniformIndexing
capability. -
shaderSampledImageArrayNonUniformIndexing
indicates whether arrays of samplers or sampled images can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_SAMPLER
,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
, orVK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theSampledImageArrayNonUniformIndexing
capability. -
shaderStorageBufferArrayNonUniformIndexing
indicates whether arrays of storage buffers can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_STORAGE_BUFFER
orVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageBufferArrayNonUniformIndexing
capability. -
shaderStorageImageArrayNonUniformIndexing
indicates whether arrays of storage images can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_STORAGE_IMAGE
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageImageArrayNonUniformIndexing
capability. -
shaderInputAttachmentArrayNonUniformIndexing
indicates whether arrays of input attachments can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theInputAttachmentArrayNonUniformIndexing
capability. -
shaderUniformTexelBufferArrayNonUniformIndexing
indicates whether arrays of uniform texel buffers can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformTexelBufferArrayNonUniformIndexing
capability. -
shaderStorageTexelBufferArrayNonUniformIndexing
indicates whether arrays of storage texel buffers can be indexed by non-uniform integer expressions in shader code. If this feature is not enabled, resources with a descriptor type ofVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
must not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageTexelBufferArrayNonUniformIndexing
capability. -
descriptorBindingUniformBufferUpdateAfterBind
indicates whether the implementation supports updating uniform buffer descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
. -
descriptorBindingSampledImageUpdateAfterBind
indicates whether the implementation supports updating sampled image descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_SAMPLER
,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
, orVK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
. -
descriptorBindingStorageImageUpdateAfterBind
indicates whether the implementation supports updating storage image descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_STORAGE_IMAGE
. -
descriptorBindingStorageBufferUpdateAfterBind
indicates whether the implementation supports updating storage buffer descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_STORAGE_BUFFER
. -
descriptorBindingUniformTexelBufferUpdateAfterBind
indicates whether the implementation supports updating uniform texel buffer descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
. -
descriptorBindingStorageTexelBufferUpdateAfterBind
indicates whether the implementation supports updating storage texel buffer descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
. -
descriptorBindingUpdateUnusedWhilePending
indicates whether the implementation supports updating descriptors while the set is in use. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT
must not be used. -
descriptorBindingPartiallyBound
indicates whether the implementation supports statically using a descriptor set binding in which some descriptors are not valid. If this feature is not enabled,VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT
must not be used. -
descriptorBindingVariableDescriptorCount
indicates whether the implementation supports descriptor sets with a variable-sized last binding. If this feature is not enabled,VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
must not be used. -
runtimeDescriptorArray
indicates whether the implementation supports the SPIR-VRuntimeDescriptorArray
capability. If this feature is not enabled, descriptors must not be declared in runtime arrays.
If the VkPhysicalDeviceDescriptorIndexingFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceDescriptorIndexingFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceVulkanMemoryModelFeatures
structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceVulkanMemoryModelFeatures {
VkStructureType sType;
void* pNext;
VkBool32 vulkanMemoryModel;
VkBool32 vulkanMemoryModelDeviceScope;
VkBool32 vulkanMemoryModelAvailabilityVisibilityChains;
} VkPhysicalDeviceVulkanMemoryModelFeatures;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
vulkanMemoryModel
indicates whether shader modules can declare theVulkanMemoryModel
capability. -
vulkanMemoryModelDeviceScope
indicates whether the Vulkan Memory Model can useDevice
scope synchronization. This also indicates whether shader modules can declare theVulkanMemoryModelDeviceScope
capability. -
vulkanMemoryModelAvailabilityVisibilityChains
indicates whether the Vulkan Memory Model can use availability and visibility chains with more than one element.
If the VkPhysicalDeviceVulkanMemoryModelFeaturesKHR
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceVulkanMemoryModelFeaturesKHR
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceInlineUniformBlockFeatures
structure is defined
as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceInlineUniformBlockFeatures {
VkStructureType sType;
void* pNext;
VkBool32 inlineUniformBlock;
VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind;
} VkPhysicalDeviceInlineUniformBlockFeatures;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
inlineUniformBlock
indicates whether the implementation supports inline uniform block descriptors. If this feature is not enabled,VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
must not be used. -
descriptorBindingInlineUniformBlockUpdateAfterBind
indicates whether the implementation supports updating inline uniform block descriptors after a set is bound. If this feature is not enabled,VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
must not be used withVK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
.
If the VkPhysicalDeviceInlineUniformBlockFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceInlineUniformBlockFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceScalarBlockLayoutFeatures
structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures {
VkStructureType sType;
void* pNext;
VkBool32 scalarBlockLayout;
} VkPhysicalDeviceScalarBlockLayoutFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
scalarBlockLayout
indicates that the implementation supports the layout of resource blocks in shaders using scalar alignment.
If the VkPhysicalDeviceScalarBlockLayoutFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceScalarBlockLayoutFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceUniformBufferStandardLayoutFeatures
structure is
defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures {
VkStructureType sType;
void* pNext;
VkBool32 uniformBufferStandardLayout;
} VkPhysicalDeviceUniformBufferStandardLayoutFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
uniformBufferStandardLayout
indicates that the implementation supports the same layouts for uniform buffers as for storage and other kinds of buffers. See Standard Buffer Layout.
If the VkPhysicalDeviceUniformBufferStandardLayoutFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceUniformBufferStandardLayoutFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceBufferDeviceAddressFeatures
structure is defined
as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures {
VkStructureType sType;
void* pNext;
VkBool32 bufferDeviceAddress;
VkBool32 bufferDeviceAddressCaptureReplay;
VkBool32 bufferDeviceAddressMultiDevice;
} VkPhysicalDeviceBufferDeviceAddressFeatures;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
bufferDeviceAddress
indicates that the implementation supports accessing buffer memory in shaders as storage buffers via an address queried from vkGetBufferDeviceAddress. -
bufferDeviceAddressCaptureReplay
indicates that the implementation supports saving and reusing buffer and device addresses, e.g. for trace capture and replay. -
bufferDeviceAddressMultiDevice
indicates that the implementation supports thebufferDeviceAddress
feature for logical devices created with multiple physical devices. If this feature is not supported, buffer addresses must not be queried on a logical device created with more than one physical device.
Note
|
See vkGetBufferDeviceAddress for more information.
If the VkPhysicalDeviceBufferDeviceAddressFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceBufferDeviceAddressFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceImagelessFramebufferFeatures
structure is defined
as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceImagelessFramebufferFeatures {
VkStructureType sType;
void* pNext;
VkBool32 imagelessFramebuffer;
} VkPhysicalDeviceImagelessFramebufferFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
imagelessFramebuffer
indicates that the implementation supports specifying the image view for attachments at render pass begin time via VkRenderPassAttachmentBeginInfo.
If the VkPhysicalDeviceImagelessFramebufferFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceImagelessFramebufferFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
structure is
defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderSubgroupExtendedTypes;
} VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
shaderSubgroupExtendedTypes
is a boolean specifying whether subgroup operations can use 8-bit integer, 16-bit integer, 64-bit integer, 16-bit floating-point, and vectors of these types in group operations with subgroup scope, if the implementation supports the types.
If the VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceHostQueryResetFeatures
structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceHostQueryResetFeatures {
VkStructureType sType;
void* pNext;
VkBool32 hostQueryReset;
} VkPhysicalDeviceHostQueryResetFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
hostQueryReset
indicates that the implementation supports resetting queries from the host with vkResetQueryPool.
If the VkPhysicalDeviceHostQueryResetFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceHostQueryResetFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceTimelineSemaphoreFeatures
structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures {
VkStructureType sType;
void* pNext;
VkBool32 timelineSemaphore;
} VkPhysicalDeviceTimelineSemaphoreFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
timelineSemaphore
indicates whether semaphores created with a VkSemaphoreType ofVK_SEMAPHORE_TYPE_TIMELINE
are supported.
If the VkPhysicalDeviceTimelineSemaphoreFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceTimelineSemaphoreFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures
structure is
defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures {
VkStructureType sType;
void* pNext;
VkBool32 separateDepthStencilLayouts;
} VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
separateDepthStencilLayouts
indicates whether the implementation supports aVkImageMemoryBarrier
for a depth/stencil image with only one ofVK_IMAGE_ASPECT_DEPTH_BIT
orVK_IMAGE_ASPECT_STENCIL_BIT
set, and whetherVK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL
,VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
,VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
, orVK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
can be used.
If the VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures
structure
is defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderDemoteToHelperInvocation;
} VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
If the VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceTextureCompressionASTCHDRFeatures
structure is
defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeatures {
VkStructureType sType;
void* pNext;
VkBool32 textureCompressionASTC_HDR;
} VkPhysicalDeviceTextureCompressionASTCHDRFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
textureCompressionASTC_HDR
indicates whether all of the ASTC HDR 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_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK
-
VK_FORMAT_ASTC_12x12_SFLOAT_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.
-
If the VkPhysicalDeviceTextureCompressionASTCHDRFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceTextureCompressionASTCHDRFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceSubgroupSizeControlFeatures
structure is defined
as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceSubgroupSizeControlFeatures {
VkStructureType sType;
void* pNext;
VkBool32 subgroupSizeControl;
VkBool32 computeFullSubgroups;
} VkPhysicalDeviceSubgroupSizeControlFeatures;
This structure describes the following features:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
subgroupSizeControl
indicates whether the implementation supports controlling shader subgroup sizes via theVK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
flag and the VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure. -
computeFullSubgroups
indicates whether the implementation supports requiring full subgroups in compute shaders via theVK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT
flag.
If the VkPhysicalDeviceSubgroupSizeControlFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceSubgroupSizeControlFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
Note
The Vulkan 1.3 implementations always support the features structure. |
The VkPhysicalDevicePipelineCreationCacheControlFeatures
structure is
defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDevicePipelineCreationCacheControlFeatures {
VkStructureType sType;
void* pNext;
VkBool32 pipelineCreationCacheControl;
} VkPhysicalDevicePipelineCreationCacheControlFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
pipelineCreationCacheControl
indicates that the implementation supports:-
The following can be used in
Vk*PipelineCreateInfo
::flags
:-
VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT
-
VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
-
-
The following can be used in VkPipelineCacheCreateInfo::
flags
:-
VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT
-
-
If the VkPhysicalDevicePipelineCreationCacheControlFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDevicePipelineCreationCacheControlFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures
structure is
defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderZeroInitializeWorkgroupMemory;
} VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
If the VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDevicePrivateDataFeatures
structure is defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDevicePrivateDataFeatures {
VkStructureType sType;
void* pNext;
VkBool32 privateData;
} VkPhysicalDevicePrivateDataFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
privateData
indicates whether the implementation supports private data. See Private Data.
If the VkPhysicalDevicePrivateDataFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDevicePrivateDataFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceImageRobustnessFeatures
structure is defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceImageRobustnessFeatures {
VkStructureType sType;
void* pNext;
VkBool32 robustImageAccess;
} VkPhysicalDeviceImageRobustnessFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
robustImageAccess
indicates whether image accesses are tightly bounds-checked against the dimensions of the image view. Invalid texels resulting from out of bounds image loads will be replaced as described in Texel Replacement, with either (0,0,1) or (0,0,0) values inserted for missing G, B, or A components based on the format.
If the VkPhysicalDeviceImageRobustnessFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceImageRobustnessFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceShaderTerminateInvocationFeatures
structure is
defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceShaderTerminateInvocationFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderTerminateInvocation;
} VkPhysicalDeviceShaderTerminateInvocationFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
If the VkPhysicalDeviceShaderTerminateInvocationFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceShaderTerminateInvocationFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceSynchronization2Features
structure is defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceSynchronization2Features {
VkStructureType sType;
void* pNext;
VkBool32 synchronization2;
} VkPhysicalDeviceSynchronization2Features;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
If the VkPhysicalDeviceSynchronization2Features
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceSynchronization2Features
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceShaderIntegerDotProductFeatures
structure is
defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceShaderIntegerDotProductFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderIntegerDotProduct;
} VkPhysicalDeviceShaderIntegerDotProductFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
If the VkPhysicalDeviceShaderIntegerDotProductFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceShaderIntegerDotProductFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceMaintenance4Features
structure is defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceMaintenance4Features {
VkStructureType sType;
void* pNext;
VkBool32 maintenance4;
} VkPhysicalDeviceMaintenance4Features;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
maintenance4
indicates that the implementation supports the following:-
The application may destroy a VkPipelineLayout object immediately after using it to create another object.
-
LocalSizeId
can be used as an alternative toLocalSize
to specify the local workgroup size with specialization constants. -
Images created with identical creation parameters will always have the same alignment requirements.
-
The size memory requirement of a buffer or image is never greater than that of another buffer or image created with a greater or equal size.
-
Push constants do not have to be initialized before they are dynamically accessed.
-
The interface matching rules allow a larger output vector to match with a smaller input vector, with additional values being discarded.
-
If the VkPhysicalDeviceMaintenance4Features
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceMaintenance4Features
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
The VkPhysicalDeviceDynamicRenderingFeatures
structure is defined as:
// Provided by VK_VERSION_1_3
typedef struct VkPhysicalDeviceDynamicRenderingFeatures {
VkStructureType sType;
void* pNext;
VkBool32 dynamicRendering;
} VkPhysicalDeviceDynamicRenderingFeatures;
This structure describes the following feature:
-
sType
is the type of this structure. -
pNext
isNULL
or a pointer to a structure extending this structure.
-
dynamicRendering
specifies that the implementation supports dynamic render pass instances using the vkCmdBeginRendering command.
If the VkPhysicalDeviceDynamicRenderingFeatures
structure is included in the pNext
chain of the
VkPhysicalDeviceFeatures2 structure passed to
vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
corresponding feature is supported.
VkPhysicalDeviceDynamicRenderingFeatures
can also be used in the pNext
chain of
VkDeviceCreateInfo to selectively enable these features.
32.1. Feature Requirements
All Vulkan graphics implementations must support the following features:
-
multiview
, if Vulkan 1.1 is supported. -
uniformBufferStandardLayout
, if Vulkan 1.2 or the
extension is supported.VK_KHR_uniform_buffer_standard_layout
-
storageBuffer8BitAccess
, ifuniformAndStorageBuffer8BitAccess
is enabled. -
If the
descriptorIndexing
feature is supported, or if the
extension is supported:VK_EXT_descriptor_indexing
-
If Vulkan 1.3 is supported:
-
inlineUniformBlock
, if Vulkan 1.3 or the
extension is supported.VK_EXT_inline_uniform_block
-
descriptorBindingInlineUniformBlockUpdateAfterBind
, if Vulkan 1.3 or the
extension is supported; and if theVK_EXT_inline_uniform_block
descriptorIndexing
feature is supported, or the
extension is supported.VK_EXT_descriptor_indexing
-
subgroupBroadcastDynamicId
, if Vulkan 1.2 is supported. -
subgroupSizeControl
, if Vulkan 1.3 or the
extension is supported.VK_EXT_subgroup_size_control
-
computeFullSubgroups
, if Vulkan 1.3 or the
extension is supported.VK_EXT_subgroup_size_control
-
imagelessFramebuffer
, if Vulkan 1.2 or the
extension is supported.VK_KHR_imageless_framebuffer
-
separateDepthStencilLayouts
, if Vulkan 1.2 or the
extension is supported.VK_KHR_separate_depth_stencil_layouts
-
hostQueryReset
, if Vulkan 1.2 or the
extension is supported.VK_EXT_host_query_reset
-
timelineSemaphore
, if Vulkan 1.2 or the
extension is supported.VK_KHR_timeline_semaphore
-
pipelineCreationCacheControl
, if Vulkan 1.3 or the
extension is supported.VK_EXT_pipeline_creation_cache_control
-
shaderSubgroupExtendedTypes
, if Vulkan 1.2 or the
extension is supported.VK_KHR_shader_subgroup_extended_types
-
textureCompressionASTC_HDR
, if the
extension is supported.VK_EXT_texture_compression_astc_hdr
-
shaderDemoteToHelperInvocation
, if Vulkan 1.3 or the
extension is supported.VK_EXT_shader_demote_to_helper_invocation
-
texelBufferAlignment
, if Vulkan 1.3 or the
extension is supported.VK_EXT_texel_buffer_alignment
-
bufferDeviceAddress
, if Vulkan 1.3 or the
extension is supported.VK_KHR_buffer_device_address
-
shaderInt64
, if theshaderSharedInt64Atomics
orshaderBufferInt64Atomics
features are supported. -
storageBuffer16BitAccess
, ifuniformAndStorageBuffer16BitAccess
is enabled. -
robustImageAccess
, if Vulkan 1.3 or the
extension is supported.VK_EXT_image_robustness
-
shaderTerminateInvocation
if Vulkan 1.3 or the
extension is supported.VK_KHR_shader_terminate_invocation
-
shaderZeroInitializeWorkgroupMemory
, if Vulkan 1.3 or the
extension is supported.VK_KHR_zero_initialize_workgroup_memory
-
synchronization2
if Vulkan 1.3 or the
extension is supported.VK_KHR_synchronization2
-
shaderIntegerDotProduct
if Vulkan 1.3 or the
extension is supported.VK_KHR_shader_integer_dot_product
-
maintenance4
, if Vulkan 1.3 or the
extension is supported.VK_KHR_maintenance4
-
privateData
, if Vulkan 1.3 or the
extension is supported.VK_EXT_private_data
-
dynamicRendering
, if Vulkan 1.3 or the
extension is supported.VK_KHR_dynamic_rendering
All other features defined in the Specification are optional.
32.2. Profile Features
32.2.1. Roadmap 2022
Implementations that claim support for the Roadmap 2022 profile must support the following features: