C Specification
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;
Members
This structure describes the following features:
-
robustBufferAccessenables https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#shaders-robust-buffer-access guarantees for shader buffer accesses. -
fullDrawIndexUint32specifies the full 32-bit range of indices is supported for indexed draw calls when using a VkIndexType of VK_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 is VK_INDEX_TYPE_UINT32). If this feature is supported,maxDrawIndexedIndexValuemust be 232-1; otherwise it must be no smaller than 224-1. SeemaxDrawIndexedIndexValue. -
imageCubeArrayspecifies whether image views with a VkImageViewType of VK_IMAGE_VIEW_TYPE_CUBE_ARRAY can 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, the VK_SHADER_STAGE_GEOMETRY_BIT and VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT enum 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, the VK_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, and VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO enum 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 VK_FALSE and 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, the VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, and VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA enum values must not be used as source or destination blending factors. See https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#framebuffer-dsb. -
logicOpspecifies whether logic operations are supported. If this feature is not enabled, thelogicOpEnablemember of the VkPipelineColorBlendStateCreateInfo structure must be VK_FALSE, and thelogicOpmember is ignored. -
multiDrawIndirectspecifies whether multiple draw indirect is supported. If this feature is not enabled, thedrawCountparameter to the vkCmdDrawIndirect and vkCmdDrawIndexedIndirect commands must be 0 or 1. ThemaxDrawIndirectCountmember of theVkPhysicalDeviceLimitsstructure must also be 1 if this feature is not supported. SeemaxDrawIndirectCount. -
drawIndirectFirstInstancespecifies whether indirect drawing calls support thefirstInstanceparameter. If this feature is not enabled, thefirstInstancemember of allVkDrawIndirectCommandandVkDrawIndexedIndirectCommandstructures that are provided to the vkCmdDrawIndirect and vkCmdDrawIndexedIndirect commands must be 0. -
depthClampspecifies whether depth clamping is supported. If this feature is not enabled, thedepthClampEnablemember of the VkPipelineRasterizationStateCreateInfo structure must be VK_FALSE. Otherwise, settingdepthClampEnableto VK_TRUE will enable depth clamping. -
depthBiasClampspecifies whether depth bias clamping is supported. If this feature is not enabled, thedepthBiasClampmember of the VkPipelineRasterizationStateCreateInfo structure must be 0.0 unless the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state is enabled, in which case thedepthBiasClampparameter to vkCmdSetDepthBias must be 0.0. -
fillModeNonSolidspecifies whether point and wireframe fill modes are supported. If this feature is not enabled, the VK_POLYGON_MODE_POINT and VK_POLYGON_MODE_LINE enum 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 VK_FALSE unless the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state is enabled, in which case thedepthBoundsTestEnableparameter to vkCmdSetDepthBoundsTestEnable must be VK_FALSE. WhendepthBoundsTestEnableis VK_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 1.0 unless the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state is enabled, in which case thelineWidthparameter to vkCmdSetLineWidth must be 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 fragment shader color output in the Multisample Coverage fragment operation. If this feature is not enabled, then thealphaToOneEnablemember of the VkPipelineMultisampleStateCreateInfo structure must be VK_FALSE. Otherwise settingalphaToOneEnableto VK_TRUE will 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 1. -
The
firstViewportandviewportCountparameters to the vkCmdSetViewport command must be 0 and 1, respectively. -
The
firstScissorandscissorCountparameters to the vkCmdSetScissor command must be 0 and 1, respectively. -
The
exclusiveScissorCountmember of the VkPipelineViewportExclusiveScissorStateCreateInfoNV structure must be 0 or 1. -
The
firstExclusiveScissorandexclusiveScissorCountparameters to the vkCmdSetExclusiveScissorNV command must be 0 and 1, respectively.
-
-
samplerAnisotropyspecifies whether anisotropic filtering is supported. If this feature is not enabled, theanisotropyEnablemember of the VkSamplerCreateInfo structure must be VK_FALSE. -
textureCompressionETC2specifies whether all of the ETC2 and EAC compressed texture formats are supported. If this feature is enabled, then the VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, VK_FORMAT_FEATURE_BLIT_SRC_BIT and VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must be supported inoptimalTilingFeaturesfor the following formats:-
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.
Description
-
textureCompressionASTC_LDRspecifies whether all of the ASTC LDR compressed texture formats are supported. If this feature is enabled, then the VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, VK_FORMAT_FEATURE_BLIT_SRC_BIT and VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must be supported inoptimalTilingFeaturesfor the following formats:-
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 the VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, VK_FORMAT_FEATURE_BLIT_SRC_BIT and VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must be supported inoptimalTilingFeaturesfor the following formats:-
To query for additional properties, or if the feature is not enabled, vkGetPhysicalDeviceFormatProperties and vkGetPhysicalDeviceImageFormatProperties can be used to check for supported properties of individual formats as normal.
-
occlusionQueryPrecisespecifies whether occlusion queries returning actual sample counts are supported. Occlusion queries are created in aVkQueryPoolby specifying thequeryTypeof VK_QUERY_TYPE_OCCLUSION in the VkQueryPoolCreateInfo structure which is passed to vkCreateQueryPool. If this feature is enabled, queries of this type can enable VK_QUERY_CONTROL_PRECISE_BIT in theflagsparameter to vkCmdBeginQuery. If this feature is not supported, the implementation supports only boolean occlusion queries. When any samples are passed, boolean queries will return a non-zero result value, otherwise a result value of zero is returned. When this feature is enabled and VK_QUERY_CONTROL_PRECISE_BIT is 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 type VK_QUERY_TYPE_PIPELINE_STATISTICS cannot 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 buffer, 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 buffer, 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 the VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT must be supported inoptimalTilingFeaturesfor the following formats:-
Note
shaderStorageImageExtendedFormatsfeature 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, and VK_FORMAT_R32G32_SFLOAT from
StorageImageExtendedFormatsSPIR-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 the VK_IMAGE_USAGE_STORAGE_BIT usage flag set must be created withsamplesequal to VK_SAMPLE_COUNT_1_BIT. This also specifies whether shader modules can declare theStorageImageMultisampleandImageMSArraycapabilities. -
shaderStorageImageReadWithoutFormatspecifies whether storage images and storage texel buffers require a format qualifier to be specified when reading.shaderStorageImageReadWithoutFormatapplies only to formats listed in the storage without format list. -
shaderStorageImageWriteWithoutFormatspecifies whether storage images and storage texel buffers require a format qualifier to be specified when writing.shaderStorageImageWriteWithoutFormatapplies only to formats listed in the storage without format list. -
shaderUniformBufferArrayDynamicIndexingspecifies whether arrays of uniform buffers can be indexed by integer expressions that are dynamically uniform within either the subgroup or the invocation group in shader code. If this feature is not enabled, resources with a descriptor type of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also specifies whether shader modules can declare theUniformBufferArrayDynamicIndexingcapability. -
shaderSampledImageArrayDynamicIndexingspecifies whether arrays of samplers or sampled images can be indexed by integer expressions that are dynamically uniform within either the subgroup or the invocation group in shader code. If this feature is not enabled, resources with a descriptor type of VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also specifies whether shader modules can declare theSampledImageArrayDynamicIndexingcapability. -
shaderStorageBufferArrayDynamicIndexingspecifies whether arrays of storage buffers can be indexed by integer expressions that are dynamically uniform within either the subgroup or the invocation group in shader code. If this feature is not enabled, resources with a descriptor type of VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also specifies whether shader modules can declare theStorageBufferArrayDynamicIndexingcapability. -
shaderStorageImageArrayDynamicIndexingspecifies whether arrays of storage images can be indexed by integer expressions that are dynamically uniform within either the subgroup or the invocation group in shader code. If this feature is not enabled, resources with a descriptor type of VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must be indexed only by constant integral expressions when aggregated into arrays in shader code. This also specifies whether shader modules can declare 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(for non-Block variables), 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 the vkBindBufferMemory and vkBindImageMemory commands. In this case, buffers and images must not be created with VK_BUFFER_CREATE_SPARSE_BINDING_BIT and VK_IMAGE_CREATE_SPARSE_BINDING_BIT set 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 with VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT set 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 animageTypeof VK_IMAGE_TYPE_2D andsamplesset to VK_SAMPLE_COUNT_1_BIT must not be created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in theflagsmember of the VkImageCreateInfo structure. -
sparseResidencyImage3Dspecifies whether the device can access partially resident 3D images. If this feature is not enabled, images with animageTypeof VK_IMAGE_TYPE_3D must not be created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set 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 animageTypeof VK_IMAGE_TYPE_2D andsamplesset to VK_SAMPLE_COUNT_2_BIT must not be created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set 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 animageTypeof VK_IMAGE_TYPE_2D andsamplesset to VK_SAMPLE_COUNT_4_BIT must not be created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set 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 animageTypeof VK_IMAGE_TYPE_2D andsamplesset to VK_SAMPLE_COUNT_8_BIT must not be created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set 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 animageTypeof VK_IMAGE_TYPE_2D andsamplesset to VK_SAMPLE_COUNT_16_BIT must not be created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set 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, the VK_BUFFER_CREATE_SPARSE_ALIASED_BIT and VK_IMAGE_CREATE_SPARSE_ALIASED_BIT enum 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 to VK_TRUE, the implementation supports variable multisample rates in a subpass which uses no attachments. If set to VK_FALSE, then all pipelines bound in such a subpass must have the same multisample rate. This has no effect in situations where a subpass uses any attachments. -
inheritedQueriesspecifies whether a secondary command buffer may be executed while a query is active.
Document Notes
For more information, see the Vulkan Specification.
This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.