diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,9 @@
 
 ## WIP
 
+## [3.11.3] - 2021-07-21
+- Bump API version to v1.2.185
+
 ## [3.11.2] - 2021-07-07
 - Bump API version to v1.2.184
 
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: vulkan
-version: "3.11.2"
+version: "3.11.3"
 synopsis: Bindings to the Vulkan graphics API.
 description: Please see [the readme](https://github.com/expipiplus1/vulkan/#readme)
 category: Graphics
diff --git a/src/Vulkan/CStruct/Extends.hs b/src/Vulkan/CStruct/Extends.hs
--- a/src/Vulkan/CStruct/Extends.hs
+++ b/src/Vulkan/CStruct/Extends.hs
@@ -412,6 +412,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_inherited_viewport_scissor (PhysicalDeviceInheritedViewportScissorFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_invocation_mask (PhysicalDeviceInvocationMaskFeaturesHUAWEI)
 import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceLimits)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationPropertiesEXT)
@@ -436,6 +437,8 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id (PhysicalDevicePresentIdFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_wait (PhysicalDevicePresentWaitFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PhysicalDevicePrivateDataFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceProperties2)
@@ -457,6 +460,7 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_atomic_float2 (PhysicalDeviceShaderAtomicFloat2FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_atomic_float (PhysicalDeviceShaderAtomicFloatFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
@@ -552,6 +556,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_viewport_swizzle (PipelineViewportSwizzleStateCreateInfoNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_clip_space_w_scaling (PipelineViewportWScalingStateCreateInfoNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_GGP_frame_token (PresentFrameTokenGGP)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id (PresentIdKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (PresentInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_incremental_present (PresentRegionKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_incremental_present (PresentRegionsKHR)
@@ -821,6 +826,8 @@
   Extends DeviceCreateInfo PhysicalDeviceVariablePointersFeatures = ()
   Extends DeviceCreateInfo PhysicalDeviceMultiviewFeatures = ()
   Extends DeviceCreateInfo DeviceGroupDeviceCreateInfo = ()
+  Extends DeviceCreateInfo PhysicalDevicePresentIdFeaturesKHR = ()
+  Extends DeviceCreateInfo PhysicalDevicePresentWaitFeaturesKHR = ()
   Extends DeviceCreateInfo PhysicalDevice16BitStorageFeatures = ()
   Extends DeviceCreateInfo PhysicalDeviceShaderSubgroupExtendedTypesFeatures = ()
   Extends DeviceCreateInfo PhysicalDeviceSamplerYcbcrConversionFeatures = ()
@@ -841,6 +848,7 @@
   Extends DeviceCreateInfo PhysicalDeviceVulkanMemoryModelFeatures = ()
   Extends DeviceCreateInfo PhysicalDeviceShaderAtomicInt64Features = ()
   Extends DeviceCreateInfo PhysicalDeviceShaderAtomicFloatFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderAtomicFloat2FeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceVertexAttributeDivisorFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceASTCDecodeFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceTransformFeedbackFeaturesEXT = ()
@@ -852,6 +860,7 @@
   Extends DeviceCreateInfo PhysicalDeviceShaderImageFootprintFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceShadingRateImageFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceInvocationMaskFeaturesHUAWEI = ()
   Extends DeviceCreateInfo PhysicalDeviceMeshShaderFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceAccelerationStructureFeaturesKHR = ()
   Extends DeviceCreateInfo PhysicalDeviceRayTracingPipelineFeaturesKHR = ()
@@ -969,6 +978,8 @@
   Extends PhysicalDeviceFeatures2 PhysicalDevicePrivateDataFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceVariablePointersFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceMultiviewFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDevicePresentIdFeaturesKHR = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDevicePresentWaitFeaturesKHR = ()
   Extends PhysicalDeviceFeatures2 PhysicalDevice16BitStorageFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderSubgroupExtendedTypesFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceSamplerYcbcrConversionFeatures = ()
@@ -988,6 +999,7 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceVulkanMemoryModelFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderAtomicInt64Features = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderAtomicFloatFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderAtomicFloat2FeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceVertexAttributeDivisorFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceASTCDecodeFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceTransformFeedbackFeaturesEXT = ()
@@ -999,6 +1011,7 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderImageFootprintFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShadingRateImageFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceInvocationMaskFeaturesHUAWEI = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceMeshShaderFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceAccelerationStructureFeaturesKHR = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceRayTracingPipelineFeaturesKHR = ()
@@ -1136,6 +1149,7 @@
   Extends PresentInfoKHR DisplayPresentInfoKHR = ()
   Extends PresentInfoKHR PresentRegionsKHR = ()
   Extends PresentInfoKHR DeviceGroupPresentInfoKHR = ()
+  Extends PresentInfoKHR PresentIdKHR = ()
   Extends PresentInfoKHR PresentTimesInfoGOOGLE = ()
   Extends PresentInfoKHR PresentFrameTokenGGP = ()
   Extends QueryPoolCreateInfo QueryPoolPerformanceCreateInfoKHR = ()
@@ -1345,6 +1359,9 @@
   STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR -> go @DeviceGroupPresentInfoKHR
   STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO -> go @DeviceGroupDeviceCreateInfo
   STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR -> go @DeviceGroupSwapchainCreateInfoKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR -> go @PhysicalDevicePresentIdFeaturesKHR
+  STRUCTURE_TYPE_PRESENT_ID_KHR -> go @PresentIdKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR -> go @PhysicalDevicePresentWaitFeaturesKHR
   STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD -> go @DisplayNativeHdrSurfaceCapabilitiesAMD
   STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD -> go @SwapchainDisplayNativeHdrCreateInfoAMD
   STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE -> go @PresentTimesInfoGOOGLE
@@ -1429,6 +1446,7 @@
   STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES -> go @PhysicalDeviceVulkanMemoryModelFeatures
   STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES -> go @PhysicalDeviceShaderAtomicInt64Features
   STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT -> go @PhysicalDeviceShaderAtomicFloatFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT -> go @PhysicalDeviceShaderAtomicFloat2FeaturesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT -> go @PhysicalDeviceVertexAttributeDivisorFeaturesEXT
   STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV -> go @QueueFamilyCheckpointPropertiesNV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES -> go @PhysicalDeviceDepthStencilResolveProperties
@@ -1450,6 +1468,7 @@
   STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV -> go @PipelineViewportShadingRateImageStateCreateInfoNV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV -> go @PhysicalDeviceShadingRateImageFeaturesNV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV -> go @PhysicalDeviceShadingRateImagePropertiesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI -> go @PhysicalDeviceInvocationMaskFeaturesHUAWEI
   STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV -> go @PipelineViewportCoarseSampleOrderStateCreateInfoNV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV -> go @PhysicalDeviceMeshShaderFeaturesNV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV -> go @PhysicalDeviceMeshShaderPropertiesNV
@@ -1688,6 +1707,9 @@
 {-# complete (::&) :: DeviceGroupPresentInfoKHR #-}
 {-# complete (::&) :: DeviceGroupDeviceCreateInfo #-}
 {-# complete (::&) :: DeviceGroupSwapchainCreateInfoKHR #-}
+{-# complete (::&) :: PhysicalDevicePresentIdFeaturesKHR #-}
+{-# complete (::&) :: PresentIdKHR #-}
+{-# complete (::&) :: PhysicalDevicePresentWaitFeaturesKHR #-}
 {-# complete (::&) :: DisplayNativeHdrSurfaceCapabilitiesAMD #-}
 {-# complete (::&) :: SwapchainDisplayNativeHdrCreateInfoAMD #-}
 {-# complete (::&) :: PresentTimesInfoGOOGLE #-}
@@ -1772,6 +1794,7 @@
 {-# complete (::&) :: PhysicalDeviceVulkanMemoryModelFeatures #-}
 {-# complete (::&) :: PhysicalDeviceShaderAtomicInt64Features #-}
 {-# complete (::&) :: PhysicalDeviceShaderAtomicFloatFeaturesEXT #-}
+{-# complete (::&) :: PhysicalDeviceShaderAtomicFloat2FeaturesEXT #-}
 {-# complete (::&) :: PhysicalDeviceVertexAttributeDivisorFeaturesEXT #-}
 {-# complete (::&) :: QueueFamilyCheckpointPropertiesNV #-}
 {-# complete (::&) :: PhysicalDeviceDepthStencilResolveProperties #-}
@@ -1793,6 +1816,7 @@
 {-# complete (::&) :: PipelineViewportShadingRateImageStateCreateInfoNV #-}
 {-# complete (::&) :: PhysicalDeviceShadingRateImageFeaturesNV #-}
 {-# complete (::&) :: PhysicalDeviceShadingRateImagePropertiesNV #-}
+{-# complete (::&) :: PhysicalDeviceInvocationMaskFeaturesHUAWEI #-}
 {-# complete (::&) :: PipelineViewportCoarseSampleOrderStateCreateInfoNV #-}
 {-# complete (::&) :: PhysicalDeviceMeshShaderFeaturesNV #-}
 {-# complete (::&) :: PhysicalDeviceMeshShaderPropertiesNV #-}
diff --git a/src/Vulkan/Core10/CommandBuffer.hs b/src/Vulkan/Core10/CommandBuffer.hs
--- a/src/Vulkan/Core10/CommandBuffer.hs
+++ b/src/Vulkan/Core10/CommandBuffer.hs
@@ -728,10 +728,9 @@
     -- If the 'Vulkan.Core10.Handles.CommandBuffer' will not be executed within
     -- a render pass instance, @subpass@ is ignored.
     subpass :: Word32
-  , -- | @framebuffer@ optionally refers to the
-    -- 'Vulkan.Core10.Handles.Framebuffer' object that the
-    -- 'Vulkan.Core10.Handles.CommandBuffer' will be rendering to if it is
-    -- executed within a render pass instance. It /can/ be
+  , -- | @framebuffer@ /can/ refer to the 'Vulkan.Core10.Handles.Framebuffer'
+    -- object that the 'Vulkan.Core10.Handles.CommandBuffer' will be rendering
+    -- to if it is executed within a render pass instance. It /can/ be
     -- 'Vulkan.Core10.APIConstants.NULL_HANDLE' if the framebuffer is not
     -- known, or if the 'Vulkan.Core10.Handles.CommandBuffer' will not be
     -- executed within a render pass instance.
diff --git a/src/Vulkan/Core10/CommandBufferBuilding.hs b/src/Vulkan/Core10/CommandBufferBuilding.hs
--- a/src/Vulkan/Core10/CommandBufferBuilding.hs
+++ b/src/Vulkan/Core10/CommandBufferBuilding.hs
@@ -7973,9 +7973,6 @@
 --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
 --     values
 --
--- -   #VUID-vkCmdSetEvent-stageMask-requiredbitmask# @stageMask@ /must/
---     not be @0@
---
 -- -   #VUID-vkCmdSetEvent-commandBuffer-recording# @commandBuffer@ /must/
 --     be in the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
@@ -8134,9 +8131,6 @@
 --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
 --     values
 --
--- -   #VUID-vkCmdResetEvent-stageMask-requiredbitmask# @stageMask@ /must/
---     not be @0@
---
 -- -   #VUID-vkCmdResetEvent-commandBuffer-recording# @commandBuffer@
 --     /must/ be in the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
@@ -8938,16 +8932,10 @@
 --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
 --     values
 --
--- -   #VUID-vkCmdPipelineBarrier-srcStageMask-requiredbitmask#
---     @srcStageMask@ /must/ not be @0@
---
 -- -   #VUID-vkCmdPipelineBarrier-dstStageMask-parameter# @dstStageMask@
 --     /must/ be a valid combination of
 --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
 --     values
---
--- -   #VUID-vkCmdPipelineBarrier-dstStageMask-requiredbitmask#
---     @dstStageMask@ /must/ not be @0@
 --
 -- -   #VUID-vkCmdPipelineBarrier-dependencyFlags-parameter#
 --     @dependencyFlags@ /must/ be a valid combination of
diff --git a/src/Vulkan/Core10/Device.hs b/src/Vulkan/Core10/Device.hs
--- a/src/Vulkan/Core10/Device.hs
+++ b/src/Vulkan/Core10/Device.hs
@@ -128,6 +128,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_index_type_uint8 (PhysicalDeviceIndexTypeUint8FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_inherited_viewport_scissor (PhysicalDeviceInheritedViewportScissorFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_invocation_mask (PhysicalDeviceInvocationMaskFeaturesHUAWEI)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
@@ -138,6 +139,8 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id (PhysicalDevicePresentIdFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_wait (PhysicalDevicePresentWaitFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PhysicalDevicePrivateDataFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceProvokingVertexFeaturesEXT)
@@ -149,6 +152,7 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_atomic_float2 (PhysicalDeviceShaderAtomicFloat2FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_atomic_float (PhysicalDeviceShaderAtomicFloatFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
@@ -230,7 +234,7 @@
 -- == Valid Usage
 --
 -- -   #VUID-vkCreateDevice-ppEnabledExtensionNames-01387# All
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required extensions>
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required device extensions>
 --     for each extension in the
 --     'DeviceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be
 --     present in that list
@@ -702,6 +706,12 @@
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderImageFloat32AtomicAdd shaderImageFloat32AtomicAdd>
 --     /must/ be enabled
 --
+-- -   #VUID-VkDeviceCreateInfo-sparseImageFloat32AtomicMinMax-04975# If
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageFloat32AtomicMinMax sparseImageFloat32AtomicMinMax>
+--     is enabled,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderImageFloat32AtomicMinMax shaderImageFloat32AtomicMinMax>
+--     /must/ be enabled
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkDeviceCreateInfo-sType-sType# @sType@ /must/ be
@@ -755,6 +765,7 @@
 --     'Vulkan.Extensions.VK_EXT_index_type_uint8.PhysicalDeviceIndexTypeUint8FeaturesEXT',
 --     'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.PhysicalDeviceInheritedViewportScissorFeaturesNV',
 --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT',
+--     'Vulkan.Extensions.VK_HUAWEI_invocation_mask.PhysicalDeviceInvocationMaskFeaturesHUAWEI',
 --     'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
 --     'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
 --     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
@@ -765,6 +776,8 @@
 --     'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
 --     'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
 --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR',
+--     'Vulkan.Extensions.VK_KHR_present_id.PhysicalDevicePresentIdFeaturesKHR',
+--     'Vulkan.Extensions.VK_KHR_present_wait.PhysicalDevicePresentWaitFeaturesKHR',
 --     'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT',
 --     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
 --     'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexFeaturesEXT',
@@ -776,6 +789,7 @@
 --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
 --     'Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
 --     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
+--     'Vulkan.Extensions.VK_EXT_shader_atomic_float2.PhysicalDeviceShaderAtomicFloat2FeaturesEXT',
 --     'Vulkan.Extensions.VK_EXT_shader_atomic_float.PhysicalDeviceShaderAtomicFloatFeaturesEXT',
 --     'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
 --     'Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
@@ -947,6 +961,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceRayTracingPipelineFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceAccelerationStructureFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceMeshShaderFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceInvocationMaskFeaturesHUAWEI = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShadingRateImageFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderImageFootprintFeaturesNV = Just f
@@ -958,6 +973,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceTransformFeedbackFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceASTCDecodeFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceVertexAttributeDivisorFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicFloat2FeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicFloatFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicInt64Features = Just f
     | Just Refl <- eqT @e @PhysicalDeviceVulkanMemoryModelFeatures = Just f
@@ -978,6 +994,8 @@
     | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderSubgroupExtendedTypesFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDevice16BitStorageFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePresentWaitFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePresentIdFeaturesKHR = Just f
     | Just Refl <- eqT @e @DeviceGroupDeviceCreateInfo = Just f
     | Just Refl <- eqT @e @PhysicalDeviceMultiviewFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceVariablePointersFeatures = Just f
diff --git a/src/Vulkan/Core10/DeviceInitialization.hs b/src/Vulkan/Core10/DeviceInitialization.hs
--- a/src/Vulkan/Core10/DeviceInitialization.hs
+++ b/src/Vulkan/Core10/DeviceInitialization.hs
@@ -507,7 +507,8 @@
 -- = Parameters
 --
 -- The table below defines the various use cases for 'getDeviceProcAddr'
--- and expected return value for each case.
+-- and expected return value (“fp” is “function pointer”) for each case. A
+-- valid returned function pointer (“fp”) /must/ not be @NULL@.
 --
 -- = Description
 --
@@ -600,7 +601,8 @@
 -- platform-specific APIs.
 --
 -- The table below defines the various use cases for 'getInstanceProcAddr'
--- and expected return value (“fp” is “function pointer”) for each case.
+-- and expected return value (“fp” is “function pointer”) for each case. A
+-- valid returned function pointer (“fp”) /must/ not be @NULL@.
 --
 -- The returned function pointer is of type
 -- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction', and /must/ be cast to
@@ -4223,7 +4225,7 @@
     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetAlignmentBytes storageTexelBufferOffsetAlignmentBytes>
     -- members of
     -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
-    -- but smaller alignment is optionally: allowed by
+    -- but smaller alignment is /optionally/ allowed by
     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetSingleTexelAlignment storageTexelBufferOffsetSingleTexelAlignment>
     -- and
     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-uniformTexelBufferOffsetSingleTexelAlignment uniformTexelBufferOffsetSingleTexelAlignment>.
diff --git a/src/Vulkan/Core10/Enums/AccessFlagBits.hs b/src/Vulkan/Core10/Enums/AccessFlagBits.hs
--- a/src/Vulkan/Core10/Enums/AccessFlagBits.hs
+++ b/src/Vulkan/Core10/Enums/AccessFlagBits.hs
@@ -66,105 +66,107 @@
 -- accesses of that type. The following table lists, for each access flag,
 -- which pipeline stages /can/ perform that type of access.
 --
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | Access flag                                            | Supported pipeline stages                                                                           |
--- +========================================================+=====================================================================================================+
--- | 'ACCESS_INDIRECT_COMMAND_READ_BIT'                     | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT' ,                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_INDEX_READ_BIT'                                | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_INPUT_BIT'                         |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_VERTEX_ATTRIBUTE_READ_BIT'                     | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_INPUT_BIT'                         |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_UNIFORM_READ_BIT'                              | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',              |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                       |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',         |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                     |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or                  |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                       |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_SHADER_READ_BIT'                               | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',    |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',              |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                       |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',         |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                     |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or                  |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                       |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_SHADER_WRITE_BIT'                              | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',              |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                       |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',         |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                     |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or                  |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                       |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_INPUT_ATTACHMENT_READ_BIT'                     | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT'                      |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COLOR_ATTACHMENT_READ_BIT'                     | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'              |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COLOR_ATTACHMENT_WRITE_BIT'                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'              |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT'             | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT', or             |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'                  |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT', or             |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'                  |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFER_READ_BIT'                             | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT' or                          |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFER_WRITE_BIT'                            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT' or                          |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_HOST_READ_BIT'                                 | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'                                 |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_HOST_WRITE_BIT'                                | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'                                 |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_MEMORY_READ_BIT'                               | Any                                                                                                 |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_MEMORY_WRITE_BIT'                              | Any                                                                                                 |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT'     | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'              |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COMMAND_PREPROCESS_READ_BIT_NV'                | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'                |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV'               | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'                |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT'            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'            |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR' | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT'              | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'               |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT'      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'               |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT'       | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT',              |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'                        |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'           | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                       |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',         |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                     |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT',                     |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT',                      |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR', or           |
--- |                                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'          | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
--- | 'ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT'             | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'         |
--- +--------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | Access flag                                                                          | Supported pipeline stages                                                                           |
+-- +======================================================================================+=====================================================================================================+
+-- | 'ACCESS_INDIRECT_COMMAND_READ_BIT'                                                   | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT' ,                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_INDEX_READ_BIT'                                                              | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_INPUT_BIT'                         |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_VERTEX_ATTRIBUTE_READ_BIT'                                                   | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_INPUT_BIT'                         |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_UNIFORM_READ_BIT'                                                            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',              |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                       |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',         |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                     |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or                  |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                       |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_SHADER_READ_BIT'                                                             | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',    |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',              |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                       |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',         |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                     |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or                  |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                       |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_SHADER_WRITE_BIT'                                                            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',              |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                       |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',         |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                     |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or                  |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                       |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_INPUT_ATTACHMENT_READ_BIT'                                                   | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT'                      |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COLOR_ATTACHMENT_READ_BIT'                                                   | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'              |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COLOR_ATTACHMENT_WRITE_BIT'                                                  | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'              |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT'                                           | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT', or             |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'                  |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'                                          | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT', or             |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'                  |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFER_READ_BIT'                                                           | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT' or                          |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFER_WRITE_BIT'                                                          | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT' or                          |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_HOST_READ_BIT'                                                               | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'                                 |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_HOST_WRITE_BIT'                                                              | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'                                 |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_MEMORY_READ_BIT'                                                             | Any                                                                                                 |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_MEMORY_WRITE_BIT'                                                            | Any                                                                                                 |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT'                                   | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'              |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COMMAND_PREPROCESS_READ_BIT_NV'                                              | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'                |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV'                                             | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'                |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT'                                          | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'            |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR'                               | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'Vulkan.Extensions.VK_KHR_synchronization2.ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI' | 'Vulkan.Extensions.VK_KHR_synchronization2.PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'             |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT'                                            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'               |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT'                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'               |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT'                                     | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT',              |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'                        |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'                                         | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                       |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',         |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                     |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT',                     |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT',                      |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR', or           |
+-- |                                                                                      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'                                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'     |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT'                                           | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'         |
+-- +--------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
 --
 -- Supported access types
 --
diff --git a/src/Vulkan/Core10/Enums/BorderColor.hs b/src/Vulkan/Core10/Enums/BorderColor.hs
--- a/src/Vulkan/Core10/Enums/BorderColor.hs
+++ b/src/Vulkan/Core10/Enums/BorderColor.hs
@@ -53,13 +53,13 @@
 pattern BORDER_COLOR_INT_OPAQUE_WHITE        = BorderColor 5
 -- | 'BORDER_COLOR_INT_CUSTOM_EXT' indicates that a
 -- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'
--- structure is present in the
+-- structure is included in the
 -- 'Vulkan.Core10.Sampler.SamplerCreateInfo'::@pNext@ chain which contains
 -- the color data in integer format.
 pattern BORDER_COLOR_INT_CUSTOM_EXT          = BorderColor 1000287004
 -- | 'BORDER_COLOR_FLOAT_CUSTOM_EXT' indicates that a
 -- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'
--- structure is present in the
+-- structure is included in the
 -- 'Vulkan.Core10.Sampler.SamplerCreateInfo'::@pNext@ chain which contains
 -- the color data in floating-point format.
 pattern BORDER_COLOR_FLOAT_CUSTOM_EXT        = BorderColor 1000287003
diff --git a/src/Vulkan/Core10/Enums/Format.hs b/src/Vulkan/Core10/Enums/Format.hs
--- a/src/Vulkan/Core10/Enums/Format.hs
+++ b/src/Vulkan/Core10/Enums/Format.hs
@@ -844,7 +844,7 @@
 pattern FORMAT_D16_UNORM                          = Format 124
 -- | 'FORMAT_X8_D24_UNORM_PACK32' specifies a two-component, 32-bit format
 -- that has 24 unsigned normalized bits in the depth component and,
--- optionally:, 8 bits that are unused.
+-- /optionally/, 8 bits that are unused.
 pattern FORMAT_X8_D24_UNORM_PACK32                = Format 125
 -- | 'FORMAT_D32_SFLOAT' specifies a one-component, 32-bit signed
 -- floating-point format that has 32 bits in the depth component.
@@ -862,7 +862,7 @@
 pattern FORMAT_D24_UNORM_S8_UINT                  = Format 129
 -- | 'FORMAT_D32_SFLOAT_S8_UINT' specifies a two-component format that has 32
 -- signed float bits in the depth component and 8 unsigned integer bits in
--- the stencil component. There are optionally: 24 bits that are unused.
+-- the stencil component. There are /optionally/ 24 bits that are unused.
 pattern FORMAT_D32_SFLOAT_S8_UINT                 = Format 130
 -- | 'FORMAT_BC1_RGB_UNORM_BLOCK' specifies a three-component,
 -- block-compressed format where each 64-bit compressed texel block encodes
diff --git a/src/Vulkan/Core10/Enums/ImageLayout.hs b/src/Vulkan/Core10/Enums/ImageLayout.hs
--- a/src/Vulkan/Core10/Enums/ImageLayout.hs
+++ b/src/Vulkan/Core10/Enums/ImageLayout.hs
@@ -73,6 +73,7 @@
 -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
 -- 'Vulkan.Extensions.VK_KHR_synchronization2.ImageMemoryBarrier2KHR',
 -- 'Vulkan.Extensions.VK_KHR_copy_commands2.ResolveImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_HUAWEI_invocation_mask.cmdBindInvocationMaskHUAWEI',
 -- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
diff --git a/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs b/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs
--- a/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs
+++ b/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs
@@ -9,6 +9,7 @@
                                                                    , IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
                                                                    , IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
                                                                    , IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+                                                                   , IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI
                                                                    , IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
                                                                    , IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
                                                                    , ..
@@ -79,6 +80,8 @@
 -- be read from a shader as an input attachment; and be used as an input
 -- attachment in a framebuffer.
 pattern IMAGE_USAGE_INPUT_ATTACHMENT_BIT                     = ImageUsageFlagBits 0x00000080
+-- No documentation found for Nested "VkImageUsageFlagBits" "VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI"
+pattern IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI               = ImageUsageFlagBits 0x00040000
 -- | 'IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' specifies that
 -- the image /can/ be used to create a 'Vulkan.Core10.Handles.ImageView'
 -- suitable for use as a
@@ -108,6 +111,7 @@
   , (IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT            , "DEPTH_STENCIL_ATTACHMENT_BIT")
   , (IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT                , "TRANSIENT_ATTACHMENT_BIT")
   , (IMAGE_USAGE_INPUT_ATTACHMENT_BIT                    , "INPUT_ATTACHMENT_BIT")
+  , (IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI              , "INVOCATION_MASK_BIT_HUAWEI")
   , (IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, "FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR")
   , (IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT            , "FRAGMENT_DENSITY_MAP_BIT_EXT")
   ]
diff --git a/src/Vulkan/Core10/Enums/StructureType.hs b/src/Vulkan/Core10/Enums/StructureType.hs
--- a/src/Vulkan/Core10/Enums/StructureType.hs
+++ b/src/Vulkan/Core10/Enums/StructureType.hs
@@ -59,6 +59,7 @@
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV
                                                         , STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI
                                                         , STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA
                                                         , STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA
                                                         , STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA
@@ -113,6 +114,8 @@
                                                         , STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT
                                                         , STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR
+                                                        , STRUCTURE_TYPE_PRESENT_ID_KHR
                                                         , STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT
@@ -137,6 +140,7 @@
                                                         , STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT
                                                         , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR
                                                         , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR
                                                         , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR
@@ -164,6 +168,7 @@
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV
                                                         , STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR
                                                         , STRUCTURE_TYPE_VALIDATION_FEATURES_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT
                                                         , STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT
@@ -833,6 +838,7 @@
 -- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.PhysicalDeviceInheritedViewportScissorFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT',
+-- 'Vulkan.Extensions.VK_HUAWEI_invocation_mask.PhysicalDeviceInvocationMaskFeaturesHUAWEI',
 -- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationPropertiesEXT',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
@@ -855,6 +861,8 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
 -- 'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR',
 -- 'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetPropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_present_id.PhysicalDevicePresentIdFeaturesKHR',
+-- 'Vulkan.Extensions.VK_KHR_present_wait.PhysicalDevicePresentWaitFeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
@@ -875,6 +883,7 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
+-- 'Vulkan.Extensions.VK_EXT_shader_atomic_float2.PhysicalDeviceShaderAtomicFloat2FeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_shader_atomic_float.PhysicalDeviceShaderAtomicFloatFeaturesEXT',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
 -- 'Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
@@ -969,6 +978,7 @@
 -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV',
 -- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV',
 -- 'Vulkan.Extensions.VK_GGP_frame_token.PresentFrameTokenGGP',
+-- 'Vulkan.Extensions.VK_KHR_present_id.PresentIdKHR',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_incremental_present.PresentRegionsKHR',
 -- 'Vulkan.Extensions.VK_GOOGLE_display_timing.PresentTimesInfoGOOGLE',
@@ -1217,6 +1227,8 @@
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV = StructureType 1000371001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV"
 pattern STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV         = StructureType 1000371000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI = StructureType 1000370000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA"
 pattern STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA  = StructureType 1000365001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA"
@@ -1325,6 +1337,10 @@
 pattern STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT       = StructureType 1000295001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = StructureType 1000295000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR   = StructureType 1000294001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_ID_KHR"
+pattern STRUCTURE_TYPE_PRESENT_ID_KHR                            = StructureType 1000294000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"
 pattern STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR          = StructureType 1000290000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"
@@ -1373,6 +1389,8 @@
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = StructureType 1000277000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = StructureType 1000276000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT = StructureType 1000273000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"
 pattern STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = StructureType 1000269005
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR"
@@ -1427,6 +1445,8 @@
 pattern STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV          = StructureType 1000249001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = StructureType 1000249000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR = StructureType 1000248000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"
 pattern STRUCTURE_TYPE_VALIDATION_FEATURES_EXT                   = StructureType 1000247000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT"
@@ -2192,6 +2212,7 @@
              STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV,
              STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI,
              STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
              STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA,
              STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
@@ -2246,6 +2267,8 @@
              STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT,
              STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR,
+             STRUCTURE_TYPE_PRESENT_ID_KHR,
              STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT,
@@ -2270,6 +2293,7 @@
              STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT,
              STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR,
              STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR,
              STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR,
@@ -2297,6 +2321,7 @@
              STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV,
              STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR,
              STRUCTURE_TYPE_VALIDATION_FEATURES_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT,
              STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT,
@@ -2723,15 +2748,16 @@
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV
     , "PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV"
     )
-  , (STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV          , "MEMORY_GET_REMOTE_ADDRESS_INFO_NV")
-  , (STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA   , "SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA")
-  , (STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA, "IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA")
-  , (STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA      , "MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA")
-  , (STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA    , "MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA")
-  , (STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA   , "IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA")
-  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT         , "PHYSICAL_DEVICE_DRM_PROPERTIES_EXT")
-  , (STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT   , "VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT")
-  , (STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT     , "VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT")
+  , (STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV              , "MEMORY_GET_REMOTE_ADDRESS_INFO_NV")
+  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI, "PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI")
+  , (STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA       , "SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA")
+  , (STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA    , "IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA")
+  , (STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA          , "MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA")
+  , (STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA        , "MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA")
+  , (STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA       , "IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA")
+  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT             , "PHYSICAL_DEVICE_DRM_PROPERTIES_EXT")
+  , (STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT       , "VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT")
+  , (STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT         , "VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT")
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT
     , "PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT"
     )
@@ -2806,6 +2832,8 @@
   , (STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT        , "PRIVATE_DATA_SLOT_CREATE_INFO_EXT")
   , (STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT      , "DEVICE_PRIVATE_DATA_CREATE_INFO_EXT")
   , (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT, "PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT")
+  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR  , "PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR")
+  , (STRUCTURE_TYPE_PRESENT_ID_KHR                           , "PRESENT_ID_KHR")
   , (STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR         , "PIPELINE_LIBRARY_CREATE_INFO_KHR")
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT
     , "PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"
@@ -2852,6 +2880,9 @@
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT
     , "PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"
     )
+  , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT
+    , "PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT"
+    )
   , (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR, "PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR")
   , (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR              , "PIPELINE_EXECUTABLE_STATISTIC_KHR")
   , (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR                   , "PIPELINE_EXECUTABLE_INFO_KHR")
@@ -2899,6 +2930,7 @@
     )
   , (STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV              , "COOPERATIVE_MATRIX_PROPERTIES_NV")
   , (STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, "PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV")
+  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR     , "PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR")
   , (STRUCTURE_TYPE_VALIDATION_FEATURES_EXT                       , "VALIDATION_FEATURES_EXT")
   , (STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT           , "PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT")
   , (STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT         , "BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT")
diff --git a/src/Vulkan/Core10/FundamentalTypes.hs b/src/Vulkan/Core10/FundamentalTypes.hs
--- a/src/Vulkan/Core10/FundamentalTypes.hs
+++ b/src/Vulkan/Core10/FundamentalTypes.hs
@@ -457,6 +457,7 @@
 -- 'Vulkan.Extensions.VK_EXT_index_type_uint8.PhysicalDeviceIndexTypeUint8FeaturesEXT',
 -- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.PhysicalDeviceInheritedViewportScissorFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT',
+-- 'Vulkan.Extensions.VK_HUAWEI_invocation_mask.PhysicalDeviceInvocationMaskFeaturesHUAWEI',
 -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits',
 -- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
@@ -470,6 +471,8 @@
 -- 'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
 -- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
 -- 'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR',
+-- 'Vulkan.Extensions.VK_KHR_present_id.PhysicalDevicePresentIdFeaturesKHR',
+-- 'Vulkan.Extensions.VK_KHR_present_wait.PhysicalDevicePresentWaitFeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
@@ -485,6 +488,7 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
+-- 'Vulkan.Extensions.VK_EXT_shader_atomic_float2.PhysicalDeviceShaderAtomicFloat2FeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_shader_atomic_float.PhysicalDeviceShaderAtomicFloatFeaturesEXT',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
 -- 'Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
diff --git a/src/Vulkan/Core10/Handles.hs b/src/Vulkan/Core10/Handles.hs
--- a/src/Vulkan/Core10/Handles.hs
+++ b/src/Vulkan/Core10/Handles.hs
@@ -436,6 +436,7 @@
 -- 'Vulkan.Core10.DescriptorSet.updateDescriptorSets',
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR>,
 -- 'Vulkan.Core10.Fence.waitForFences',
+-- 'Vulkan.Extensions.VK_KHR_present_wait.waitForPresentKHR',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.waitSemaphores',
 -- 'Vulkan.Extensions.VK_KHR_timeline_semaphore.waitSemaphoresKHR',
 -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.writeAccelerationStructuresPropertiesKHR'
@@ -503,6 +504,7 @@
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR>,
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer',
+-- 'Vulkan.Extensions.VK_HUAWEI_invocation_mask.cmdBindInvocationMaskHUAWEI',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdBindPipelineShaderGroupNV',
 -- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
@@ -845,6 +847,7 @@
 -- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoPictureResourceKHR VkVideoPictureResourceKHR>,
+-- 'Vulkan.Extensions.VK_HUAWEI_invocation_mask.cmdBindInvocationMaskHUAWEI',
 -- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
 -- 'Vulkan.Core10.ImageView.createImageView',
 -- 'Vulkan.Core10.ImageView.destroyImageView',
diff --git a/src/Vulkan/Core10/Image.hs b/src/Vulkan/Core10/Image.hs
--- a/src/Vulkan/Core10/Image.hs
+++ b/src/Vulkan/Core10/Image.hs
@@ -1297,6 +1297,11 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
 --     @mipLevels@ /must/ be @1@
 --
+-- -   #VUID-VkImageCreateInfo-usage-04992# If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI',
+--     @tiling@ /must/ be
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'
+--
 -- -   #VUID-VkImageCreateInfo-imageView2DOn3DImage-04459# If the
 --     @VK_KHR_portability_subset@ extension is enabled, and
 --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@imageView2DOn3DImage@
diff --git a/src/Vulkan/Core10/ImageView.hs b/src/Vulkan/Core10/ImageView.hs
--- a/src/Vulkan/Core10/ImageView.hs
+++ b/src/Vulkan/Core10/ImageView.hs
@@ -646,9 +646,11 @@
 -- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY'   | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' |
 -- +----------------------------------------------------------------+-----------------------------------------------+
 -- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' |
+-- |                                                                | ,                                             |
 -- |                                                                | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' |
 -- +----------------------------------------------------------------+-----------------------------------------------+
 -- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' |
+-- |                                                                | ,                                             |
 -- |                                                                | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' |
 -- +----------------------------------------------------------------+-----------------------------------------------+
 -- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE'       | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' |
@@ -662,10 +664,6 @@
 --
 -- == Valid Usage
 --
--- -   #VUID-VkImageViewCreateInfo-imageViewType-04969# @imageViewType@
---     /must/ be compatible with the type of @image@ as shown in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility view type compatibility table>
---
 -- -   #VUID-VkImageViewCreateInfo-image-01003# If @image@ was not created
 --     with
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
@@ -686,13 +684,13 @@
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
 --
 -- -   #VUID-VkImageViewCreateInfo-image-04970# If @image@ was created with
---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and @imageViewType@ is
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and @viewType@ is
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' then
 --     @subresourceRange.levelCount@ /must/ be 1
 --
 -- -   #VUID-VkImageViewCreateInfo-image-04971# If @image@ was created with
---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and @imageViewType@ is
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and @viewType@ is
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' then
 --     @flags@ /must/ not contain any of
@@ -704,7 +702,7 @@
 -- -   #VUID-VkImageViewCreateInfo-image-04972# If @image@ was created with
 --     a @samples@ value not equal to
 --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' then
---     @imageViewType@ /must/ be either
+--     @viewType@ /must/ be either
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
 --
@@ -913,10 +911,9 @@
 --     then it /must/ be bound completely and contiguously to a single
 --     'Vulkan.Core10.Handles.DeviceMemory' object
 --
--- -   #VUID-VkImageViewCreateInfo-subResourceRange-01021#
---     @subresourceRange@ and @viewType@ /must/ be compatible with the
---     image, as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility compatibility table>
+-- -   #VUID-VkImageViewCreateInfo-subResourceRange-01021# @viewType@
+--     /must/ be compatible with the type of @image@ as shown in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility view type compatibility table>
 --
 -- -   #VUID-VkImageViewCreateInfo-image-02399# If @image@ has an
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>,
@@ -988,6 +985,12 @@
 --     @subresourceRange.layerCount@ /must/ be less than or equal to
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxSubsampledArrayLayers ::maxSubsampledArrayLayers>
 --
+-- -   #VUID-VkImageViewCreateInfo-invocationMask-04993# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocationMask feature>
+--     is enabled, and if @image@ was created with @usage@ containing
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI',
+--     @format@ /must/ be 'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'
+--
 -- -   #VUID-VkImageViewCreateInfo-flags-04116# If @flags@ does not contain
 --     'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT'
 --     and @image@ was created with @usage@ containing
@@ -1017,7 +1020,7 @@
 --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
 --     structure included in the @pNext@ chain of
 --     'Vulkan.Core10.Image.ImageCreateInfo', and
---     @subResourceRange.aspectMask@ includes
+--     @subresourceRange.aspectMask@ includes
 --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
 --     the @usage@ member of the
 --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
@@ -1033,7 +1036,7 @@
 --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
 --     structure included in the @pNext@ chain of
 --     'Vulkan.Core10.Image.ImageCreateInfo', and
---     @subResourceRange.aspectMask@ includes bits other than
+--     @subresourceRange.aspectMask@ includes bits other than
 --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
 --     the @usage@ member of the
 --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
@@ -1041,16 +1044,16 @@
 --     @usage@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'
 --     structure used to create @image@
 --
--- -   #VUID-VkImageViewCreateInfo-imageViewType-04973# If @imageViewType@
---     is 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D',
+-- -   #VUID-VkImageViewCreateInfo-imageViewType-04973# If @viewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D',
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D', or
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D'; and
 --     @subresourceRange.layerCount@ is not
 --     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then
 --     @subresourceRange.layerCount@ /must/ be 1
 --
--- -   #VUID-VkImageViewCreateInfo-imageViewType-04974# If @imageViewType@
---     is 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D',
+-- -   #VUID-VkImageViewCreateInfo-imageViewType-04974# If @viewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D',
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D', or
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D'; and
 --     @subresourceRange.layerCount@ is
@@ -1085,8 +1088,8 @@
 --     @VK_KHR_portability_subset@ extension is enabled, and
 --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@imageViewFormatSwizzle@
 --     is 'Vulkan.Core10.FundamentalTypes.FALSE', all elements of
---     @components@ /must/ be
---     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'.
+--     @components@ /must/ have the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-identity-mappings identity swizzle>
 --
 -- -   #VUID-VkImageViewCreateInfo-imageViewFormatReinterpretation-04466#
 --     If the @VK_KHR_portability_subset@ extension is enabled, and
diff --git a/src/Vulkan/Core10/Pass.hs b/src/Vulkan/Core10/Pass.hs
--- a/src/Vulkan/Core10/Pass.hs
+++ b/src/Vulkan/Core10/Pass.hs
@@ -1589,6 +1589,14 @@
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
 --
+-- -   #VUID-VkSubpassDependency-synchronization2-04984# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
+--     feature is not enabled, @srcStageMask@ /must/ not be @0@
+--
+-- -   #VUID-VkSubpassDependency-synchronization2-04985# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
+--     feature is not enabled, @dstStageMask@ /must/ not be @0@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkSubpassDependency-srcStageMask-parameter# @srcStageMask@
diff --git a/src/Vulkan/Core10/Sampler.hs b/src/Vulkan/Core10/Sampler.hs
--- a/src/Vulkan/Core10/Sampler.hs
+++ b/src/Vulkan/Core10/Sampler.hs
@@ -456,7 +456,7 @@
 --     or 'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT',
 --     then a
 --     'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'
---     /must/ be present in the @pNext@ chain
+--     /must/ be included in the @pNext@ chain
 --
 -- -   #VUID-VkSamplerCreateInfo-customBorderColors-04085# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-customBorderColors customBorderColors>
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs
--- a/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs
@@ -151,6 +151,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_inherited_viewport_scissor (PhysicalDeviceInheritedViewportScissorFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_invocation_mask (PhysicalDeviceInvocationMaskFeaturesHUAWEI)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationPropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (PhysicalDeviceMaintenance3Properties)
@@ -173,6 +174,8 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id (PhysicalDevicePresentIdFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_wait (PhysicalDevicePresentWaitFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PhysicalDevicePrivateDataFeaturesEXT)
 import Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
 import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
@@ -193,6 +196,7 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_atomic_float2 (PhysicalDeviceShaderAtomicFloat2FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_atomic_float (PhysicalDeviceShaderAtomicFloatFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
@@ -744,6 +748,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceRayTracingPipelineFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceAccelerationStructureFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceMeshShaderFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceInvocationMaskFeaturesHUAWEI = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShadingRateImageFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderImageFootprintFeaturesNV = Just f
@@ -755,6 +760,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceTransformFeedbackFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceASTCDecodeFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceVertexAttributeDivisorFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicFloat2FeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicFloatFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicInt64Features = Just f
     | Just Refl <- eqT @e @PhysicalDeviceVulkanMemoryModelFeatures = Just f
@@ -774,6 +780,8 @@
     | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderSubgroupExtendedTypesFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDevice16BitStorageFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePresentWaitFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePresentIdFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceMultiviewFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceVariablePointersFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDevicePrivateDataFeaturesEXT = Just f
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs
--- a/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs
@@ -60,7 +60,10 @@
 -- 'Vulkan.Core10.Enums.StructureType.StructureType'
 data PhysicalDeviceShaderDrawParametersFeatures = PhysicalDeviceShaderDrawParametersFeatures
   { -- | #extension-features-shaderDrawParameters# @shaderDrawParameters@
-    -- specifies whether shader draw parameters are supported.
+    -- specifies whether the implementation supports the SPIR-V
+    -- @DrawParameters@ capability. When this feature is not enabled, shader
+    -- modules /must/ not declare the @SPV_KHR_shader_draw_parameters@
+    -- extension or the @DrawParameters@ capability.
     shaderDrawParameters :: Bool }
   deriving (Typeable, Eq)
 #if defined(GENERIC_INSTANCES)
diff --git a/src/Vulkan/Core12.hs b/src/Vulkan/Core12.hs
--- a/src/Vulkan/Core12.hs
+++ b/src/Vulkan/Core12.hs
@@ -202,7 +202,10 @@
     -- Y′CBCR conversion /must/ not be used.
     samplerYcbcrConversion :: Bool
   , -- | #features-shaderDrawParameters# @shaderDrawParameters@ specifies whether
-    -- shader draw parameters are supported.
+    -- the implementation supports the SPIR-V @DrawParameters@ capability. When
+    -- this feature is not enabled, shader modules /must/ not declare the
+    -- @SPV_KHR_shader_draw_parameters@ extension or the @DrawParameters@
+    -- capability.
     shaderDrawParameters :: Bool
   }
   deriving (Typeable, Eq)
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
--- a/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
@@ -1580,6 +1580,14 @@
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
 --
+-- -   #VUID-VkSubpassDependency2-synchronization2-04988# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
+--     feature is not enabled, @srcStageMask@ /must/ not be @0@
+--
+-- -   #VUID-VkSubpassDependency2-synchronization2-04989# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
+--     feature is not enabled, @dstStageMask@ /must/ not be @0@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkSubpassDependency2-sType-sType# @sType@ /must/ be
diff --git a/src/Vulkan/Dynamic.hs b/src/Vulkan/Dynamic.hs
--- a/src/Vulkan/Dynamic.hs
+++ b/src/Vulkan/Dynamic.hs
@@ -825,7 +825,7 @@
   , pVkGetMemoryFdPropertiesKHR :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: CInt) -> ("pMemoryFdProperties" ::: Ptr MemoryFdPropertiesKHR) -> IO Result)
   , pVkGetMemoryZirconHandleFUCHSIA :: FunPtr (Ptr Device_T -> ("pGetZirconHandleInfo" ::: Ptr MemoryGetZirconHandleInfoFUCHSIA) -> ("pZirconHandle" ::: Ptr Zx_handle_t) -> IO Result)
   , pVkGetMemoryZirconHandlePropertiesFUCHSIA :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("zirconHandle" ::: Zx_handle_t) -> ("pMemoryZirconHandleProperties" ::: Ptr MemoryZirconHandlePropertiesFUCHSIA) -> IO Result)
-  , pVkGetMemoryRemoteAddressNV :: FunPtr (Ptr Device_T -> ("getMemoryRemoteAddressInfo" ::: Ptr MemoryGetRemoteAddressInfoNV) -> ("pAddress" ::: Ptr RemoteAddressNV) -> IO Result)
+  , pVkGetMemoryRemoteAddressNV :: FunPtr (Ptr Device_T -> ("pMemoryGetRemoteAddressInfo" ::: Ptr MemoryGetRemoteAddressInfoNV) -> ("pAddress" ::: Ptr RemoteAddressNV) -> IO Result)
   , pVkGetSemaphoreWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr SemaphoreGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
   , pVkImportSemaphoreWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pImportSemaphoreWin32HandleInfo" ::: Ptr ImportSemaphoreWin32HandleInfoKHR) -> IO Result)
   , pVkGetSemaphoreFdKHR :: FunPtr (Ptr Device_T -> ("pGetFdInfo" ::: Ptr SemaphoreGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result)
@@ -911,6 +911,7 @@
   , pVkCmdDrawMeshTasksIndirectCountNV :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
   , pVkCompileDeferredNV :: FunPtr (Ptr Device_T -> Pipeline -> ("shader" ::: Word32) -> IO Result)
   , pVkCreateAccelerationStructureNV :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureNV) -> IO Result)
+  , pVkCmdBindInvocationMaskHUAWEI :: FunPtr (Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ())
   , pVkDestroyAccelerationStructureKHR :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
   , pVkDestroyAccelerationStructureNV :: FunPtr (Ptr Device_T -> AccelerationStructureNV -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
   , pVkGetAccelerationStructureMemoryRequirementsNV :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2KHR)) -> IO ())
@@ -1016,6 +1017,7 @@
   , pVkDestroyCuModuleNVX :: FunPtr (Ptr Device_T -> CuModuleNVX -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
   , pVkDestroyCuFunctionNVX :: FunPtr (Ptr Device_T -> CuFunctionNVX -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
   , pVkCmdCuLaunchKernelNVX :: FunPtr (Ptr CommandBuffer_T -> ("pLaunchInfo" ::: Ptr CuLaunchInfoNVX) -> IO ())
+  , pVkWaitForPresentKHR :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("presentId" ::: Word64) -> ("timeout" ::: Word64) -> IO Result)
   }
 
 deriving instance Eq DeviceCmds
@@ -1065,6 +1067,7 @@
     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr
 
 foreign import ccall
 #if !defined(SAFE_FOREIGN_CALLS)
@@ -1323,6 +1326,7 @@
   vkCmdDrawMeshTasksIndirectCountNV <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMeshTasksIndirectCountNV"#)
   vkCompileDeferredNV <- getDeviceProcAddr' handle (Ptr "vkCompileDeferredNV"#)
   vkCreateAccelerationStructureNV <- getDeviceProcAddr' handle (Ptr "vkCreateAccelerationStructureNV"#)
+  vkCmdBindInvocationMaskHUAWEI <- getDeviceProcAddr' handle (Ptr "vkCmdBindInvocationMaskHUAWEI"#)
   vkDestroyAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkDestroyAccelerationStructureKHR"#)
   vkDestroyAccelerationStructureNV <- getDeviceProcAddr' handle (Ptr "vkDestroyAccelerationStructureNV"#)
   vkGetAccelerationStructureMemoryRequirementsNV <- getDeviceProcAddr' handle (Ptr "vkGetAccelerationStructureMemoryRequirementsNV"#)
@@ -1428,6 +1432,7 @@
   vkDestroyCuModuleNVX <- getDeviceProcAddr' handle (Ptr "vkDestroyCuModuleNVX"#)
   vkDestroyCuFunctionNVX <- getDeviceProcAddr' handle (Ptr "vkDestroyCuFunctionNVX"#)
   vkCmdCuLaunchKernelNVX <- getDeviceProcAddr' handle (Ptr "vkCmdCuLaunchKernelNVX"#)
+  vkWaitForPresentKHR <- getDeviceProcAddr' handle (Ptr "vkWaitForPresentKHR"#)
   pure $ DeviceCmds handle
     (castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetDeviceProcAddr)
     (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDevice)
@@ -1581,7 +1586,7 @@
     (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: CInt) -> ("pMemoryFdProperties" ::: Ptr MemoryFdPropertiesKHR) -> IO Result) vkGetMemoryFdPropertiesKHR)
     (castFunPtr @_ @(Ptr Device_T -> ("pGetZirconHandleInfo" ::: Ptr MemoryGetZirconHandleInfoFUCHSIA) -> ("pZirconHandle" ::: Ptr Zx_handle_t) -> IO Result) vkGetMemoryZirconHandleFUCHSIA)
     (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("zirconHandle" ::: Zx_handle_t) -> ("pMemoryZirconHandleProperties" ::: Ptr MemoryZirconHandlePropertiesFUCHSIA) -> IO Result) vkGetMemoryZirconHandlePropertiesFUCHSIA)
-    (castFunPtr @_ @(Ptr Device_T -> ("getMemoryRemoteAddressInfo" ::: Ptr MemoryGetRemoteAddressInfoNV) -> ("pAddress" ::: Ptr RemoteAddressNV) -> IO Result) vkGetMemoryRemoteAddressNV)
+    (castFunPtr @_ @(Ptr Device_T -> ("pMemoryGetRemoteAddressInfo" ::: Ptr MemoryGetRemoteAddressInfoNV) -> ("pAddress" ::: Ptr RemoteAddressNV) -> IO Result) vkGetMemoryRemoteAddressNV)
     (castFunPtr @_ @(Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr SemaphoreGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetSemaphoreWin32HandleKHR)
     (castFunPtr @_ @(Ptr Device_T -> ("pImportSemaphoreWin32HandleInfo" ::: Ptr ImportSemaphoreWin32HandleInfoKHR) -> IO Result) vkImportSemaphoreWin32HandleKHR)
     (castFunPtr @_ @(Ptr Device_T -> ("pGetFdInfo" ::: Ptr SemaphoreGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result) vkGetSemaphoreFdKHR)
@@ -1667,6 +1672,7 @@
     (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawMeshTasksIndirectCountNV)
     (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ("shader" ::: Word32) -> IO Result) vkCompileDeferredNV)
     (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureNV) -> IO Result) vkCreateAccelerationStructureNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ()) vkCmdBindInvocationMaskHUAWEI)
     (castFunPtr @_ @(Ptr Device_T -> AccelerationStructureKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyAccelerationStructureKHR)
     (castFunPtr @_ @(Ptr Device_T -> AccelerationStructureNV -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyAccelerationStructureNV)
     (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2KHR)) -> IO ()) vkGetAccelerationStructureMemoryRequirementsNV)
@@ -1772,4 +1778,5 @@
     (castFunPtr @_ @(Ptr Device_T -> CuModuleNVX -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyCuModuleNVX)
     (castFunPtr @_ @(Ptr Device_T -> CuFunctionNVX -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyCuFunctionNVX)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pLaunchInfo" ::: Ptr CuLaunchInfoNVX) -> IO ()) vkCmdCuLaunchKernelNVX)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("presentId" ::: Word64) -> ("timeout" ::: Word64) -> IO Result) vkWaitForPresentKHR)
 
diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs
--- a/src/Vulkan/Extensions.hs
+++ b/src/Vulkan/Extensions.hs
@@ -84,6 +84,7 @@
                           , module Vulkan.Extensions.VK_EXT_scalar_block_layout
                           , module Vulkan.Extensions.VK_EXT_separate_stencil_usage
                           , module Vulkan.Extensions.VK_EXT_shader_atomic_float
+                          , module Vulkan.Extensions.VK_EXT_shader_atomic_float2
                           , module Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation
                           , module Vulkan.Extensions.VK_EXT_shader_image_atomic_int64
                           , module Vulkan.Extensions.VK_EXT_shader_stencil_export
@@ -112,6 +113,7 @@
                           , module Vulkan.Extensions.VK_GOOGLE_display_timing
                           , module Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1
                           , module Vulkan.Extensions.VK_GOOGLE_user_type
+                          , module Vulkan.Extensions.VK_HUAWEI_invocation_mask
                           , module Vulkan.Extensions.VK_IMG_filter_cubic
                           , module Vulkan.Extensions.VK_IMG_format_pvrtc
                           , module Vulkan.Extensions.VK_INTEL_performance_query
@@ -162,6 +164,8 @@
                           , module Vulkan.Extensions.VK_KHR_pipeline_executable_properties
                           , module Vulkan.Extensions.VK_KHR_pipeline_library
                           , module Vulkan.Extensions.VK_KHR_portability_subset
+                          , module Vulkan.Extensions.VK_KHR_present_id
+                          , module Vulkan.Extensions.VK_KHR_present_wait
                           , module Vulkan.Extensions.VK_KHR_push_descriptor
                           , module Vulkan.Extensions.VK_KHR_ray_query
                           , module Vulkan.Extensions.VK_KHR_ray_tracing_pipeline
@@ -330,6 +334,7 @@
 import Vulkan.Extensions.VK_EXT_scalar_block_layout
 import Vulkan.Extensions.VK_EXT_separate_stencil_usage
 import Vulkan.Extensions.VK_EXT_shader_atomic_float
+import Vulkan.Extensions.VK_EXT_shader_atomic_float2
 import Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation
 import Vulkan.Extensions.VK_EXT_shader_image_atomic_int64
 import Vulkan.Extensions.VK_EXT_shader_stencil_export
@@ -358,6 +363,7 @@
 import Vulkan.Extensions.VK_GOOGLE_display_timing
 import Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1
 import Vulkan.Extensions.VK_GOOGLE_user_type
+import Vulkan.Extensions.VK_HUAWEI_invocation_mask
 import Vulkan.Extensions.VK_IMG_filter_cubic
 import Vulkan.Extensions.VK_IMG_format_pvrtc
 import Vulkan.Extensions.VK_INTEL_performance_query
@@ -408,6 +414,8 @@
 import Vulkan.Extensions.VK_KHR_pipeline_executable_properties
 import Vulkan.Extensions.VK_KHR_pipeline_library
 import Vulkan.Extensions.VK_KHR_portability_subset
+import Vulkan.Extensions.VK_KHR_present_id
+import Vulkan.Extensions.VK_KHR_present_wait
 import Vulkan.Extensions.VK_KHR_push_descriptor
 import Vulkan.Extensions.VK_KHR_ray_query
 import Vulkan.Extensions.VK_KHR_ray_tracing_pipeline
diff --git a/src/Vulkan/Extensions/Dependencies.hs b/src/Vulkan/Extensions/Dependencies.hs
--- a/src/Vulkan/Extensions/Dependencies.hs
+++ b/src/Vulkan/Extensions/Dependencies.hs
@@ -18,6 +18,7 @@
 import Vulkan.Extensions.VK_EXT_acquire_xlib_display (pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_astc_decode_mode (pattern EXT_ASTC_DECODE_MODE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_buffer_device_address (pattern EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME)
+import Vulkan.Extensions.VK_EXT_calibrated_timestamps (pattern EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_color_write_enable (pattern EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_conservative_rasterization (pattern EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_debug_marker (pattern EXT_DEBUG_MARKER_EXTENSION_NAME)
@@ -56,6 +57,7 @@
 import Vulkan.Extensions.VK_EXT_sampler_filter_minmax (pattern EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_sample_locations (pattern EXT_SAMPLE_LOCATIONS_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_scalar_block_layout (pattern EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME)
+import Vulkan.Extensions.VK_EXT_shader_atomic_float2 (pattern EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_shader_atomic_float (pattern EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation (pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_shader_image_atomic_int64 (pattern EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME)
@@ -74,6 +76,7 @@
 import Vulkan.Extensions.VK_GGP_frame_token (pattern GGP_FRAME_TOKEN_EXTENSION_NAME)
 import Vulkan.Extensions.VK_GGP_stream_descriptor_surface (pattern GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_GOOGLE_display_timing (pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME)
+import Vulkan.Extensions.VK_HUAWEI_invocation_mask (pattern HUAWEI_INVOCATION_MASK_EXTENSION_NAME)
 import Vulkan.Extensions.VK_INTEL_shader_integer_functions2 (pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_16bit_storage (pattern KHR_16BIT_STORAGE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_8bit_storage (pattern KHR_8BIT_STORAGE_EXTENSION_NAME)
@@ -118,6 +121,8 @@
 import Vulkan.Extensions.VK_KHR_performance_query (pattern KHR_PERFORMANCE_QUERY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_pipeline_executable_properties (pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_portability_subset (pattern KHR_PORTABILITY_SUBSET_EXTENSION_NAME)
+import Vulkan.Extensions.VK_KHR_present_id (pattern KHR_PRESENT_ID_EXTENSION_NAME)
+import Vulkan.Extensions.VK_KHR_present_wait (pattern KHR_PRESENT_WAIT_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_push_descriptor (pattern KHR_PUSH_DESCRIPTOR_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_ray_query (pattern KHR_RAY_QUERY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (pattern KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME)
@@ -379,6 +384,7 @@
     ]
   KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME      -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   KHR_SHADER_CLOCK_EXTENSION_NAME             -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME    -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME   -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   GGP_FRAME_TOKEN_EXTENSION_NAME ->
@@ -440,7 +446,9 @@
     , KHR_MULTIVIEW_EXTENSION_NAME
     , KHR_MAINTENANCE2_EXTENSION_NAME
     ]
-  EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME     -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  KHR_PRESENT_WAIT_EXTENSION_NAME ->
+    [KHR_SWAPCHAIN_EXTENSION_NAME, KHR_PRESENT_ID_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
   NV_COOPERATIVE_MATRIX_EXTENSION_NAME         -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME    -> [NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME]
   EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
@@ -459,19 +467,22 @@
     , KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME
     , KHR_SWAPCHAIN_EXTENSION_NAME
     ]
-  EXT_HEADLESS_SURFACE_EXTENSION_NAME                   -> [KHR_SURFACE_EXTENSION_NAME]
-  KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME              -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  EXT_LINE_RASTERIZATION_EXTENSION_NAME                 -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME                -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  EXT_HOST_QUERY_RESET_EXTENSION_NAME                   -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME             -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME     -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_HEADLESS_SURFACE_EXTENSION_NAME               -> [KHR_SURFACE_EXTENSION_NAME]
+  KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME          -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_LINE_RASTERIZATION_EXTENSION_NAME             -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME            -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_HOST_QUERY_RESET_EXTENSION_NAME               -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME         -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME ->
+    [EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME             -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME             -> [KHR_SWAPCHAIN_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
   EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME               -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME ->
     [EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, KHR_DISPLAY_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
+  KHR_PRESENT_ID_EXTENSION_NAME                       -> [KHR_SWAPCHAIN_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
   NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME         -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   KHR_SYNCHRONIZATION_2_EXTENSION_NAME                -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
@@ -523,6 +534,18 @@
     [ KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME
     , KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME
     , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+    ]
+  HUAWEI_INVOCATION_MASK_EXTENSION_NAME ->
+    [ KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME
+    , KHR_SYNCHRONIZATION_2_EXTENSION_NAME
+    , KHR_SPIRV_1_4_EXTENSION_NAME
+    , KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME
+    , KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME
+    , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+    , EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME
+    , KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
+    , KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME
+    , KHR_MAINTENANCE3_EXTENSION_NAME
     ]
   NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME ->
     [ KHR_EXTERNAL_MEMORY_EXTENSION_NAME
diff --git a/src/Vulkan/Extensions/Handles.hs b/src/Vulkan/Extensions/Handles.hs
--- a/src/Vulkan/Extensions/Handles.hs
+++ b/src/Vulkan/Extensions/Handles.hs
@@ -424,7 +424,8 @@
 -- 'Vulkan.Extensions.VK_KHR_shared_presentable_image.getSwapchainStatusKHR',
 -- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.releaseFullScreenExclusiveModeEXT',
 -- 'Vulkan.Extensions.VK_EXT_hdr_metadata.setHdrMetadataEXT',
--- 'Vulkan.Extensions.VK_AMD_display_native_hdr.setLocalDimmingAMD'
+-- 'Vulkan.Extensions.VK_AMD_display_native_hdr.setLocalDimmingAMD',
+-- 'Vulkan.Extensions.VK_KHR_present_wait.waitForPresentKHR'
 newtype SwapchainKHR = SwapchainKHR Word64
   deriving newtype (Eq, Ord, Storable, Zero)
   deriving anyclass (IsHandle)
diff --git a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
--- a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
+++ b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
@@ -174,7 +174,7 @@
 -- __RESOLVED__: This would be desirable, so that apps converting from
 -- OpenGL ES to Vulkan could get the same output given the same input. But
 -- since sampling and conversion from Y′CBCR images is so loosely defined
--- in OpenGL ES, multiple implementations do it in a way that doesn’t
+-- in OpenGL ES, multiple implementations do it in a way that does not
 -- conform to Vulkan’s requirements. Modifying the OpenGL ES implementation
 -- would be difficult, and would change the output of existing unmodified
 -- applications. Changing the output only for applications that are being
diff --git a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
--- a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
+++ b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
@@ -174,7 +174,7 @@
 -- __RESOLVED__: This would be desirable, so that apps converting from
 -- OpenGL ES to Vulkan could get the same output given the same input. But
 -- since sampling and conversion from Y′CBCR images is so loosely defined
--- in OpenGL ES, multiple implementations do it in a way that doesn’t
+-- in OpenGL ES, multiple implementations do it in a way that does not
 -- conform to Vulkan’s requirements. Modifying the OpenGL ES implementation
 -- would be difficult, and would change the output of existing unmodified
 -- applications. Changing the output only for applications that are being
diff --git a/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
--- a/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
+++ b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
@@ -21,6 +21,8 @@
 --
 --     -   Requires Vulkan 1.0
 --
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
 -- [__Contact__]
 --
 --     -   Daniel Rakos
@@ -100,7 +102,7 @@
 -- type. The proposed API chooses the general approach for the sake of
 -- extensibility.
 --
--- 4) Shouldn’t we use CLOCK_MONOTONIC_RAW instead of CLOCK_MONOTONIC?
+-- 4) Should we use CLOCK_MONOTONIC_RAW instead of CLOCK_MONOTONIC?
 --
 -- __RESOLVED__: CLOCK_MONOTONIC is usable in a wider set of situations,
 -- however, it is subject to NTP adjustments so some use cases may prefer
@@ -126,13 +128,13 @@
 --
 -- __RESOLVED__: Yes, especially as some time domains by definition allow
 -- for that to happen (e.g. CLOCK_MONOTONIC is subject to NTP adjustments).
--- Thus it’s recommended that applications re-calibrate from time to time.
+-- Thus it is recommended that applications re-calibrate from time to time.
 --
 -- 7) Should we add a query for reporting the maximum deviation of the
 -- timestamp values returned by calibrated timestamp queries?
 --
 -- __RESOLVED__: A global query seems inappropriate and difficult to
--- enforce. However, it’s possible to return the maximum deviation any
+-- enforce. However, it is possible to return the maximum deviation any
 -- single calibrated timestamp query can have by sampling one of the time
 -- domains twice as follows:
 --
@@ -146,7 +148,7 @@
 --
 -- __RESOLVED__: Unless the tick of each clock corresponding to the set of
 -- time domains coincides and all clocks can literally be sampled
--- simutaneously, there isn’t really a possibility for the maximum
+-- simutaneously, there is not really a possibility for the maximum
 -- deviation to be zero, so by convention the maximum deviation is always
 -- at least the maximum of the length of the ticks of the set of time
 -- domains calibrated and thus can never be zero.
diff --git a/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot
@@ -21,6 +21,8 @@
 --
 --     -   Requires Vulkan 1.0
 --
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
 -- [__Contact__]
 --
 --     -   Daniel Rakos
@@ -100,7 +102,7 @@
 -- type. The proposed API chooses the general approach for the sake of
 -- extensibility.
 --
--- 4) Shouldn’t we use CLOCK_MONOTONIC_RAW instead of CLOCK_MONOTONIC?
+-- 4) Should we use CLOCK_MONOTONIC_RAW instead of CLOCK_MONOTONIC?
 --
 -- __RESOLVED__: CLOCK_MONOTONIC is usable in a wider set of situations,
 -- however, it is subject to NTP adjustments so some use cases may prefer
@@ -126,13 +128,13 @@
 --
 -- __RESOLVED__: Yes, especially as some time domains by definition allow
 -- for that to happen (e.g. CLOCK_MONOTONIC is subject to NTP adjustments).
--- Thus it’s recommended that applications re-calibrate from time to time.
+-- Thus it is recommended that applications re-calibrate from time to time.
 --
 -- 7) Should we add a query for reporting the maximum deviation of the
 -- timestamp values returned by calibrated timestamp queries?
 --
 -- __RESOLVED__: A global query seems inappropriate and difficult to
--- enforce. However, it’s possible to return the maximum deviation any
+-- enforce. However, it is possible to return the maximum deviation any
 -- single calibrated timestamp query can have by sampling one of the time
 -- domains twice as follows:
 --
@@ -146,7 +148,7 @@
 --
 -- __RESOLVED__: Unless the tick of each clock corresponding to the set of
 -- time domains coincides and all clocks can literally be sampled
--- simutaneously, there isn’t really a possibility for the maximum
+-- simutaneously, there is not really a possibility for the maximum
 -- deviation to be zero, so by convention the maximum deviation is always
 -- at least the maximum of the length of the ticks of the set of time
 -- domains calibrated and thus can never be zero.
diff --git a/src/Vulkan/Extensions/VK_EXT_color_write_enable.hs b/src/Vulkan/Extensions/VK_EXT_color_write_enable.hs
--- a/src/Vulkan/Extensions/VK_EXT_color_write_enable.hs
+++ b/src/Vulkan/Extensions/VK_EXT_color_write_enable.hs
@@ -352,12 +352,15 @@
 --
 -- Color Write Enable interacts with the
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-color-write-mask Color Write Mask>
--- as follows: * If @colorWriteEnable@ is
--- 'Vulkan.Core10.FundamentalTypes.TRUE', writes to the attachment are
--- determined by the @colorWriteMask@. * If @colorWriteEnable@ is
--- 'Vulkan.Core10.FundamentalTypes.FALSE', the @colorWriteMask@ is ignored
--- and writes to all components of the attachment are disabled. This is
--- equivalent to specifying a @colorWriteMask@ of 0.
+-- as follows:
+--
+-- -   If @colorWriteEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
+--     writes to the attachment are determined by the @colorWriteMask@.
+--
+-- -   If @colorWriteEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE', the
+--     @colorWriteMask@ is ignored and writes to all components of the
+--     attachment are disabled. This is equivalent to specifying a
+--     @colorWriteMask@ of 0.
 --
 -- == Valid Usage
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
--- a/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
+++ b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
@@ -266,22 +266,23 @@
     -- primitives.
     conservativePointAndLineRasterization :: Bool
   , -- | #limits-degenerateTrianglesRasterized# @degenerateTrianglesRasterized@
-    -- is false if the implementation culls primitives generated from triangles
-    -- that become zero area after they are quantized to the fixed-point
-    -- rasterization pixel grid. @degenerateTrianglesRasterized@ is
-    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if these primitives are not culled
-    -- and the provoking vertex attributes and depth value are used for the
-    -- fragments. The primitive area calculation is done on the primitive
-    -- generated from the clipped triangle if applicable. Zero area primitives
-    -- are backfacing and the application /can/ enable backface culling if
-    -- desired.
-    degenerateTrianglesRasterized :: Bool
-  , -- | #limits-degenerateLinesRasterized# @degenerateLinesRasterized@ is false
-    -- if the implementation culls lines that become zero length after they are
+    -- is 'Vulkan.Core10.FundamentalTypes.FALSE' if the implementation culls
+    -- primitives generated from triangles that become zero area after they are
     -- quantized to the fixed-point rasterization pixel grid.
-    -- @degenerateLinesRasterized@ is 'Vulkan.Core10.FundamentalTypes.TRUE' if
-    -- zero length lines are not culled and the provoking vertex attributes and
-    -- depth value are used for the fragments.
+    -- @degenerateTrianglesRasterized@ is 'Vulkan.Core10.FundamentalTypes.TRUE'
+    -- if these primitives are not culled and the provoking vertex attributes
+    -- and depth value are used for the fragments. The primitive area
+    -- calculation is done on the primitive generated from the clipped triangle
+    -- if applicable. Zero area primitives are backfacing and the application
+    -- /can/ enable backface culling if desired.
+    degenerateTrianglesRasterized :: Bool
+  , -- | #limits-degenerateLinesRasterized# @degenerateLinesRasterized@ is
+    -- 'Vulkan.Core10.FundamentalTypes.FALSE' if the implementation culls lines
+    -- that become zero length after they are quantized to the fixed-point
+    -- rasterization pixel grid. @degenerateLinesRasterized@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if zero length lines are not
+    -- culled and the provoking vertex attributes and depth value are used for
+    -- the fragments.
     degenerateLinesRasterized :: Bool
   , -- | #limits-fullyCoveredFragmentShaderInputVariable#
     -- @fullyCoveredFragmentShaderInputVariable@ is
diff --git a/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs b/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs
--- a/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs
+++ b/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs
@@ -167,8 +167,8 @@
 -- color types be separated or should they be combined into one generic INT
 -- (integer) type?
 --
--- __RESOLVED__: Separating these doesn’t make much sense as the existing
--- fixed border color types don’t have this distinction, and there is no
+-- __RESOLVED__: Separating these does not make much sense as the existing
+-- fixed border color types do not have this distinction, and there is no
 -- reason in hardware to do so. This separation would also create
 -- unnecessary work and considerations for the application.
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs-boot b/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs-boot
@@ -167,8 +167,8 @@
 -- color types be separated or should they be combined into one generic INT
 -- (integer) type?
 --
--- __RESOLVED__: Separating these doesn’t make much sense as the existing
--- fixed border color types don’t have this distinction, and there is no
+-- __RESOLVED__: Separating these does not make much sense as the existing
+-- fixed border color types do not have this distinction, and there is no
 -- reason in hardware to do so. This separation would also create
 -- unnecessary work and considerations for the application.
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs
--- a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs
+++ b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs
@@ -423,8 +423,8 @@
 -- statements, it may take a while before the new functionality is fully
 -- exposed.
 --
--- 3) If the validation layers won’t expose the new functionality
--- immediately, then what’s the point of this extension?
+-- 3) If the validation layers will not expose the new functionality
+-- immediately, then what is the point of this extension?
 --
 -- __RESOLVED__: We needed a replacement for @VK_EXT_debug_report@ because
 -- the 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT'
@@ -440,9 +440,9 @@
 -- related. If we did split up the extension, where would the structures
 -- and enums live, and how would you define that the device behavior in the
 -- instance extension is really only valid if the device extension is
--- enabled, and the functionality is passed in. It’s cleaner to just define
--- this all as an instance extension, plus it allows the application to
--- enable all debug functionality provided with one enable string during
+-- enabled, and the functionality is passed in. It is cleaner to just
+-- define this all as an instance extension, plus it allows the application
+-- to enable all debug functionality provided with one enable string during
 -- 'Vulkan.Core10.DeviceInitialization.createInstance'.
 --
 -- == Version History
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
@@ -423,8 +423,8 @@
 -- statements, it may take a while before the new functionality is fully
 -- exposed.
 --
--- 3) If the validation layers won’t expose the new functionality
--- immediately, then what’s the point of this extension?
+-- 3) If the validation layers will not expose the new functionality
+-- immediately, then what is the point of this extension?
 --
 -- __RESOLVED__: We needed a replacement for @VK_EXT_debug_report@ because
 -- the 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT'
@@ -440,9 +440,9 @@
 -- related. If we did split up the extension, where would the structures
 -- and enums live, and how would you define that the device behavior in the
 -- instance extension is really only valid if the device extension is
--- enabled, and the functionality is passed in. It’s cleaner to just define
--- this all as an instance extension, plus it allows the application to
--- enable all debug functionality provided with one enable string during
+-- enabled, and the functionality is passed in. It is cleaner to just
+-- define this all as an instance extension, plus it allows the application
+-- to enable all debug functionality provided with one enable string during
 -- 'Vulkan.Core10.DeviceInitialization.createInstance'.
 --
 -- == Version History
diff --git a/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs
--- a/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs
+++ b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs
@@ -118,18 +118,18 @@
 -- bindings of resources to 'Vulkan.Core10.Handles.DeviceMemory') would
 -- have to intercept all entry points that take a
 -- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' parameter and
--- inject its own @pfnInternalAllocation@ and @pfnInternalFree@. That’s
--- maybe doable for the extensions we know about, but not for ones we
--- don’t. The proposal would work fine in the face of most unknown
--- extensions. But even for ones we know about, since apps can provide a
--- different set of callbacks and userdata and those can be retained by the
--- driver and used later (esp. for pool object, but not just those), we’d
--- have to dynamically allocate the interception trampoline every time.
--- That’s getting to be an unreasonably large amount of complexity and
--- (possibly) overhead.
+-- inject its own @pfnInternalAllocation@ and @pfnInternalFree@. That may
+-- be doable for the extensions we know about, but not for ones we do not.
+-- The proposal would work fine in the face of most unknown extensions. But
+-- even for ones we know about, since apps can provide a different set of
+-- callbacks and userdata and those can be retained by the driver and used
+-- later (esp. for pool object, but not just those), we would have to
+-- dynamically allocate the interception trampoline every time. That is
+-- getting to be an unreasonably large amount of complexity and (possibly)
+-- overhead.
 --
--- We’re interested in both alloc\/free and import\/unimport. The latter is
--- fairly important for tracking (and avoiding double-counting) of
+-- We are interested in both alloc\/free and import\/unimport. The latter
+-- is fairly important for tracking (and avoiding double-counting) of
 -- swapchain images (still true with “native swapchains” based on external
 -- memory) and media\/camera interop. Though we might be able to handle
 -- this with additional
@@ -140,10 +140,10 @@
 -- The internal alloc\/free callbacks are not extensible except via new
 -- 'Vulkan.Core10.Enums.InternalAllocationType.InternalAllocationType'
 -- values. The 'DeviceMemoryReportCallbackDataEXT' in this extension is
--- extensible. That was deliberate: there’s a real possibility we’ll want
--- to get extra information in the future. As one example, currently this
--- reports only physical allocations, but we believe there are interesting
--- cases for tracking how populated that VA region is.
+-- extensible. That was deliberate: there is a real possibility we will
+-- want to get extra information in the future. As one example, currently
+-- this reports only physical allocations, but we believe there are
+-- interesting cases for tracking how populated that VA region is.
 --
 -- The callbacks are clearly specified as only callable within the context
 -- of a call from the app into Vulkan. We believe there are some cases
@@ -159,12 +159,12 @@
 --
 -- 3) Should the callback be reporting which heap is used?
 --
--- __RESOLVED__: Yes. It’s important for non-UMA systems to have all the
+-- __RESOLVED__: Yes. It is important for non-UMA systems to have all the
 -- device memory allocations attributed to the corresponding device memory
 -- heaps. For internally-allocated device memory, @heapIndex@ will always
 -- correspond to an advertised heap, rather than having a magic value
--- indicating a non-advertised heap. Drivers can advertise heaps that don’t
--- have any corresponding memory types if they need to.
+-- indicating a non-advertised heap. Drivers can advertise heaps that do
+-- not have any corresponding memory types if they need to.
 --
 -- 4) Should we use an array of callback for the layers to intercept
 -- instead of chaining multiple of the
@@ -173,9 +173,9 @@
 --
 -- __RESOLVED__ No. The pointer to the
 -- 'DeviceDeviceMemoryReportCreateInfoEXT' structure itself is const and
--- you can’t just cast it away. Thus we can’t update the callback array
--- inside the structure. In addition, we can’t drop this @pNext@ chain
--- either, so making a copy of this whole structure doesn’t work either.
+-- you cannot just cast it away. Thus we cannot update the callback array
+-- inside the structure. In addition, we cannot drop this @pNext@ chain
+-- either, so making a copy of this whole structure does not work either.
 --
 -- 5) Should we track bulk allocations shared among multiple objects?
 --
@@ -197,7 +197,7 @@
 -- __RESOLVED__ No. Some implementations might choose to multiplex work
 -- from multiple application threads into a single backend thread and
 -- perform JIT allocations as a part of that flow. Since this behavior is
--- theoretically legit, we can’t require the callbacks to be always called
+-- theoretically legit, we cannot require the callbacks to be always called
 -- in the same thread with the Vulkan commands, and the note is to remind
 -- the applications to handle this case properly.
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs-boot b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs-boot
@@ -118,18 +118,18 @@
 -- bindings of resources to 'Vulkan.Core10.Handles.DeviceMemory') would
 -- have to intercept all entry points that take a
 -- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' parameter and
--- inject its own @pfnInternalAllocation@ and @pfnInternalFree@. That’s
--- maybe doable for the extensions we know about, but not for ones we
--- don’t. The proposal would work fine in the face of most unknown
--- extensions. But even for ones we know about, since apps can provide a
--- different set of callbacks and userdata and those can be retained by the
--- driver and used later (esp. for pool object, but not just those), we’d
--- have to dynamically allocate the interception trampoline every time.
--- That’s getting to be an unreasonably large amount of complexity and
--- (possibly) overhead.
+-- inject its own @pfnInternalAllocation@ and @pfnInternalFree@. That may
+-- be doable for the extensions we know about, but not for ones we do not.
+-- The proposal would work fine in the face of most unknown extensions. But
+-- even for ones we know about, since apps can provide a different set of
+-- callbacks and userdata and those can be retained by the driver and used
+-- later (esp. for pool object, but not just those), we would have to
+-- dynamically allocate the interception trampoline every time. That is
+-- getting to be an unreasonably large amount of complexity and (possibly)
+-- overhead.
 --
--- We’re interested in both alloc\/free and import\/unimport. The latter is
--- fairly important for tracking (and avoiding double-counting) of
+-- We are interested in both alloc\/free and import\/unimport. The latter
+-- is fairly important for tracking (and avoiding double-counting) of
 -- swapchain images (still true with “native swapchains” based on external
 -- memory) and media\/camera interop. Though we might be able to handle
 -- this with additional
@@ -140,10 +140,10 @@
 -- The internal alloc\/free callbacks are not extensible except via new
 -- 'Vulkan.Core10.Enums.InternalAllocationType.InternalAllocationType'
 -- values. The 'DeviceMemoryReportCallbackDataEXT' in this extension is
--- extensible. That was deliberate: there’s a real possibility we’ll want
--- to get extra information in the future. As one example, currently this
--- reports only physical allocations, but we believe there are interesting
--- cases for tracking how populated that VA region is.
+-- extensible. That was deliberate: there is a real possibility we will
+-- want to get extra information in the future. As one example, currently
+-- this reports only physical allocations, but we believe there are
+-- interesting cases for tracking how populated that VA region is.
 --
 -- The callbacks are clearly specified as only callable within the context
 -- of a call from the app into Vulkan. We believe there are some cases
@@ -159,12 +159,12 @@
 --
 -- 3) Should the callback be reporting which heap is used?
 --
--- __RESOLVED__: Yes. It’s important for non-UMA systems to have all the
+-- __RESOLVED__: Yes. It is important for non-UMA systems to have all the
 -- device memory allocations attributed to the corresponding device memory
 -- heaps. For internally-allocated device memory, @heapIndex@ will always
 -- correspond to an advertised heap, rather than having a magic value
--- indicating a non-advertised heap. Drivers can advertise heaps that don’t
--- have any corresponding memory types if they need to.
+-- indicating a non-advertised heap. Drivers can advertise heaps that do
+-- not have any corresponding memory types if they need to.
 --
 -- 4) Should we use an array of callback for the layers to intercept
 -- instead of chaining multiple of the
@@ -173,9 +173,9 @@
 --
 -- __RESOLVED__ No. The pointer to the
 -- 'DeviceDeviceMemoryReportCreateInfoEXT' structure itself is const and
--- you can’t just cast it away. Thus we can’t update the callback array
--- inside the structure. In addition, we can’t drop this @pNext@ chain
--- either, so making a copy of this whole structure doesn’t work either.
+-- you cannot just cast it away. Thus we cannot update the callback array
+-- inside the structure. In addition, we cannot drop this @pNext@ chain
+-- either, so making a copy of this whole structure does not work either.
 --
 -- 5) Should we track bulk allocations shared among multiple objects?
 --
@@ -197,7 +197,7 @@
 -- __RESOLVED__ No. Some implementations might choose to multiplex work
 -- from multiple application threads into a single backend thread and
 -- perform JIT allocations as a part of that flow. Since this behavior is
--- theoretically legit, we can’t require the callbacks to be always called
+-- theoretically legit, we cannot require the callbacks to be always called
 -- in the same thread with the Vulkan commands, and the note is to remind
 -- the applications to handle this case properly.
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_extended_dynamic_state.hs b/src/Vulkan/Extensions/VK_EXT_extended_dynamic_state.hs
--- a/src/Vulkan/Extensions/VK_EXT_extended_dynamic_state.hs
+++ b/src/Vulkan/Extensions/VK_EXT_extended_dynamic_state.hs
@@ -756,7 +756,8 @@
 --     'Vulkan.Core10.Handles.CommandBuffer' handle
 --
 -- -   #VUID-vkCmdBindVertexBuffers2EXT-pBuffers-parameter# @pBuffers@
---     /must/ be a valid pointer to an array of @bindingCount@ valid
+--     /must/ be a valid pointer to an array of @bindingCount@ valid or
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --     'Vulkan.Core10.Handles.Buffer' handles
 --
 -- -   #VUID-vkCmdBindVertexBuffers2EXT-pOffsets-parameter# @pOffsets@
@@ -784,9 +785,9 @@
 --     greater than @0@
 --
 -- -   #VUID-vkCmdBindVertexBuffers2EXT-commonparent# Both of
---     @commandBuffer@, and the elements of @pBuffers@ /must/ have been
---     created, allocated, or retrieved from the same
---     'Vulkan.Core10.Handles.Device'
+--     @commandBuffer@, and the elements of @pBuffers@ that are valid
+--     handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
 --
 -- == Host Synchronization
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_extended_dynamic_state2.hs b/src/Vulkan/Extensions/VK_EXT_extended_dynamic_state2.hs
--- a/src/Vulkan/Extensions/VK_EXT_extended_dynamic_state2.hs
+++ b/src/Vulkan/Extensions/VK_EXT_extended_dynamic_state2.hs
@@ -175,8 +175,8 @@
   "dynamic" mkVkCmdSetPatchControlPointsEXT
   :: FunPtr (Ptr CommandBuffer_T -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> IO ()
 
--- | vkCmdSetPatchControlPointsEXT - specifies the number of control points
--- per patch
+-- | vkCmdSetPatchControlPointsEXT - Specify the number of control points per
+-- patch
 --
 -- = Description
 --
@@ -411,7 +411,7 @@
   "dynamic" mkVkCmdSetLogicOpEXT
   :: FunPtr (Ptr CommandBuffer_T -> LogicOp -> IO ()) -> Ptr CommandBuffer_T -> LogicOp -> IO ()
 
--- | vkCmdSetLogicOpEXT - selects which logical operation to apply for blend
+-- | vkCmdSetLogicOpEXT - Select which logical operation to apply for blend
 -- state
 --
 -- = Description
@@ -489,7 +489,7 @@
   "dynamic" mkVkCmdSetPrimitiveRestartEnableEXT
   :: FunPtr (Ptr CommandBuffer_T -> Bool32 -> IO ()) -> Ptr CommandBuffer_T -> Bool32 -> IO ()
 
--- | vkCmdSetPrimitiveRestartEnableEXT - controls whether a special vertex
+-- | vkCmdSetPrimitiveRestartEnableEXT - Control whether a special vertex
 -- index value is treated as restarting the assembly of primitives
 --
 -- = Description
diff --git a/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs
--- a/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs
+++ b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs
@@ -112,14 +112,14 @@
 -- 3) Can the application free the host allocation?
 --
 -- __RESOLVED__: No, it violates valid usage conditions. Using the memory
--- object imported from a host allocation that’s already freed thus results
--- in undefined behavior.
+-- object imported from a host allocation that is already freed thus
+-- results in undefined behavior.
 --
 -- 4) Is 'Vulkan.Core10.Memory.mapMemory' expected to return the same host
 -- address which was specified when importing it to the memory object?
 --
 -- __RESOLVED__: No. Implementations are allowed to return the same address
--- but it’s not required. Some implementations might return a different
+-- but it is not required. Some implementations might return a different
 -- virtual mapping of the allocation, although the same physical pages will
 -- be used.
 --
@@ -312,7 +312,7 @@
   pure $ (pMemoryHostPointerProperties)
 
 
--- | VkImportMemoryHostPointerInfoEXT - import memory from a host pointer
+-- | VkImportMemoryHostPointerInfoEXT - Import memory from a host pointer
 --
 -- = Description
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot
@@ -112,14 +112,14 @@
 -- 3) Can the application free the host allocation?
 --
 -- __RESOLVED__: No, it violates valid usage conditions. Using the memory
--- object imported from a host allocation that’s already freed thus results
--- in undefined behavior.
+-- object imported from a host allocation that is already freed thus
+-- results in undefined behavior.
 --
 -- 4) Is 'Vulkan.Core10.Memory.mapMemory' expected to return the same host
 -- address which was specified when importing it to the memory object?
 --
 -- __RESOLVED__: No. Implementations are allowed to return the same address
--- but it’s not required. Some implementations might return a different
+-- but it is not required. Some implementations might return a different
 -- virtual mapping of the allocation, although the same physical pages will
 -- be used.
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_global_priority.hs b/src/Vulkan/Extensions/VK_EXT_global_priority.hs
--- a/src/Vulkan/Extensions/VK_EXT_global_priority.hs
+++ b/src/Vulkan/Extensions/VK_EXT_global_priority.hs
@@ -48,8 +48,8 @@
 --
 -- In Vulkan, users can specify device-scope queue priorities. In some
 -- cases it may be useful to extend this concept to a system-wide scope.
--- This extension provides a mechanism for caller’s to set their
--- system-wide priority. The default queue priority is
+-- This extension provides a mechanism for callers to set their system-wide
+-- priority. The default queue priority is
 -- 'QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT'.
 --
 -- The driver implementation will attempt to skew hardware resource
diff --git a/src/Vulkan/Extensions/VK_EXT_global_priority.hs-boot b/src/Vulkan/Extensions/VK_EXT_global_priority.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_global_priority.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_global_priority.hs-boot
@@ -48,8 +48,8 @@
 --
 -- In Vulkan, users can specify device-scope queue priorities. In some
 -- cases it may be useful to extend this concept to a system-wide scope.
--- This extension provides a mechanism for caller’s to set their
--- system-wide priority. The default queue priority is
+-- This extension provides a mechanism for callers to set their system-wide
+-- priority. The default queue priority is
 -- 'QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT'.
 --
 -- The driver implementation will attempt to skew hardware resource
diff --git a/src/Vulkan/Extensions/VK_EXT_global_priority_query.hs b/src/Vulkan/Extensions/VK_EXT_global_priority_query.hs
--- a/src/Vulkan/Extensions/VK_EXT_global_priority_query.hs
+++ b/src/Vulkan/Extensions/VK_EXT_global_priority_query.hs
@@ -86,13 +86,14 @@
 -- specific global queue priority in this extension?
 --
 -- __RESOLVED__: No. Whether a caller has enough privilege goes with the
--- OS, and the Vulkan driver can’t really guarantee that the privilege
--- won’t change in between this query and the actual queue creation call.
+-- OS, and the Vulkan driver cannot really guarantee that the privilege
+-- will not change in between this query and the actual queue creation
+-- call.
 --
 -- 2) If more than 1 queue using global priority is requested, is there a
 -- good way to know which queue is failing the device creation?
 --
--- __RESOLVED__: No. There isn’t a good way at this moment and it’s also
+-- __RESOLVED__: No. There is not a good way at this moment, and it is also
 -- not quite actionable for the applications to know that because the
 -- information may not be accurate. Queue creation can fail because of
 -- runtime constraints like insufficient privilege or lack of resource, and
@@ -237,8 +238,8 @@
            zero
 
 
--- | VkQueueFamilyGlobalPriorityPropertiesEXT - return structure for queue
--- family global priority info query
+-- | VkQueueFamilyGlobalPriorityPropertiesEXT - Return structure for queue
+-- family global priority information query
 --
 -- = Description
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_global_priority_query.hs-boot b/src/Vulkan/Extensions/VK_EXT_global_priority_query.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_global_priority_query.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_global_priority_query.hs-boot
@@ -86,13 +86,14 @@
 -- specific global queue priority in this extension?
 --
 -- __RESOLVED__: No. Whether a caller has enough privilege goes with the
--- OS, and the Vulkan driver can’t really guarantee that the privilege
--- won’t change in between this query and the actual queue creation call.
+-- OS, and the Vulkan driver cannot really guarantee that the privilege
+-- will not change in between this query and the actual queue creation
+-- call.
 --
 -- 2) If more than 1 queue using global priority is requested, is there a
 -- good way to know which queue is failing the device creation?
 --
--- __RESOLVED__: No. There isn’t a good way at this moment and it’s also
+-- __RESOLVED__: No. There is not a good way at this moment, and it is also
 -- not quite actionable for the applications to know that because the
 -- information may not be accurate. Queue creation can fail because of
 -- runtime constraints like insufficient privilege or lack of resource, and
diff --git a/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs b/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
--- a/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
+++ b/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
@@ -181,7 +181,7 @@
   "dynamic" mkVkSetHdrMetadataEXT
   :: FunPtr (Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr HdrMetadataEXT -> IO ()) -> Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr HdrMetadataEXT -> IO ()
 
--- | vkSetHdrMetadataEXT - function to set Hdr metadata
+-- | vkSetHdrMetadataEXT - Set Hdr metadata
 --
 -- == Valid Usage (Implicit)
 --
@@ -234,7 +234,7 @@
   pure $ ()
 
 
--- | VkXYColorEXT - structure to specify X,Y chromaticity coordinates
+-- | VkXYColorEXT - Specify X,Y chromaticity coordinates
 --
 -- = See Also
 --
@@ -283,7 +283,7 @@
            zero
 
 
--- | VkHdrMetadataEXT - structure to specify Hdr metadata
+-- | VkHdrMetadataEXT - Specify Hdr metadata
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_multi_draw.hs b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs
--- a/src/Vulkan/Extensions/VK_EXT_multi_draw.hs
+++ b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs
@@ -783,7 +783,7 @@
                    -- recorded.
                    CommandBuffer
                 -> -- | @pVertexInfo@ is a pointer to an array of 'MultiDrawInfoEXT' with vertex
-                   -- info to be drawn.
+                   -- information to be drawn.
                    ("vertexInfo" ::: Vector MultiDrawInfoEXT)
                 -> -- | @instanceCount@ is the number of instances to draw.
                    ("instanceCount" ::: Word32)
@@ -1425,7 +1425,7 @@
                           -- recorded.
                           CommandBuffer
                        -> -- | @pIndexInfo@ is a pointer to an array of 'MultiDrawIndexedInfoEXT' with
-                          -- index info to be drawn.
+                          -- index information to be drawn.
                           ("indexInfo" ::: Vector MultiDrawIndexedInfoEXT)
                        -> -- | @instanceCount@ is the number of instances to draw.
                           ("instanceCount" ::: Word32)
diff --git a/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs
--- a/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs
+++ b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs
@@ -53,9 +53,9 @@
 --
 -- DRM defines multiple device node types. Each physical device may have
 -- one primary node and one render node associated. Physical devices may
--- have no primary node (e.g. if the device doesn’t have a display
--- subsystem), may have no render node (e.g. if it’s a software rendering
--- engine), or may have neither (e.g. if it’s a software rendering engine
+-- have no primary node (e.g. if the device does not have a display
+-- subsystem), may have no render node (e.g. if it is a software rendering
+-- engine), or may have neither (e.g. if it is a software rendering engine
 -- without a display subsystem).
 --
 -- To query DRM properties for a physical device, chain
diff --git a/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot
@@ -53,9 +53,9 @@
 --
 -- DRM defines multiple device node types. Each physical device may have
 -- one primary node and one render node associated. Physical devices may
--- have no primary node (e.g. if the device doesn’t have a display
--- subsystem), may have no render node (e.g. if it’s a software rendering
--- engine), or may have neither (e.g. if it’s a software rendering engine
+-- have no primary node (e.g. if the device does not have a display
+-- subsystem), may have no render node (e.g. if it is a software rendering
+-- engine), or may have neither (e.g. if it is a software rendering engine
 -- without a display subsystem).
 --
 -- To query DRM properties for a physical device, chain
diff --git a/src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs b/src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs
--- a/src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs
+++ b/src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs
@@ -143,7 +143,7 @@
 -- written to transform feedback buffers such that flat-shaded attributes
 -- have the same value when drawing the contents of the transform feedback
 -- buffer as they did in the original drawing when the transform feedback
--- buffer was written (assuming the provoking vertex mode hasn’t changed,
+-- buffer was written (assuming the provoking vertex mode has not changed,
 -- in APIs that support more than one mode).
 --
 -- == Version History
@@ -152,7 +152,7 @@
 --
 --     -   Added
 --         VkPhysicalDeviceProvokingVertexPropertiesEXT::transformFeedbackPreservesTriangleFanProvokingVertex
---         to accommodate implementations that can’t change the transform
+--         to accommodate implementations that cannot change the transform
 --         feedback vertex order for triangle fans.
 --
 -- -   Revision 1(b), 2020-06-14 (Jesse Hall)
diff --git a/src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs-boot b/src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs-boot
@@ -143,7 +143,7 @@
 -- written to transform feedback buffers such that flat-shaded attributes
 -- have the same value when drawing the contents of the transform feedback
 -- buffer as they did in the original drawing when the transform feedback
--- buffer was written (assuming the provoking vertex mode hasn’t changed,
+-- buffer was written (assuming the provoking vertex mode has not changed,
 -- in APIs that support more than one mode).
 --
 -- == Version History
@@ -152,7 +152,7 @@
 --
 --     -   Added
 --         VkPhysicalDeviceProvokingVertexPropertiesEXT::transformFeedbackPreservesTriangleFanProvokingVertex
---         to accommodate implementations that can’t change the transform
+--         to accommodate implementations that cannot change the transform
 --         feedback vertex order for triangle fans.
 --
 -- -   Revision 1(b), 2020-06-14 (Jesse Hall)
diff --git a/src/Vulkan/Extensions/VK_EXT_robustness2.hs b/src/Vulkan/Extensions/VK_EXT_robustness2.hs
--- a/src/Vulkan/Extensions/VK_EXT_robustness2.hs
+++ b/src/Vulkan/Extensions/VK_EXT_robustness2.hs
@@ -58,7 +58,7 @@
 -- This extension also adds support for “null descriptors”, where
 -- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /can/ be used instead of a
 -- valid handle. Accesses to null descriptors have well-defined behavior,
--- and don’t rely on robustness.
+-- and do not rely on robustness.
 --
 -- == New Structures
 --
@@ -93,7 +93,7 @@
 --     'PhysicalDeviceRobustness2PropertiesEXT'::@robustStorageBufferAccessSizeAlignment@
 --     exist?
 --
--- __RESOLVED__: Some implementations can’t efficiently tightly
+-- __RESOLVED__: Some implementations cannot efficiently tightly
 -- bounds-check all buffer accesses. Rather, the size of the bound range is
 -- padded to some power of two multiple, up to 256 bytes for uniform
 -- buffers and up to 4 bytes for storage buffers, and that padded size is
diff --git a/src/Vulkan/Extensions/VK_EXT_robustness2.hs-boot b/src/Vulkan/Extensions/VK_EXT_robustness2.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_robustness2.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_robustness2.hs-boot
@@ -58,7 +58,7 @@
 -- This extension also adds support for “null descriptors”, where
 -- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /can/ be used instead of a
 -- valid handle. Accesses to null descriptors have well-defined behavior,
--- and don’t rely on robustness.
+-- and do not rely on robustness.
 --
 -- == New Structures
 --
@@ -93,7 +93,7 @@
 --     'PhysicalDeviceRobustness2PropertiesEXT'::@robustStorageBufferAccessSizeAlignment@
 --     exist?
 --
--- __RESOLVED__: Some implementations can’t efficiently tightly
+-- __RESOLVED__: Some implementations cannot efficiently tightly
 -- bounds-check all buffer accesses. Rather, the size of the bound range is
 -- padded to some power of two multiple, up to 256 bytes for uniform
 -- buffers and up to 4 bytes for storage buffers, and that padded size is
diff --git a/src/Vulkan/Extensions/VK_EXT_shader_atomic_float2.hs b/src/Vulkan/Extensions/VK_EXT_shader_atomic_float2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_shader_atomic_float2.hs
@@ -0,0 +1,329 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_shader_atomic_float2 - device extension
+--
+-- == VK_EXT_shader_atomic_float2
+--
+-- [__Name String__]
+--     @VK_EXT_shader_atomic_float2@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     274
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_EXT_shader_atomic_float@
+--
+-- [__Contact__]
+--
+--     -   Jason Ekstrand
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_EXT_shader_atomic_float2:%20&body=@jekstrand%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2020-08-14
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Interactions and External Dependencies__]
+--
+--     -   This extension requires the VK_EXT_shader_atomic_float
+--         extension.
+--
+--     -   This extension requires
+--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/EXT/SPV_EXT_shader_atomic_float_min_max.html SPV_EXT_shader_atomic_float_min_max>
+--         and
+--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/EXT/SPV_EXT_shader_atomic_float16_add.html SPV_EXT_shader_atomic_float16_add>
+--
+--     -   This extension provides API support for
+--         <https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_shader_atomic_float2.txt GLSL_EXT_shader_atomic_float2>
+--
+-- [__Contributors__]
+--
+--     -   Jason Ekstrand, Intel
+--
+-- == Description
+--
+-- This extension allows a shader to perform 16-bit floating-point atomic
+-- operations on buffer and workgroup memory as well as floating-point
+-- atomic minimum and maximum operations on buffer, workgroup, and image
+-- memory. It advertises the SPIR-V @AtomicFloat16AddEXT@ capability which
+-- allows atomic add operations on 16-bit floating-point numbers and the
+-- SPIR-V @AtomicFloat16MinMaxEXT@, @AtomicFloat32MinMaxEXT@ and
+-- @AtomicFloat64MinMaxEXT@ capabilities which allow atomic minimum and
+-- maximum operations on floating-point numbers. The supported operations
+-- include @OpAtomicFAddEXT@, @OpAtomicFMinEXT@ and @OpAtomicFMaxEXT@.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceShaderAtomicFloat2FeaturesEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME'
+--
+-- -   'EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT'
+--
+-- == Issues
+--
+-- 1) Should this extension add support for 16-bit image atomics?
+--
+-- __RESOLVED__: No. While Vulkan supports creating storage images with
+-- 'Vulkan.Core10.Enums.Format.FORMAT_R16_SFLOAT' and doing load and store
+-- on them, the data in the shader has a 32-bit representation. Vulkan
+-- currently has no facility for even basic reading or writing such images
+-- using 16-bit float values in the shader. Adding such functionality would
+-- be required before 16-bit image atomics would make sense and is outside
+-- the scope of this extension.
+--
+-- == New SPIR-V Capabilities
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-AtomicFloat16AddEXT AtomicFloat32MinMaxEXT>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-AtomicFloat16MinMaxEXT AtomicFloat32MinMaxEXT>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-AtomicFloat32MinMaxEXT AtomicFloat32MinMaxEXT>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-AtomicFloat64MinMaxEXT AtomicFloat64MinMaxEXT>
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-08-14 (Jason Ekstrand)
+--
+--     -   Internal revisions
+--
+-- = See Also
+--
+-- 'PhysicalDeviceShaderAtomicFloat2FeaturesEXT'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_shader_atomic_float2 Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_EXT_shader_atomic_float2  ( PhysicalDeviceShaderAtomicFloat2FeaturesEXT(..)
+                                                      , EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION
+                                                      , pattern EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION
+                                                      , EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME
+                                                      , pattern EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME
+                                                      ) where
+
+import Foreign.Marshal.Alloc (allocaBytes)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT))
+-- | VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT - Structure describing
+-- features supported by VK_EXT_shader_atomic_float2
+--
+-- = Members
+--
+-- This structure describes the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderAtomicFloat2FeaturesEXT' structure is
+-- included in the @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
+-- structure passed to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
+-- it is filled in to indicate whether each corresponding feature is
+-- supported. 'PhysicalDeviceShaderAtomicFloat2FeaturesEXT' /can/ also be
+-- used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- selectively enable these features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderAtomicFloat2FeaturesEXT = PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+  { -- | #features-shaderBufferFloat16Atomics# @shaderBufferFloat16Atomics@
+    -- indicates whether shaders /can/ perform 16-bit floating-point load,
+    -- store, and exchange atomic operations on storage buffers.
+    shaderBufferFloat16Atomics :: Bool
+  , -- | #features-shaderBufferFloat16AtomicAdd# @shaderBufferFloat16AtomicAdd@
+    -- indicates whether shaders /can/ perform 16-bit floating-point add atomic
+    -- operations on storage buffers.
+    shaderBufferFloat16AtomicAdd :: Bool
+  , -- | #features-shaderBufferFloat16AtomicMinMax#
+    -- @shaderBufferFloat16AtomicMinMax@ indicates whether shaders /can/
+    -- perform 16-bit floating-point min and max atomic operations on storage
+    -- buffers.
+    shaderBufferFloat16AtomicMinMax :: Bool
+  , -- | #features-shaderBufferFloat32AtomicMinMax#
+    -- @shaderBufferFloat32AtomicMinMax@ indicates whether shaders /can/
+    -- perform 32-bit floating-point min and max atomic operations on storage
+    -- buffers.
+    shaderBufferFloat32AtomicMinMax :: Bool
+  , -- | #features-shaderBufferFloat64AtomicMinMax#
+    -- @shaderBufferFloat64AtomicMinMax@ indicates whether shaders /can/
+    -- perform 64-bit floating-point min and max atomic operations on storage
+    -- buffers.
+    shaderBufferFloat64AtomicMinMax :: Bool
+  , -- | #features-shaderSharedFloat16Atomics# @shaderSharedFloat16Atomics@
+    -- indicates whether shaders /can/ perform 16-bit floating-point load,
+    -- store and exchange atomic operations on shared memory.
+    shaderSharedFloat16Atomics :: Bool
+  , -- | #features-shaderSharedFloat16AtomicAdd# @shaderSharedFloat16AtomicAdd@
+    -- indicates whether shaders /can/ perform 16-bit floating-point add atomic
+    -- operations on shared memory.
+    shaderSharedFloat16AtomicAdd :: Bool
+  , -- | #features-shaderSharedFloat16AtomicMinMax#
+    -- @shaderSharedFloat16AtomicMinMax@ indicates whether shaders /can/
+    -- perform 16-bit floating-point min and max atomic operations on shared
+    -- memory.
+    shaderSharedFloat16AtomicMinMax :: Bool
+  , -- | #features-shaderSharedFloat32AtomicMinMax#
+    -- @shaderSharedFloat32AtomicMinMax@ indicates whether shaders /can/
+    -- perform 32-bit floating-point min and max atomic operations on shared
+    -- memory.
+    shaderSharedFloat32AtomicMinMax :: Bool
+  , -- | #features-shaderSharedFloat64AtomicMinMax#
+    -- @shaderSharedFloat64AtomicMinMax@ indicates whether shaders /can/
+    -- perform 64-bit floating-point min and max atomic operations on shared
+    -- memory.
+    shaderSharedFloat64AtomicMinMax :: Bool
+  , -- | #features-shaderImageFloat32AtomicMinMax#
+    -- @shaderImageFloat32AtomicMinMax@ indicates whether shaders /can/ perform
+    -- 32-bit floating-point min and max atomic image operations.
+    shaderImageFloat32AtomicMinMax :: Bool
+  , -- | #features-sparseImageFloat32AtomicMinMax#
+    -- @sparseImageFloat32AtomicMinMax@ indicates whether 32-bit floating-point
+    -- min and max atomic operations /can/ be used on sparse images.
+    sparseImageFloat32AtomicMinMax :: Bool
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceShaderAtomicFloat2FeaturesEXT)
+#endif
+deriving instance Show PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+
+instance ToCStruct PhysicalDeviceShaderAtomicFloat2FeaturesEXT where
+  withCStruct x f = allocaBytes 64 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderAtomicFloat2FeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderBufferFloat16Atomics))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderBufferFloat16AtomicAdd))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (shaderBufferFloat16AtomicMinMax))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (shaderBufferFloat32AtomicMinMax))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (shaderBufferFloat64AtomicMinMax))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (shaderSharedFloat16Atomics))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (shaderSharedFloat16AtomicAdd))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (shaderSharedFloat16AtomicMinMax))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (shaderSharedFloat32AtomicMinMax))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (shaderSharedFloat64AtomicMinMax))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (shaderImageFloat32AtomicMinMax))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (sparseImageFloat32AtomicMinMax))
+    f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderAtomicFloat2FeaturesEXT where
+  peekCStruct p = do
+    shaderBufferFloat16Atomics <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    shaderBufferFloat16AtomicAdd <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    shaderBufferFloat16AtomicMinMax <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    shaderBufferFloat32AtomicMinMax <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    shaderBufferFloat64AtomicMinMax <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    shaderSharedFloat16Atomics <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    shaderSharedFloat16AtomicAdd <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    shaderSharedFloat16AtomicMinMax <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    shaderSharedFloat32AtomicMinMax <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    shaderSharedFloat64AtomicMinMax <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
+    shaderImageFloat32AtomicMinMax <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    sparseImageFloat32AtomicMinMax <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+             (bool32ToBool shaderBufferFloat16Atomics) (bool32ToBool shaderBufferFloat16AtomicAdd) (bool32ToBool shaderBufferFloat16AtomicMinMax) (bool32ToBool shaderBufferFloat32AtomicMinMax) (bool32ToBool shaderBufferFloat64AtomicMinMax) (bool32ToBool shaderSharedFloat16Atomics) (bool32ToBool shaderSharedFloat16AtomicAdd) (bool32ToBool shaderSharedFloat16AtomicMinMax) (bool32ToBool shaderSharedFloat32AtomicMinMax) (bool32ToBool shaderSharedFloat64AtomicMinMax) (bool32ToBool shaderImageFloat32AtomicMinMax) (bool32ToBool sparseImageFloat32AtomicMinMax)
+
+instance Storable PhysicalDeviceShaderAtomicFloat2FeaturesEXT where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderAtomicFloat2FeaturesEXT where
+  zero = PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+type EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION"
+pattern EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION = 1
+
+
+type EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME = "VK_EXT_shader_atomic_float2"
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME"
+pattern EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME = "VK_EXT_shader_atomic_float2"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_shader_atomic_float2.hs-boot b/src/Vulkan/Extensions/VK_EXT_shader_atomic_float2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_shader_atomic_float2.hs-boot
@@ -0,0 +1,137 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_shader_atomic_float2 - device extension
+--
+-- == VK_EXT_shader_atomic_float2
+--
+-- [__Name String__]
+--     @VK_EXT_shader_atomic_float2@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     274
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_EXT_shader_atomic_float@
+--
+-- [__Contact__]
+--
+--     -   Jason Ekstrand
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_EXT_shader_atomic_float2:%20&body=@jekstrand%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2020-08-14
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Interactions and External Dependencies__]
+--
+--     -   This extension requires the VK_EXT_shader_atomic_float
+--         extension.
+--
+--     -   This extension requires
+--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/EXT/SPV_EXT_shader_atomic_float_min_max.html SPV_EXT_shader_atomic_float_min_max>
+--         and
+--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/EXT/SPV_EXT_shader_atomic_float16_add.html SPV_EXT_shader_atomic_float16_add>
+--
+--     -   This extension provides API support for
+--         <https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_shader_atomic_float2.txt GLSL_EXT_shader_atomic_float2>
+--
+-- [__Contributors__]
+--
+--     -   Jason Ekstrand, Intel
+--
+-- == Description
+--
+-- This extension allows a shader to perform 16-bit floating-point atomic
+-- operations on buffer and workgroup memory as well as floating-point
+-- atomic minimum and maximum operations on buffer, workgroup, and image
+-- memory. It advertises the SPIR-V @AtomicFloat16AddEXT@ capability which
+-- allows atomic add operations on 16-bit floating-point numbers and the
+-- SPIR-V @AtomicFloat16MinMaxEXT@, @AtomicFloat32MinMaxEXT@ and
+-- @AtomicFloat64MinMaxEXT@ capabilities which allow atomic minimum and
+-- maximum operations on floating-point numbers. The supported operations
+-- include @OpAtomicFAddEXT@, @OpAtomicFMinEXT@ and @OpAtomicFMaxEXT@.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceShaderAtomicFloat2FeaturesEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME'
+--
+-- -   'EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT'
+--
+-- == Issues
+--
+-- 1) Should this extension add support for 16-bit image atomics?
+--
+-- __RESOLVED__: No. While Vulkan supports creating storage images with
+-- 'Vulkan.Core10.Enums.Format.FORMAT_R16_SFLOAT' and doing load and store
+-- on them, the data in the shader has a 32-bit representation. Vulkan
+-- currently has no facility for even basic reading or writing such images
+-- using 16-bit float values in the shader. Adding such functionality would
+-- be required before 16-bit image atomics would make sense and is outside
+-- the scope of this extension.
+--
+-- == New SPIR-V Capabilities
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-AtomicFloat16AddEXT AtomicFloat32MinMaxEXT>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-AtomicFloat16MinMaxEXT AtomicFloat32MinMaxEXT>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-AtomicFloat32MinMaxEXT AtomicFloat32MinMaxEXT>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-AtomicFloat64MinMaxEXT AtomicFloat64MinMaxEXT>
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-08-14 (Jason Ekstrand)
+--
+--     -   Internal revisions
+--
+-- = See Also
+--
+-- 'PhysicalDeviceShaderAtomicFloat2FeaturesEXT'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_shader_atomic_float2 Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_EXT_shader_atomic_float2  (PhysicalDeviceShaderAtomicFloat2FeaturesEXT) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+
+instance ToCStruct PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+instance Show PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+
+instance FromCStruct PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs b/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs
--- a/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs
+++ b/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs
@@ -44,7 +44,7 @@
 --
 -- This extension adds more expressive alignment requirements for uniform
 -- and storage texel buffers. Some implementations have single texel
--- alignment requirements that can’t be expressed via
+-- alignment requirements that cannot be expressed via
 -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@.
 --
 -- == New Structures
diff --git a/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot b/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot
@@ -44,7 +44,7 @@
 --
 -- This extension adds more expressive alignment requirements for uniform
 -- and storage texel buffers. Some implementations have single texel
--- alignment requirements that can’t be expressed via
+-- alignment requirements that cannot be expressed via
 -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@.
 --
 -- == New Structures
diff --git a/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs b/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs
--- a/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs
+++ b/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs
@@ -112,7 +112,7 @@
 -- 2) Should we introduce new format enums for HDR?
 --
 -- Yes. Vulkan 1.0 describes the ASTC format enums as UNORM, e.g.
--- 'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK', so it’s
+-- 'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK', so it is
 -- confusing to make these contain HDR data. Note that the OpenGL (ES)
 -- extensions did not make this distinction because a single ASTC HDR
 -- texture may contain both unorm and float blocks. Implementations /may/
diff --git a/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot b/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot
@@ -112,7 +112,7 @@
 -- 2) Should we introduce new format enums for HDR?
 --
 -- Yes. Vulkan 1.0 describes the ASTC format enums as UNORM, e.g.
--- 'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK', so it’s
+-- 'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK', so it is
 -- confusing to make these contain HDR data. Note that the OpenGL (ES)
 -- extensions did not make this distinction because a single ASTC HDR
 -- texture may contain both unorm and float blocks. Implementations /may/
diff --git a/src/Vulkan/Extensions/VK_HUAWEI_invocation_mask.hs b/src/Vulkan/Extensions/VK_HUAWEI_invocation_mask.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_HUAWEI_invocation_mask.hs
@@ -0,0 +1,411 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_HUAWEI_invocation_mask - device extension
+--
+-- == VK_HUAWEI_invocation_mask
+--
+-- [__Name String__]
+--     @VK_HUAWEI_invocation_mask@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     371
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_ray_tracing_pipeline@
+--
+--     -   Requires @VK_KHR_synchronization2@
+--
+-- [__Contact__]
+--
+--     -   Yunpeng Zhu
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_HUAWEI_invocation_mask:%20&body=@yunxingzhu%20 >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_HUAWEI_invocation_mask.asciidoc VK_HUAWEI_invocation_mask>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-05-27
+--
+-- [__Interactions and External Dependencies__]
+--
+--     -   This extension requires
+--         <VK_KHR_ray_tracing_pipeline.html VK_KHR_ray_tracing_pipeline>,
+--         which allow to bind an invocation mask image before the trace
+--         ray command
+--
+--     -   This extension requires
+--         <VK_KHR_synchronization2.html VK_KHR_synchronization2>, which
+--         allows new pipeline stage for the invocation mask image
+--
+-- [__Contributors__]
+--
+--     -   Yunpeng Zhu, HuaWei
+--
+-- == Description
+--
+-- The rays to trace may be sparse in some use cases. For example, the
+-- scene only have a few regions to reflect. Providing an invocation mask
+-- image to the trace ray commands could potentially give the hardware the
+-- hint to do certain optimization without invoking an additional pass to
+-- compact the ray buffer.
+--
+-- == New Commands
+--
+-- -   'cmdBindInvocationMaskHUAWEI'
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceInvocationMaskFeaturesHUAWEI'
+--
+-- == New Enum Constants
+--
+-- -   'HUAWEI_INVOCATION_MASK_EXTENSION_NAME'
+--
+-- -   'HUAWEI_INVOCATION_MASK_SPEC_VERSION'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_synchronization2.AccessFlagBits2KHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_synchronization2.ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_synchronization2.PipelineStageFlagBits2KHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_synchronization2.PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI'
+--
+-- == Examples
+--
+-- RT mask is updated before each traceRay.
+--
+-- Step 1. Generate InvocationMask.
+--
+-- > //the rt mask image bind as color attachment in the fragment shader
+-- > Layout(location = 2) out vec4 outRTmask
+-- > vec4 mask = vec4(x,x,x,x);
+-- > outRTmask = mask;
+--
+-- Step 2. traceRay with InvocationMask
+--
+-- > vkCmdBindPipeline(
+-- >     commandBuffers[imageIndex],
+-- >     VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, m_rtPipeline);
+-- >     vkCmdBindDescriptorSets(commandBuffers[imageIndex],
+-- >     VK_PIPELINE_BIND_POINT_RAY_TRACING_NV,
+-- >     m_rtPipelineLayout, 0, 1, &m_rtDescriptorSet,
+-- >     0, nullptr);
+-- >
+-- > vkCmdBindInvocationMaskHUAWEI(
+-- >     commandBuffers[imageIndex],
+-- >     InvocationMaskimageView,
+-- >     InvocationMaskimageLayout);
+-- >     vkCmdTraceRaysKHR(commandBuffers[imageIndex],
+-- >     pRaygenShaderBindingTable,
+-- >     pMissShaderBindingTable,
+-- >     swapChainExtent.width,
+-- >     swapChainExtent.height, 1);
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-05-27 (Yunpeng Zhu)
+--
+--     -   Initial draft.
+--
+-- = See Also
+--
+-- 'PhysicalDeviceInvocationMaskFeaturesHUAWEI',
+-- 'cmdBindInvocationMaskHUAWEI'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_HUAWEI_invocation_mask Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_HUAWEI_invocation_mask  ( cmdBindInvocationMaskHUAWEI
+                                                    , PhysicalDeviceInvocationMaskFeaturesHUAWEI(..)
+                                                    , HUAWEI_INVOCATION_MASK_SPEC_VERSION
+                                                    , pattern HUAWEI_INVOCATION_MASK_SPEC_VERSION
+                                                    , HUAWEI_INVOCATION_MASK_EXTENSION_NAME
+                                                    , pattern HUAWEI_INVOCATION_MASK_EXTENSION_NAME
+                                                    , AccessFlagBits2KHR(..)
+                                                    , AccessFlags2KHR
+                                                    , PipelineStageFlagBits2KHR(..)
+                                                    , PipelineStageFlags2KHR
+                                                    , Flags64
+                                                    ) where
+
+import Vulkan.Internal.Utils (traceAroundEvent)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytes)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBindInvocationMaskHUAWEI))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
+import Vulkan.Core10.Handles (ImageView)
+import Vulkan.Core10.Handles (ImageView(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI))
+import Vulkan.Extensions.VK_KHR_synchronization2 (AccessFlagBits2KHR(..))
+import Vulkan.Extensions.VK_KHR_synchronization2 (AccessFlags2KHR)
+import Vulkan.Core10.FundamentalTypes (Flags64)
+import Vulkan.Extensions.VK_KHR_synchronization2 (PipelineStageFlagBits2KHR(..))
+import Vulkan.Extensions.VK_KHR_synchronization2 (PipelineStageFlags2KHR)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBindInvocationMaskHUAWEI
+  :: FunPtr (Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ()) -> Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ()
+
+-- | vkCmdBindInvocationMaskHUAWEI - Bind an invocation mask image on a
+-- command buffer
+--
+-- == Valid Usage
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-None-04976# The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature /must/ be enabled
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04977# If @imageView@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ be a
+--     valid 'Vulkan.Core10.Handles.ImageView' handle of type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04978# If @imageView@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ have a
+--     format of 'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04979# If @imageView@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ have been
+--     created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI'
+--     set
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04980# If @imageView@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @imageLayout@
+--     /must/ be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-width-04981# Thread mask image
+--     resolution must match the @width@ and @height@ in
+--     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysKHR'
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-None-04982# Each element in the
+--     invocation mask image /must/ have the value @0@ or @1@. The value 1
+--     means the invocation is active
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-width-04983# @width@ in
+--     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysKHR'
+--     should be 1
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-commandBuffer-parameter#
+--     @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-imageView-parameter# If
+--     @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView'
+--     handle
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-imageLayout-parameter#
+--     @imageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-commandBuffer-recording#
+--     @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-commandBuffer-cmdpool# The
+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-renderpass# This command /must/
+--     only be called outside of a render pass instance
+--
+-- -   #VUID-vkCmdBindInvocationMaskHUAWEI-commonparent# Both of
+--     @commandBuffer@, and @imageView@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Handles.ImageView'
+cmdBindInvocationMaskHUAWEI :: forall io
+                             . (MonadIO io)
+                            => -- | @commandBuffer@ is the command buffer into which the command will be
+                               -- recorded
+                               CommandBuffer
+                            -> -- | @imageView@ is an image view handle that specifies the invocation mask
+                               -- image @imageView@ /may/ be set to
+                               -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', which is equivalent to
+                               -- specifying a view of an image filled with ones value.
+                               ImageView
+                            -> -- | @imageLayout@ is the layout that the image subresources accessible from
+                               -- @imageView@ will be in when the invocation mask image is accessed
+                               ImageLayout
+                            -> io ()
+cmdBindInvocationMaskHUAWEI commandBuffer imageView imageLayout = liftIO $ do
+  let vkCmdBindInvocationMaskHUAWEIPtr = pVkCmdBindInvocationMaskHUAWEI (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdBindInvocationMaskHUAWEIPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindInvocationMaskHUAWEI is null" Nothing Nothing
+  let vkCmdBindInvocationMaskHUAWEI' = mkVkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEIPtr
+  traceAroundEvent "vkCmdBindInvocationMaskHUAWEI" (vkCmdBindInvocationMaskHUAWEI' (commandBufferHandle (commandBuffer)) (imageView) (imageLayout))
+  pure $ ()
+
+
+-- | VkPhysicalDeviceInvocationMaskFeaturesHUAWEI - Structure describing
+-- invocation mask features that can be supported by an implementation
+--
+-- = Members
+--
+-- This structure describes the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceInvocationMaskFeaturesHUAWEI' structure is
+-- included in the @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
+-- structure passed to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
+-- it is filled in to indicate whether each corresponding feature is
+-- supported. 'PhysicalDeviceInvocationMaskFeaturesHUAWEI' /can/ also be
+-- used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- selectively enable these features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceInvocationMaskFeaturesHUAWEI = PhysicalDeviceInvocationMaskFeaturesHUAWEI
+  { -- | #features-invocationMask# @invocationMask@ indicates that the
+    -- implementation supports the use of an invocation mask image to optimize
+    -- the ray dispatch.
+    invocationMask :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceInvocationMaskFeaturesHUAWEI)
+#endif
+deriving instance Show PhysicalDeviceInvocationMaskFeaturesHUAWEI
+
+instance ToCStruct PhysicalDeviceInvocationMaskFeaturesHUAWEI where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceInvocationMaskFeaturesHUAWEI{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (invocationMask))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceInvocationMaskFeaturesHUAWEI where
+  peekCStruct p = do
+    invocationMask <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceInvocationMaskFeaturesHUAWEI
+             (bool32ToBool invocationMask)
+
+instance Storable PhysicalDeviceInvocationMaskFeaturesHUAWEI where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceInvocationMaskFeaturesHUAWEI where
+  zero = PhysicalDeviceInvocationMaskFeaturesHUAWEI
+           zero
+
+
+type HUAWEI_INVOCATION_MASK_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION"
+pattern HUAWEI_INVOCATION_MASK_SPEC_VERSION :: forall a . Integral a => a
+pattern HUAWEI_INVOCATION_MASK_SPEC_VERSION = 1
+
+
+type HUAWEI_INVOCATION_MASK_EXTENSION_NAME = "VK_HUAWEI_invocation_mask"
+
+-- No documentation found for TopLevel "VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME"
+pattern HUAWEI_INVOCATION_MASK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern HUAWEI_INVOCATION_MASK_EXTENSION_NAME = "VK_HUAWEI_invocation_mask"
+
diff --git a/src/Vulkan/Extensions/VK_HUAWEI_invocation_mask.hs-boot b/src/Vulkan/Extensions/VK_HUAWEI_invocation_mask.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_HUAWEI_invocation_mask.hs-boot
@@ -0,0 +1,162 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_HUAWEI_invocation_mask - device extension
+--
+-- == VK_HUAWEI_invocation_mask
+--
+-- [__Name String__]
+--     @VK_HUAWEI_invocation_mask@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     371
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_ray_tracing_pipeline@
+--
+--     -   Requires @VK_KHR_synchronization2@
+--
+-- [__Contact__]
+--
+--     -   Yunpeng Zhu
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_HUAWEI_invocation_mask:%20&body=@yunxingzhu%20 >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_HUAWEI_invocation_mask.asciidoc VK_HUAWEI_invocation_mask>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-05-27
+--
+-- [__Interactions and External Dependencies__]
+--
+--     -   This extension requires
+--         <VK_KHR_ray_tracing_pipeline.html VK_KHR_ray_tracing_pipeline>,
+--         which allow to bind an invocation mask image before the trace
+--         ray command
+--
+--     -   This extension requires
+--         <VK_KHR_synchronization2.html VK_KHR_synchronization2>, which
+--         allows new pipeline stage for the invocation mask image
+--
+-- [__Contributors__]
+--
+--     -   Yunpeng Zhu, HuaWei
+--
+-- == Description
+--
+-- The rays to trace may be sparse in some use cases. For example, the
+-- scene only have a few regions to reflect. Providing an invocation mask
+-- image to the trace ray commands could potentially give the hardware the
+-- hint to do certain optimization without invoking an additional pass to
+-- compact the ray buffer.
+--
+-- == New Commands
+--
+-- -   'cmdBindInvocationMaskHUAWEI'
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceInvocationMaskFeaturesHUAWEI'
+--
+-- == New Enum Constants
+--
+-- -   'HUAWEI_INVOCATION_MASK_EXTENSION_NAME'
+--
+-- -   'HUAWEI_INVOCATION_MASK_SPEC_VERSION'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_synchronization2.AccessFlagBits2KHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_synchronization2.ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_synchronization2.PipelineStageFlagBits2KHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_synchronization2.PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI'
+--
+-- == Examples
+--
+-- RT mask is updated before each traceRay.
+--
+-- Step 1. Generate InvocationMask.
+--
+-- > //the rt mask image bind as color attachment in the fragment shader
+-- > Layout(location = 2) out vec4 outRTmask
+-- > vec4 mask = vec4(x,x,x,x);
+-- > outRTmask = mask;
+--
+-- Step 2. traceRay with InvocationMask
+--
+-- > vkCmdBindPipeline(
+-- >     commandBuffers[imageIndex],
+-- >     VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, m_rtPipeline);
+-- >     vkCmdBindDescriptorSets(commandBuffers[imageIndex],
+-- >     VK_PIPELINE_BIND_POINT_RAY_TRACING_NV,
+-- >     m_rtPipelineLayout, 0, 1, &m_rtDescriptorSet,
+-- >     0, nullptr);
+-- >
+-- > vkCmdBindInvocationMaskHUAWEI(
+-- >     commandBuffers[imageIndex],
+-- >     InvocationMaskimageView,
+-- >     InvocationMaskimageLayout);
+-- >     vkCmdTraceRaysKHR(commandBuffers[imageIndex],
+-- >     pRaygenShaderBindingTable,
+-- >     pMissShaderBindingTable,
+-- >     swapChainExtent.width,
+-- >     swapChainExtent.height, 1);
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-05-27 (Yunpeng Zhu)
+--
+--     -   Initial draft.
+--
+-- = See Also
+--
+-- 'PhysicalDeviceInvocationMaskFeaturesHUAWEI',
+-- 'cmdBindInvocationMaskHUAWEI'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_HUAWEI_invocation_mask Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_HUAWEI_invocation_mask  (PhysicalDeviceInvocationMaskFeaturesHUAWEI) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data PhysicalDeviceInvocationMaskFeaturesHUAWEI
+
+instance ToCStruct PhysicalDeviceInvocationMaskFeaturesHUAWEI
+instance Show PhysicalDeviceInvocationMaskFeaturesHUAWEI
+
+instance FromCStruct PhysicalDeviceInvocationMaskFeaturesHUAWEI
+
diff --git a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs
--- a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs
+++ b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs
@@ -788,7 +788,7 @@
 --
 -- __RESOLVED__: It is primarily intended for API layering. In DXR, the
 -- acceleration structure is basically just a buffer in a special layout,
--- and you don’t know at creation time whether it will be used as a top or
+-- and you do not know at creation time whether it will be used as a top or
 -- bottom level acceleration structure. We thus added a generic
 -- acceleration structure type whose type is unknown at creation time, but
 -- is specified at build time instead. Applications which are written
diff --git a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot
@@ -788,7 +788,7 @@
 --
 -- __RESOLVED__: It is primarily intended for API layering. In DXR, the
 -- acceleration structure is basically just a buffer in a special layout,
--- and you don’t know at creation time whether it will be used as a top or
+-- and you do not know at creation time whether it will be used as a top or
 -- bottom level acceleration structure. We thus added a generic
 -- acceleration structure type whose type is unknown at creation time, but
 -- is specified at build time instead. Applications which are written
diff --git a/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs b/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
--- a/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
+++ b/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
@@ -158,8 +158,8 @@
 -- >     [ hOp ] ( )
 -- >     {
 -- >         vkDeferredOperationJoinKHR(device, hOp);
--- > 		// in a job system, a return of VK_THREAD_IDLE_KHR should queue another
--- > 		// job, but it's not functionally required
+-- >                 // in a job system, a return of VK_THREAD_IDLE_KHR should queue another
+-- >                 // job, but it is not functionally required
 -- >     }
 -- >   );
 -- > }
diff --git a/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
--- a/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
+++ b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
@@ -100,7 +100,7 @@
 -- 'Vulkan.Core10.Handles.Semaphore' instead of a
 -- 'Vulkan.Core10.Handles.Fence', and applications can check status or wait
 -- on the D3D12 fence using non-Vulkan APIs. The convenience of being able
--- to do these operations on 'Vulkan.Core10.Handles.Fence' objects doesn’t
+-- to do these operations on 'Vulkan.Core10.Handles.Fence' objects does not
 -- justify the extra API complexity.
 --
 -- == Version History
@@ -469,18 +469,18 @@
 --
 -- If
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'
--- is not present in the same @pNext@ chain, this structure is ignored.
+-- is not inluded in the same @pNext@ chain, this structure is ignored.
 --
 -- If
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'
--- is present in the @pNext@ chain of 'Vulkan.Core10.Fence.FenceCreateInfo'
--- with a Windows @handleType@, but either 'ExportFenceWin32HandleInfoKHR'
--- is not present in the @pNext@ chain, or if it is but @pAttributes@ is
--- set to @NULL@, default security descriptor values will be used, and
--- child processes created by the application will not inherit the handle,
--- as described in the MSDN documentation for “Synchronization Object
--- Security and Access Rights”1. Further, if the structure is not present,
--- the access rights will be
+-- is included in the @pNext@ chain of
+-- 'Vulkan.Core10.Fence.FenceCreateInfo' with a Windows @handleType@, but
+-- either 'ExportFenceWin32HandleInfoKHR' is not included in the @pNext@
+-- chain, or if it is but @pAttributes@ is set to @NULL@, default security
+-- descriptor values will be used, and child processes created by the
+-- application will not inherit the handle, as described in the MSDN
+-- documentation for “Synchronization Object Security and Access Rights”1.
+-- Further, if the structure is not present, the access rights will be
 --
 -- @DXGI_SHARED_RESOURCE_READ@ | @DXGI_SHARED_RESOURCE_WRITE@
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot
@@ -100,7 +100,7 @@
 -- 'Vulkan.Core10.Handles.Semaphore' instead of a
 -- 'Vulkan.Core10.Handles.Fence', and applications can check status or wait
 -- on the D3D12 fence using non-Vulkan APIs. The convenience of being able
--- to do these operations on 'Vulkan.Core10.Handles.Fence' objects doesn’t
+-- to do these operations on 'Vulkan.Core10.Handles.Fence' objects does not
 -- justify the extra API complexity.
 --
 -- == Version History
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs b/src/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs
--- a/src/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs
@@ -174,7 +174,7 @@
 -- 'ExternalBufferPropertiesKHR' structs need to include a list of memory
 -- type bits that support the given handle type?
 --
--- __PROPOSED RESOLUTION__: No. The memory types that don’t support the
+-- __PROPOSED RESOLUTION__: No. The memory types that do not support the
 -- handle types will simply be filtered out of the results returned by
 -- 'Vulkan.Core10.MemoryManagement.getImageMemoryRequirements' and
 -- 'Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements' when a set
@@ -184,7 +184,7 @@
 --
 -- __PROPOSED RESOLUTION__: Perhaps. However, defining the handle type bits
 -- does very little and does not require any platform-specific types on its
--- own, and it’s easier to maintain the bitfield values in a single
+-- own, and it is easier to maintain the bitfield values in a single
 -- extension for now. Presumably more handle types could be added by
 -- separate extensions though, and it would be midly weird to have some
 -- platform-specific ones defined in the core spec and some in extensions
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs b/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
--- a/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
@@ -320,7 +320,7 @@
   pure $ (pMemoryFdProperties)
 
 
--- | VkImportMemoryFdInfoKHR - import memory created on the same physical
+-- | VkImportMemoryFdInfoKHR - Import memory created on the same physical
 -- device from a file descriptor
 --
 -- = Description
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs b/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
--- a/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
@@ -340,7 +340,7 @@
   pure $ (pMemoryWin32HandleProperties)
 
 
--- | VkImportMemoryWin32HandleInfoKHR - import Win32 memory created on the
+-- | VkImportMemoryWin32HandleInfoKHR - Import Win32 memory created on the
 -- same physical device
 --
 -- = Description
@@ -486,13 +486,13 @@
 --
 -- If
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
--- is not present in the same @pNext@ chain, this structure is ignored.
+-- is not included in the same @pNext@ chain, this structure is ignored.
 --
 -- If
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
--- is present in the @pNext@ chain of
+-- is included in the @pNext@ chain of
 -- 'Vulkan.Core10.Memory.MemoryAllocateInfo' with a Windows @handleType@,
--- but either 'ExportMemoryWin32HandleInfoKHR' is not present in the
+-- but either 'ExportMemoryWin32HandleInfoKHR' is not included in the
 -- @pNext@ chain, or if it is but @pAttributes@ is set to @NULL@, default
 -- security descriptor values will be used, and child processes created by
 -- the application will not inherit the handle, as described in the MSDN
diff --git a/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs b/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
--- a/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
+++ b/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
@@ -543,14 +543,14 @@
 --
 -- If
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'
--- is not present in the same @pNext@ chain, this structure is ignored.
+-- is not included in the same @pNext@ chain, this structure is ignored.
 --
 -- If
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'
--- is present in the @pNext@ chain of
+-- is included in the @pNext@ chain of
 -- 'Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo' with a Windows
 -- @handleType@, but either 'ExportSemaphoreWin32HandleInfoKHR' is not
--- present in the @pNext@ chain, or if it is but @pAttributes@ is set to
+-- included in the @pNext@ chain, or if it is but @pAttributes@ is set to
 -- @NULL@, default security descriptor values will be used, and child
 -- processes created by the application will not inherit the handle, as
 -- described in the MSDN documentation for “Synchronization Object Security
diff --git a/src/Vulkan/Extensions/VK_KHR_fragment_shading_rate.hs b/src/Vulkan/Extensions/VK_KHR_fragment_shading_rate.hs
--- a/src/Vulkan/Extensions/VK_KHR_fragment_shading_rate.hs
+++ b/src/Vulkan/Extensions/VK_KHR_fragment_shading_rate.hs
@@ -1008,9 +1008,10 @@
     -- attachment. @maxFragmentShadingRateAttachmentTexelSizeAspectRatio@
     -- /must/ be a power-of-two value, and /must/ be less than or equal to
     -- max(@maxFragmentShadingRateAttachmentTexelSize.width@ \/
-    -- minFragmentShadingRateAttachmentTexelSize.height,
+    -- @minFragmentShadingRateAttachmentTexelSize.height@,
     -- @maxFragmentShadingRateAttachmentTexelSize.height@ \/
-    -- minFragmentShadingRateAttachmentTexelSize.width). It /must/ be 0 if the
+    -- @minFragmentShadingRateAttachmentTexelSize.width@). It /must/ be 0 if
+    -- the
     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>
     -- feature is not supported.
     maxFragmentShadingRateAttachmentTexelSizeAspectRatio :: Word32
@@ -1082,7 +1083,7 @@
     -- and the sample count reported by
     -- @maxFragmentShadingRateRasterizationSamples@.
     -- @maxFragmentShadingRateCoverageSamples@ /must/ be less than or equal to
-    -- @maxSampleMaskWords@ * 32 if @fragmentShadingRateWithShaderSampleMask@
+    -- @maxSampleMaskWords@ × 32 if @fragmentShadingRateWithShaderSampleMask@
     -- is supported. This limit is purely informational, and is not validated.
     maxFragmentShadingRateCoverageSamples :: Word32
   , -- | #limits-maxFragmentShadingRateRasterizationSamples#
@@ -1148,7 +1149,7 @@
     fragmentShadingRateWithCustomSampleLocations :: Bool
   , -- | #limits-fragmentShadingRateStrictMultiplyCombiner#
     -- @fragmentShadingRateStrictMultiplyCombiner@ specifies whether
-    -- VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR accurately performs a
+    -- 'FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR' accurately performs a
     -- multiplication or not. Implementations where this value is
     -- 'Vulkan.Core10.FundamentalTypes.FALSE' will instead combine rates with
     -- an addition. If @fragmentShadingRateNonTrivialCombinerOps@ is
diff --git a/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs b/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs
--- a/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs
+++ b/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs
@@ -105,7 +105,7 @@
 -- __RESOLVED__:
 --
 -- -   'getPhysicalDeviceDisplayProperties2KHR': No. The only current input
---     is a 'Vulkan.Core10.Handles.PhysicalDevice'. Other inputs wouldn’t
+--     is a 'Vulkan.Core10.Handles.PhysicalDevice'. Other inputs would not
 --     make sense.
 --
 -- -   'getPhysicalDeviceDisplayPlaneProperties2KHR': No. The only current
diff --git a/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot b/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot
@@ -105,7 +105,7 @@
 -- __RESOLVED__:
 --
 -- -   'getPhysicalDeviceDisplayProperties2KHR': No. The only current input
---     is a 'Vulkan.Core10.Handles.PhysicalDevice'. Other inputs wouldn’t
+--     is a 'Vulkan.Core10.Handles.PhysicalDevice'. Other inputs would not
 --     make sense.
 --
 -- -   'getPhysicalDeviceDisplayPlaneProperties2KHR': No. The only current
diff --git a/src/Vulkan/Extensions/VK_KHR_performance_query.hs b/src/Vulkan/Extensions/VK_KHR_performance_query.hs
--- a/src/Vulkan/Extensions/VK_KHR_performance_query.hs
+++ b/src/Vulkan/Extensions/VK_KHR_performance_query.hs
@@ -427,7 +427,7 @@
 -- >   sizeof(VkPerformanceCounterResultKHR),
 -- >   NULL);
 -- >
--- > // recordedCounters is filled with our counters, we'll look at one for posterity
+-- > // recordedCounters is filled with our counters, we will look at one for posterity
 -- > switch (counters[0].storage) {
 -- >   case VK_PERFORMANCE_COUNTER_STORAGE_INT32:
 -- >     // use recordCounters[0].int32 to get at the counter result!
diff --git a/src/Vulkan/Extensions/VK_KHR_performance_query.hs-boot b/src/Vulkan/Extensions/VK_KHR_performance_query.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_performance_query.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_performance_query.hs-boot
@@ -427,7 +427,7 @@
 -- >   sizeof(VkPerformanceCounterResultKHR),
 -- >   NULL);
 -- >
--- > // recordedCounters is filled with our counters, we'll look at one for posterity
+-- > // recordedCounters is filled with our counters, we will look at one for posterity
 -- > switch (counters[0].storage) {
 -- >   case VK_PERFORMANCE_COUNTER_STORAGE_INT32:
 -- >     // use recordCounters[0].int32 to get at the counter result!
diff --git a/src/Vulkan/Extensions/VK_KHR_portability_subset.hs b/src/Vulkan/Extensions/VK_KHR_portability_subset.hs
--- a/src/Vulkan/Extensions/VK_KHR_portability_subset.hs
+++ b/src/Vulkan/Extensions/VK_KHR_portability_subset.hs
@@ -34,6 +34,8 @@
 --     -   Bill Hollings
 --         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_portability_subset:%20&body=@billhollings%20 >
 --
+-- == Other Extension Metadata
+--
 -- [__Last Modified Date__]
 --     2020-07-21
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_portability_subset.hs-boot b/src/Vulkan/Extensions/VK_KHR_portability_subset.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_portability_subset.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_portability_subset.hs-boot
@@ -34,6 +34,8 @@
 --     -   Bill Hollings
 --         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_portability_subset:%20&body=@billhollings%20 >
 --
+-- == Other Extension Metadata
+--
 -- [__Last Modified Date__]
 --     2020-07-21
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_present_id.hs b/src/Vulkan/Extensions/VK_KHR_present_id.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_present_id.hs
@@ -0,0 +1,346 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_KHR_present_id - device extension
+--
+-- == VK_KHR_present_id
+--
+-- [__Name String__]
+--     @VK_KHR_present_id@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     295
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_swapchain@
+--
+-- [__Contact__]
+--
+--     -   Keith Packard
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_present_id:%20&body=@keithp%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2019-05-15
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Keith Packard, Valve
+--
+--     -   Ian Elliott, Google
+--
+--     -   Alon Or-bach, Samsung
+--
+-- == Description
+--
+-- This device extension allows an application that uses the
+-- @VK_KHR_swapchain@ extension to provide an identifier for present
+-- operations on a swapchain. An application /can/ use this to reference
+-- specific present operations in other extensions.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDevicePresentIdFeaturesKHR'
+--
+-- -   Extending 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR':
+--
+--     -   'PresentIdKHR'
+--
+-- == New Enum Constants
+--
+-- -   'KHR_PRESENT_ID_EXTENSION_NAME'
+--
+-- -   'KHR_PRESENT_ID_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_ID_KHR'
+--
+-- == Issues
+--
+-- None.
+--
+-- == Version History
+--
+-- -   Revision 1, 2019-05-15 (Keith Packard)
+--
+--     -   Initial version
+--
+-- = See Also
+--
+-- 'PhysicalDevicePresentIdFeaturesKHR', 'PresentIdKHR'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_present_id Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_KHR_present_id  ( PhysicalDevicePresentIdFeaturesKHR(..)
+                                            , PresentIdKHR(..)
+                                            , KHR_PRESENT_ID_SPEC_VERSION
+                                            , pattern KHR_PRESENT_ID_SPEC_VERSION
+                                            , KHR_PRESENT_ID_EXTENSION_NAME
+                                            , pattern KHR_PRESENT_ID_EXTENSION_NAME
+                                            ) where
+
+import Control.Monad (unless)
+import Foreign.Marshal.Alloc (allocaBytes)
+import GHC.IO (throwIO)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_ID_KHR))
+-- | VkPhysicalDevicePresentIdFeaturesKHR - Structure indicating support for
+-- present id
+--
+-- = Members
+--
+-- This structure describes the following feature:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePresentIdFeaturesKHR' structure is included in the
+-- @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
+-- structure passed to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
+-- it is filled in to indicate whether each corresponding feature is
+-- supported. 'PhysicalDevicePresentIdFeaturesKHR' /can/ also be used in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- selectively enable these features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePresentIdFeaturesKHR = PhysicalDevicePresentIdFeaturesKHR
+  { -- | #features-presentId# @presentId@ indicates that the implementation
+    -- supports specifying present ID values in the 'PresentIdKHR' extension to
+    -- the 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' struct.
+    presentId :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDevicePresentIdFeaturesKHR)
+#endif
+deriving instance Show PhysicalDevicePresentIdFeaturesKHR
+
+instance ToCStruct PhysicalDevicePresentIdFeaturesKHR where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePresentIdFeaturesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (presentId))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevicePresentIdFeaturesKHR where
+  peekCStruct p = do
+    presentId <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDevicePresentIdFeaturesKHR
+             (bool32ToBool presentId)
+
+instance Storable PhysicalDevicePresentIdFeaturesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePresentIdFeaturesKHR where
+  zero = PhysicalDevicePresentIdFeaturesKHR
+           zero
+
+
+-- | VkPresentIdKHR - The list of presentation identifiers
+--
+-- = Description
+--
+-- For applications to be able to reference specific presentation events
+-- queued by a call to
+-- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR', an identifier
+-- needs to be associated with them. When the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-presentId presentId>
+-- feature is enabled, applications /can/ include the 'PresentIdKHR'
+-- structure in the @pNext@ chain of the
+-- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' structure to supply
+-- identifiers.
+--
+-- Each 'Vulkan.Extensions.Handles.SwapchainKHR' has a presentId associated
+-- with it. This value is initially set to zero when the
+-- 'Vulkan.Extensions.Handles.SwapchainKHR' is created.
+--
+-- When a 'PresentIdKHR' structure with a non-NULL @pPresentIds@ is
+-- included in the @pNext@ chain of a
+-- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' structure, each
+-- @pSwapchains@ entry has a presentId associated in the @pPresentIds@
+-- array at the same index as the swapchain in the @pSwapchains@ array. If
+-- this presentId is non-zero, then the application /can/ later use this
+-- value to refer to that image presentation. A value of zero indicates
+-- that this presentation has no associated presentId. A non-zero presentId
+-- /must/ be greater than any non-zero presentId passed previously by the
+-- application for the same swapchain.
+--
+-- There is no requirement for any precise timing relationship between the
+-- presentation of the image to the user and the update of the presentId
+-- value, but implementations /should/ make this as close as possible to
+-- the presentation of the first pixel in the new image to the user.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPresentIdKHR-swapchainCount-04998# @swapchainCount@ /must/
+--     be the same value as
+--     'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@,
+--     where this 'PresentIdKHR' is in the pNext-chain of the
+--     'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' structure
+--
+-- -   #VUID-VkPresentIdKHR-presentIds-04999# Each @presentIds@ entry
+--     /must/ be greater than any previous @presentIds@ entry passed for
+--     the associated @pSwapchains@ entry
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPresentIdKHR-sType-sType# @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_ID_KHR'
+--
+-- -   #VUID-VkPresentIdKHR-pPresentIds-parameter# If @pPresentIds@ is not
+--     @NULL@, @pPresentIds@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ @uint64_t@ values
+--
+-- -   #VUID-VkPresentIdKHR-swapchainCount-arraylength# @swapchainCount@
+--     /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PresentIdKHR = PresentIdKHR
+  { -- | @swapchainCount@ is the number of swapchains being presented to the
+    -- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' command.
+    swapchainCount :: Word32
+  , -- | @pPresentIds@ is @NULL@ or a pointer to an array of uint64_t with
+    -- @swapchainCount@ entries. If not @NULL@, each non-zero value in
+    -- @pPresentIds@ specifies the present id to be associated with the
+    -- presentation of the swapchain with the same index in the
+    -- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' call.
+    presentIds :: Vector Word64
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PresentIdKHR)
+#endif
+deriving instance Show PresentIdKHR
+
+instance ToCStruct PresentIdKHR where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PresentIdKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_ID_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    let pPresentIdsLength = Data.Vector.length $ (presentIds)
+    swapchainCount'' <- lift $ if (swapchainCount) == 0
+      then pure $ fromIntegral pPresentIdsLength
+      else do
+        unless (fromIntegral pPresentIdsLength == (swapchainCount) || pPresentIdsLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pPresentIds must be empty or have 'swapchainCount' elements" Nothing Nothing
+        pure (swapchainCount)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (swapchainCount'')
+    pPresentIds'' <- if Data.Vector.null (presentIds)
+      then pure nullPtr
+      else do
+        pPPresentIds <- ContT $ allocaBytes @Word64 (((Data.Vector.length (presentIds))) * 8)
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPPresentIds `plusPtr` (8 * (i)) :: Ptr Word64) (e)) ((presentIds))
+        pure $ pPPresentIds
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word64))) pPresentIds''
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_ID_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct PresentIdKHR where
+  peekCStruct p = do
+    swapchainCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pPresentIds <- peek @(Ptr Word64) ((p `plusPtr` 24 :: Ptr (Ptr Word64)))
+    let pPresentIdsLength = if pPresentIds == nullPtr then 0 else (fromIntegral swapchainCount)
+    pPresentIds' <- generateM pPresentIdsLength (\i -> peek @Word64 ((pPresentIds `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    pure $ PresentIdKHR
+             swapchainCount pPresentIds'
+
+instance Zero PresentIdKHR where
+  zero = PresentIdKHR
+           zero
+           mempty
+
+
+type KHR_PRESENT_ID_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_PRESENT_ID_SPEC_VERSION"
+pattern KHR_PRESENT_ID_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_PRESENT_ID_SPEC_VERSION = 1
+
+
+type KHR_PRESENT_ID_EXTENSION_NAME = "VK_KHR_present_id"
+
+-- No documentation found for TopLevel "VK_KHR_PRESENT_ID_EXTENSION_NAME"
+pattern KHR_PRESENT_ID_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_PRESENT_ID_EXTENSION_NAME = "VK_KHR_present_id"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_present_id.hs-boot b/src/Vulkan/Extensions/VK_KHR_present_id.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_present_id.hs-boot
@@ -0,0 +1,121 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_KHR_present_id - device extension
+--
+-- == VK_KHR_present_id
+--
+-- [__Name String__]
+--     @VK_KHR_present_id@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     295
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_swapchain@
+--
+-- [__Contact__]
+--
+--     -   Keith Packard
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_present_id:%20&body=@keithp%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2019-05-15
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Keith Packard, Valve
+--
+--     -   Ian Elliott, Google
+--
+--     -   Alon Or-bach, Samsung
+--
+-- == Description
+--
+-- This device extension allows an application that uses the
+-- @VK_KHR_swapchain@ extension to provide an identifier for present
+-- operations on a swapchain. An application /can/ use this to reference
+-- specific present operations in other extensions.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDevicePresentIdFeaturesKHR'
+--
+-- -   Extending 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR':
+--
+--     -   'PresentIdKHR'
+--
+-- == New Enum Constants
+--
+-- -   'KHR_PRESENT_ID_EXTENSION_NAME'
+--
+-- -   'KHR_PRESENT_ID_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_ID_KHR'
+--
+-- == Issues
+--
+-- None.
+--
+-- == Version History
+--
+-- -   Revision 1, 2019-05-15 (Keith Packard)
+--
+--     -   Initial version
+--
+-- = See Also
+--
+-- 'PhysicalDevicePresentIdFeaturesKHR', 'PresentIdKHR'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_present_id Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_KHR_present_id  ( PhysicalDevicePresentIdFeaturesKHR
+                                            , PresentIdKHR
+                                            ) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data PhysicalDevicePresentIdFeaturesKHR
+
+instance ToCStruct PhysicalDevicePresentIdFeaturesKHR
+instance Show PhysicalDevicePresentIdFeaturesKHR
+
+instance FromCStruct PhysicalDevicePresentIdFeaturesKHR
+
+
+data PresentIdKHR
+
+instance ToCStruct PresentIdKHR
+instance Show PresentIdKHR
+
+instance FromCStruct PresentIdKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_present_wait.hs b/src/Vulkan/Extensions/VK_KHR_present_wait.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_present_wait.hs
@@ -0,0 +1,428 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_KHR_present_wait - device extension
+--
+-- == VK_KHR_present_wait
+--
+-- [__Name String__]
+--     @VK_KHR_present_wait@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     249
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_swapchain@
+--
+--     -   Requires @VK_KHR_present_id@
+--
+-- [__Contact__]
+--
+--     -   Keith Packard
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_present_wait:%20&body=@keithp%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2019-05-15
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Keith Packard, Valve
+--
+--     -   Ian Elliott, Google
+--
+--     -   Tobias Hector, AMD
+--
+--     -   Daniel Stone, Collabora
+--
+-- == Description
+--
+-- This device extension allows an application that uses the
+-- @VK_KHR_swapchain@ extension to wait for present operations to complete.
+-- An application can use this to monitor and control the pacing of the
+-- application by managing the number of outstanding images yet to be
+-- presented.
+--
+-- == New Commands
+--
+-- -   'waitForPresentKHR'
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDevicePresentWaitFeaturesKHR'
+--
+-- == New Enum Constants
+--
+-- -   'KHR_PRESENT_WAIT_EXTENSION_NAME'
+--
+-- -   'KHR_PRESENT_WAIT_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR'
+--
+-- == Issues
+--
+-- 1) When does the wait finish?
+--
+-- __RESOLVED__. The wait will finish when the present is visible to the
+-- user. There is no requirement for any precise timing relationship
+-- between the presentation of the image to the user, but implementations
+-- /should/ signal the wait as close as possible to the presentation of the
+-- first pixel in the new image to the user.
+--
+-- 2) Should this use fences or other existing synchronization mechanism.
+--
+-- __RESOLVED__. Because display and rendering are often implemented in
+-- separate drivers, this extension will provide a separate synchronization
+-- API.
+--
+-- 3) Should this extension share present identification with other
+-- extensions?
+--
+-- __RESOLVED__. Yes. A new extension, VK_KHR_present_id, should be created
+-- to provide a shared structure for presentation identifiers.
+--
+-- 4) What happens when presentations complete out of order wrt calls to
+-- vkQueuePresent? This could happen if the semaphores for the
+-- presentations were ready out of order.
+--
+-- __OPTION A__: Require that when a PresentId is set that the driver
+-- ensure that images are always presented in the order of calls to
+-- vkQueuePresent.
+--
+-- __OPTION B__: Finish both waits when the earliest present completes.
+-- This will complete the later present wait earlier than the actual
+-- presentation. This should be the easiest to implement as the driver need
+-- only track the largest present ID completed. This is also the
+-- \'natural\' consequence of interpreting the existing vkWaitForPresentKHR
+-- specificationn.
+--
+-- __OPTION C__: Finish both waits when both have completed. This will
+-- complete the earlier presentation later than the actual presentation
+-- time. This is allowed by the current specification as there is no
+-- precise timing requirement for when the presentId value is updated. This
+-- requires slightly more complexity in the driver as it will need to track
+-- all outstanding presentId values.
+--
+-- == Version History
+--
+-- -   Revision 1, 2019-02-19 (Keith Packard)
+--
+--     -   Initial version
+--
+-- = See Also
+--
+-- 'PhysicalDevicePresentWaitFeaturesKHR', 'waitForPresentKHR'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_present_wait Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_KHR_present_wait  ( waitForPresentKHR
+                                              , waitForPresentKHRSafe
+                                              , PhysicalDevicePresentWaitFeaturesKHR(..)
+                                              , KHR_PRESENT_WAIT_SPEC_VERSION
+                                              , pattern KHR_PRESENT_WAIT_SPEC_VERSION
+                                              , KHR_PRESENT_WAIT_EXTENSION_NAME
+                                              , pattern KHR_PRESENT_WAIT_EXTENSION_NAME
+                                              , SwapchainKHR(..)
+                                              ) where
+
+import Vulkan.Internal.Utils (traceAroundEvent)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytes)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkWaitForPresentKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SwapchainKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkWaitForPresentKHRUnsafe
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Word64 -> Word64 -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Word64 -> Word64 -> IO Result
+
+foreign import ccall
+  "dynamic" mkVkWaitForPresentKHRSafe
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Word64 -> Word64 -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Word64 -> Word64 -> IO Result
+
+-- | waitForPresentKHR with selectable safeness
+waitForPresentKHRSafeOrUnsafe :: forall io
+                               . (MonadIO io)
+                              => (FunPtr (Ptr Device_T -> SwapchainKHR -> Word64 -> Word64 -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Word64 -> Word64 -> IO Result)
+                              -> -- | @device@ is the device associated with @swapchain@.
+                                 Device
+                              -> -- | @swapchain@ is the non-retired swapchain on which an image was queued
+                                 -- for presentation.
+                                 SwapchainKHR
+                              -> -- | @presentId@ is the presentation presentId to wait for.
+                                 ("presentId" ::: Word64)
+                              -> -- | @timeout@ is the timeout period in units of nanoseconds. @timeout@ is
+                                 -- adjusted to the closest value allowed by the implementation-dependent
+                                 -- timeout accuracy, which /may/ be substantially longer than one
+                                 -- nanosecond, and /may/ be longer than the requested period.
+                                 ("timeout" ::: Word64)
+                              -> io (Result)
+waitForPresentKHRSafeOrUnsafe mkVkWaitForPresentKHR device swapchain presentId timeout = liftIO $ do
+  let vkWaitForPresentKHRPtr = pVkWaitForPresentKHR (deviceCmds (device :: Device))
+  unless (vkWaitForPresentKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkWaitForPresentKHR is null" Nothing Nothing
+  let vkWaitForPresentKHR' = mkVkWaitForPresentKHR vkWaitForPresentKHRPtr
+  r <- traceAroundEvent "vkWaitForPresentKHR" (vkWaitForPresentKHR' (deviceHandle (device)) (swapchain) (presentId) (timeout))
+  when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+-- | vkWaitForPresentKHR - Wait for presentation
+--
+-- = Description
+--
+-- 'waitForPresentKHR' waits for the presentId associated with @swapchain@
+-- to be increased in value so that it is at least equal to @presentId@.
+--
+-- For 'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_MAILBOX_KHR' (or
+-- other present mode where images may be replaced in the presentation
+-- queue) any wait of this type associated with such an image /must/ be
+-- signaled no later than a wait associated with the replacing image would
+-- be signaled.
+--
+-- When the presentation has completed, the presentId associated with the
+-- related @pSwapChains@ entry will be increased in value so that it is at
+-- least equal to the value provided in the
+-- 'Vulkan.Extensions.VK_KHR_present_id.PresentIdKHR' structure.
+--
+-- There is no requirement for any precise timing relationship between the
+-- presentation of the image to the user and the update of the presentId
+-- value, but implementations /should/ make this as close as possible to
+-- the presentation of the first pixel in the new image to the user.
+--
+-- The call to 'waitForPresentKHR' will block until either the presentId
+-- associated with @swapchain@ is greater than or equal to @presentId@, or
+-- @timeout@ nanoseconds passes. When the swapchain becomes OUT_OF_DATE,
+-- the call will either return 'Vulkan.Core10.Enums.Result.SUCCESS' (if the
+-- image was delivered to the presentation engine and may have been
+-- presented to the user) or will return early with status
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR' (if the image was not
+-- presented to the user).
+--
+-- As an exception to the normal rules for objects which are externally
+-- synchronized, the @swapchain@ passed to 'waitForPresentKHR' /may/ be
+-- simultaneously used by other threads in calls to functions other than
+-- 'Vulkan.Extensions.VK_KHR_swapchain.destroySwapchainKHR'. Access to the
+-- swapchain data associated with this extension /must/ be atomic within
+-- the implementation.
+--
+-- == Valid Usage
+--
+-- -   #VUID-vkWaitForPresentKHR-swapchain-04997# @swapchain@ /must/ not be
+--     in the retired state
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-vkWaitForPresentKHR-device-parameter# @device@ /must/ be a
+--     valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   #VUID-vkWaitForPresentKHR-swapchain-parameter# @swapchain@ /must/ be
+--     a valid 'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   #VUID-vkWaitForPresentKHR-commonparent# Both of @device@, and
+--     @swapchain@ /must/ have been created, allocated, or retrieved from
+--     the same 'Vulkan.Core10.Handles.Instance'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.TIMEOUT'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Extensions.Handles.SwapchainKHR'
+waitForPresentKHR :: forall io
+                   . (MonadIO io)
+                  => -- | @device@ is the device associated with @swapchain@.
+                     Device
+                  -> -- | @swapchain@ is the non-retired swapchain on which an image was queued
+                     -- for presentation.
+                     SwapchainKHR
+                  -> -- | @presentId@ is the presentation presentId to wait for.
+                     ("presentId" ::: Word64)
+                  -> -- | @timeout@ is the timeout period in units of nanoseconds. @timeout@ is
+                     -- adjusted to the closest value allowed by the implementation-dependent
+                     -- timeout accuracy, which /may/ be substantially longer than one
+                     -- nanosecond, and /may/ be longer than the requested period.
+                     ("timeout" ::: Word64)
+                  -> io (Result)
+waitForPresentKHR = waitForPresentKHRSafeOrUnsafe mkVkWaitForPresentKHRUnsafe
+
+-- | A variant of 'waitForPresentKHR' which makes a *safe* FFI call
+waitForPresentKHRSafe :: forall io
+                       . (MonadIO io)
+                      => -- | @device@ is the device associated with @swapchain@.
+                         Device
+                      -> -- | @swapchain@ is the non-retired swapchain on which an image was queued
+                         -- for presentation.
+                         SwapchainKHR
+                      -> -- | @presentId@ is the presentation presentId to wait for.
+                         ("presentId" ::: Word64)
+                      -> -- | @timeout@ is the timeout period in units of nanoseconds. @timeout@ is
+                         -- adjusted to the closest value allowed by the implementation-dependent
+                         -- timeout accuracy, which /may/ be substantially longer than one
+                         -- nanosecond, and /may/ be longer than the requested period.
+                         ("timeout" ::: Word64)
+                      -> io (Result)
+waitForPresentKHRSafe = waitForPresentKHRSafeOrUnsafe mkVkWaitForPresentKHRSafe
+
+
+-- | VkPhysicalDevicePresentWaitFeaturesKHR - Structure indicating support
+-- for present wait
+--
+-- = Members
+--
+-- This structure describes the following feature:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePresentWaitFeaturesKHR' structure is included in
+-- the @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
+-- structure passed to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
+-- it is filled in to indicate whether each corresponding feature is
+-- supported. 'PhysicalDevicePresentWaitFeaturesKHR' /can/ also be used in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- selectively enable these features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePresentWaitFeaturesKHR = PhysicalDevicePresentWaitFeaturesKHR
+  { -- | #features-presentWait# @presentWait@ indicates that the implementation
+    -- supports 'waitForPresentKHR'.
+    presentWait :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDevicePresentWaitFeaturesKHR)
+#endif
+deriving instance Show PhysicalDevicePresentWaitFeaturesKHR
+
+instance ToCStruct PhysicalDevicePresentWaitFeaturesKHR where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePresentWaitFeaturesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (presentWait))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevicePresentWaitFeaturesKHR where
+  peekCStruct p = do
+    presentWait <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDevicePresentWaitFeaturesKHR
+             (bool32ToBool presentWait)
+
+instance Storable PhysicalDevicePresentWaitFeaturesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePresentWaitFeaturesKHR where
+  zero = PhysicalDevicePresentWaitFeaturesKHR
+           zero
+
+
+type KHR_PRESENT_WAIT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_PRESENT_WAIT_SPEC_VERSION"
+pattern KHR_PRESENT_WAIT_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_PRESENT_WAIT_SPEC_VERSION = 1
+
+
+type KHR_PRESENT_WAIT_EXTENSION_NAME = "VK_KHR_present_wait"
+
+-- No documentation found for TopLevel "VK_KHR_PRESENT_WAIT_EXTENSION_NAME"
+pattern KHR_PRESENT_WAIT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_PRESENT_WAIT_EXTENSION_NAME = "VK_KHR_present_wait"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_present_wait.hs-boot b/src/Vulkan/Extensions/VK_KHR_present_wait.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_present_wait.hs-boot
@@ -0,0 +1,154 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_KHR_present_wait - device extension
+--
+-- == VK_KHR_present_wait
+--
+-- [__Name String__]
+--     @VK_KHR_present_wait@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     249
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_swapchain@
+--
+--     -   Requires @VK_KHR_present_id@
+--
+-- [__Contact__]
+--
+--     -   Keith Packard
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_present_wait:%20&body=@keithp%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2019-05-15
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Keith Packard, Valve
+--
+--     -   Ian Elliott, Google
+--
+--     -   Tobias Hector, AMD
+--
+--     -   Daniel Stone, Collabora
+--
+-- == Description
+--
+-- This device extension allows an application that uses the
+-- @VK_KHR_swapchain@ extension to wait for present operations to complete.
+-- An application can use this to monitor and control the pacing of the
+-- application by managing the number of outstanding images yet to be
+-- presented.
+--
+-- == New Commands
+--
+-- -   'waitForPresentKHR'
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDevicePresentWaitFeaturesKHR'
+--
+-- == New Enum Constants
+--
+-- -   'KHR_PRESENT_WAIT_EXTENSION_NAME'
+--
+-- -   'KHR_PRESENT_WAIT_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR'
+--
+-- == Issues
+--
+-- 1) When does the wait finish?
+--
+-- __RESOLVED__. The wait will finish when the present is visible to the
+-- user. There is no requirement for any precise timing relationship
+-- between the presentation of the image to the user, but implementations
+-- /should/ signal the wait as close as possible to the presentation of the
+-- first pixel in the new image to the user.
+--
+-- 2) Should this use fences or other existing synchronization mechanism.
+--
+-- __RESOLVED__. Because display and rendering are often implemented in
+-- separate drivers, this extension will provide a separate synchronization
+-- API.
+--
+-- 3) Should this extension share present identification with other
+-- extensions?
+--
+-- __RESOLVED__. Yes. A new extension, VK_KHR_present_id, should be created
+-- to provide a shared structure for presentation identifiers.
+--
+-- 4) What happens when presentations complete out of order wrt calls to
+-- vkQueuePresent? This could happen if the semaphores for the
+-- presentations were ready out of order.
+--
+-- __OPTION A__: Require that when a PresentId is set that the driver
+-- ensure that images are always presented in the order of calls to
+-- vkQueuePresent.
+--
+-- __OPTION B__: Finish both waits when the earliest present completes.
+-- This will complete the later present wait earlier than the actual
+-- presentation. This should be the easiest to implement as the driver need
+-- only track the largest present ID completed. This is also the
+-- \'natural\' consequence of interpreting the existing vkWaitForPresentKHR
+-- specificationn.
+--
+-- __OPTION C__: Finish both waits when both have completed. This will
+-- complete the earlier presentation later than the actual presentation
+-- time. This is allowed by the current specification as there is no
+-- precise timing requirement for when the presentId value is updated. This
+-- requires slightly more complexity in the driver as it will need to track
+-- all outstanding presentId values.
+--
+-- == Version History
+--
+-- -   Revision 1, 2019-02-19 (Keith Packard)
+--
+--     -   Initial version
+--
+-- = See Also
+--
+-- 'PhysicalDevicePresentWaitFeaturesKHR', 'waitForPresentKHR'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_present_wait Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_KHR_present_wait  (PhysicalDevicePresentWaitFeaturesKHR) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data PhysicalDevicePresentWaitFeaturesKHR
+
+instance ToCStruct PhysicalDevicePresentWaitFeaturesKHR
+instance Show PhysicalDevicePresentWaitFeaturesKHR
+
+instance FromCStruct PhysicalDevicePresentWaitFeaturesKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs b/src/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs
--- a/src/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs
+++ b/src/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs
@@ -88,7 +88,7 @@
 -- == Description
 --
 -- The use of Y′CBCR sampler conversion is an area in 3D graphics not used
--- by most Vulkan developers. It’s mainly used for processing inputs from
+-- by most Vulkan developers. It is mainly used for processing inputs from
 -- video decoders and cameras. The use of the extension assumes basic
 -- knowledge of Y′CBCR concepts.
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs b/src/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs
--- a/src/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs
+++ b/src/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs
@@ -121,7 +121,7 @@
 --
 -- 1) Is this the same functionality as @GL_ARB_shader_draw_parameters@?
 --
--- __RESOLVED__: It’s actually a superset as it also adds in support for
+-- __RESOLVED__: It is actually a superset, as it also adds in support for
 -- arrayed drawing commands.
 --
 -- In GL for @GL_ARB_shader_draw_parameters@, @gl_BaseVertexARB@ holds the
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_terminate_invocation.hs b/src/Vulkan/Extensions/VK_KHR_shader_terminate_invocation.hs
--- a/src/Vulkan/Extensions/VK_KHR_shader_terminate_invocation.hs
+++ b/src/Vulkan/Extensions/VK_KHR_shader_terminate_invocation.hs
@@ -28,6 +28,8 @@
 --     -   Jesse Hall
 --         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_shader_terminate_invocation:%20&body=@critsec%20 >
 --
+-- == Other Extension Metadata
+--
 -- [__Last Modified Date__]
 --     2020-08-11
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_terminate_invocation.hs-boot b/src/Vulkan/Extensions/VK_KHR_shader_terminate_invocation.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_shader_terminate_invocation.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_shader_terminate_invocation.hs-boot
@@ -28,6 +28,8 @@
 --     -   Jesse Hall
 --         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_shader_terminate_invocation:%20&body=@critsec%20 >
 --
+-- == Other Extension Metadata
+--
 -- [__Last Modified Date__]
 --     2020-08-11
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_spirv_1_4.hs b/src/Vulkan/Extensions/VK_KHR_spirv_1_4.hs
--- a/src/Vulkan/Extensions/VK_KHR_spirv_1_4.hs
+++ b/src/Vulkan/Extensions/VK_KHR_spirv_1_4.hs
@@ -94,7 +94,7 @@
 -- == Issues
 --
 -- 1. Should we have an extension specific to this SPIR-V version, or add a
--- version-generic query for SPIR-V version? SPIR-V 1.4 doesn’t need any
+-- version-generic query for SPIR-V version? SPIR-V 1.4 does not need any
 -- other API changes.
 --
 -- __RESOLVED__: Just expose SPIR-V 1.4.
@@ -107,13 +107,13 @@
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties'
 -- to allow querying the supported group operation categories, maximum
 -- supported subgroup size, etc. While we could expose the parts of a new
--- SPIR-V version that don’t need accompanying changes generically, we’ll
--- still end up writing extensions specific to each version for the
--- remaining parts. Thus the generic mechanism won’t reduce future
+-- SPIR-V version that do not need accompanying changes generically, we
+-- will still end up writing extensions specific to each version for the
+-- remaining parts. Thus the generic mechanism will not reduce future
 -- spec-writing effort. In addition, making it clear which parts of a
--- future version are supported by the generic mechanism and which can’t be
--- used without specific support would be difficult to get right ahead of
--- time.
+-- future version are supported by the generic mechanism and which cannot
+-- be used without specific support would be difficult to get right ahead
+-- of time.
 --
 -- 2. Can different stages of the same pipeline use shaders with different
 -- SPIR-V versions?
@@ -145,10 +145,10 @@
 -- though the extension was promoted in SPIR-V 1.4, the capabilities are
 -- still optional in implementations that support @VK_KHR_spirv_1_4@.
 --
--- A SPIR-V 1.4 module doesn’t need to enable @SPV_KHR_float_controls@ in
+-- A SPIR-V 1.4 module does not need to enable @SPV_KHR_float_controls@ in
 -- order to use the capabilities, so if the application has /a priori/
--- knowledge that the implementation supports the capabilities, it doesn’t
--- need to enable @VK_KHR_shader_float_controls@. However, if it doesn’t
+-- knowledge that the implementation supports the capabilities, it does not
+-- need to enable @VK_KHR_shader_float_controls@. However, if it does not
 -- have this knowledge and has to query for support at runtime, it must
 -- enable @VK_KHR_shader_float_controls@ in order to use
 -- 'Vulkan.Extensions.VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsPropertiesKHR'.
diff --git a/src/Vulkan/Extensions/VK_KHR_swapchain.hs b/src/Vulkan/Extensions/VK_KHR_swapchain.hs
--- a/src/Vulkan/Extensions/VK_KHR_swapchain.hs
+++ b/src/Vulkan/Extensions/VK_KHR_swapchain.hs
@@ -678,7 +678,7 @@
 -- -   Revision 13, 2015-06-01 (James Jones)
 --
 --     -   Moved some structures to VK_EXT_KHR_swap_chain to resolve the
---         spec’s issues 1 and 2.
+--         specification’s issues 1 and 2.
 --
 -- -   Revision 14, 2015-06-01 (James Jones)
 --
@@ -1217,6 +1217,7 @@
 import Vulkan.CStruct.Extends (PokeChain)
 import Vulkan.CStruct.Extends (PokeChain(..))
 import {-# SOURCE #-} Vulkan.Extensions.VK_GGP_frame_token (PresentFrameTokenGGP)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id (PresentIdKHR)
 import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_incremental_present (PresentRegionsKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (PresentTimesInfoGOOGLE)
@@ -1870,6 +1871,9 @@
 -- wait operation specified in 'PresentInfoKHR' will execute when the
 -- corresponding queue operation is complete.
 --
+-- Calls to 'queuePresentKHR' /may/ block, but /must/ return in finite
+-- time.
+--
 -- If any @swapchain@ member of @pPresentInfo@ was created with
 -- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT',
 -- 'Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
@@ -2840,6 +2844,7 @@
 --     'DeviceGroupPresentInfoKHR',
 --     'Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR',
 --     'Vulkan.Extensions.VK_GGP_frame_token.PresentFrameTokenGGP',
+--     'Vulkan.Extensions.VK_KHR_present_id.PresentIdKHR',
 --     'Vulkan.Extensions.VK_KHR_incremental_present.PresentRegionsKHR', or
 --     'Vulkan.Extensions.VK_GOOGLE_display_timing.PresentTimesInfoGOOGLE'
 --
@@ -2917,6 +2922,7 @@
   extends _ f
     | Just Refl <- eqT @e @PresentFrameTokenGGP = Just f
     | Just Refl <- eqT @e @PresentTimesInfoGOOGLE = Just f
+    | Just Refl <- eqT @e @PresentIdKHR = Just f
     | Just Refl <- eqT @e @DeviceGroupPresentInfoKHR = Just f
     | Just Refl <- eqT @e @PresentRegionsKHR = Just f
     | Just Refl <- eqT @e @DisplayPresentInfoKHR = Just f
diff --git a/src/Vulkan/Extensions/VK_KHR_swapchain.hs-boot b/src/Vulkan/Extensions/VK_KHR_swapchain.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_swapchain.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_swapchain.hs-boot
@@ -678,7 +678,7 @@
 -- -   Revision 13, 2015-06-01 (James Jones)
 --
 --     -   Moved some structures to VK_EXT_KHR_swap_chain to resolve the
---         spec’s issues 1 and 2.
+--         specification’s issues 1 and 2.
 --
 -- -   Revision 14, 2015-06-01 (James Jones)
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_synchronization2.hs b/src/Vulkan/Extensions/VK_KHR_synchronization2.hs
--- a/src/Vulkan/Extensions/VK_KHR_synchronization2.hs
+++ b/src/Vulkan/Extensions/VK_KHR_synchronization2.hs
@@ -468,6 +468,7 @@
                                                                       , ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR
                                                                       , ACCESS_2_SHADER_STORAGE_READ_BIT_KHR
                                                                       , ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR
+                                                                      , ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI
                                                                       , ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT
                                                                       , ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT
                                                                       , ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
@@ -507,6 +508,7 @@
                                                                              , PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR
                                                                              , PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR
                                                                              , PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR
+                                                                             , PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
                                                                              , PIPELINE_STAGE_2_MESH_SHADER_BIT_NV
                                                                              , PIPELINE_STAGE_2_TASK_SHADER_BIT_NV
                                                                              , PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT
@@ -885,6 +887,11 @@
 --     feature is not enabled, @stageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-vkCmdResetEvent2KHR-stageMask-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-vkCmdResetEvent2KHR-synchronization2-03829# The
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
 --     feature /must/ be enabled
@@ -1724,6 +1731,11 @@
 --     feature is not enabled, @stage@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @stage@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-vkCmdWriteTimestamp2KHR-synchronization2-03858# The
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
 --     feature /must/ be enabled
@@ -1914,6 +1926,11 @@
 --     feature is not enabled, @stage@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @stage@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-vkCmdWriteBufferMarker2AMD-synchronization2-03893# The
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
 --     feature /must/ be enabled
@@ -2176,6 +2193,11 @@
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03900# If @srcAccessMask@
 --     includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR', @srcStageMask@
 --     /must/ include 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
@@ -2335,6 +2357,10 @@
 --     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
 --     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
 --
+-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-04994# If @srcAccessMask@
+--     includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI', @srcStageMask@
+--     /must/ include 'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03924# If @srcAccessMask@
 --     includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV', @srcStageMask@
 --     /must/ include 'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
@@ -2406,6 +2432,11 @@
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03900# If @dstAccessMask@
 --     includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR', @dstStageMask@
 --     /must/ include 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
@@ -2565,6 +2596,10 @@
 --     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
 --     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
 --
+-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-04994# If @dstAccessMask@
+--     includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI', @dstStageMask@
+--     /must/ include 'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03924# If @dstAccessMask@
 --     includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV', @dstStageMask@
 --     /must/ include 'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
@@ -2686,7 +2721,7 @@
 --
 -- This structure defines a
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-memory memory dependency>
--- limited to an image subresource range, and optionally defines a
+-- limited to an image subresource range, and /can/ define a
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operation>
 -- and
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>
@@ -2805,6 +2840,11 @@
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03900# If
 --     @srcAccessMask@ includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR',
 --     @srcStageMask@ /must/ include
@@ -2978,6 +3018,11 @@
 --     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
 --     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
 --
+-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-04994# If
+--     @srcAccessMask@ includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI',
+--     @srcStageMask@ /must/ include
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03924# If
 --     @srcAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV',
 --     @srcStageMask@ /must/ include
@@ -3053,6 +3098,11 @@
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03900# If
 --     @dstAccessMask@ includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR',
 --     @dstStageMask@ /must/ include
@@ -3226,6 +3276,11 @@
 --     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
 --     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
 --
+-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-04994# If
+--     @dstAccessMask@ includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI',
+--     @dstStageMask@ /must/ include
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03924# If
 --     @dstAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV',
 --     @dstStageMask@ /must/ include
@@ -3717,7 +3772,7 @@
 --
 -- This structure defines a
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-memory memory dependency>
--- limited to a range of a buffer, and optionally defines a
+-- limited to a range of a buffer, and /can/ define a
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operation>
 -- for that range.
 --
@@ -3811,6 +3866,11 @@
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03900# If
 --     @srcAccessMask@ includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR',
 --     @srcStageMask@ /must/ include
@@ -3984,6 +4044,11 @@
 --     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
 --     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
 --
+-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-04994# If
+--     @srcAccessMask@ includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI',
+--     @srcStageMask@ /must/ include
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03924# If
 --     @srcAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV',
 --     @srcStageMask@ /must/ include
@@ -4059,6 +4124,11 @@
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03900# If
 --     @dstAccessMask@ includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR',
 --     @dstStageMask@ /must/ include
@@ -4232,6 +4302,11 @@
 --     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
 --     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
 --
+-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-04994# If
+--     @dstAccessMask@ includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI',
+--     @dstStageMask@ /must/ include
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03924# If
 --     @dstAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV',
 --     @dstStageMask@ /must/ include
@@ -4615,6 +4690,11 @@
 --     feature is not enabled, @stageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
+-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-04995# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
+--
 -- -   #VUID-VkSemaphoreSubmitInfoKHR-device-03888# If the @device@ that
 --     @semaphore@ was created on is not a device group, @deviceIndex@
 --     /must/ be @0@
@@ -5319,6 +5399,10 @@
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image>
 -- in any shader pipeline stage.
 pattern ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR           = AccessFlagBits2KHR 0x0000000400000000
+-- | 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI' specifies read access to a
+-- invocation mask image in the
+-- 'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI' pipeline stage.
+pattern ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI        = AccessFlagBits2KHR 0x0000008000000000
 -- | 'ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT' specifies read
 -- access to
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass color attachments>,
@@ -5415,6 +5499,7 @@
   , (ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR           , "SHADER_SAMPLED_READ_BIT_KHR")
   , (ACCESS_2_SHADER_STORAGE_READ_BIT_KHR           , "SHADER_STORAGE_READ_BIT_KHR")
   , (ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR          , "SHADER_STORAGE_WRITE_BIT_KHR")
+  , (ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI       , "INVOCATION_MASK_READ_BIT_HUAWEI")
   , (ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, "COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT")
   , (ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT     , "FRAGMENT_DENSITY_MAP_READ_BIT_EXT")
   , (ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR  , "ACCELERATION_STRUCTURE_WRITE_BIT_KHR")
@@ -5577,6 +5662,8 @@
 -- -   'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
 --
 -- -   'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
+--
+-- -   'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
 pattern PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR                   = PipelineStageFlagBits2KHR 0x0000000000008000
 -- | 'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR' specifies all operations
 -- performed by all commands supported on the queue it is used with.
@@ -5618,6 +5705,10 @@
 --
 -- -   'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
 pattern PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR      = PipelineStageFlagBits2KHR 0x0000004000000000
+-- | 'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI' specifies the stage of the
+-- pipeline where the invocation mask image is read by the implementation
+-- to optimize the ray dispatch.
+pattern PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI             = PipelineStageFlagBits2KHR 0x0000010000000000
 -- | 'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV' specifies the mesh shader stage.
 pattern PIPELINE_STAGE_2_MESH_SHADER_BIT_NV                     = PipelineStageFlagBits2KHR 0x0000000000100000
 -- | 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' specifies the task shader stage.
@@ -5687,6 +5778,7 @@
   , (PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR                   , "INDEX_INPUT_BIT_KHR")
   , (PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR        , "VERTEX_ATTRIBUTE_INPUT_BIT_KHR")
   , (PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR     , "PRE_RASTERIZATION_SHADERS_BIT_KHR")
+  , (PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI            , "INVOCATION_MASK_BIT_HUAWEI")
   , (PIPELINE_STAGE_2_MESH_SHADER_BIT_NV                    , "MESH_SHADER_BIT_NV")
   , (PIPELINE_STAGE_2_TASK_SHADER_BIT_NV                    , "TASK_SHADER_BIT_NV")
   , (PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT      , "FRAGMENT_DENSITY_PROCESS_BIT_EXT")
diff --git a/src/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs b/src/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs
--- a/src/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs
+++ b/src/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs
@@ -220,7 +220,7 @@
 -- presentation and swapchain image acquisition operations?
 --
 -- __RESOLVED__: Some implementations may have problems with supporting
--- that directly, thus it’s not allowed in this extension.
+-- that directly, thus it is not allowed in this extension.
 --
 -- 8) Do we want to support external sharing of the new synchronization
 -- primitive type?
diff --git a/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs b/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs
--- a/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs
+++ b/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs
@@ -65,7 +65,7 @@
 -- shader can bulk copy data from another storage class using one type
 -- (e.g. an array of large vectors), and then use the data with a more
 -- specific type. It also enables reducing the amount of workgroup memory
--- consumed by allowing the shader to alias data whose lifetimes don’t
+-- consumed by allowing the shader to alias data whose lifetimes do not
 -- overlap.
 --
 -- The explicit layout support and some form of aliasing is also required
diff --git a/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs-boot b/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs-boot
@@ -65,7 +65,7 @@
 -- shader can bulk copy data from another storage class using one type
 -- (e.g. an array of large vectors), and then use the data with a more
 -- specific type. It also enables reducing the amount of workgroup memory
--- consumed by allowing the shader to alias data whose lifetimes don’t
+-- consumed by allowing the shader to alias data whose lifetimes do not
 -- overlap.
 --
 -- The explicit layout support and some form of aliasing is also required
diff --git a/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs b/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs
--- a/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs
+++ b/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs
@@ -368,8 +368,9 @@
 --
 -- = Description
 --
--- If this structure is not present, or if the extension is not enabled,
--- the default coverage reduction mode is inferred as follows:
+-- If this structure is not included in the @pNext@ chain, or if the
+-- extension is not enabled, the default coverage reduction mode is
+-- inferred as follows:
 --
 -- -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, then
 --     it is as if the @coverageReductionMode@ is
diff --git a/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs b/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs
--- a/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs
+++ b/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs
@@ -1851,7 +1851,7 @@
   , -- No documentation found for Nested "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" "minSequencesIndexBufferOffsetAlignment"
     minSequencesIndexBufferOffsetAlignment :: Word32
   , -- | @minIndirectCommandsBufferOffsetAlignment@ is the minimum alignment for
-    -- memory addresses used in 'IndirectCommandsStreamNV' and as preprocess
+    -- memory addresses used in 'IndirectCommandsStreamNV', and as preprocess
     -- buffer in 'GeneratedCommandsInfoNV'.
     minIndirectCommandsBufferOffsetAlignment :: Word32
   }
diff --git a/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs b/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs
--- a/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs
+++ b/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs
@@ -215,7 +215,6 @@
 import Control.Monad.Trans.Cont (ContT(..))
 import Vulkan.Core10.FundamentalTypes (bool32ToBool)
 import Vulkan.Core10.FundamentalTypes (boolToBool32)
-import Vulkan.NamedType ((:::))
 import Vulkan.Core10.FundamentalTypes (Bool32)
 import Vulkan.Core10.Handles (Device)
 import Vulkan.Core10.Handles (Device(..))
@@ -268,19 +267,23 @@
                             -- #VUID-vkGetMemoryRemoteAddressNV-device-parameter# @device@ /must/ be a
                             -- valid 'Vulkan.Core10.Handles.Device' handle
                             Device
-                         -> -- | #VUID-vkGetMemoryRemoteAddressNV-getMemoryRemoteAddressInfo-parameter#
-                            -- @getMemoryRemoteAddressInfo@ /must/ be a valid pointer to a valid
+                         -> -- | @pMemoryGetRemoteAddressInfo@ is a pointer to a
+                            -- 'MemoryGetRemoteAddressInfoNV' structure containing parameters of the
+                            -- export operation.
+                            --
+                            -- #VUID-vkGetMemoryRemoteAddressNV-pMemoryGetRemoteAddressInfo-parameter#
+                            -- @pMemoryGetRemoteAddressInfo@ /must/ be a valid pointer to a valid
                             -- 'MemoryGetRemoteAddressInfoNV' structure
-                            ("getMemoryRemoteAddressInfo" ::: MemoryGetRemoteAddressInfoNV)
+                            MemoryGetRemoteAddressInfoNV
                          -> io (RemoteAddressNV)
-getMemoryRemoteAddressNV device getMemoryRemoteAddressInfo = liftIO . evalContT $ do
+getMemoryRemoteAddressNV device memoryGetRemoteAddressInfo = liftIO . evalContT $ do
   let vkGetMemoryRemoteAddressNVPtr = pVkGetMemoryRemoteAddressNV (deviceCmds (device :: Device))
   lift $ unless (vkGetMemoryRemoteAddressNVPtr /= nullFunPtr) $
     throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetMemoryRemoteAddressNV is null" Nothing Nothing
   let vkGetMemoryRemoteAddressNV' = mkVkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNVPtr
-  getMemoryRemoteAddressInfo' <- ContT $ withCStruct (getMemoryRemoteAddressInfo)
+  pMemoryGetRemoteAddressInfo <- ContT $ withCStruct (memoryGetRemoteAddressInfo)
   pPAddress <- ContT $ bracket (callocBytes @RemoteAddressNV 8) free
-  r <- lift $ traceAroundEvent "vkGetMemoryRemoteAddressNV" (vkGetMemoryRemoteAddressNV' (deviceHandle (device)) getMemoryRemoteAddressInfo' (pPAddress))
+  r <- lift $ traceAroundEvent "vkGetMemoryRemoteAddressNV" (vkGetMemoryRemoteAddressNV' (deviceHandle (device)) pMemoryGetRemoteAddressInfo (pPAddress))
   lift $ when (r < SUCCESS) (throwIO (VulkanException r))
   pAddress <- lift $ peek @RemoteAddressNV pPAddress
   pure $ (pAddress)
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs b/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
--- a/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
+++ b/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
@@ -153,8 +153,9 @@
 -- the sample coverage mask are filled with zeros.
 --
 -- If @coverageToColorEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE',
--- these operations are skipped. If this structure is not present, it is as
--- if @coverageToColorEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE'.
+-- these operations are skipped. If this structure is not included in the
+-- @pNext@ chain, it is as if @coverageToColorEnable@ is
+-- 'Vulkan.Core10.FundamentalTypes.FALSE'.
 --
 -- == Valid Usage
 --
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs b/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs
--- a/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs
+++ b/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs
@@ -159,7 +159,7 @@
 --
 -- __RESOLVED__: The SPIR-V extension for this feature chose to mirror the
 -- behavior of the GLSL extension, which provides two built-in variables.
--- Additionally, it’s not clear that its a good idea (or even legal) to
+-- Additionally, it is not clear that its a good idea (or even legal) to
 -- have two variables using the “same attribute”, but with different
 -- interpolation modifiers.
 --
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot b/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot
--- a/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot
+++ b/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot
@@ -159,7 +159,7 @@
 --
 -- __RESOLVED__: The SPIR-V extension for this feature chose to mirror the
 -- behavior of the GLSL extension, which provides two built-in variables.
--- Additionally, it’s not clear that its a good idea (or even legal) to
+-- Additionally, it is not clear that its a good idea (or even legal) to
 -- have two variables using the “same attribute”, but with different
 -- interpolation modifiers.
 --
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs b/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs
--- a/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs
+++ b/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs
@@ -135,14 +135,14 @@
 --     VK_NV_shading_rate_image, there are three different ways to specify
 --     shading rate state in a pipeline. How should we handle this?
 --
---     __RESOLVED__: We don’t allow the concurrent use of
+--     __RESOLVED__: We do not allow the concurrent use of
 --     VK_NV_shading_rate_image and VK_KHR_fragment_shading_rate; it is an
 --     error to enable shading rate features from both extensions. But we
 --     do allow applications to enable this extension together with
 --     VK_KHR_fragment_shading_rate together. While we expect that
 --     applications will never attach pipeline CreateInfo structures for
---     both this extension and the KHR extension concurrently, Vulkan
---     doesn’t have any precedent forbidding such behavior and instead
+--     both this extension and the KHR extension concurrently, Vulkan does
+--     not have any precedent forbidding such behavior and instead
 --     typically treats a pipeline created without an extension-specific
 --     CreateInfo structure as equivalent to one containing default values
 --     specified by the extension. Rather than adding such a rule
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs-boot b/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs-boot
--- a/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs-boot
+++ b/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs-boot
@@ -135,14 +135,14 @@
 --     VK_NV_shading_rate_image, there are three different ways to specify
 --     shading rate state in a pipeline. How should we handle this?
 --
---     __RESOLVED__: We don’t allow the concurrent use of
+--     __RESOLVED__: We do not allow the concurrent use of
 --     VK_NV_shading_rate_image and VK_KHR_fragment_shading_rate; it is an
 --     error to enable shading rate features from both extensions. But we
 --     do allow applications to enable this extension together with
 --     VK_KHR_fragment_shading_rate together. While we expect that
 --     applications will never attach pipeline CreateInfo structures for
---     both this extension and the KHR extension concurrently, Vulkan
---     doesn’t have any precedent forbidding such behavior and instead
+--     both this extension and the KHR extension concurrently, Vulkan does
+--     not have any precedent forbidding such behavior and instead
 --     typically treats a pipeline created without an extension-specific
 --     CreateInfo structure as equivalent to one containing default values
 --     specified by the extension. Rather than adding such a rule
diff --git a/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs b/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
--- a/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
+++ b/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
@@ -224,8 +224,8 @@
 -- value of R. Which components are modulated is controlled by
 -- @coverageModulationMode@.
 --
--- If this structure is not present, it is as if @coverageModulationMode@
--- is 'COVERAGE_MODULATION_MODE_NONE_NV'.
+-- If this structure is not included in the @pNext@ chain, it is as if
+-- @coverageModulationMode@ is 'COVERAGE_MODULATION_MODE_NONE_NV'.
 --
 -- If the
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-coverage-reduction coverage reduction mode>
diff --git a/src/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs b/src/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs
--- a/src/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs
+++ b/src/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs
@@ -183,7 +183,7 @@
 -- >
 -- > void main()
 -- > {
--- >     // The shader simply computes and writes gl_Layer.  We don't
+-- >     // The shader simply computes and writes gl_Layer.  We do not
 -- >     // loop over three vertices or call EmitVertex().
 -- >     gl_Layer = compute_layer();
 -- > }
diff --git a/src/Vulkan/Extensions/VK_NV_inherited_viewport_scissor.hs b/src/Vulkan/Extensions/VK_NV_inherited_viewport_scissor.hs
--- a/src/Vulkan/Extensions/VK_NV_inherited_viewport_scissor.hs
+++ b/src/Vulkan/Extensions/VK_NV_inherited_viewport_scissor.hs
@@ -113,7 +113,7 @@
 --
 -- This design also better matches the hardware model. In fact, there is no
 -- need to re-execute a depth-setting command. The graphics device retains
--- the viewport depth state; it’s the CPU-side state of
+-- the viewport depth state; it is the CPU-side state of
 -- 'Vulkan.Core10.Handles.CommandBuffer' that must be re-initialized.
 --
 -- (2) Why are viewport depth values specified as a partial
diff --git a/src/Vulkan/Extensions/VK_NV_inherited_viewport_scissor.hs-boot b/src/Vulkan/Extensions/VK_NV_inherited_viewport_scissor.hs-boot
--- a/src/Vulkan/Extensions/VK_NV_inherited_viewport_scissor.hs-boot
+++ b/src/Vulkan/Extensions/VK_NV_inherited_viewport_scissor.hs-boot
@@ -113,7 +113,7 @@
 --
 -- This design also better matches the hardware model. In fact, there is no
 -- need to re-execute a depth-setting command. The graphics device retains
--- the viewport depth state; it’s the CPU-side state of
+-- the viewport depth state; it is the CPU-side state of
 -- 'Vulkan.Core10.Handles.CommandBuffer' that must be re-initialized.
 --
 -- (2) Why are viewport depth values specified as a partial
diff --git a/src/Vulkan/Extensions/VK_NV_mesh_shader.hs b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs
--- a/src/Vulkan/Extensions/VK_NV_mesh_shader.hs
+++ b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs
@@ -229,9 +229,9 @@
 --     __RESOLVED__: No. If an application were to be recompiled with
 --     headers that include additional shader stage bits in
 --     VK_SHADER_STAGE_ALL_GRAPHICS, then the previously valid application
---     would no longer be valid on implementations that don’t support mesh
+--     would no longer be valid on implementations that do not support mesh
 --     or task shaders. This means the change would not be backwards
---     compatible. It’s too bad VkShaderStageFlagBits doesn’t have a
+--     compatible. It is too bad VkShaderStageFlagBits does not have a
 --     dedicated “all supported graphics stages” bit like
 --     VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, which would have avoided this
 --     problem.
diff --git a/src/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot
--- a/src/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot
+++ b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot
@@ -229,9 +229,9 @@
 --     __RESOLVED__: No. If an application were to be recompiled with
 --     headers that include additional shader stage bits in
 --     VK_SHADER_STAGE_ALL_GRAPHICS, then the previously valid application
---     would no longer be valid on implementations that don’t support mesh
+--     would no longer be valid on implementations that do not support mesh
 --     or task shaders. This means the change would not be backwards
---     compatible. It’s too bad VkShaderStageFlagBits doesn’t have a
+--     compatible. It is too bad VkShaderStageFlagBits does not have a
 --     dedicated “all supported graphics stages” bit like
 --     VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, which would have avoided this
 --     problem.
diff --git a/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs
--- a/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs
+++ b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs
@@ -362,8 +362,10 @@
 --
 -- = Description
 --
--- If 'AccelerationStructureGeometryMotionTrianglesDataNV' is present in a
--- geometry, the basic vertex positions are used for the position of the
+-- If 'AccelerationStructureGeometryMotionTrianglesDataNV' is included in
+-- the @pNext@ chain of a
+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryTrianglesDataKHR'
+-- structure, the basic vertex positions are used for the position of the
 -- triangles in the geometry at time 0.0 and the @vertexData@ in
 -- 'AccelerationStructureGeometryMotionTrianglesDataNV' is used for the
 -- vertex positions at time 1.0, with positions linearly interpolated at
@@ -651,8 +653,8 @@
 --
 -- = Description
 --
--- The C language spec does not define the ordering of bit-fields, but in
--- practice, this struct produces the correct layout with existing
+-- The C language specification does not define the ordering of bit-fields,
+-- but in practice, this struct produces the correct layout with existing
 -- compilers. The intended bit pattern is for the following:
 --
 -- If a compiler produces code that diverges from that pattern,
@@ -788,8 +790,8 @@
 --
 -- = Description
 --
--- The C language spec does not define the ordering of bit-fields, but in
--- practice, this struct produces the correct layout with existing
+-- The C language specification does not define the ordering of bit-fields,
+-- but in practice, this struct produces the correct layout with existing
 -- compilers. The intended bit pattern is for the following:
 --
 -- If a compiler produces code that diverges from that pattern,
diff --git a/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs b/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs
--- a/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs
+++ b/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs
@@ -103,7 +103,7 @@
 --
 -- __RESOLVED__: No. As specified, we only guarantee that each primitive
 -- with at least one fragment that passes prior tests will have one
--- fragment passing the representative fragment tests. We don’t guarantee
+-- fragment passing the representative fragment tests. We do not guarantee
 -- that any particular fragment will fail the test.
 --
 -- In the initial implementation of this extension, the representative
@@ -126,7 +126,7 @@
 -- __RESOLVED__: If writes to the color or depth buffer are enabled, they
 -- will be performed for any fragments that survive the relevant tests. Any
 -- fragments that fail the representative fragment test will not update
--- color buffers. For the use cases intended for this feature, we don’t
+-- color buffers. For the use cases intended for this feature, we do not
 -- expect color or depth writes to be enabled.
 --
 -- (4) How do derivatives and automatic texture level of detail
@@ -135,7 +135,7 @@
 -- __RESOLVED__: If a fragment shader uses derivative functions or texture
 -- lookups using automatic level of detail computation, derivatives will be
 -- computed identically whether or not the representative fragment test is
--- enabled. For the use cases intended for this feature, we don’t expect
+-- enabled. For the use cases intended for this feature, we do not expect
 -- the use of derivatives in the fragment shader.
 --
 -- == Version History
@@ -267,9 +267,10 @@
 --
 -- = Description
 --
--- If this structure is not present, @representativeFragmentTestEnable@ is
--- considered to be 'Vulkan.Core10.FundamentalTypes.FALSE', and the
--- representative fragment test is disabled.
+-- If this structure is not included in the @pNext@ chain,
+-- @representativeFragmentTestEnable@ is considered to be
+-- 'Vulkan.Core10.FundamentalTypes.FALSE', and the representative fragment
+-- test is disabled.
 --
 -- If
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-earlytest early fragment tests>
diff --git a/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot b/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot
--- a/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot
+++ b/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot
@@ -103,7 +103,7 @@
 --
 -- __RESOLVED__: No. As specified, we only guarantee that each primitive
 -- with at least one fragment that passes prior tests will have one
--- fragment passing the representative fragment tests. We don’t guarantee
+-- fragment passing the representative fragment tests. We do not guarantee
 -- that any particular fragment will fail the test.
 --
 -- In the initial implementation of this extension, the representative
@@ -126,7 +126,7 @@
 -- __RESOLVED__: If writes to the color or depth buffer are enabled, they
 -- will be performed for any fragments that survive the relevant tests. Any
 -- fragments that fail the representative fragment test will not update
--- color buffers. For the use cases intended for this feature, we don’t
+-- color buffers. For the use cases intended for this feature, we do not
 -- expect color or depth writes to be enabled.
 --
 -- (4) How do derivatives and automatic texture level of detail
@@ -135,7 +135,7 @@
 -- __RESOLVED__: If a fragment shader uses derivative functions or texture
 -- lookups using automatic level of detail computation, derivatives will be
 -- computed identically whether or not the representative fragment test is
--- enabled. For the use cases intended for this feature, we don’t expect
+-- enabled. For the use cases intended for this feature, we do not expect
 -- the use of derivatives in the fragment shader.
 --
 -- == Version History
diff --git a/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs
--- a/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs
+++ b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs
@@ -240,7 +240,7 @@
 -- that this same problem also exists for multisampling with single-pixel
 -- fragments, but is less severe because it only affects certain samples of
 -- a pixel and such bright\/dark samples may be averaged with other samples
--- that don’t have a similar problem.
+-- that do not have a similar problem.
 --
 -- == Version History
 --
diff --git a/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot
--- a/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot
+++ b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot
@@ -240,7 +240,7 @@
 -- that this same problem also exists for multisampling with single-pixel
 -- fragments, but is less severe because it only affects certain samples of
 -- a pixel and such bright\/dark samples may be averaged with other samples
--- that don’t have a similar problem.
+-- that do not have a similar problem.
 --
 -- == Version History
 --
diff --git a/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs b/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
--- a/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
+++ b/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
@@ -97,7 +97,7 @@
 -- The viewport mask expansion (@VK_NV_viewport_array2@) and the viewport
 -- swizzle could potentially be performed before or after transform
 -- feedback, but feeding back several viewports worth of primitives with
--- different swizzles doesn’t seem particularly useful. This specification
+-- different swizzles does not seem particularly useful. This specification
 -- applies the viewport mask and swizzle after transform feedback, and
 -- makes primitive queries only count each primitive once.
 --
@@ -141,7 +141,7 @@
 -- >         positions[i] = rotate(gl_in[i].gl_Position, face);
 -- >     }
 -- >
--- >     // If the primitive doesn't project onto this face, we're done.
+-- >     // If the primitive does not project onto this face, we are done.
 -- >     if (shouldCull(positions)) {
 -- >         return;
 -- >     }
@@ -224,7 +224,7 @@
 --
 -- 2.  On NVIDIA implementations supporting floating-point depth buffers
 --     with values outside [0,1], prevent unwanted near plane clipping by
---     enabling @depthClampEnable@. Ensure that the depth clamp doesn’t
+--     enabling @depthClampEnable@. Ensure that the depth clamp does not
 --     mess up depth testing by programming the depth range to very large
 --     values, such as @minDepthBounds@=-z, @maxDepthBounds@=+z, where z =
 --     2127. It should be possible to use IEEE infinity encodings also
diff --git a/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot b/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot
--- a/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot
+++ b/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot
@@ -97,7 +97,7 @@
 -- The viewport mask expansion (@VK_NV_viewport_array2@) and the viewport
 -- swizzle could potentially be performed before or after transform
 -- feedback, but feeding back several viewports worth of primitives with
--- different swizzles doesn’t seem particularly useful. This specification
+-- different swizzles does not seem particularly useful. This specification
 -- applies the viewport mask and swizzle after transform feedback, and
 -- makes primitive queries only count each primitive once.
 --
@@ -141,7 +141,7 @@
 -- >         positions[i] = rotate(gl_in[i].gl_Position, face);
 -- >     }
 -- >
--- >     // If the primitive doesn't project onto this face, we're done.
+-- >     // If the primitive does not project onto this face, we are done.
 -- >     if (shouldCull(positions)) {
 -- >         return;
 -- >     }
@@ -224,7 +224,7 @@
 --
 -- 2.  On NVIDIA implementations supporting floating-point depth buffers
 --     with values outside [0,1], prevent unwanted near plane clipping by
---     enabling @depthClampEnable@. Ensure that the depth clamp doesn’t
+--     enabling @depthClampEnable@. Ensure that the depth clamp does not
 --     mess up depth testing by programming the depth range to very large
 --     values, such as @minDepthBounds@=-z, @maxDepthBounds@=+z, where z =
 --     2127. It should be possible to use IEEE infinity encodings also
diff --git a/src/Vulkan/SPIRVRequirements.hs b/src/Vulkan/SPIRVRequirements.hs
--- a/src/Vulkan/SPIRVRequirements.hs
+++ b/src/Vulkan/SPIRVRequirements.hs
@@ -40,6 +40,8 @@
 import Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (PhysicalDeviceRayTracingMotionBlurFeaturesNV(..))
 import Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelineFeaturesKHR)
 import Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelineFeaturesKHR(..))
+import Vulkan.Extensions.VK_EXT_shader_atomic_float2 (PhysicalDeviceShaderAtomicFloat2FeaturesEXT)
+import Vulkan.Extensions.VK_EXT_shader_atomic_float2 (PhysicalDeviceShaderAtomicFloat2FeaturesEXT(..))
 import Vulkan.Extensions.VK_EXT_shader_atomic_float (PhysicalDeviceShaderAtomicFloatFeaturesEXT)
 import Vulkan.Extensions.VK_EXT_shader_atomic_float (PhysicalDeviceShaderAtomicFloatFeaturesEXT(..))
 import Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation (PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT)
@@ -84,6 +86,7 @@
 import Vulkan.Extensions.VK_EXT_fragment_density_map (pattern EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_fragment_shader_interlock (pattern EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_post_depth_coverage (pattern EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME)
+import Vulkan.Extensions.VK_EXT_shader_atomic_float2 (pattern EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_shader_atomic_float (pattern EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation (pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_shader_image_atomic_int64 (pattern EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME)
@@ -647,6 +650,36 @@
                              , deviceExtensionMinVersion = 0
                              }
     ]
+  "SPV_EXT_shader_atomic_float_min_max" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
+  "SPV_EXT_shader_atomic_float16_add" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
   _ -> ([], [])
 
 spirvCapabilityRequirements :: ByteString -> ([InstanceRequirement], [DeviceRequirement])
@@ -714,6 +747,26 @@
                              , deviceExtensionMinVersion = 0
                              }
     ]
+  "AtomicFloat16AddEXT" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceFeature
+      { featureName   = "shaderBufferFloat16AtomicAdd"
+      , checkFeature  = shaderBufferFloat16AtomicAdd :: PhysicalDeviceShaderAtomicFloat2FeaturesEXT -> Bool
+      , enableFeature = \f -> f { shaderBufferFloat16AtomicAdd = True } :: PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+      }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
   "AtomicFloat32AddEXT" -> (,)
     [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
                                , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
@@ -741,6 +794,69 @@
       , checkFeature  = shaderBufferFloat64AtomicAdd :: PhysicalDeviceShaderAtomicFloatFeaturesEXT -> Bool
       , enableFeature = \f -> f { shaderBufferFloat64AtomicAdd = True } :: PhysicalDeviceShaderAtomicFloatFeaturesEXT
       }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
+  "AtomicFloat16MinMaxEXT" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceFeature
+      { featureName   = "shaderBufferFloat16AtomicMinMax"
+      , checkFeature  = shaderBufferFloat16AtomicMinMax :: PhysicalDeviceShaderAtomicFloat2FeaturesEXT -> Bool
+      , enableFeature = \f ->
+                          f { shaderBufferFloat16AtomicMinMax = True } :: PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+      }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
+  "AtomicFloat32MinMaxEXT" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceFeature
+      { featureName   = "shaderBufferFloat32AtomicMinMax"
+      , checkFeature  = shaderBufferFloat32AtomicMinMax :: PhysicalDeviceShaderAtomicFloat2FeaturesEXT -> Bool
+      , enableFeature = \f ->
+                          f { shaderBufferFloat32AtomicMinMax = True } :: PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+      }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
+  "AtomicFloat64MinMaxEXT" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceFeature
+      { featureName   = "shaderBufferFloat64AtomicMinMax"
+      , checkFeature  = shaderBufferFloat64AtomicMinMax :: PhysicalDeviceShaderAtomicFloat2FeaturesEXT -> Bool
+      , enableFeature = \f ->
+                          f { shaderBufferFloat64AtomicMinMax = True } :: PhysicalDeviceShaderAtomicFloat2FeaturesEXT
+      }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
     , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
                              , deviceExtensionName       = EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME
                              , deviceExtensionMinVersion = 0
diff --git a/src/Vulkan/Version.hs b/src/Vulkan/Version.hs
--- a/src/Vulkan/Version.hs
+++ b/src/Vulkan/Version.hs
@@ -19,11 +19,11 @@
 import Data.Word (Word32)
 
 pattern HEADER_VERSION :: Word32
-pattern HEADER_VERSION = 184
+pattern HEADER_VERSION = 185
 
 
 pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 184
+pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 185
 
 
 pattern MAKE_API_VERSION :: Word32 -> Word32 -> Word32 -> Word32
diff --git a/vulkan.cabal b/vulkan.cabal
--- a/vulkan.cabal
+++ b/vulkan.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           vulkan
-version:        3.11.2
+version:        3.11.3
 synopsis:       Bindings to the Vulkan graphics API.
 description:    Please see [the readme](https://github.com/expipiplus1/vulkan/#readme)
 category:       Graphics
@@ -336,6 +336,7 @@
       Vulkan.Extensions.VK_EXT_scalar_block_layout
       Vulkan.Extensions.VK_EXT_separate_stencil_usage
       Vulkan.Extensions.VK_EXT_shader_atomic_float
+      Vulkan.Extensions.VK_EXT_shader_atomic_float2
       Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation
       Vulkan.Extensions.VK_EXT_shader_image_atomic_int64
       Vulkan.Extensions.VK_EXT_shader_stencil_export
@@ -364,6 +365,7 @@
       Vulkan.Extensions.VK_GOOGLE_display_timing
       Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1
       Vulkan.Extensions.VK_GOOGLE_user_type
+      Vulkan.Extensions.VK_HUAWEI_invocation_mask
       Vulkan.Extensions.VK_IMG_filter_cubic
       Vulkan.Extensions.VK_IMG_format_pvrtc
       Vulkan.Extensions.VK_INTEL_performance_query
@@ -414,6 +416,8 @@
       Vulkan.Extensions.VK_KHR_pipeline_executable_properties
       Vulkan.Extensions.VK_KHR_pipeline_library
       Vulkan.Extensions.VK_KHR_portability_subset
+      Vulkan.Extensions.VK_KHR_present_id
+      Vulkan.Extensions.VK_KHR_present_wait
       Vulkan.Extensions.VK_KHR_push_descriptor
       Vulkan.Extensions.VK_KHR_ray_query
       Vulkan.Extensions.VK_KHR_ray_tracing_pipeline
