Feature

VK_VERSION_1_4

Vulkan version 1.4

Vulkan Version 1.4 promoted a number of key extensions into the core API:

All differences in behavior between these extensions and the corresponding Vulkan 1.4 functionality are summarized below.

Differences Relative to VK_KHR_dynamic_rendering_local_read

If the apiext:VK_KHR_dynamic_rendering_local_read extension is not supported, Vulkan 1.4 implementations must: support local read only for storage resources and single sampled color attachments.

Support for reading depth/stencil attachments and multi-sampled attachments are respectively gated behind the new boolean pname:dynamicRenderingLocalReadDepthStencilAttachments and pname:dynamicRenderingLocalReadMultisampledAttachments properties. * If pname:dynamicRenderingLocalReadDepthStencilAttachments is ename:VK_FALSE, implementations do not support depth/stencil attachment access within dynamic rendering. * If pname:dynamicRenderingLocalReadMultisampledAttachments is ename:VK_FALSE, implementations do not support multisampled attachment access within dynamic rendering. * If both properties are ename:VK_TRUE, the full functionality of the extension is supported.

Differences Relative to VK_EXT_host_image_copy

If the apiext:VK_EXT_host_image_copy extension is not supported, support for it is optional in Vulkan 1.4. * An implementation that has a ename:VK_QUEUE_GRAPHICS_BIT queue must support either: ** the <<features-hostImageCopy, pname:hostImageCopy>> feature; or ** an additional queue that supports ename:VK_QUEUE_TRANSFER_BIT.

Differences Relative to VK_KHR_push_descriptor

VK_KHR_push_descriptor did not include a feature bit, so a new feature bit has been added to VkPhysicalDeviceVulkan14Features to gate its functionality: pushDescriptor. Enabling this new feature has the same effect as enabling the extension.

Differences Relative to VK_EXT_pipeline_protected_access

VK_EXT_pipeline_protected_access is only useful when the protectedMemory feature is supported. As the protectedMemory feature is optional in core Vulkan, the pipelineProtectedAccess feature is only required when the protectedMemory feature is supported.

Differences Relative to VK_KHR_line_rasterization

The bresenhamLines feature is required, rather than just any one of the line style features.

Differences Relative to VK_KHR_shader_subgroup_rotate

The shaderSubgroupRotateClustered feature is required in addition to shaderSubgroupRotate.

Additional Vulkan 1.4 Feature Support

[[versions-1.4-new-features]] In addition to the promoted extensions described above, Vulkan 1.4 added required support for: * All queues supporting ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT must: also advertise ename:VK_QUEUE_TRANSFER_BIT. * Clustered subgroup operations must: be advertised in Vulkan 1.4 via setting both ename:VK_SUBGROUP_FEATURE_CLUSTERED_BIT and ename:VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT (as an interaction with the promoted apiext:VK_KHR_shader_subgroup_rotate functionality) in <<limits-subgroupSupportedOperations, pname:supportedOperations>>. * The following features that were optional in earlier versions: ** <<features-fullDrawIndexUint32, pname:fullDrawIndexUint32>> ** <<features-imageCubeArray, pname:imageCubeArray>> ** <<features-independentBlend, pname:independentBlend>> ** <<features-sampleRateShading, pname:sampleRateShading>> ** <<features-drawIndirectFirstInstance, pname:drawIndirectFirstInstance>> ** <<features-depthClamp, pname:depthClamp>> ** <<features-depthBiasClamp, pname:depthBiasClamp>> ** <<features-samplerAnisotropy, pname:samplerAnisotropy>> ** <<features-fragmentStoresAndAtomics, pname:fragmentStoresAndAtomics>> ** <<features-shaderStorageImageExtendedFormats, pname:shaderStorageImageExtendedFormats>> ** <<features-shaderUniformBufferArrayDynamicIndexing, pname:shaderUniformBufferArrayDynamicIndexing>> ** <<features-shaderSampledImageArrayDynamicIndexing, pname:shaderSampledImageArrayDynamicIndexing>> ** <<features-shaderStorageBufferArrayDynamicIndexing, pname:shaderStorageBufferArrayDynamicIndexing>> ** <<features-shaderStorageImageArrayDynamicIndexing, pname:shaderStorageImageArrayDynamicIndexing>> ** <<features-shaderImageGatherExtended, pname:shaderImageGatherExtended>> ** <<features-shaderInt16, pname:shaderInt16>> ** <<features-largePoints, pname:largePoints>> ** <<features-samplerYcbcrConversion, pname:samplerYcbcrConversion>> ** <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>> ** <<features-variablePointers, pname:variablePointers>> ** <<features-variablePointersStorageBuffer, pname:variablePointersStorageBuffer>> ** <<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>> ** <<features-scalarBlockLayout, pname:scalarBlockLayout>> ** <<features-shaderUniformTexelBufferArrayDynamicIndexing, pname:shaderUniformTexelBufferArrayDynamicIndexing>> ** <<features-shaderStorageTexelBufferArrayDynamicIndexing, pname:shaderStorageTexelBufferArrayDynamicIndexing>> ** <<features-shaderInt8, pname:shaderInt8>> ** <<features-storageBuffer8BitAccess, pname:storageBuffer8BitAccess>>

Updated Vulkan 1.4 Limit Support

