VK_VERSION_1_4
Vulkan Version 1.4 promoted a number of key extensions into the core API:
- VK_KHR_dynamic_rendering_local_read
- VK_KHR_global_priority
- VK_KHR_index_type_uint8
- VK_KHR_line_rasterization
- VK_KHR_load_store_op_none
- VK_KHR_maintenance5
- VK_KHR_maintenance6
- VK_KHR_map_memory2
- VK_KHR_push_descriptor
- VK_KHR_shader_expect_assume
- VK_KHR_shader_float_controls2
- VK_KHR_shader_subgroup_rotate
- VK_KHR_vertex_attribute_divisor
- VK_EXT_host_image_copy
- VK_EXT_pipeline_protected_access
- VK_EXT_pipeline_robustness
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
- vkCmdBindDescriptorSets2
- vkCmdBindIndexBuffer2
- vkCmdPushConstants2
- vkCmdPushDescriptorSet
- vkCmdPushDescriptorSet2
- vkCmdPushDescriptorSetWithTemplate
- vkCmdPushDescriptorSetWithTemplate2
- vkCmdSetLineStipple
- vkCmdSetRenderingAttachmentLocations
- vkCmdSetRenderingInputAttachmentIndices
- vkCopyImageToImage
- vkCopyImageToMemory
- vkCopyMemoryToImage
- vkGetDeviceImageSubresourceLayout
- vkGetImageSubresourceLayout2
- vkGetRenderingAreaGranularity
- vkMapMemory2
- vkTransitionImageLayout
- vkUnmapMemory2
New Structures
- VkBindDescriptorSetsInfo
- VkCopyImageToImageInfo
- VkCopyImageToMemoryInfo
- VkCopyMemoryToImageInfo
- VkDeviceImageSubresourceInfo
- VkHostImageLayoutTransitionInfo
- VkImageSubresource2
- VkImageToMemoryCopy
- VkMemoryMapInfo
- VkMemoryToImageCopy
- VkMemoryUnmapInfo
- VkPushConstantsInfo
- VkPushDescriptorSetInfo
- VkPushDescriptorSetWithTemplateInfo
- VkRenderingAreaInfo
- VkSubresourceLayout2
- VkVertexInputBindingDivisorDescription
- Extending VkBindBufferMemoryInfo, VkBindImageMemoryInfo:
- Extending VkBufferViewCreateInfo, VkBufferCreateInfo, VkPhysicalDeviceExternalBufferInfo, VkDescriptorBufferBindingInfoEXT:
- Extending VkComputePipelineCreateInfo, VkGraphicsPipelineCreateInfo, VkRayTracingPipelineCreateInfoNV, VkRayTracingPipelineCreateInfoKHR:
- Extending VkDeviceQueueCreateInfo:
- Extending VkGraphicsPipelineCreateInfo, VkCommandBufferInheritanceInfo:
- Extending VkGraphicsPipelineCreateInfo, VkComputePipelineCreateInfo, VkPipelineShaderStageCreateInfo, VkRayTracingPipelineCreateInfoKHR:
- Extending VkImageFormatProperties2:
- Extending VkPhysicalDeviceFeatures2, VkDeviceCreateInfo:
- VkPhysicalDeviceDynamicRenderingLocalReadFeatures
- VkPhysicalDeviceGlobalPriorityQueryFeatures
- VkPhysicalDeviceHostImageCopyFeatures
- VkPhysicalDeviceIndexTypeUint8Features
- VkPhysicalDeviceLineRasterizationFeatures
- VkPhysicalDeviceMaintenance5Features
- VkPhysicalDeviceMaintenance6Features
- VkPhysicalDevicePipelineProtectedAccessFeatures
- VkPhysicalDevicePipelineRobustnessFeatures
- VkPhysicalDeviceShaderExpectAssumeFeatures
- VkPhysicalDeviceShaderFloatControls2Features
- VkPhysicalDeviceShaderSubgroupRotateFeatures
- VkPhysicalDeviceVertexAttributeDivisorFeatures
- VkPhysicalDeviceVulkan14Features
- Extending VkPhysicalDeviceProperties2:
- VkPhysicalDeviceHostImageCopyProperties
- VkPhysicalDeviceLineRasterizationProperties
- VkPhysicalDeviceMaintenance5Properties
- VkPhysicalDeviceMaintenance6Properties
- VkPhysicalDevicePipelineRobustnessProperties
- VkPhysicalDevicePushDescriptorProperties
- VkPhysicalDeviceVertexAttributeDivisorProperties
- VkPhysicalDeviceVulkan14Properties
- Extending VkPipelineRasterizationStateCreateInfo:
- Extending VkPipelineVertexInputStateCreateInfo:
- Extending VkQueueFamilyProperties2:
- Extending VkSubresourceLayout2:
New Enums
- VkBufferUsageFlagBits2
- VkHostImageCopyFlagBits
- VkLineRasterizationMode
- VkMemoryUnmapFlagBits
- VkPipelineCreateFlagBits2
- VkPipelineRobustnessBufferBehavior
- VkPipelineRobustnessImageBehavior
- VkQueueGlobalPriority
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_PACK16VK_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_BITVK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT
- Extending VkResult:
VK_ERROR_NOT_PERMITTED
- Extending VkStructureType:
VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFOVK_STRUCTURE_TYPE_BIND_MEMORY_STATUSVK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFOVK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFOVK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFOVK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFOVK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFOVK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFOVK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERYVK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFOVK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPYVK_STRUCTURE_TYPE_MEMORY_MAP_INFOVK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPYVK_STRUCTURE_TYPE_MEMORY_UNMAP_INFOVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURESVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIESVK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFOVK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFOVK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFOVK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFOVK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFOVK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFOVK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFOVK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIESVK_STRUCTURE_TYPE_RENDERING_AREA_INFOVK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFOVK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFOVK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZEVK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2
- Extending VkSubgroupFeatureFlagBits:
VK_SUBGROUP_FEATURE_ROTATE_BITVK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT