38. 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 features structures for features promoted from extensions. At the same time, the extension’s original features 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);
-
physicalDeviceis the physical device from which to query the supported features. -
pFeaturesis a pointer to a VkPhysicalDeviceFeatures structure in which the physical device features are returned. For each feature, a value ofVK_TRUEspecifies that the feature is supported on this physical device, andVK_FALSEspecifies 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);
or the equivalent command
// Provided by VK_KHR_get_physical_device_properties2
void vkGetPhysicalDeviceFeatures2KHR(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceFeatures2* pFeatures);
-
physicalDeviceis the physical device from which to query the supported features. -
pFeaturesis 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;
or the equivalent
// Provided by VK_KHR_get_physical_device_properties2
typedef VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR;
The VkPhysicalDeviceFeatures2 structure is defined as:
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure. -
featuresis 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 in 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;
The members of the VkPhysicalDeviceFeatures structure describe the
following features:
-
robustBufferAccessspecifies 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
OpImageTexelPointerand 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
OpImageTexelPointerand 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 toOpConstantNullare 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. If thecooperativeMatrixRobustBufferAccessfeature is not enabled, then accesses usingOpCooperativeMatrixLoadNVandOpCooperativeMatrixStoreNVmay not be bounds-checked.NoteIf a SPIR-V
OpLoadinstruction 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
robustBufferAccess2is not enabled and 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.
-
-
Accesses to descriptors written with a VK_NULL_HANDLE resource or view are not considered to be out of bounds. Instead, each type of descriptor access defines a specific behavior for accesses to a null descriptor.
-
Out-of-bounds buffer loads will return any of the following values:
-
If the access is to a uniform buffer and
robustBufferAccess2is enabled, loads of offsets between the end of the descriptor range and the end of the descriptor range rounded up to a multiple of robustUniformBufferAccessSizeAlignment bytes must return either zero values or the contents of the memory at the offset being loaded. Loads of offsets past the descriptor range rounded up to a multiple of robustUniformBufferAccessSizeAlignment bytes must return zero values. -
If the access is to a storage buffer and
robustBufferAccess2is enabled, loads of offsets between the end of the descriptor range and the end of the descriptor range rounded up to a multiple of robustStorageBufferAccessSizeAlignment bytes must return either zero values or the contents of the memory at the offset being loaded. Loads of offsets past the descriptor range rounded up to a multiple of robustStorageBufferAccessSizeAlignment bytes must return zero values. Similarly, stores to addresses between the end of the descriptor range and the end of the descriptor range rounded up to a multiple of robustStorageBufferAccessSizeAlignment bytes may be discarded. -
Non-atomic accesses to storage buffers that are a multiple of 32 bits may be decomposed into 32-bit accesses that are individually bounds-checked.
-
If the access is to an index buffer and
robustBufferAccess2is enabled, zero values must be returned. -
If the access is to a uniform texel buffer or storage texel buffer and
robustBufferAccess2is enabled, zero values must be returned, and then Conversion to RGBA is applied based on the buffer view’s format. -
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.
-
If
robustBufferAccess2is enabled, out of bounds writes must not modify any 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.
-
If
robustBufferAccess2is enabled, out of bounds atomics must not modify any memory, and return an undefined value.
-
-
If
robustBufferAccess2is disabled, 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
vertexBufferRangeSizeis the byte size of the memory range bound to the vertex buffer binding andbindingStrideis 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
robustBufferAccess2is enabled, 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 the byte size of the memory range bound to the vertex buffer binding.-
If a vertex input attribute is out of bounds, the raw data extracted are zero values, and missing G, B, or A components are filled with (0,0,1).
-
-
If
robustBufferAccessis not enabled, applications must not perform out of bounds accesses.
-
-
fullDrawIndexUint32specifies the full 32-bit range of indices is supported for indexed draw calls when using a VkIndexType ofVK_INDEX_TYPE_UINT32.maxDrawIndexedIndexValueis 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,maxDrawIndexedIndexValuemust be 232-1; otherwise it must be no smaller than 224-1. See maxDrawIndexedIndexValue. -
imageCubeArrayspecifies whether image views with a VkImageViewType ofVK_IMAGE_VIEW_TYPE_CUBE_ARRAYcan be created, and that the correspondingSampledCubeArrayandImageCubeArraySPIR-V capabilities can be used in shader code. -
independentBlendspecifies whether theVkPipelineColorBlendAttachmentStatesettings are controlled independently per-attachment. If this feature is not enabled, theVkPipelineColorBlendAttachmentStatesettings for all color attachments must be identical. Otherwise, a differentVkPipelineColorBlendAttachmentStatecan be provided for each bound color attachment. -
geometryShaderspecifies whether geometry shaders are supported. If this feature is not enabled, theVK_SHADER_STAGE_GEOMETRY_BITandVK_PIPELINE_STAGE_GEOMETRY_SHADER_BITenum values must not be used. This also specifies whether shader modules can declare theGeometrycapability. -
tessellationShaderspecifies 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_INFOenum values must not be used. This also specifies whether shader modules can declare theTessellationcapability. -
sampleRateShadingspecifies whether Sample Shading and multisample interpolation are supported. If this feature is not enabled, thesampleShadingEnablemember of the VkPipelineMultisampleStateCreateInfo structure must be set toVK_FALSEand theminSampleShadingmember is ignored. This also specifies whether shader modules can declare theSampleRateShadingcapability. -
dualSrcBlendspecifies 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_ALPHAenum values must not be used as source or destination blending factors. See Dual-Source Blending. -
logicOpspecifies whether logic operations are supported. If this feature is not enabled, thelogicOpEnablemember of the VkPipelineColorBlendStateCreateInfo structure must be set toVK_FALSE, and thelogicOpmember is ignored. -
multiDrawIndirectspecifies whether multiple draw indirect is supported. If this feature is not enabled, thedrawCountparameter to thevkCmdDrawIndirectandvkCmdDrawIndexedIndirectcommands must be 0 or 1. ThemaxDrawIndirectCountmember of theVkPhysicalDeviceLimitsstructure must also be 1 if this feature is not supported. See maxDrawIndirectCount. -
drawIndirectFirstInstancespecifies whether indirect draw calls support thefirstInstanceparameter. If this feature is not enabled, thefirstInstancemember of allVkDrawIndirectCommandandVkDrawIndexedIndirectCommandstructures that are provided to thevkCmdDrawIndirectandvkCmdDrawIndexedIndirectcommands must be 0. -
depthClampspecifies whether depth clamping is supported. If this feature is not enabled, thedepthClampEnablemember of the VkPipelineRasterizationStateCreateInfo structure must be set toVK_FALSE. Otherwise, settingdepthClampEnabletoVK_TRUEwill enable depth clamping. -
depthBiasClampspecifies whether depth bias clamping is supported. If this feature is not enabled, thedepthBiasClampmember of the VkPipelineRasterizationStateCreateInfo structure must be set to 0.0 unless theVK_DYNAMIC_STATE_DEPTH_BIASdynamic state is enabled, and thedepthBiasClampparameter tovkCmdSetDepthBiasmust be set to 0.0. -
fillModeNonSolidspecifies whether point and wireframe fill modes are supported. If this feature is not enabled, theVK_POLYGON_MODE_POINTandVK_POLYGON_MODE_LINEenum values must not be used. -
depthBoundsspecifies whether depth bounds tests are supported. If this feature is not enabled, thedepthBoundsTestEnablemember of the VkPipelineDepthStencilStateCreateInfo structure must be set toVK_FALSE. WhendepthBoundsTestEnableis set toVK_FALSE, theminDepthBoundsandmaxDepthBoundsmembers of the VkPipelineDepthStencilStateCreateInfo structure are ignored. -
wideLinesspecifies whether lines with width other than 1.0 are supported. If this feature is not enabled, thelineWidthmember of the VkPipelineRasterizationStateCreateInfo structure must be set to 1.0 unless theVK_DYNAMIC_STATE_LINE_WIDTHdynamic state is enabled, and thelineWidthparameter tovkCmdSetLineWidthmust be set to 1.0. When this feature is supported, the range and granularity of supported line widths are indicated by thelineWidthRangeandlineWidthGranularitymembers of theVkPhysicalDeviceLimitsstructure, respectively. -
largePointsspecifies 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 thepointSizeRangeandpointSizeGranularitymembers of theVkPhysicalDeviceLimitsstructure, respectively. -
alphaToOnespecifies whether the implementation is able to replace the alpha value of the color fragment output from the fragment shader with the maximum representable alpha value for fixed-point colors or 1.0 for floating-point colors. If this feature is not enabled, then thealphaToOneEnablemember of the VkPipelineMultisampleStateCreateInfo structure must be set toVK_FALSE. Otherwise settingalphaToOneEnabletoVK_TRUEwill enable alpha-to-one behavior. -
multiViewportspecifies whether more than one viewport is supported. If this feature is not enabled:-
The
viewportCountandscissorCountmembers of the VkPipelineViewportStateCreateInfo structure must be set to 1. -
The
firstViewportandviewportCountparameters to thevkCmdSetViewportcommand must be set to 0 and 1, respectively. -
The
firstScissorandscissorCountparameters to thevkCmdSetScissorcommand must be set to 0 and 1, respectively. -
The
exclusiveScissorCountmember of the VkPipelineViewportExclusiveScissorStateCreateInfoNV structure must be set to 0 or 1. -
The
firstExclusiveScissorandexclusiveScissorCountparameters to thevkCmdSetExclusiveScissorNVcommand must be set to 0 and 1, respectively.
-
-
samplerAnisotropyspecifies whether anisotropic filtering is supported. If this feature is not enabled, theanisotropyEnablemember of the VkSamplerCreateInfo structure must beVK_FALSE. -
textureCompressionETC2specifies 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_BITandVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BITfeatures must be supported inoptimalTilingFeaturesfor 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_LDRspecifies 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_BITandVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BITfeatures must be supported inoptimalTilingFeaturesfor 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.
-
-
textureCompressionBCspecifies 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_BITandVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BITfeatures must be supported inoptimalTilingFeaturesfor 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.
-
-
occlusionQueryPrecisespecifies whether occlusion queries returning actual sample counts are supported. Occlusion queries are created in aVkQueryPoolby specifying thequeryTypeofVK_QUERY_TYPE_OCCLUSIONin the VkQueryPoolCreateInfo structure which is passed tovkCreateQueryPool. If this feature is enabled, queries of this type can enableVK_QUERY_CONTROL_PRECISE_BITin theflagsparameter 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_BITis set, occlusion queries will report the actual number of samples passed. -
pipelineStatisticsQueryspecifies whether the pipeline statistics queries are supported. If this feature is not enabled, queries of typeVK_QUERY_TYPE_PIPELINE_STATISTICScannot be created, and none of the VkQueryPipelineStatisticFlagBits bits can be set in thepipelineStatisticsmember of the VkQueryPoolCreateInfo structure. -
vertexPipelineStoresAndAtomicsspecifies whether storage buffers and images support stores and atomic operations in the vertex, tessellation, and geometry shader stages. If this feature is not enabled, all storage image, storage texel buffers, and storage buffer variables used by these stages in shader modules must be decorated with theNonWritabledecoration (or thereadonlymemory qualifier in GLSL). -
fragmentStoresAndAtomicsspecifies whether storage buffers and images support stores and atomic operations in the fragment shader stage. If this feature is not enabled, all storage image, storage texel buffers, and storage buffer variables used by the fragment stage in shader modules must be decorated with theNonWritabledecoration (or thereadonlymemory qualifier in GLSL). -
shaderTessellationAndGeometryPointSizespecifies whether thePointSizebuilt-in decoration is available in the tessellation control, tessellation evaluation, and geometry shader stages. If this feature is not enabled, members decorated with thePointSizebuilt-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 theTessellationPointSizecapability for tessellation control and evaluation shaders, or if the shader modules can declare theGeometryPointSizecapability for geometry shaders. An implementation supporting this feature must also support one or both of thetessellationShaderorgeometryShaderfeatures. -
shaderImageGatherExtendedspecifies whether the extended set of image gather instructions are available in shader code. If this feature is not enabled, theOpImage*Gatherinstructions do not support theOffsetandConstOffsetsoperands. This also specifies whether shader modules can declare theImageGatherExtendedcapability. -
shaderStorageImageExtendedFormatsspecifies whether all the “storage image extended formats” below are supported; if this feature is supported, then theVK_FORMAT_FEATURE_STORAGE_IMAGE_BITmust be supported inoptimalTilingFeaturesfor 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
NoteshaderStorageImageExtendedFormatsfeature 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_SFLOATfromStorageImageExtendedFormatsSPIR-V capability, are already covered by core Vulkan mandatory format support. -
-
shaderStorageImageMultisamplespecifies whether multisampled storage images are supported. If this feature is not enabled, images that are created with ausagethat includesVK_IMAGE_USAGE_STORAGE_BITmust be created withsamplesequal toVK_SAMPLE_COUNT_1_BIT. This also specifies whether shader modules can declare theStorageImageMultisampleandImageMSArraycapabilities. -
shaderStorageImageReadWithoutFormatspecifies whether storage images require a format qualifier to be specified when reading from storage images. If this feature is not enabled, theOpImageReadinstruction must not have anOpTypeImageofUnknown. This also specifies whether shader modules can declare theStorageImageReadWithoutFormatcapability. -
shaderStorageImageWriteWithoutFormatspecifies whether storage images require a format qualifier to be specified when writing to storage images. If this feature is not enabled, theOpImageWriteinstruction must not have anOpTypeImageofUnknown. This also specifies whether shader modules can declare theStorageImageWriteWithoutFormatcapability. -
shaderUniformBufferArrayDynamicIndexingspecifies 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_BUFFERorVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMICmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also specifies whether shader modules can declare theUniformBufferArrayDynamicIndexingcapability. -
shaderSampledImageArrayDynamicIndexingspecifies 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_IMAGEmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also specifies whether shader modules can declare theSampledImageArrayDynamicIndexingcapability. -
shaderStorageBufferArrayDynamicIndexingspecifies 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_BUFFERorVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMICmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also specifies whether shader modules can declare theStorageBufferArrayDynamicIndexingcapability. -
shaderStorageImageArrayDynamicIndexingspecifies 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_IMAGEmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also specifies whether shader modules can declare theStorageImageArrayDynamicIndexingcapability. -
shaderClipDistancespecifies whether clip distances are supported in shader code. If this feature is not enabled, any members decorated with theClipDistancebuilt-in decoration must not be read from or written to in shader modules. This also specifies whether shader modules can declare theClipDistancecapability. -
shaderCullDistancespecifies whether cull distances are supported in shader code. If this feature is not enabled, any members decorated with theCullDistancebuilt-in decoration must not be read from or written to in shader modules. This also specifies whether shader modules can declare theCullDistancecapability. -
shaderFloat64specifies 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 theFloat64capability. Declaring and using 64-bit floats is enabled for all storage classes that SPIR-V allows with theFloat64capability. -
shaderInt64specifies 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 theInt64capability. Declaring and using 64-bit integers is enabled for all storage classes that SPIR-V allows with theInt64capability. -
shaderInt16specifies 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 theInt16capability. However, this only enables a subset of the storage classes that SPIR-V allows for theInt16SPIR-V capability: Declaring and using 16-bit integers in thePrivate,Workgroup, andFunctionstorage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant,Uniform,StorageBuffer,Input,Output, andPushConstant) is not enabled. -
shaderResourceResidencyspecifies 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 theSparseResidencycapability. The feature requires at least one of thesparseResidency*features to be supported. -
shaderResourceMinLodspecifies whether image operations specifying the minimum resource LOD are supported in shader code. If this feature is not enabled, theMinLodimage operand must not be used in shader code. This also specifies whether shader modules can declare theMinLodcapability. -
sparseBindingspecifies 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 thevkBindBufferMemoryandvkBindImageMemorycommands. In this case, buffers and images must not be created withVK_BUFFER_CREATE_SPARSE_BINDING_BITandVK_IMAGE_CREATE_SPARSE_BINDING_BITset in theflagsmember of the VkBufferCreateInfo and VkImageCreateInfo structures, respectively. Otherwise resource memory can be managed as described in Sparse Resource Features. -
sparseResidencyBufferspecifies whether the device can access partially resident buffers. If this feature is not enabled, buffers must not be created withVK_BUFFER_CREATE_SPARSE_RESIDENCY_BITset in theflagsmember of the VkBufferCreateInfo structure. -
sparseResidencyImage2Dspecifies whether the device can access partially resident 2D images with 1 sample per pixel. If this feature is not enabled, images with animageTypeofVK_IMAGE_TYPE_2Dandsamplesset toVK_SAMPLE_COUNT_1_BITmust not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BITset in theflagsmember of the VkImageCreateInfo structure. -
sparseResidencyImage3Dspecifies whether the device can access partially resident 3D images. If this feature is not enabled, images with animageTypeofVK_IMAGE_TYPE_3Dmust not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BITset in theflagsmember of the VkImageCreateInfo structure. -
sparseResidency2Samplesspecifies whether the physical device can access partially resident 2D images with 2 samples per pixel. If this feature is not enabled, images with animageTypeofVK_IMAGE_TYPE_2Dandsamplesset toVK_SAMPLE_COUNT_2_BITmust not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BITset in theflagsmember of the VkImageCreateInfo structure. -
sparseResidency4Samplesspecifies whether the physical device can access partially resident 2D images with 4 samples per pixel. If this feature is not enabled, images with animageTypeofVK_IMAGE_TYPE_2Dandsamplesset toVK_SAMPLE_COUNT_4_BITmust not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BITset in theflagsmember of the VkImageCreateInfo structure. -
sparseResidency8Samplesspecifies whether the physical device can access partially resident 2D images with 8 samples per pixel. If this feature is not enabled, images with animageTypeofVK_IMAGE_TYPE_2Dandsamplesset toVK_SAMPLE_COUNT_8_BITmust not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BITset in theflagsmember of the VkImageCreateInfo structure. -
sparseResidency16Samplesspecifies whether the physical device can access partially resident 2D images with 16 samples per pixel. If this feature is not enabled, images with animageTypeofVK_IMAGE_TYPE_2Dandsamplesset toVK_SAMPLE_COUNT_16_BITmust not be created withVK_IMAGE_CREATE_SPARSE_RESIDENCY_BITset in theflagsmember of the VkImageCreateInfo structure. -
sparseResidencyAliasedspecifies whether the physical device can correctly access data aliased into multiple locations. If this feature is not enabled, theVK_BUFFER_CREATE_SPARSE_ALIASED_BITandVK_IMAGE_CREATE_SPARSE_ALIASED_BITenum values must not be used inflagsmembers of the VkBufferCreateInfo and VkImageCreateInfo structures, respectively. -
variableMultisampleRatespecifies 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. -
inheritedQueriesspecifies 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;
The members of the VkPhysicalDeviceVulkan11Features structure describe
the following features:
-
storageBuffer16BitAccessspecifies whether objects in theStorageBufferorPhysicalStorageBufferstorage class with theBlockdecoration 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 theStorageBuffer16BitAccesscapability. -
uniformAndStorageBuffer16BitAccessspecifies whether objects in theUniformstorage class with theBlockdecoration and in theStorageBufferorPhysicalStorageBufferstorage class with the same decoration can have 16-bit integer and 16-bit floating-point members. If this feature is not enabled, 16-bit integer or 16-bit floating-point members must not be used in such objects. This also specifies whether shader modules can declare theUniformAndStorageBuffer16BitAccesscapability. -
storagePushConstant16specifies whether objects in thePushConstantstorage 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 theStoragePushConstant16capability. -
storageInputOutput16specifies whether objects in theInputandOutputstorage 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 theStorageInputOutput16capability. -
multiviewspecifies 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. -
multiviewGeometryShaderspecifies 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. -
multiviewTessellationShaderspecifies 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. -
variablePointersStorageBufferspecifies whether the implementation supports the SPIR-VVariablePointersStorageBuffercapability. When this feature is not enabled, shader modules must not declare theSPV_KHR_variable_pointersextension or theVariablePointersStorageBuffercapability. -
variablePointersspecifies whether the implementation supports the SPIR-VVariablePointerscapability. When this feature is not enabled, shader modules must not declare theVariablePointerscapability. -
protectedMemoryspecifies whether protected memory is supported. -
samplerYcbcrConversionspecifies whether the implementation supports sampler Y′CBCR conversion. IfsamplerYcbcrConversionisVK_FALSE, sampler Y′CBCR conversion is not supported, and samplers using sampler Y′CBCR conversion must not be used. -
shaderDrawParametersspecifies whether shader draw parameters are supported.
If the VkPhysicalDeviceVulkan11Features structure is included in the
pNext chain of VkPhysicalDeviceFeatures2, it is filled with
values indicating whether each feature is supported.
VkPhysicalDeviceVulkan11Features can also be used in the pNext
chain of VkDeviceCreateInfo to enable the 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;
The members of the VkPhysicalDeviceVulkan12Features structure describe
the following features:
-
samplerMirrorClampToEdgeindicates whether the implementation supports theVK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGEsampler address mode. If this feature is not enabled, theVK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGEsampler address mode must not be used. -
drawIndirectCountindicates whether the implementation supports the vkCmdDrawIndirectCount and vkCmdDrawIndexedIndirectCount functions. If this feature is not enabled, these functions must not be used. -
storageBuffer8BitAccessindicates whether objects in theStorageBufferorPhysicalStorageBufferstorage class with theBlockdecoration 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 theStorageBuffer8BitAccesscapability. -
uniformAndStorageBuffer8BitAccessindicates whether objects in theUniformstorage class with theBlockdecoration and in theStorageBufferorPhysicalStorageBufferstorage class with the same decoration can have 8-bit integer members. If this feature is not enabled, 8-bit integer members must not be used in such objects. This also indicates whether shader modules can declare theUniformAndStorageBuffer8BitAccesscapability. -
storagePushConstant8indicates whether objects in thePushConstantstorage 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 theStoragePushConstant8capability. -
shaderBufferInt64Atomicsindicates whether shaders can perform 64-bit unsigned and signed integer atomic operations on buffers. -
shaderSharedInt64Atomicsindicates whether shaders can perform 64-bit unsigned and signed integer atomic operations on shared memory. -
shaderFloat16indicates whether 16-bit floats (halfs) are supported in shader code. This also indicates whether shader modules can declare theFloat16capability. However, this only enables a subset of the storage classes that SPIR-V allows for theFloat16SPIR-V capability: Declaring and using 16-bit floats in thePrivate,Workgroup, andFunctionstorage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant,Uniform,StorageBuffer,Input,Output, andPushConstant) is not enabled. -
shaderInt8indicates whether 8-bit integers (signed and unsigned) are supported in shader code. This also indicates whether shader modules can declare theInt8capability. However, this only enables a subset of the storage classes that SPIR-V allows for theInt8SPIR-V capability: Declaring and using 8-bit integers in thePrivate,Workgroup, andFunctionstorage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant,Uniform,StorageBuffer,Input,Output, andPushConstant) is not enabled. -
descriptorIndexingindicates whether the implementation supports the minimum set of descriptor indexing features as described in the Feature Requirements section. Enabling thedescriptorIndexingmember 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. -
shaderInputAttachmentArrayDynamicIndexingindicates 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_ATTACHMENTmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theInputAttachmentArrayDynamicIndexingcapability. -
shaderUniformTexelBufferArrayDynamicIndexingindicates 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_BUFFERmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformTexelBufferArrayDynamicIndexingcapability. -
shaderStorageTexelBufferArrayDynamicIndexingindicates 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_BUFFERmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageTexelBufferArrayDynamicIndexingcapability. -
shaderUniformBufferArrayNonUniformIndexingindicates 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_BUFFERorVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMICmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformBufferArrayNonUniformIndexingcapability. -
shaderSampledImageArrayNonUniformIndexingindicates 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_IMAGEmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theSampledImageArrayNonUniformIndexingcapability. -
shaderStorageBufferArrayNonUniformIndexingindicates 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_BUFFERorVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMICmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageBufferArrayNonUniformIndexingcapability. -
shaderStorageImageArrayNonUniformIndexingindicates 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_IMAGEmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageImageArrayNonUniformIndexingcapability. -
shaderInputAttachmentArrayNonUniformIndexingindicates 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_ATTACHMENTmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theInputAttachmentArrayNonUniformIndexingcapability. -
shaderUniformTexelBufferArrayNonUniformIndexingindicates 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_BUFFERmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformTexelBufferArrayNonUniformIndexingcapability. -
shaderStorageTexelBufferArrayNonUniformIndexingindicates 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_BUFFERmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageTexelBufferArrayNonUniformIndexingcapability. -
descriptorBindingUniformBufferUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER. -
descriptorBindingSampledImageUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_SAMPLER,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, orVK_DESCRIPTOR_TYPE_SAMPLED_IMAGE. -
descriptorBindingStorageImageUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_STORAGE_IMAGE. -
descriptorBindingStorageBufferUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_STORAGE_BUFFER. -
descriptorBindingUniformTexelBufferUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER. -
descriptorBindingStorageTexelBufferUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER. -
descriptorBindingUpdateUnusedWhilePendingindicates 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_BITmust not be used. -
descriptorBindingPartiallyBoundindicates 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_BITmust not be used. -
descriptorBindingVariableDescriptorCountindicates whether the implementation supports descriptor sets with a variable-sized last binding. If this feature is not enabled,VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BITmust not be used. -
runtimeDescriptorArrayindicates whether the implementation supports the SPIR-VRuntimeDescriptorArraycapability. If this feature is not enabled, descriptors must not be declared in runtime arrays. -
samplerFilterMinmaxindicates whether the implementation supports a minimum set of required formats supporting min/max filtering as defined by thefilterMinmaxSingleComponentFormatsproperty minimum requirements. If this feature is not enabled, then no VkSamplerCreateInfopNextchain can include a VkSamplerReductionModeCreateInfo structure. -
scalarBlockLayoutindicates that the implementation supports the layout of resource blocks in shaders using scalar alignment. -
imagelessFramebufferindicates that the implementation supports specifying the image view for attachments at render pass begin time via VkRenderPassAttachmentBeginInfo. -
uniformBufferStandardLayoutindicates that the implementation supports the same layouts for uniform buffers as for storage and other kinds of buffers. See Standard Buffer Layout. -
shaderSubgroupExtendedTypesis a boolean that specifies 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 scopeif the implementation supports the types. -
separateDepthStencilLayoutsindicates whether the implementation supports aVkImageMemoryBarrierfor a depth/stencil image with only one ofVK_IMAGE_ASPECT_DEPTH_BITorVK_IMAGE_ASPECT_STENCIL_BITset, 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_OPTIMALcan be used. -
hostQueryResetindicates that the implementation supports resetting queries from the host with vkResetQueryPool. -
timelineSemaphoreindicates whether semaphores created with a VkSemaphoreType ofVK_SEMAPHORE_TYPE_TIMELINEare supported. -
bufferDeviceAddressindicates that the implementation supports accessing buffer memory in shaders as storage buffers via an address queried from vkGetBufferDeviceAddress. -
bufferDeviceAddressCaptureReplayindicates that the implementation supports saving and reusing buffer and device addresses, e.g. for trace capture and replay. -
bufferDeviceAddressMultiDeviceindicates that the implementation supports thebufferDeviceAddressandrayTracingfeatures for logical devices created with multiple physical devices. If this feature is not supported, buffer and acceleration structure addresses must not be queried on a logical device created with more than one physical device. -
vulkanMemoryModelindicates whether the Vulkan Memory Model is supported, as defined in Vulkan Memory Model. This also indicates whether shader modules can declare theVulkanMemoryModelcapability. -
vulkanMemoryModelDeviceScopeindicates whether the Vulkan Memory Model can useDevicescope synchronization. This also indicates whether shader modules can declare theVulkanMemoryModelDeviceScopecapability. -
vulkanMemoryModelAvailabilityVisibilityChainsindicates whether the Vulkan Memory Model can use availability and visibility chains with more than one element. -
shaderOutputViewportIndexindicates whether the implementation supports theShaderViewportIndexSPIR-V capability enabling variables decorated with theViewportIndexbuilt-in to be exported from vertex or tessellation evaluation shaders. If this feature is not enabled, theViewportIndexbuilt-in decoration must not be used on outputs in vertex or tessellation evaluation shaders. -
shaderOutputLayerindicates whether the implementation supports theShaderLayerSPIR-V capability enabling variables decorated with theLayerbuilt-in to be exported from vertex or tessellation evaluation shaders. If this feature is not enabled, theLayerbuilt-in decoration must not be used on outputs in vertex or tessellation evaluation shaders. -
If
subgroupBroadcastDynamicIdisVK_TRUE, the “Id” operand ofOpGroupNonUniformBroadcastcan be dynamically uniform within a subgroup, and the “Index” operand ofOpGroupNonUniformQuadBroadcastcan 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 VkPhysicalDeviceFeatures2, it is filled with
values indicating whether each feature is supported.
VkPhysicalDeviceVulkan12Features can also be used in the pNext
chain of VkDeviceCreateInfo to enable the 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;
or the equivalent
// Provided by VK_KHR_variable_pointers
typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointersFeaturesKHR;
The members of the VkPhysicalDeviceVariablePointersFeatures structure
describe the following features:
-
variablePointersStorageBufferspecifies whether the implementation supports the SPIR-VVariablePointersStorageBuffercapability. When this feature is not enabled, shader modules must not declare theSPV_KHR_variable_pointersextension or theVariablePointersStorageBuffercapability. -
variablePointersspecifies whether the implementation supports the SPIR-VVariablePointerscapability. When this feature is not enabled, shader modules must not declare theVariablePointerscapability.
If the VkPhysicalDeviceVariablePointersFeatures structure is included
in the pNext chain of VkPhysicalDeviceFeatures2, it is filled
with values indicating whether each feature is supported.
VkPhysicalDeviceVariablePointersFeatures can also be included in the
pNext chain of VkDeviceCreateInfo to enable the 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;
or the equivalent
// Provided by VK_KHR_multiview
typedef VkPhysicalDeviceMultiviewFeatures VkPhysicalDeviceMultiviewFeaturesKHR;
The members of the VkPhysicalDeviceMultiviewFeatures structure
describe the following features:
-
multiviewspecifies 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. -
multiviewGeometryShaderspecifies 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. -
multiviewTessellationShaderspecifies whether the implementation supports multiview rendering within a render pass, with tessellation shaders. If this feature is not enabled, then a pipeline compiled against a subpass with a non-zero view mask must not include any tessellation shaders.
If the VkPhysicalDeviceMultiviewFeatures structure is included in the
pNext chain of VkPhysicalDeviceFeatures2, it is filled with
values indicating whether each feature is supported.
VkPhysicalDeviceMultiviewFeatures can also be included in the
pNext chain of VkDeviceCreateInfo to enable the features.
To query support for atomic operations on floating-point numbers, call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDeviceShaderAtomicFloatFeaturesEXT structure included in the
pNext chain of its pFeatures parameter.
The VkPhysicalDeviceShaderAtomicFloatFeaturesEXT structure is defined as:
// Provided by VK_EXT_shader_atomic_float
typedef struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 shaderBufferFloat32Atomics;
VkBool32 shaderBufferFloat32AtomicAdd;
VkBool32 shaderBufferFloat64Atomics;
VkBool32 shaderBufferFloat64AtomicAdd;
VkBool32 shaderSharedFloat32Atomics;
VkBool32 shaderSharedFloat32AtomicAdd;
VkBool32 shaderSharedFloat64Atomics;
VkBool32 shaderSharedFloat64AtomicAdd;
VkBool32 shaderImageFloat32Atomics;
VkBool32 shaderImageFloat32AtomicAdd;
VkBool32 sparseImageFloat32Atomics;
VkBool32 sparseImageFloat32AtomicAdd;
} VkPhysicalDeviceShaderAtomicFloatFeaturesEXT;
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure.
-
shaderBufferFloat32Atomicsindicates whether shaders can perform 32-bit floating-point load, store and exchange atomic operations on storage buffers. -
shaderBufferFloat32AtomicAddindicates whether shaders can perform 32-bit floating-point add atomic operations on storage buffers. -
shaderBufferFloat64Atomicsindicates whether shaders can perform 64-bit floating-point load, store and exchange atomic operations on storage buffers. -
shaderBufferFloat64AtomicAddindicates whether shaders can perform 64-bit floating-point add atomic operations on storage buffers. -
shaderSharedFloat32Atomicsindicates whether shaders can perform 32-bit floating-point load, store and exchange atomic operations on shared memory. -
shaderSharedFloat32AtomicAddindicates whether shaders can perform 32-bit floating-point add atomic operations on shared memory. -
shaderSharedFloat64Atomicsindicates whether shaders can perform 64-bit floating-point load, store and exchange atomic operations on shared memory. -
shaderSharedFloat64AtomicAddindicates whether shaders can perform 64-bit floating-point add atomic operations on shared memory. -
shaderImageFloat32Atomicsindicates whether shaders can perform 32-bit floating-point load, store and exchange atomic image operations. -
shaderImageFloat32AtomicAddindicates whether shaders can perform 32-bit floating-point add atomic image operations. -
sparseImageFloat32Atomicsindicates whether 32-bit floating-point load, store and exchange atomic operations can be used on sparse images. -
sparseImageFloat32AtomicAddindicates whether 32-bit floating-point add atomic operations can be used on sparse images.
To query 64-bit atomic support for signed and unsigned integers call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDeviceShaderAtomicInt64Features structure included in the
pNext chain of its pFeatures parameter.
The VkPhysicalDeviceShaderAtomicInt64Features structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceShaderAtomicInt64Features {
VkStructureType sType;
void* pNext;
VkBool32 shaderBufferInt64Atomics;
VkBool32 shaderSharedInt64Atomics;
} VkPhysicalDeviceShaderAtomicInt64Features;
or the equivalent
// Provided by VK_KHR_shader_atomic_int64
typedef VkPhysicalDeviceShaderAtomicInt64Features VkPhysicalDeviceShaderAtomicInt64FeaturesKHR;
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure.
To query 8-bit storage features additionally supported call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDevice8BitStorageFeatures structure included in the
pNext chain of its pFeatures parameter.
The VkPhysicalDevice8BitStorageFeatures structure can also be
included in the pNext chain of a VkDeviceCreateInfo structure,
in which case it controls which additional features are enabled in the
device.
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;
or the equivalent
// Provided by VK_KHR_8bit_storage
typedef VkPhysicalDevice8BitStorageFeatures VkPhysicalDevice8BitStorageFeaturesKHR;
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure.
-
storageBuffer8BitAccessindicates whether objects in theStorageBufferorPhysicalStorageBufferstorage class with theBlockdecoration 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 theStorageBuffer8BitAccesscapability. -
uniformAndStorageBuffer8BitAccessindicates whether objects in theUniformstorage class with theBlockdecoration and in theStorageBufferorPhysicalStorageBufferstorage class with the same decoration can have 8-bit integer members. If this feature is not enabled, 8-bit integer members must not be used in such objects. This also indicates whether shader modules can declare theUniformAndStorageBuffer8BitAccesscapability. -
storagePushConstant8indicates whether objects in thePushConstantstorage 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 theStoragePushConstant8capability.
To query 16-bit storage features additionally supported call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDevice16BitStorageFeatures structure included in the
pNext chain of its pFeatures parameter.
The VkPhysicalDevice16BitStorageFeatures structure can also be
included in the pNext chain of a VkDeviceCreateInfo structure,
in which case it controls which additional features are enabled in the
device.
The VkPhysicalDevice16BitStorageFeatures structure is defined as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDevice16BitStorageFeatures {
VkStructureType sType;
void* pNext;
VkBool32 storageBuffer16BitAccess;
VkBool32 uniformAndStorageBuffer16BitAccess;
VkBool32 storagePushConstant16;
VkBool32 storageInputOutput16;
} VkPhysicalDevice16BitStorageFeatures;
or the equivalent
// Provided by VK_KHR_16bit_storage
typedef VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR;
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure.
-
storageBuffer16BitAccessspecifies whether objects in theStorageBufferorPhysicalStorageBufferstorage class with theBlockdecoration 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 theStorageBuffer16BitAccesscapability. -
uniformAndStorageBuffer16BitAccessspecifies whether objects in theUniformstorage class with theBlockdecoration and in theStorageBufferorPhysicalStorageBufferstorage class with the same decoration can have 16-bit integer and 16-bit floating-point members. If this feature is not enabled, 16-bit integer or 16-bit floating-point members must not be used in such objects. This also specifies whether shader modules can declare theUniformAndStorageBuffer16BitAccesscapability. -
storagePushConstant16specifies whether objects in thePushConstantstorage 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 theStoragePushConstant16capability. -
storageInputOutput16specifies whether objects in theInputandOutputstorage 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 theStorageInputOutput16capability.
To query features additionally supported by the
VK_KHR_shader_float16_int8 extension, call
vkGetPhysicalDeviceFeatures2KHR with a
VkPhysicalDeviceShaderFloat16Int8Features structure included in the
pNext chain.
The VkPhysicalDeviceShaderFloat16Int8Features structure can also be
included in the pNext chain of a VkDeviceCreateInfo structure,
in which case it controls which additional features are enabled in the
device.
The VkPhysicalDeviceShaderFloat16Int8Features structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceShaderFloat16Int8Features {
VkStructureType sType;
void* pNext;
VkBool32 shaderFloat16;
VkBool32 shaderInt8;
} VkPhysicalDeviceShaderFloat16Int8Features;
or the equivalent
// Provided by VK_KHR_shader_float16_int8
typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceShaderFloat16Int8FeaturesKHR;
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure.
-
shaderFloat16indicates whether 16-bit floats (halfs) are supported in shader code. This also indicates whether shader modules can declare theFloat16capability. However, this only enables a subset of the storage classes that SPIR-V allows for theFloat16SPIR-V capability: Declaring and using 16-bit floats in thePrivate,Workgroup, andFunctionstorage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant,Uniform,StorageBuffer,Input,Output, andPushConstant) is not enabled. -
shaderInt8indicates whether 8-bit integers (signed and unsigned) are supported in shader code. This also indicates whether shader modules can declare theInt8capability. However, this only enables a subset of the storage classes that SPIR-V allows for theInt8SPIR-V capability: Declaring and using 8-bit integers in thePrivate,Workgroup, andFunctionstorage classes is enabled, while declaring them in the interface storage classes (e.g.,UniformConstant,Uniform,StorageBuffer,Input,Output, andPushConstant) is not enabled.
To query shader clock support, call vkGetPhysicalDeviceFeatures2 with
a VkPhysicalDeviceShaderClockFeaturesKHR structure included in the
pNext chain of its pFeatures parameter.
The VkPhysicalDeviceShaderClockFeaturesKHR structure is defined as:
// Provided by VK_KHR_shader_clock
typedef struct VkPhysicalDeviceShaderClockFeaturesKHR {
VkStructureType sType;
void* pNext;
VkBool32 shaderSubgroupClock;
VkBool32 shaderDeviceClock;
} VkPhysicalDeviceShaderClockFeaturesKHR;
If the VkPhysicalDeviceShaderClockFeaturesKHR structure is included in
the pNext chain of VkPhysicalDeviceFeatures2, it is filled with
values indicating whether each feature is supported.
VkPhysicalDeviceShaderClockFeaturesKHR can also be included in the
pNext chain of VkDeviceCreateInfo to enable the features.
The VkPhysicalDeviceSamplerYcbcrConversionFeatures structure is
defined as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures {
VkStructureType sType;
void* pNext;
VkBool32 samplerYcbcrConversion;
} VkPhysicalDeviceSamplerYcbcrConversionFeatures;
or the equivalent
// Provided by VK_KHR_sampler_ycbcr_conversion
typedef VkPhysicalDeviceSamplerYcbcrConversionFeatures VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR;
The members of the VkPhysicalDeviceSamplerYcbcrConversionFeatures
structure describe the following feature:
-
samplerYcbcrConversionspecifies whether the implementation supports sampler Y′CBCR conversion. IfsamplerYcbcrConversionisVK_FALSE, sampler Y′CBCR conversion is not supported, and samplers using sampler Y′CBCR conversion must not be used.
The VkPhysicalDeviceProtectedMemoryFeatures structure is defined as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceProtectedMemoryFeatures {
VkStructureType sType;
void* pNext;
VkBool32 protectedMemory;
} VkPhysicalDeviceProtectedMemoryFeatures;
If the VkPhysicalDeviceProtectedMemoryFeatures structure is included
in the pNext chain of VkPhysicalDeviceFeatures2, it is filled
with a value indicating whether the feature is supported.
The VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT structure is
defined as:
// Provided by VK_EXT_blend_operation_advanced
typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 advancedBlendCoherentOperations;
} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
The members of the VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT
structure describe the following features:
-
advancedBlendCoherentOperationsspecifies whether blending using advanced blend operations is guaranteed to execute atomically and in primitive order. If this isVK_TRUE,VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXTis treated the same asVK_ACCESS_COLOR_ATTACHMENT_READ_BIT, and advanced blending needs no additional synchronization over basic blending. If this isVK_FALSE, then memory dependencies are required to guarantee order between two advanced blending operations that occur on the same sample.
If the VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT can also be
included in the pNext chain of VkDeviceCreateInfo to enable the
features.
The VkPhysicalDeviceConditionalRenderingFeaturesEXT structure is
defined as:
// Provided by VK_EXT_conditional_rendering
typedef struct VkPhysicalDeviceConditionalRenderingFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 conditionalRendering;
VkBool32 inheritedConditionalRendering;
} VkPhysicalDeviceConditionalRenderingFeaturesEXT;
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure. -
conditionalRenderingspecifies whether conditional rendering is supported. -
inheritedConditionalRenderingspecifies whether a secondary command buffer can be executed while conditional rendering is active in the primary command buffer.
If the VkPhysicalDeviceConditionalRenderingFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating the implementation-dependent behavior.
VkPhysicalDeviceConditionalRenderingFeaturesEXT can also be included
in pNext chain of VkDeviceCreateInfo to enable the features.
The VkPhysicalDeviceShaderDrawParametersFeatures structure is defined
as:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceShaderDrawParametersFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderDrawParameters;
} VkPhysicalDeviceShaderDrawParametersFeatures;
If the VkPhysicalDeviceShaderDrawParametersFeatures structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with a value indicating whether the feature is supported.
The VkPhysicalDeviceMeshShaderFeaturesNV structure is defined as:
// Provided by VK_NV_mesh_shader
typedef struct VkPhysicalDeviceMeshShaderFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 taskShader;
VkBool32 meshShader;
} VkPhysicalDeviceMeshShaderFeaturesNV;
If the VkPhysicalDeviceMeshShaderFeaturesNV structure is included in
the pNext chain of VkPhysicalDeviceFeatures2, it is filled with
a value indicating whether the feature is supported.
VkPhysicalDeviceMeshShaderFeaturesNV can also be included in
pNext chain of VkDeviceCreateInfo to enable the 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;
or the equivalent
// Provided by VK_EXT_descriptor_indexing
typedef VkPhysicalDeviceDescriptorIndexingFeatures VkPhysicalDeviceDescriptorIndexingFeaturesEXT;
The members of the VkPhysicalDeviceDescriptorIndexingFeatures
structure describe the following features:
-
shaderInputAttachmentArrayDynamicIndexingindicates 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_ATTACHMENTmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theInputAttachmentArrayDynamicIndexingcapability. -
shaderUniformTexelBufferArrayDynamicIndexingindicates 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_BUFFERmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformTexelBufferArrayDynamicIndexingcapability. -
shaderStorageTexelBufferArrayDynamicIndexingindicates 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_BUFFERmust be indexed only by constant integral expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageTexelBufferArrayDynamicIndexingcapability. -
shaderUniformBufferArrayNonUniformIndexingindicates 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_BUFFERorVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMICmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformBufferArrayNonUniformIndexingcapability. -
shaderSampledImageArrayNonUniformIndexingindicates 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_IMAGEmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theSampledImageArrayNonUniformIndexingcapability. -
shaderStorageBufferArrayNonUniformIndexingindicates 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_BUFFERorVK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMICmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageBufferArrayNonUniformIndexingcapability. -
shaderStorageImageArrayNonUniformIndexingindicates 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_IMAGEmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageImageArrayNonUniformIndexingcapability. -
shaderInputAttachmentArrayNonUniformIndexingindicates 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_ATTACHMENTmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theInputAttachmentArrayNonUniformIndexingcapability. -
shaderUniformTexelBufferArrayNonUniformIndexingindicates 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_BUFFERmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theUniformTexelBufferArrayNonUniformIndexingcapability. -
shaderStorageTexelBufferArrayNonUniformIndexingindicates 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_BUFFERmust not be indexed by non-uniform integer expressions when aggregated into arrays in shader code. This also indicates whether shader modules can declare theStorageTexelBufferArrayNonUniformIndexingcapability. -
descriptorBindingUniformBufferUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_UNIFORM_BUFFER. -
descriptorBindingSampledImageUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_SAMPLER,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, orVK_DESCRIPTOR_TYPE_SAMPLED_IMAGE. -
descriptorBindingStorageImageUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_STORAGE_IMAGE. -
descriptorBindingStorageBufferUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_STORAGE_BUFFER. -
descriptorBindingUniformTexelBufferUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER. -
descriptorBindingStorageTexelBufferUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER. -
descriptorBindingUpdateUnusedWhilePendingindicates 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_BITmust not be used. -
descriptorBindingPartiallyBoundindicates 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_BITmust not be used. -
descriptorBindingVariableDescriptorCountindicates whether the implementation supports descriptor sets with a variable-sized last binding. If this feature is not enabled,VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BITmust not be used. -
runtimeDescriptorArrayindicates whether the implementation supports the SPIR-VRuntimeDescriptorArraycapability. 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 VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
VkPhysicalDeviceDescriptorIndexingFeatures can also be included in
the pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT structure is
defined as:
// Provided by VK_EXT_vertex_attribute_divisor
typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 vertexAttributeInstanceRateDivisor;
VkBool32 vertexAttributeInstanceRateZeroDivisor;
} VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT;
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure. -
vertexAttributeInstanceRateDivisorspecifies whether vertex attribute fetching may be repeated in case of instanced rendering. -
vertexAttributeInstanceRateZeroDivisorspecifies whether a zero value forVkVertexInputBindingDivisorDescriptionEXT::divisoris supported.
If the VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating the implementation-dependent behavior.
VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT can also be
included in pNext chain of VkDeviceCreateInfo to enable the
feature.
The VkPhysicalDeviceASTCDecodeFeaturesEXT structure is defined as:
// Provided by VK_EXT_astc_decode_mode
typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 decodeModeSharedExponent;
} VkPhysicalDeviceASTCDecodeFeaturesEXT;
The members of the VkPhysicalDeviceASTCDecodeFeaturesEXT structure
describe the following features:
If the VkPhysicalDeviceASTCDecodeFeaturesEXT structure is included in
the pNext chain of VkPhysicalDeviceFeatures2, it is filled with
values indicating whether each feature is supported.
VkPhysicalDeviceASTCDecodeFeaturesEXT can also be included in the
pNext chain of vkCreateDevice to enable features.
The VkPhysicalDeviceTransformFeedbackFeaturesEXT structure is defined
as:
// Provided by VK_EXT_transform_feedback
typedef struct VkPhysicalDeviceTransformFeedbackFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 transformFeedback;
VkBool32 geometryStreams;
} VkPhysicalDeviceTransformFeedbackFeaturesEXT;
The members of the VkPhysicalDeviceTransformFeedbackFeaturesEXT
structure describe the following features:
If the VkPhysicalDeviceTransformFeedbackFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
VkPhysicalDeviceTransformFeedbackFeaturesEXT can also be included in
the pNext chain of VkDeviceCreateInfo to enable features.
To query memory model features additionally supported call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDeviceVulkanMemoryModelFeatures structure included in the
pNext chain of its pFeatures parameter.
The VkPhysicalDeviceVulkanMemoryModelFeatures structure can also be
included in the pNext chain of a VkDeviceCreateInfo structure,
in which case it controls which additional features are enabled in the
device.
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;
or the equivalent
// Provided by VK_KHR_vulkan_memory_model
typedef VkPhysicalDeviceVulkanMemoryModelFeatures VkPhysicalDeviceVulkanMemoryModelFeaturesKHR;
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure.
-
vulkanMemoryModelindicates whether the Vulkan Memory Model is supported, as defined in Vulkan Memory Model. This also indicates whether shader modules can declare theVulkanMemoryModelcapability. -
vulkanMemoryModelDeviceScopeindicates whether the Vulkan Memory Model can useDevicescope synchronization. This also indicates whether shader modules can declare theVulkanMemoryModelDeviceScopecapability. -
vulkanMemoryModelAvailabilityVisibilityChainsindicates whether the Vulkan Memory Model can use availability and visibility chains with more than one element.
The VkPhysicalDeviceInlineUniformBlockFeaturesEXT structure is defined
as:
// Provided by VK_EXT_inline_uniform_block
typedef struct VkPhysicalDeviceInlineUniformBlockFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 inlineUniformBlock;
VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind;
} VkPhysicalDeviceInlineUniformBlockFeaturesEXT;
The members of the VkPhysicalDeviceInlineUniformBlockFeaturesEXT
structure describe the following features:
-
inlineUniformBlockindicates whether the implementation supports inline uniform block descriptors. If this feature is not enabled,VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXTmust not be used. -
descriptorBindingInlineUniformBlockUpdateAfterBindindicates 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_BITmust not be used withVK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT.
If the VkPhysicalDeviceInlineUniformBlockFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
VkPhysicalDeviceInlineUniformBlockFeaturesEXT can also be included in
the pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV structure is
defined as:
// Provided by VK_NV_representative_fragment_test
typedef struct VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 representativeFragmentTest;
} VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV;
The members of the
VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV structure
describe the following features:
-
representativeFragmentTestindicates whether the implementation supports the representative fragment test. See Representative Fragment Test.
If the VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV structure
is included in the pNext chain of VkPhysicalDeviceFeatures2, it
is filled with values indicating whether the feature is supported.
VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV can also be
included in the pNext chain of VkDeviceCreateInfo to enable the
feature.
The VkPhysicalDeviceExclusiveScissorFeaturesNV structure is defined
as:
// Provided by VK_NV_scissor_exclusive
typedef struct VkPhysicalDeviceExclusiveScissorFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 exclusiveScissor;
} VkPhysicalDeviceExclusiveScissorFeaturesNV;
The members of the VkPhysicalDeviceExclusiveScissorFeaturesNV
structure describe the following features:
See Exclusive Scissor Test for more information.
If the VkPhysicalDeviceExclusiveScissorFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceExclusiveScissorFeaturesNV can also be included in
the pNext chain of VkDeviceCreateInfo to enable the feature.
The VkPhysicalDeviceCornerSampledImageFeaturesNV structure is defined
as:
// Provided by VK_NV_corner_sampled_image
typedef struct VkPhysicalDeviceCornerSampledImageFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 cornerSampledImage;
} VkPhysicalDeviceCornerSampledImageFeaturesNV;
The members of the VkPhysicalDeviceCornerSampledImageFeaturesNV
structure describe the following features:
-
cornerSampledImagespecifies whether images can be created with a VkImageCreateInfo::flagscontainingVK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV. See Corner-Sampled Images.
If the VkPhysicalDeviceCornerSampledImageFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
VkPhysicalDeviceCornerSampledImageFeaturesNV can also be included in
the pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceComputeShaderDerivativesFeaturesNV structure is
defined as:
// Provided by VK_NV_compute_shader_derivatives
typedef struct VkPhysicalDeviceComputeShaderDerivativesFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 computeDerivativeGroupQuads;
VkBool32 computeDerivativeGroupLinear;
} VkPhysicalDeviceComputeShaderDerivativesFeaturesNV;
The members of the VkPhysicalDeviceComputeShaderDerivativesFeaturesNV
structure describe the following features:
See Quad chapter for more information.
If the VkPhysicalDeviceComputeShaderDerivativesFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
VkPhysicalDeviceComputeShaderDerivativesFeaturesNV can also be
included in the pNext chain of VkDeviceCreateInfo to enable
features.
The VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV structure is
defined as:
// Provided by VK_NV_fragment_shader_barycentric
typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 fragmentShaderBarycentric;
} VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV;
The members of the VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
structure describe the following features:
See Barycentric Interpolation for more information.
If the VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV structure
is included in the pNext chain of VkPhysicalDeviceFeatures2, it
is filled with values indicating whether the feature is supported.
VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV can also be
included in the pNext chain of VkDeviceCreateInfo to enable
features.
The VkPhysicalDeviceShaderImageFootprintFeaturesNV structure is
defined as:
// Provided by VK_NV_shader_image_footprint
typedef struct VkPhysicalDeviceShaderImageFootprintFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 imageFootprint;
} VkPhysicalDeviceShaderImageFootprintFeaturesNV;
See Texel Footprint Evaluation for more information.
If the VkPhysicalDeviceShaderImageFootprintFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
VkPhysicalDeviceShaderImageFootprintFeaturesNV can also be included
in the pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceShadingRateImageFeaturesNV structure is defined
as:
// Provided by VK_NV_shading_rate_image
typedef struct VkPhysicalDeviceShadingRateImageFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 shadingRateImage;
VkBool32 shadingRateCoarseSampleOrder;
} VkPhysicalDeviceShadingRateImageFeaturesNV;
The members of the VkPhysicalDeviceShadingRateImageFeaturesNV
structure describe the following features:
-
shadingRateImageindicates that the implementation supports the use of a shading rate image to derive an effective shading rate for fragment processing. It also indicates that the implementation supports theShadingRateNVSPIR-V execution mode. -
shadingRateCoarseSampleOrderindicates that the implementation supports a user-configurable ordering of coverage samples in fragments larger than one pixel.
See Shading Rate Image for more information.
If the VkPhysicalDeviceShadingRateImageFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceShadingRateImageFeaturesNV can also be included in
the pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceFragmentDensityMapFeaturesEXT structure is defined
as:
// Provided by VK_EXT_fragment_density_map
typedef struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 fragmentDensityMap;
VkBool32 fragmentDensityMapDynamic;
VkBool32 fragmentDensityMapNonSubsampledImages;
} VkPhysicalDeviceFragmentDensityMapFeaturesEXT;
The members of the VkPhysicalDeviceFragmentDensityMapFeaturesEXT
structure describe the following features:
-
fragmentDensityMapspecifies whether the implementation supports render passes with a fragment density map attachment. If this feature is not enabled and thepNextchain of VkRenderPassCreateInfo includes a VkRenderPassFragmentDensityMapCreateInfoEXT structure,fragmentDensityMapAttachmentmust beVK_ATTACHMENT_UNUSED. -
fragmentDensityMapDynamicspecifies whether the implementation supports dynamic fragment density map image views. If this feature is not enabled,VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXTmust not be included in VkImageViewCreateInfo::flags. -
fragmentDensityMapNonSubsampledImagesspecifies whether the implementation supports regular non-subsampled image attachments with fragment density map render passes. If this feature is not enabled, render passes with a fragment density map attachment must only have subsampled attachments bound.
If the VkPhysicalDeviceFragmentDensityMapFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
VkPhysicalDeviceFragmentDensityMapFeaturesEXT can also be included in
pNext chain of VkDeviceCreateInfo to enable the features.
The VkPhysicalDeviceFragmentDensityMap2FeaturesEXT structure is
defined as:
// Provided by VK_EXT_fragment_density_map2
typedef struct VkPhysicalDeviceFragmentDensityMap2FeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 fragmentDensityMapDeferred;
} VkPhysicalDeviceFragmentDensityMap2FeaturesEXT;
The members of the VkPhysicalDeviceFragmentDensityMap2FeaturesEXT
structure describe the following features:
If the VkPhysicalDeviceFragmentDensityMap2FeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether each feature is supported.
VkPhysicalDeviceFragmentDensityMap2FeaturesEXT can also be included
in pNext chain of VkDeviceCreateInfo to enable the features.
The VkPhysicalDeviceScalarBlockLayoutFeatures structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures {
VkStructureType sType;
void* pNext;
VkBool32 scalarBlockLayout;
} VkPhysicalDeviceScalarBlockLayoutFeatures;
or the equivalent
// Provided by VK_EXT_scalar_block_layout
typedef VkPhysicalDeviceScalarBlockLayoutFeatures VkPhysicalDeviceScalarBlockLayoutFeaturesEXT;
The members of the VkPhysicalDeviceScalarBlockLayoutFeatures structure
describe the following features:
-
scalarBlockLayoutindicates 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 VkPhysicalDeviceFeatures2, it is filled
with values indicating whether the feature is supported.
VkPhysicalDeviceScalarBlockLayoutFeatures can also be included in the
pNext chain of VkDeviceCreateInfo to enable this feature.
The VkPhysicalDeviceUniformBufferStandardLayoutFeatures structure is
defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures {
VkStructureType sType;
void* pNext;
VkBool32 uniformBufferStandardLayout;
} VkPhysicalDeviceUniformBufferStandardLayoutFeatures;
or the equivalent
// Provided by VK_KHR_uniform_buffer_standard_layout
typedef VkPhysicalDeviceUniformBufferStandardLayoutFeatures VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR;
The members of the VkPhysicalDeviceUniformBufferStandardLayoutFeatures
structure describe the following features:
-
uniformBufferStandardLayoutindicates 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 VkPhysicalDeviceFeatures2, it
is filled with values indicating whether the feature is supported.
VkPhysicalDeviceUniformBufferStandardLayoutFeatures can also be
included in the pNext chain of VkDeviceCreateInfo to enable this
feature.
The VkPhysicalDeviceDepthClipEnableFeaturesEXT structure is defined
as:
// Provided by VK_EXT_depth_clip_enable
typedef struct VkPhysicalDeviceDepthClipEnableFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 depthClipEnable;
} VkPhysicalDeviceDepthClipEnableFeaturesEXT;
The members of the VkPhysicalDeviceDepthClipEnableFeaturesEXT
structure describe the following features:
-
depthClipEnableindicates that the implementation supports setting the depth clipping operation explicitly via the VkPipelineRasterizationDepthClipStateCreateInfoEXT pipeline state. Otherwise depth clipping is only enabled when VkPipelineRasterizationStateCreateInfo::depthClampEnableis set toVK_FALSE.
If the VkPhysicalDeviceDepthClipEnableFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceDepthClipEnableFeaturesEXT can also be included in
the pNext chain of VkDeviceCreateInfo to enable this feature.
The VkPhysicalDeviceMemoryPriorityFeaturesEXT structure is defined as:
// Provided by VK_EXT_memory_priority
typedef struct VkPhysicalDeviceMemoryPriorityFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 memoryPriority;
} VkPhysicalDeviceMemoryPriorityFeaturesEXT;
The members of the VkPhysicalDeviceMemoryPriorityFeaturesEXT structure
describe the following features:
-
memoryPriorityindicates that the implementation supports memory priorities specified at memory allocation time via VkMemoryPriorityAllocateInfoEXT.
If the VkPhysicalDeviceMemoryPriorityFeaturesEXT structure is included
in the pNext chain of VkPhysicalDeviceFeatures2, it is filled
with values indicating whether the feature is supported.
VkPhysicalDeviceMemoryPriorityFeaturesEXT can also be included in the
pNext chain of VkDeviceCreateInfo to enable 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;
or the equivalent
// Provided by VK_KHR_buffer_device_address
typedef VkPhysicalDeviceBufferDeviceAddressFeatures VkPhysicalDeviceBufferDeviceAddressFeaturesKHR;
The members of the VkPhysicalDeviceBufferDeviceAddressFeatures
structure describe the following features:
-
bufferDeviceAddressindicates that the implementation supports accessing buffer memory in shaders as storage buffers via an address queried from vkGetBufferDeviceAddress. -
bufferDeviceAddressCaptureReplayindicates that the implementation supports saving and reusing buffer and device addresses, e.g. for trace capture and replay. -
bufferDeviceAddressMultiDeviceindicates that the implementation supports thebufferDeviceAddressandrayTracingfeatures for logical devices created with multiple physical devices. If this feature is not supported, buffer and acceleration structure 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 VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceBufferDeviceAddressFeatures can also be included in
the pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceBufferDeviceAddressFeaturesEXT structure is
defined as:
// Provided by VK_EXT_buffer_device_address
typedef struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 bufferDeviceAddress;
VkBool32 bufferDeviceAddressCaptureReplay;
VkBool32 bufferDeviceAddressMultiDevice;
} VkPhysicalDeviceBufferDeviceAddressFeaturesEXT;
The members of the VkPhysicalDeviceBufferDeviceAddressFeaturesEXT
structure describe the following features:
-
bufferDeviceAddressindicates that the implementation supports accessing buffer memory in shaders as storage buffers via an address queried from vkGetBufferDeviceAddressEXT. -
bufferDeviceAddressCaptureReplayindicates that the implementation supports saving and reusing buffer addresses, e.g. for trace capture and replay. -
bufferDeviceAddressMultiDeviceindicates that the implementation supports thebufferDeviceAddressfeature 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.
If the VkPhysicalDeviceBufferDeviceAddressFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceBufferDeviceAddressFeaturesEXT can also be included
in the pNext chain of VkDeviceCreateInfo to enable features.
|
Note
The |
The VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
structure is defined as:
// Provided by VK_NV_dedicated_allocation_image_aliasing
typedef struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 dedicatedAllocationImageAliasing;
} VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
The members of the
VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV structure
describe the following features:
If the VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
structure is included in the pNext chain of
VkPhysicalDeviceFeatures2, it is filled with values indicating whether
each feature is supported.
VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV can also
be included in the pNext chain of VkDeviceCreateInfo to enable
features.
The VkPhysicalDeviceImagelessFramebufferFeatures structure is defined
as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceImagelessFramebufferFeatures {
VkStructureType sType;
void* pNext;
VkBool32 imagelessFramebuffer;
} VkPhysicalDeviceImagelessFramebufferFeatures;
or the equivalent
// Provided by VK_KHR_imageless_framebuffer
typedef VkPhysicalDeviceImagelessFramebufferFeatures VkPhysicalDeviceImagelessFramebufferFeaturesKHR;
The members of the VkPhysicalDeviceImagelessFramebufferFeatures
structure describe the following features:
-
imagelessFramebufferindicates 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 VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceImagelessFramebufferFeatures can also be included in
the pNext chain of VkDeviceCreateInfo to enable this feature.
The VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT structure is
defined as:
// Provided by VK_EXT_fragment_shader_interlock
typedef struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 fragmentShaderSampleInterlock;
VkBool32 fragmentShaderPixelInterlock;
VkBool32 fragmentShaderShadingRateInterlock;
} VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT;
The members of the VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT
structure describe the following features:
-
fragmentShaderSampleInterlockindicates that the implementation supports theFragmentShaderSampleInterlockEXTSPIR-V capability. -
fragmentShaderPixelInterlockindicates that the implementation supports theFragmentShaderPixelInterlockEXTSPIR-V capability. -
fragmentShaderShadingRateInterlockindicates that the implementation supports theFragmentShaderShadingRateInterlockEXTSPIR-V capability.
If the VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT can also be
included in the pNext chain of VkDeviceCreateInfo to enable
features.
The VkPhysicalDeviceCooperativeMatrixFeaturesNV structure is defined
as:
// Provided by VK_NV_cooperative_matrix
typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 cooperativeMatrix;
VkBool32 cooperativeMatrixRobustBufferAccess;
} VkPhysicalDeviceCooperativeMatrixFeaturesNV;
The members of the VkPhysicalDeviceCooperativeMatrixFeaturesNV
structure describe the following features:
If the VkPhysicalDeviceCooperativeMatrixFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceCooperativeMatrixFeaturesNV can also be included in
the pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceYcbcrImageArraysFeaturesEXT structure is defined
as:
// Provided by VK_EXT_ycbcr_image_arrays
typedef struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 ycbcrImageArrays;
} VkPhysicalDeviceYcbcrImageArraysFeaturesEXT;
The members of the VkPhysicalDeviceYcbcrImageArraysFeaturesEXT
structure describe the following features:
-
ycbcrImageArraysindicates that the implementation supports creating images with a format that requires Y′CBCR conversion and has multiple array layers.
If the VkPhysicalDeviceYcbcrImageArraysFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceYcbcrImageArraysFeaturesEXT can also be included in
the pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures structure is
defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures {
VkStructureType sType;
void* pNext;
VkBool32 shaderSubgroupExtendedTypes;
} VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures;
or the equivalent
// Provided by VK_KHR_shader_subgroup_extended_types
typedef VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR;
The members of the VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
structure describe the following features:
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure.
-
shaderSubgroupExtendedTypesis a boolean that specifies 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 scopeif the implementation supports the types.
If the VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures structure
is included in the pNext chain of VkPhysicalDeviceFeatures2, it
is filled with values indicating whether each feature is supported.
VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures can also be
included in the pNext chain of VkDeviceCreateInfo to enable
features.
The VkPhysicalDeviceHostQueryResetFeatures structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceHostQueryResetFeatures {
VkStructureType sType;
void* pNext;
VkBool32 hostQueryReset;
} VkPhysicalDeviceHostQueryResetFeatures;
or the equivalent
// Provided by VK_EXT_host_query_reset
typedef VkPhysicalDeviceHostQueryResetFeatures VkPhysicalDeviceHostQueryResetFeaturesEXT;
The members of the VkPhysicalDeviceHostQueryResetFeatures structure
describe the following features:
-
hostQueryResetindicates that the implementation supports resetting queries from the host with vkResetQueryPool.
If the VkPhysicalDeviceHostQueryResetFeatures structure is included in
the pNext chain of VkPhysicalDeviceFeatures2, it is filled with
values indicating whether the feature is supported.
VkPhysicalDeviceHostQueryResetFeatures can also be included in the
pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL structure is
defined as:
// Provided by VK_INTEL_shader_integer_functions2
typedef struct VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL {
VkStructureType sType;
void* pNext;
VkBool32 shaderIntegerFunctions2;
} VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL;
The members of the
VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL structure
describe the following features:
If the VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL structure
is included in the pNext chain of VkPhysicalDeviceFeatures2, it
is filled with values indicating whether the feature is supported.
VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL can also be
included in the pNext chain of VkDeviceCreateInfo to enable
features.
The VkPhysicalDeviceCoverageReductionModeFeaturesNV structure is
defined as:
// Provided by VK_NV_coverage_reduction_mode
typedef struct VkPhysicalDeviceCoverageReductionModeFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 coverageReductionMode;
} VkPhysicalDeviceCoverageReductionModeFeaturesNV;
The members of the VkPhysicalDeviceCoverageReductionModeFeaturesNV
structure describe the following features:
-
coverageReductionModeindicates whether the implementation supports coverage reduction modes. See Coverage Reduction.
If the VkPhysicalDeviceCoverageReductionModeFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceCoverageReductionModeFeaturesNV can also be included
in the pNext chain of VkDeviceCreateInfo to enable the feature.
The VkPhysicalDeviceTimelineSemaphoreFeatures structure is defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures {
VkStructureType sType;
void* pNext;
VkBool32 timelineSemaphore;
} VkPhysicalDeviceTimelineSemaphoreFeatures;
or the equivalent
// Provided by VK_KHR_timeline_semaphore
typedef VkPhysicalDeviceTimelineSemaphoreFeatures VkPhysicalDeviceTimelineSemaphoreFeaturesKHR;
The members of the VkPhysicalDeviceTimelineSemaphoreFeatures structure
describe the following features:
-
timelineSemaphoreindicates whether semaphores created with a VkSemaphoreType ofVK_SEMAPHORE_TYPE_TIMELINEare supported.
If the VkPhysicalDeviceTimelineSemaphoreFeatures structure is included
in the pNext chain of VkPhysicalDeviceFeatures2, it is filled
with values indicating whether each feature is supported.
VkPhysicalDeviceTimelineSemaphoreFeatures can also be included in the
pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceIndexTypeUint8FeaturesEXT structure is defined as:
// Provided by VK_EXT_index_type_uint8
typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 indexTypeUint8;
} VkPhysicalDeviceIndexTypeUint8FeaturesEXT;
The members of the VkPhysicalDeviceIndexTypeUint8FeaturesEXT structure
describe the following features:
-
indexTypeUint8indicates thatVK_INDEX_TYPE_UINT8_EXTcan be used with vkCmdBindIndexBuffer.
If the VkPhysicalDeviceIndexTypeUint8FeaturesEXT structure is included
in the pNext chain of VkPhysicalDeviceFeatures2, it is filled
with values indicating whether the feature is supported.
VkPhysicalDeviceIndexTypeUint8FeaturesEXT can also be included in the
pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceShaderSMBuiltinsFeaturesNV structure is defined
as:
// Provided by VK_NV_shader_sm_builtins
typedef struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 shaderSMBuiltins;
} VkPhysicalDeviceShaderSMBuiltinsFeaturesNV;
The members of the VkPhysicalDeviceShaderSMBuiltinsFeaturesNV
structure describe the following features:
If the VkPhysicalDeviceShaderSMBuiltinsFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceShaderSMBuiltinsFeaturesNV can also be included in
the pNext chain of VkDeviceCreateInfo to enable the feature.
The VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures structure is
defined as:
// Provided by VK_VERSION_1_2
typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures {
VkStructureType sType;
void* pNext;
VkBool32 separateDepthStencilLayouts;
} VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures;
or the equivalent
// Provided by VK_KHR_separate_depth_stencil_layouts
typedef VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR;
The members of the VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures
structure describe the following features:
-
separateDepthStencilLayoutsindicates whether the implementation supports aVkImageMemoryBarrierfor a depth/stencil image with only one ofVK_IMAGE_ASPECT_DEPTH_BITorVK_IMAGE_ASPECT_STENCIL_BITset, 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_OPTIMALcan be used.
If the VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures structure
is included in the pNext chain of VkPhysicalDeviceFeatures2, it
is filled with values indicating whether the feature is supported.
VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures can also be
included in the pNext chain of VkDeviceCreateInfo to enable the
feature.
The VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR structure
is defined as:
// Provided by VK_KHR_pipeline_executable_properties
typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR {
VkStructureType sType;
void* pNext;
VkBool32 pipelineExecutableInfo;
} VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR;
The members of the
VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR structure
describe the following features:
If the VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR
structure is included in the pNext chain of
VkPhysicalDeviceFeatures2, it is filled with values indicating whether
the feature is supported.
VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR can also be
included in the pNext chain of VkDeviceCreateInfo to enable
features.
The VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
structure is defined as:
// Provided by VK_EXT_shader_demote_to_helper_invocation
typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 shaderDemoteToHelperInvocation;
} VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
The members of the
VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT structure
describe the following features:
If the VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
structure is included in the pNext chain of
VkPhysicalDeviceFeatures2, it is filled with values indicating whether
the feature is supported.
VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT can also be
included in the pNext chain of VkDeviceCreateInfo to enable the
feature.
The VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT structure is
defined as:
// Provided by VK_EXT_texel_buffer_alignment
typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 texelBufferAlignment;
} VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT;
The members of the VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
structure describe the following features:
-
texelBufferAlignmentindicates whether the implementation uses more specific alignment requirements advertised in VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT rather than VkPhysicalDeviceLimits::minTexelBufferOffsetAlignment.
If the VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT can also be included
in the pNext chain of VkDeviceCreateInfo to enable the feature.
The VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT structure is
defined as:
// Provided by VK_EXT_texture_compression_astc_hdr
typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 textureCompressionASTC_HDR;
} VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT;
The members of the
VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT structure
describe the following features:
-
textureCompressionASTC_HDRindicates 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_BITandVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BITfeatures must be supported inoptimalTilingFeaturesfor the following formats:-
VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT -
VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT
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 VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT structure
is included in the pNext chain of VkPhysicalDeviceFeatures2, it
is filled with values indicating whether each feature is supported.
VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT can also be
included in the pNext chain of vkCreateDevice to enable
features.
The VkPhysicalDeviceLineRasterizationFeaturesEXT structure is defined
as:
// Provided by VK_EXT_line_rasterization
typedef struct VkPhysicalDeviceLineRasterizationFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 rectangularLines;
VkBool32 bresenhamLines;
VkBool32 smoothLines;
VkBool32 stippledRectangularLines;
VkBool32 stippledBresenhamLines;
VkBool32 stippledSmoothLines;
} VkPhysicalDeviceLineRasterizationFeaturesEXT;
The members of the VkPhysicalDeviceLineRasterizationFeaturesEXT
structure describe the following features:
-
rectangularLinesindicates whether the implementation supports rectangular line rasterization. -
bresenhamLinesindicates whether the implementation supports Bresenham-style line rasterization. -
smoothLinesindicates whether the implementation supports smooth line rasterization. -
stippledRectangularLinesindicates whether the implementation supports stippled line rasterization withVK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXTlines, or withVK_LINE_RASTERIZATION_MODE_DEFAULT_EXTlines if VkPhysicalDeviceLimits::strictLinesisVK_TRUE. -
stippledBresenhamLinesindicates whether the implementation supports stippled line rasterization withVK_LINE_RASTERIZATION_MODE_BRESENHAM_EXTlines. -
stippledSmoothLinesindicates whether the implementation supports stippled line rasterization withVK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXTlines.
If the VkPhysicalDeviceLineRasterizationFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceLineRasterizationFeaturesEXT can also be included in
the pNext chain of VkDeviceCreateInfo to enable the feature.
The VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure is
defined as:
// Provided by VK_EXT_subgroup_size_control
typedef struct VkPhysicalDeviceSubgroupSizeControlFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 subgroupSizeControl;
VkBool32 computeFullSubgroups;
} VkPhysicalDeviceSubgroupSizeControlFeaturesEXT;
The members of the VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
structure describe the following features:
-
subgroupSizeControlindicates whether the implementation supports controlling shader subgroup sizes via theVK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXTflag and the VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure. -
computeFullSubgroupsindicates whether the implementation supports requiring full subgroups in compute shaders via theVK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXTflag.
If the VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT can also be included
in the pNext chain of VkDeviceCreateInfo to enable the feature.
|
Note
The |
The VkPhysicalDeviceCoherentMemoryFeaturesAMD structure is defined as:
// Provided by VK_AMD_device_coherent_memory
typedef struct VkPhysicalDeviceCoherentMemoryFeaturesAMD {
VkStructureType sType;
void* pNext;
VkBool32 deviceCoherentMemory;
} VkPhysicalDeviceCoherentMemoryFeaturesAMD;
The members of the VkPhysicalDeviceCoherentMemoryFeaturesAMD structure
describe the following features:
-
deviceCoherentMemoryindicates that the implementation supports device coherent memory.
The VkPhysicalDeviceRayTracingFeaturesKHR structure is defined as:
// Provided by VK_KHR_ray_tracing
typedef struct VkPhysicalDeviceRayTracingFeaturesKHR {
VkStructureType sType;
void* pNext;
VkBool32 rayTracing;
VkBool32 rayTracingShaderGroupHandleCaptureReplay;
VkBool32 rayTracingShaderGroupHandleCaptureReplayMixed;
VkBool32 rayTracingAccelerationStructureCaptureReplay;
VkBool32 rayTracingIndirectTraceRays;
VkBool32 rayTracingIndirectAccelerationStructureBuild;
VkBool32 rayTracingHostAccelerationStructureCommands;
VkBool32 rayQuery;
VkBool32 rayTracingPrimitiveCulling;
} VkPhysicalDeviceRayTracingFeaturesKHR;
The members of the VkPhysicalDeviceRayTracingFeaturesKHR structure
describe the following features:
-
rayTracingindicates whether the implementation supports ray tracing functionality. See Ray Tracing. -
rayTracingShaderGroupHandleCaptureReplayindicates whether the implementation supports saving and reusing shader group handles, e.g. for trace capture and replay. -
rayTracingShaderGroupHandleCaptureReplayMixedindicates whether the implementation supports reuse of shader group handles being arbitrarily mixed with creation of non-reused shader group handles. If this isVK_FALSE, all reused shader group handles must be specified before any non-reused handles may be created. -
rayTracingAccelerationStructureCaptureReplayindicates whether the implementation supports saving and reusing acceleration structure device addresses, e.g. for trace capture and replay. -
rayTracingIndirectTraceRaysindicates whether the implementation supports indirect trace ray commands, e.g. vkCmdTraceRaysIndirectKHR. -
rayTracingIndirectAccelerationStructureBuildindicates whether the implementation supports indirect acceleration structure build commands, e.g. vkCmdBuildAccelerationStructureIndirectKHR. -
rayTracingHostAccelerationStructureCommandsindicates whether the implementation supports host side acceleration structure commands, e.g. vkBuildAccelerationStructureKHR, vkCopyAccelerationStructureKHR, vkCopyAccelerationStructureToMemoryKHR, vkCopyMemoryToAccelerationStructureKHR, vkWriteAccelerationStructuresPropertiesKHR. -
rayQueryindicates whether the implementation supports ray query (OpRayQueryProceedKHR) functionality. -
rayTracingPrimitiveCullingindicates whether the implementation supports primitive culling during ray traversal.
If the VkPhysicalDeviceRayTracingFeaturesKHR structure is included in
the pNext chain of VkPhysicalDeviceFeatures2, it is filled with
values indicating whether the feature is supported.
VkPhysicalDeviceRayTracingFeaturesKHR can also be used in the
pNext chain of VkDeviceCreateInfo to enable the features.
The VkPhysicalDeviceExtendedDynamicStateFeaturesEXT structure is
defined as:
// Provided by VK_EXT_extended_dynamic_state
typedef struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 extendedDynamicState;
} VkPhysicalDeviceExtendedDynamicStateFeaturesEXT;
The members of the VkPhysicalDeviceExtendedDynamicStateFeaturesEXT
structure describe the following features:
-
extendedDynamicStateindicates that the implementation supports the following dynamic states:-
VK_DYNAMIC_STATE_CULL_MODE_EXT -
VK_DYNAMIC_STATE_FRONT_FACE_EXT -
VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT -
VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT -
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT -
VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT -
VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT -
VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT -
VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT -
VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT -
VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT -
VK_DYNAMIC_STATE_STENCIL_OP_EXT
-
If the VkPhysicalDeviceExtendedDynamicStateFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT can also be used in
the pNext chain of VkDeviceCreateInfo to enable features.
The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV structure is
defined as:
// Provided by VK_NV_device_generated_commands
typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 deviceGeneratedCommands;
} VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV;
The members of the VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV
structure describe the following features:
-
deviceGeneratedCommandsindicates whether the implementation supports functionality to generate commands on the device. See Device-Generated Commands.
If the VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV can also be used in
the pNext chain of VkDeviceCreateInfo to enable the features.
The VkPhysicalDeviceDiagnosticsConfigFeaturesNV structure is defined
as:
// Provided by VK_NV_device_diagnostics_config
typedef struct VkPhysicalDeviceDiagnosticsConfigFeaturesNV {
VkStructureType sType;
void* pNext;
VkBool32 diagnosticsConfig;
} VkPhysicalDeviceDiagnosticsConfigFeaturesNV;
The members of the VkPhysicalDeviceDiagnosticsConfigFeaturesNV
structure describe the following features:
If the VkPhysicalDeviceDiagnosticsConfigFeaturesNV structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
VkPhysicalDeviceDiagnosticsConfigFeaturesNV can also be used in the
pNext chain of VkDeviceCreateInfo to enable the feature.
The VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT structure
is defined as:
// Provided by VK_EXT_pipeline_creation_cache_control
typedef struct VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 pipelineCreationCacheControl;
} VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT;
The members of the
VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT structure
describe the following features:
-
pipelineCreationCacheControlindicates that the implementation supports:-
The following can be used in
Vk*PipelineCreateInfo::flags:-
VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT -
VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
-
-
The following can be used in VkPipelineCacheCreateInfo::
flags:-
VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT
-
-
If the VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT
structure is included in the pNext chain of
VkPhysicalDeviceFeatures2, it is filled with values indicating whether
the feature is supported.
VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT can also be
used in the pNext chain of VkDeviceCreateInfo to enable
features.
The VkPhysicalDevicePrivateDataFeaturesEXT structure is defined as:
// Provided by VK_EXT_private_data
typedef struct VkPhysicalDevicePrivateDataFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 privateData;
} VkPhysicalDevicePrivateDataFeaturesEXT;
The members of the VkPhysicalDevicePrivateDataFeaturesEXT structure
describe the following features:
-
privateDataindicates whether the implementation supports private data. See Private Data.
If the VkPhysicalDevicePrivateDataFeaturesEXT structure is included in
the pNext chain of VkPhysicalDeviceFeatures2, it is filled with
values indicating whether the feature is supported.
VkPhysicalDevicePrivateDataFeaturesEXT can also be used in the
pNext chain of VkDeviceCreateInfo to enable the features.
The VkPhysicalDeviceRobustness2FeaturesEXT structure is defined as:
// Provided by VK_EXT_robustness2
typedef struct VkPhysicalDeviceRobustness2FeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 robustBufferAccess2;
VkBool32 robustImageAccess2;
VkBool32 nullDescriptor;
} VkPhysicalDeviceRobustness2FeaturesEXT;
The members of the VkPhysicalDeviceRobustness2FeaturesEXT structure
describe the following features:
-
robustBufferAccess2indicates whether buffer accesses are tightly bounds-checked against the range of the descriptor. Uniform buffers must be bounds-checked to the range of the descriptor, where the range is rounded up to a multiple of robustUniformBufferAccessSizeAlignment. Storage buffers must be bounds-checked to the range of the descriptor, where the range is rounded up to a multiple of robustStorageBufferAccessSizeAlignment. Out of bounds buffer loads will return zero values, and formatted loads will have (0,0,1) values inserted for missing G, B, or A components based on the format. -
robustImageAccess2indicates whether image accesses are tightly bounds-checked against the dimensions of the image view. Out of bounds image loads will return zero values, with (0,0,1) values inserted for missing G, B, or A components based on the format. -
nullDescriptorindicates whether descriptors can be written with a VK_NULL_HANDLE resource or view, which are considered valid to access and act as if the descriptor were bound to nothing.
If the VkPhysicalDeviceRobustness2FeaturesEXT structure is included in
the pNext chain of VkPhysicalDeviceFeatures2, it is filled with
values indicating whether each feature is supported.
The VkPhysicalDeviceImageRobustnessFeaturesEXT structure is defined
as:
// Provided by VK_EXT_image_robustness
typedef struct VkPhysicalDeviceImageRobustnessFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 robustImageAccess;
} VkPhysicalDeviceImageRobustnessFeaturesEXT;
The members of the VkPhysicalDeviceImageRobustnessFeaturesEXT
structure describe the following features:
-
robustImageAccessindicates 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 VkPhysicalDeviceImageRobustnessFeaturesEXT structure is
included in the pNext chain of VkPhysicalDeviceFeatures2, it is
filled with values indicating whether the feature is supported.
The VkPhysicalDeviceCustomBorderColorFeaturesEXT structure is defined
as:
// Provided by VK_EXT_custom_border_color
typedef struct VkPhysicalDeviceCustomBorderColorFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 customBorderColors;
VkBool32 customBorderColorWithoutFormat;
} VkPhysicalDeviceCustomBorderColorFeaturesEXT;
The members of the VkPhysicalDeviceCustomBorderColorFeaturesEXT
structure describe the following features:
-
customBorderColorsindicates that the implementation supports providing aborderColorvalue with one of the following values at sampler creation time:-
VK_BORDER_COLOR_FLOAT_CUSTOM_EXT -
VK_BORDER_COLOR_INT_CUSTOM_EXT
-
-
customBorderColorWithoutFormatindicates that explicit formats are not required for custom border colors and the value of theformatmember of the VkSamplerCustomBorderColorCreateInfoEXT structure may beVK_FORMAT_UNDEFINED. If this feature bit is not set, applications must provide the VkFormat of the image view(s) being sampled by this sampler in theformatmember of the VkSamplerCustomBorderColorCreateInfoEXT structure.
To query supported performance counter query pool features, call
vkGetPhysicalDeviceFeatures2 with a
VkPhysicalDevicePerformanceQueryFeaturesKHR structure included in the
pNext chain of its pFeatures parameter.
The VkPhysicalDevicePerformanceQueryFeaturesKHR structure is defined
as:
// Provided by VK_KHR_performance_query
typedef struct VkPhysicalDevicePerformanceQueryFeaturesKHR {
VkStructureType sType;
void* pNext;
VkBool32 performanceCounterQueryPools;
VkBool32 performanceCounterMultipleQueryPools;
} VkPhysicalDevicePerformanceQueryFeaturesKHR;
-
sTypeis the type of this structure. -
pNextisNULLor a pointer to a structure extending this structure. -
performanceCounterQueryPoolsindicates whether the implementation supports performance counter query pools. -
performanceCounterMultipleQueryPoolsindicates whether the implementation supports using multiple performance query pools in a primary command buffer and secondary command buffers executed within it.
38.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 theVK_KHR_uniform_buffer_standard_layoutextension is supported. -
variablePointersStorageBuffer, if theVK_KHR_variable_pointersextension is supported. -
storageBuffer8BitAccess, if theVK_KHR_8bit_storageextension is supported. -
If the descriptorIndexing feature is supported, or if the
VK_EXT_descriptor_indexingextension is supported: -
inlineUniformBlock, if theVK_EXT_inline_uniform_blockextension is supported. -
descriptorBindingInlineUniformBlockUpdateAfterBind, if theVK_EXT_inline_uniform_blockextension is supported; and if thedescriptorIndexingfeature is supported, or theVK_EXT_descriptor_indexingextension is supported. -
scalarBlockLayout, if theVK_EXT_scalar_block_layoutextension is supported. -
subgroupBroadcastDynamicId, if Vulkan 1.2 is supported. -
samplerMirrorClampToEdge, if theVK_KHR_sampler_mirror_clamp_to_edgeextension is supported. -
drawIndirectCount, if theVK_KHR_draw_indirect_countextension is supported. -
samplerFilterMinmax, if theVK_EXT_sampler_filter_minmaxextension is supported. -
shaderOutputViewportIndex, if theVK_EXT_shader_viewport_index_layerextension is supported. -
shaderOutputLayer, if theVK_EXT_shader_viewport_index_layerextension is supported. -
subgroupSizeControl, if theVK_EXT_subgroup_size_controlextension is supported. -
computeFullSubgroups, if theVK_EXT_subgroup_size_controlextension is supported. -
imagelessFramebuffer, if Vulkan 1.2 or theVK_KHR_imageless_framebufferextension is supported. -
separateDepthStencilLayouts, if Vulkan 1.2 or theVK_KHR_separate_depth_stencil_layoutsextension is supported. -
hostQueryReset, if Vulkan 1.2 or theVK_EXT_host_query_resetextension is supported. -
timelineSemaphore, if Vulkan 1.2 or theVK_KHR_timeline_semaphoreextension is supported. -
If the
VK_KHR_ray_tracingextension is supported:-
All the features required by the descriptorIndexing feature if Vulkan 1.2 is supported, or the
VK_EXT_descriptor_indexingextension. -
bufferDeviceAddressfrom Vulkan 1.2 or theVK_KHR_buffer_device_addressextension. -
rayTracingPrimitiveCulling, ifrayQueryis supported.
-
pipelineCreationCacheControl, if theVK_EXT_pipeline_creation_cache_controlextension is supported. -
shaderSubgroupExtendedTypes, if Vulkan 1.2 or theVK_KHR_shader_subgroup_extended_typesextension is supported. -
samplerYcbcrConversion, if theVK_KHR_sampler_ycbcr_conversionextension is supported. -
pipelineExecutableInfo, if theVK_KHR_pipeline_executable_propertiesextension is supported. -
textureCompressionASTC_HDR, if theVK_EXT_texture_compression_astc_hdrextension is supported. -
depthClipEnable, if theVK_EXT_depth_clip_enableextension is supported. -
memoryPriority, if theVK_EXT_memory_priorityextension is supported. -
ycbcrImageArrays, if theVK_EXT_ycbcr_image_arraysextension is supported. -
indexTypeUint8, if theVK_EXT_index_type_uint8extension is supported. -
shaderDemoteToHelperInvocation, if theVK_EXT_shader_demote_to_helper_invocationextension is supported. -
texelBufferAlignment, if theVK_EXT_texel_buffer_alignmentextension is supported. -
vulkanMemoryModel, if theVK_KHR_vulkan_memory_modelextension is supported. -
bufferDeviceAddress, if theVK_KHR_buffer_device_addressextension is supported. -
performanceCounterQueryPools, if theVK_KHR_performance_queryextension is supported. -
transformFeedback, if theVK_EXT_transform_feedbackextension is supported. -
conditionalRendering, if theVK_EXT_conditional_renderingextension is supported. -
vertexAttributeInstanceRateDivisor, if theVK_EXT_vertex_attribute_divisorextension is supported. -
fragmentDensityMap, if theVK_EXT_fragment_density_mapextension is supported. -
shaderSubgroupClock, if theVK_KHR_shader_clockextension is supported. -
shaderBufferInt64Atomics, if theVK_KHR_shader_atomic_int64extension is supported. -
shaderFloat16orshaderInt8, if theVK_KHR_shader_float16_int8extension is supported. -
fragmentShaderSampleInterlockorfragmentShaderPixelInterlockorfragmentShaderShadingRateInterlock, if theVK_EXT_fragment_shader_interlockextension is supported. -
rectangularLinesorbresenhamLinesorsmoothLinesorstippledRectangularLinesorstippledBresenhamLinesorstippledSmoothLines, if theVK_EXT_line_rasterizationextension is supported. -
storageBuffer16BitAccess, if theVK_KHR_16bit_storageextension is supported. -
robustImageAccess, if theVK_EXT_image_robustnessextension is supported.
All other features defined in the Specification are optional.