[[versions-1.4-updated-limits]] Vulkan 1.4 also requires support for the following updated limits: * <<limits-maxImageDimension1D, pname:maxImageDimension1D>> is increased from 4096 to 8192 * <<limits-maxImageDimension2D, pname:maxImageDimension2D>> is increased from 4096 to 8192 * <<limits-maxImageDimension3D, pname:maxImageDimension3D>> is increased from 256 to 512 * <<limits-maxImageDimensionCube, pname:maxImageDimensionCube>> is increased from 4096 to 8192 * <<limits-maxImageArrayLayers, pname:maxImageArrayLayers>> is increased from 256 to 2048 * <<limits-maxUniformBufferRange, pname:maxUniformBufferRange>> is increased from 16384 to 65536 * <<limits-maxPushConstantsSize, pname:maxPushConstantsSize>> is increased from 128 to 256 * <<limits-bufferImageGranularity, pname:bufferImageGranularity>> is decreased from 131072 to 4096 * <<limits-maxBoundDescriptorSets, pname:maxBoundDescriptorSets>> is increased from 4 to 7 * <<limits-maxPerStageDescriptorUniformBuffers, pname:maxPerStageDescriptorUniformBuffers>> is increased from 12 to 15 * <<limits-maxPerStageResources, pname:maxPerStageResources>> is increased from 128 to 200 * <<limits-maxDescriptorSetUniformBuffers, pname:maxDescriptorSetUniformBuffers>> is increased from 72 to 90 * <<limits-maxDescriptorSetStorageBuffers, pname:maxDescriptorSetStorageBuffers>> is increased from 24 to 96 * <<limits-maxDescriptorSetStorageImages, pname:maxDescriptorSetStorageImages>> is increased from 24 to 144 * <<limits-maxFragmentCombinedOutputResources, pname:maxFragmentCombinedOutputResources>> is increased from 4 to 16 * <<limits-maxComputeWorkGroupInvocations, pname:maxComputeWorkGroupInvocations>> is increased from 128 to 256 * <<limits-maxComputeWorkGroupSize, pname:maxComputeWorkGroupSize>> is increased from (128,128,64) to (256,256,64) * <<limits-shaderSignedZeroInfNanPreserveFloat16, pname:shaderSignedZeroInfNanPreserveFloat16>> is changed from unspecified to ename:VK_TRUE * <<limits-shaderSignedZeroInfNanPreserveFloat32, pname:shaderSignedZeroInfNanPreserveFloat32>> is changed from unspecified to ename:VK_TRUE * <<limits-subTexelPrecisionBits, pname:subTexelPrecisionBits>> is increased from 4 to 8 * <<limits-mipmapPrecisionBits, pname:mipmapPrecisionBits>> is increased from 4 to 6 * <<limits-maxSamplerLodBias, pname:maxSamplerLodBias>> is increased from 2 to 14 * <<limits-maxViewportDimensions, pname:maxViewportDimensions>> is increased from (4096,4096) to (7680,7680) * <<limits-viewportboundsrange, pname:viewportBoundsRange>> is increased from (-8192,8191) to (-15360,15359) * <<limits-maxFramebufferWidth, pname:maxFramebufferWidth>> is increased from 4096 to 7680 * <<limits-maxFramebufferHeight, pname:maxFramebufferHeight>> is increased from 4096 to 7680 * <<limits-maxColorAttachments, pname:maxColorAttachments>> is increased from 7 to 8 * <<limits-timestampComputeAndGraphics, pname:timestampComputeAndGraphics>> is changed from unspecified to ename:VK_TRUE * <<limits-pointSizeRange, pname:pointSizeRange>> is increased from (1.0,64.0 - ULP) to (1.0,256.0 - pname:pointSizeGranularity) * <<limits-pointSizeGranularity, pname:pointSizeGranularity>> is decreased from 1.0 to 0.125 * <<limits-lineWidthGranularity, pname:lineWidthGranularity>> is decreased from 1.0 to 0.5 * <<limits-maxPushDescriptors, pname:maxPushDescriptors>> is increased from 16 to 32 * <<limits-standardSampleLocations, pname:standardSampleLocations>> is changed from unspecified to ename:VK_TRUE

New Macros

New Commands

New Structures

New Enums

New Bitmasks

New Enum Constants

  • VK_MAX_GLOBAL_PRIORITY_SIZE
  • Extending VkAttachmentLoadOp:
    • VK_ATTACHMENT_LOAD_OP_NONE
  • Extending VkBufferUsageFlagBits2:
    • VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT
  • Extending VkDescriptorSetLayoutCreateFlagBits:
    • VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT
  • Extending VkDescriptorUpdateTemplateType:
    • VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS
  • Extending VkDynamicState:
    • VK_DYNAMIC_STATE_LINE_STIPPLE
  • Extending VkFormat:
    • VK_FORMAT_A1B5G5R5_UNORM_PACK16
    • VK_FORMAT_A8_UNORM
  • Extending VkFormatFeatureFlagBits2:
    • VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT
  • Extending VkImageLayout:
    • VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ
  • Extending VkImageUsageFlagBits:
    • VK_IMAGE_USAGE_HOST_TRANSFER_BIT
  • Extending VkIndexType:
    • VK_INDEX_TYPE_UINT8
  • Extending VkPipelineCreateFlagBits:
    • VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT
    • VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT
  • Extending VkResult:
    • VK_ERROR_NOT_PERMITTED
  • Extending VkStructureType:
    • VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO
    • VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS
    • VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO
    • VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO
    • VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO
    • VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO
    • VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO
    • VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO
    • VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY
    • VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO
    • VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2
    • VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY
    • VK_STRUCTURE_TYPE_MEMORY_MAP_INFO
    • VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY
    • VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES
    • VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO
    • VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO
    • VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO
    • VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO
    • VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO
    • VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO
    • VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO
    • VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES
    • VK_STRUCTURE_TYPE_RENDERING_AREA_INFO
    • VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO
    • VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO
    • VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE
    • VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2
  • Extending VkSubgroupFeatureFlagBits:
    • VK_SUBGROUP_FEATURE_ROTATE_BIT
    • VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT