diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,9 @@
 
 ## WIP
 
+## [3.24.2] - 2022-12-27
+- Bump API version to v1.3.237
+
 ## [3.24.1] - 2022-12-27
 - Bump API version to v1.3.236
 
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: vulkan
-version: "3.24.1"
+version: "3.24.2"
 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
@@ -628,6 +628,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_subpass_shading (PhysicalDeviceSubpassShadingFeaturesHUAWEI)
 import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_subpass_shading (PhysicalDeviceSubpassShadingPropertiesHUAWEI)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (PhysicalDeviceSurfaceInfo2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (PhysicalDeviceSwapchainMaintenance1FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_synchronization2 (PhysicalDeviceSynchronization2Features)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentProperties)
@@ -732,6 +733,7 @@
 import {-# SOURCE #-} Vulkan.Core10.FundamentalTypes (Rect2D)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_incremental_present (RectLayerKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (RefreshCycleDurationGOOGLE)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (ReleaseSwapchainImagesInfoEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (RenderPassAttachmentBeginInfo)
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
 import {-# SOURCE #-} Vulkan.Core10.Pass (RenderPassCreateInfo)
@@ -819,11 +821,18 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface (SurfaceFormatKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveWin32InfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_surface_maintenance1 (SurfacePresentModeCompatibilityEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_surface_maintenance1 (SurfacePresentModeEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_surface_maintenance1 (SurfacePresentScalingCapabilitiesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface_protected_capabilities (SurfaceProtectedCapabilitiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (SwapchainCounterCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_display_native_hdr (SwapchainDisplayNativeHdrCreateInfoAMD)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_present_barrier (SwapchainPresentBarrierCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (SwapchainPresentFenceInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (SwapchainPresentModeInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (SwapchainPresentModesCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (SwapchainPresentScalingCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_buffer_collection (SysmemColorSpaceFUCHSIA)
 import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_texture_gather_bias_lod (TextureLODGatherFormatPropertiesAMD)
 import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_tile_properties (TilePropertiesQCOM)
@@ -1155,6 +1164,7 @@
   Extends DeviceCreateInfo PhysicalDeviceOpticalFlowFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceFaultFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceShaderCoreBuiltinsFeaturesARM = ()
+  Extends DeviceCreateInfo PhysicalDeviceSwapchainMaintenance1FeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceRayTracingInvocationReorderFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM = ()
   Extends DeviceQueueCreateInfo DeviceQueueGlobalPriorityCreateInfoKHR = ()
@@ -1387,6 +1397,7 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceOpticalFlowFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceFaultFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderCoreBuiltinsFeaturesARM = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceSwapchainMaintenance1FeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceRayTracingInvocationReorderFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM = ()
   Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceExternalImageFormatInfo = ()
@@ -1468,6 +1479,7 @@
   Extends PhysicalDeviceProperties2 PhysicalDeviceRayTracingInvocationReorderPropertiesNV = ()
   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveInfoEXT = ()
   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveWin32InfoEXT = ()
+  Extends PhysicalDeviceSurfaceInfo2KHR SurfacePresentModeEXT = ()
   Extends PipelineColorBlendStateCreateInfo PipelineColorBlendAdvancedStateCreateInfoEXT = ()
   Extends PipelineColorBlendStateCreateInfo PipelineColorWriteCreateInfoEXT = ()
   Extends PipelineMultisampleStateCreateInfo PipelineCoverageToColorStateCreateInfoNV = ()
@@ -1500,6 +1512,8 @@
   Extends PresentInfoKHR PresentIdKHR = ()
   Extends PresentInfoKHR PresentTimesInfoGOOGLE = ()
   Extends PresentInfoKHR PresentFrameTokenGGP = ()
+  Extends PresentInfoKHR SwapchainPresentFenceInfoEXT = ()
+  Extends PresentInfoKHR SwapchainPresentModeInfoEXT = ()
   Extends QueryPoolCreateInfo QueryPoolPerformanceCreateInfoKHR = ()
   Extends QueryPoolCreateInfo QueryPoolPerformanceQueryCreateInfoINTEL = ()
   Extends QueueFamilyProperties2 QueueFamilyGlobalPriorityPropertiesKHR = ()
@@ -1559,6 +1573,8 @@
   Extends SurfaceCapabilities2KHR SurfaceProtectedCapabilitiesKHR = ()
   Extends SurfaceCapabilities2KHR SurfaceCapabilitiesFullScreenExclusiveEXT = ()
   Extends SurfaceCapabilities2KHR SurfaceCapabilitiesPresentBarrierNV = ()
+  Extends SurfaceCapabilities2KHR SurfacePresentScalingCapabilitiesEXT = ()
+  Extends SurfaceCapabilities2KHR SurfacePresentModeCompatibilityEXT = ()
   Extends SurfaceFormat2KHR ImageCompressionPropertiesEXT = ()
   Extends SwapchainCreateInfoKHR SwapchainCounterCreateInfoEXT = ()
   Extends SwapchainCreateInfoKHR DeviceGroupSwapchainCreateInfoKHR = ()
@@ -1568,6 +1584,8 @@
   Extends SwapchainCreateInfoKHR SurfaceFullScreenExclusiveWin32InfoEXT = ()
   Extends SwapchainCreateInfoKHR SwapchainPresentBarrierCreateInfoNV = ()
   Extends SwapchainCreateInfoKHR ImageCompressionControlEXT = ()
+  Extends SwapchainCreateInfoKHR SwapchainPresentModesCreateInfoEXT = ()
+  Extends SwapchainCreateInfoKHR SwapchainPresentScalingCreateInfoEXT = ()
   Extends WriteDescriptorSet WriteDescriptorSetInlineUniformBlock = ()
   Extends WriteDescriptorSet WriteDescriptorSetAccelerationStructureKHR = ()
   Extends WriteDescriptorSet WriteDescriptorSetAccelerationStructureNV = ()
@@ -2084,6 +2102,14 @@
   STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT -> go @PhysicalDeviceFaultFeaturesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM -> go @PhysicalDeviceShaderCoreBuiltinsPropertiesARM
   STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM -> go @PhysicalDeviceShaderCoreBuiltinsFeaturesARM
+  STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT -> go @SurfacePresentModeEXT
+  STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT -> go @SurfacePresentScalingCapabilitiesEXT
+  STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT -> go @SurfacePresentModeCompatibilityEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT -> go @PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+  STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT -> go @SwapchainPresentFenceInfoEXT
+  STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT -> go @SwapchainPresentModesCreateInfoEXT
+  STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT -> go @SwapchainPresentModeInfoEXT
+  STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT -> go @SwapchainPresentScalingCreateInfoEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV -> go @PhysicalDeviceRayTracingInvocationReorderFeaturesNV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV -> go @PhysicalDeviceRayTracingInvocationReorderPropertiesNV
   STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG -> go @DirectDriverLoadingListLUNARG
@@ -2552,6 +2578,14 @@
 {-# complete (::&) :: PhysicalDeviceFaultFeaturesEXT #-}
 {-# complete (::&) :: PhysicalDeviceShaderCoreBuiltinsPropertiesARM #-}
 {-# complete (::&) :: PhysicalDeviceShaderCoreBuiltinsFeaturesARM #-}
+{-# complete (::&) :: SurfacePresentModeEXT #-}
+{-# complete (::&) :: SurfacePresentScalingCapabilitiesEXT #-}
+{-# complete (::&) :: SurfacePresentModeCompatibilityEXT #-}
+{-# complete (::&) :: PhysicalDeviceSwapchainMaintenance1FeaturesEXT #-}
+{-# complete (::&) :: SwapchainPresentFenceInfoEXT #-}
+{-# complete (::&) :: SwapchainPresentModesCreateInfoEXT #-}
+{-# complete (::&) :: SwapchainPresentModeInfoEXT #-}
+{-# complete (::&) :: SwapchainPresentScalingCreateInfoEXT #-}
 {-# complete (::&) :: PhysicalDeviceRayTracingInvocationReorderFeaturesNV #-}
 {-# complete (::&) :: PhysicalDeviceRayTracingInvocationReorderPropertiesNV #-}
 {-# complete (::&) :: DirectDriverLoadingListLUNARG #-}
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
@@ -1208,10 +1208,11 @@
 -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_WRITE_MASK' set
 -- in
 -- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.
--- Otherwise, this state is specified by the
--- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@writeMask@
--- value used to create the currently active pipeline, for both front and
--- back faces.
+-- Otherwise, this state is specified by the @writeMask@ value used to
+-- create the currently active pipeline, for both
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@front@
+-- and 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@back@
+-- faces.
 --
 -- == Valid Usage (Implicit)
 --
@@ -2401,7 +2402,8 @@
 --
 -- -   #VUID-vkCmdDraw-None-06887# If the current render pass instance uses
 --     a depth\/stencil attachment with a read-only layout for the stencil
---     aspect and stencil test is enabled,
+--     aspect, both front and back @writeMask@ are not zero, and stencil
+--     test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -4213,7 +4215,8 @@
 --
 -- -   #VUID-vkCmdDrawIndexed-None-06887# If the current render pass
 --     instance uses a depth\/stencil attachment with a read-only layout
---     for the stencil aspect and stencil test is enabled,
+--     for the stencil aspect, both front and back @writeMask@ are not
+--     zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -6024,7 +6027,8 @@
 --
 -- -   #VUID-vkCmdDrawIndirect-None-06887# If the current render pass
 --     instance uses a depth\/stencil attachment with a read-only layout
---     for the stencil aspect and stencil test is enabled,
+--     for the stencil aspect, both front and back @writeMask@ are not
+--     zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -7845,7 +7849,8 @@
 --
 -- -   #VUID-vkCmdDrawIndexedIndirect-None-06887# If the current render
 --     pass instance uses a depth\/stencil attachment with a read-only
---     layout for the stencil aspect and stencil test is enabled,
+--     layout for the stencil aspect, both front and back @writeMask@ are
+--     not zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -11777,7 +11782,7 @@
 -- = Description
 --
 -- Each source region specified by @pRegions@ is copied from the source
--- buffer to the destination region of the destination image according to
+-- image to the destination region of the destination buffer according to
 -- the
 -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#copies-buffers-images-addressing addressing calculations>
 -- for each resource. If any of the specified regions in @srcImage@
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
@@ -215,6 +215,7 @@
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subpass_merge_feedback (PhysicalDeviceSubpassMergeFeedbackFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_subpass_shading (PhysicalDeviceSubpassShadingFeaturesHUAWEI)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (PhysicalDeviceSwapchainMaintenance1FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_synchronization2 (PhysicalDeviceSynchronization2Features)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_texture_compression_astc_hdr (PhysicalDeviceTextureCompressionASTCHDRFeatures)
@@ -959,6 +960,7 @@
 --     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeatures',
 --     'Vulkan.Extensions.VK_EXT_subpass_merge_feedback.PhysicalDeviceSubpassMergeFeedbackFeaturesEXT',
 --     'Vulkan.Extensions.VK_HUAWEI_subpass_shading.PhysicalDeviceSubpassShadingFeaturesHUAWEI',
+--     'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.PhysicalDeviceSwapchainMaintenance1FeaturesEXT',
 --     'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.PhysicalDeviceSynchronization2Features',
 --     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
 --     'Vulkan.Core13.Promoted_From_VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeatures',
@@ -1060,6 +1062,7 @@
   extends _ f
     | Just Refl <- eqT @e @PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM = Just f
     | Just Refl <- eqT @e @PhysicalDeviceRayTracingInvocationReorderFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSwapchainMaintenance1FeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderCoreBuiltinsFeaturesARM = Just f
     | Just Refl <- eqT @e @PhysicalDeviceFaultFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceOpticalFlowFeaturesNV = Just f
diff --git a/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs b/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs
--- a/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs
+++ b/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs
@@ -96,7 +96,9 @@
 -- 'IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM'.
 pattern IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM = ImageCreateFlagBits 0x00008000
 
--- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT"
+-- | 'IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT' specifies that the image /can/
+-- be used to create a 'Vulkan.Core10.Handles.ImageView' of type
+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'.
 pattern IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT = ImageCreateFlagBits 0x00020000
 
 -- | 'IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT' specifies
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
@@ -204,11 +204,7 @@
 pattern IMAGE_LAYOUT_SHARED_PRESENT_KHR = ImageLayout 1000111000
 
 -- | 'IMAGE_LAYOUT_PRESENT_SRC_KHR' /must/ only be used for presenting a
--- presentable image for display. A swapchain’s image /must/ be
--- transitioned to this layout before calling
--- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR', and /must/ be
--- transitioned away from this layout after calling
--- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR'.
+-- presentable image for display.
 pattern IMAGE_LAYOUT_PRESENT_SRC_KHR = ImageLayout 1000001002
 
 -- | 'IMAGE_LAYOUT_ATTACHMENT_OPTIMAL' specifies a layout that /must/ only be
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
@@ -246,6 +246,15 @@
                                                         , STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV
                                                         , STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT
+                                                        , STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT
+                                                        , STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT
+                                                        , STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT
+                                                        , STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT
                                                         , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR
                                                         , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR
@@ -1197,6 +1206,7 @@
 -- 'Vulkan.Extensions.VK_HUAWEI_subpass_shading.PhysicalDeviceSubpassShadingFeaturesHUAWEI',
 -- 'Vulkan.Extensions.VK_HUAWEI_subpass_shading.PhysicalDeviceSubpassShadingPropertiesHUAWEI',
 -- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.PhysicalDeviceSwapchainMaintenance1FeaturesEXT',
 -- 'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.PhysicalDeviceSynchronization2Features',
 -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
 -- 'Vulkan.Core13.Promoted_From_VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentProperties',
@@ -1294,6 +1304,7 @@
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineInterfaceCreateInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingShaderGroupCreateInfoKHR',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingShaderGroupCreateInfoNV',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.ReleaseSwapchainImagesInfoEXT',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',
 -- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
 -- 'Vulkan.Core10.Pass.RenderPassCreateInfo',
@@ -1354,11 +1365,18 @@
 -- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceFormat2KHR',
 -- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT',
 -- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeCompatibilityEXT',
+-- 'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT',
+-- 'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT',
 -- 'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR',
 -- 'Vulkan.Extensions.VK_EXT_display_control.SwapchainCounterCreateInfoEXT',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
 -- 'Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD',
 -- 'Vulkan.Extensions.VK_NV_present_barrier.SwapchainPresentBarrierCreateInfoNV',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentFenceInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModeInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModesCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentScalingCreateInfoEXT',
 -- 'Vulkan.Extensions.VK_FUCHSIA_buffer_collection.SysmemColorSpaceFUCHSIA',
 -- 'Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.TextureLODGatherFormatPropertiesAMD',
 -- 'Vulkan.Extensions.VK_QCOM_tile_properties.TilePropertiesQCOM',
@@ -2175,6 +2193,33 @@
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = StructureType 1000277000
 
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT"
+pattern STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT = StructureType 1000275005
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT = StructureType 1000275004
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT"
+pattern STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT = StructureType 1000275003
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT = StructureType 1000275002
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT"
+pattern STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT = StructureType 1000275001
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT = StructureType 1000275000
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT"
+pattern STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT = StructureType 1000274002
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT"
+pattern STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT = StructureType 1000274001
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT"
+pattern STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT = StructureType 1000274000
+
 -- 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
 
@@ -3721,6 +3766,15 @@
   , STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV
   , STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV
   , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV
+  , STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT
+  , STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT
+  , STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT
+  , STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT
+  , STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT
+  , STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT
+  , STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT
+  , STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT
+  , STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT
   , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT
   , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR
   , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR
@@ -5133,6 +5187,42 @@
   ,
     ( STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV
     , "PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"
+    )
+  ,
+    ( STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT
+    , "RELEASE_SWAPCHAIN_IMAGES_INFO_EXT"
+    )
+  ,
+    ( STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT
+    , "SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT"
+    )
+  ,
+    ( STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT
+    , "SWAPCHAIN_PRESENT_MODE_INFO_EXT"
+    )
+  ,
+    ( STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT
+    , "SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT"
+    )
+  ,
+    ( STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT
+    , "SWAPCHAIN_PRESENT_FENCE_INFO_EXT"
+    )
+  ,
+    ( STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT
+    , "PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT"
+    )
+  ,
+    ( STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT
+    , "SURFACE_PRESENT_MODE_COMPATIBILITY_EXT"
+    )
+  ,
+    ( STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT
+    , "SURFACE_PRESENT_SCALING_CAPABILITIES_EXT"
+    )
+  ,
+    ( STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT
+    , "SURFACE_PRESENT_MODE_EXT"
     )
   ,
     ( STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_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
@@ -202,6 +202,7 @@
 -- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT',
 -- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT',
 -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
 -- 'Vulkan.Extensions.VK_QCOM_tile_properties.TilePropertiesQCOM',
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoCapabilitiesKHR VkVideoCapabilitiesKHR>,
@@ -579,6 +580,7 @@
 -- 'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeatures',
 -- 'Vulkan.Extensions.VK_EXT_subpass_merge_feedback.PhysicalDeviceSubpassMergeFeedbackFeaturesEXT',
 -- 'Vulkan.Extensions.VK_HUAWEI_subpass_shading.PhysicalDeviceSubpassShadingFeaturesHUAWEI',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.PhysicalDeviceSwapchainMaintenance1FeaturesEXT',
 -- 'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.PhysicalDeviceSynchronization2Features',
 -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
 -- 'Vulkan.Core13.Promoted_From_VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentProperties',
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
@@ -462,6 +462,7 @@
 -- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.releaseFullScreenExclusiveModeEXT',
 -- 'Vulkan.Extensions.VK_INTEL_performance_query.releasePerformanceConfigurationINTEL',
 -- 'Vulkan.Extensions.VK_KHR_performance_query.releaseProfilingLockKHR',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.releaseSwapchainImagesEXT',
 -- 'Vulkan.Core10.CommandPool.resetCommandPool',
 -- 'Vulkan.Core10.DescriptorSet.resetDescriptorPool',
 -- 'Vulkan.Core10.Event.resetEvent', 'Vulkan.Core10.Fence.resetFences',
@@ -1204,6 +1205,7 @@
 -- 'Vulkan.Extensions.VK_KHR_external_fence_win32.FenceGetWin32HandleInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_external_fence_fd.ImportFenceFdInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_external_fence_win32.ImportFenceWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentFenceInfoEXT',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
 -- 'Vulkan.Core10.Fence.createFence', 'Vulkan.Core10.Fence.destroyFence',
 -- 'Vulkan.Core10.Fence.getFenceStatus',
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
@@ -906,6 +906,10 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT',
 --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
 --
+-- -   #VUID-VkImageCreateInfo-flags-07755# If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT',
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
+--
 -- -   #VUID-VkImageCreateInfo-extent-02252# @extent.width@ /must/ be less
 --     than or equal to @imageCreateMaxExtent.width@ (as defined in
 --     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
diff --git a/src/Vulkan/Core10/Pipeline.hs b/src/Vulkan/Core10/Pipeline.hs
--- a/src/Vulkan/Core10/Pipeline.hs
+++ b/src/Vulkan/Core10/Pipeline.hs
@@ -3591,7 +3591,8 @@
     -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-stencil stencil testing>
     -- is enabled.
     stencilTestEnable :: Bool
-  , -- | @front@ and @back@ control the parameters of the
+  , -- | @front@ and @back@ are 'StencilOpState' values controlling the
+    -- corresponding parameters of the
     -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-stencil stencil test>.
     front :: StencilOpState
   , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "back"
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
@@ -289,6 +289,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subpass_merge_feedback (PhysicalDeviceSubpassMergeFeedbackFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_subpass_shading (PhysicalDeviceSubpassShadingFeaturesHUAWEI)
 import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_subpass_shading (PhysicalDeviceSubpassShadingPropertiesHUAWEI)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (PhysicalDeviceSwapchainMaintenance1FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_synchronization2 (PhysicalDeviceSynchronization2Features)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentProperties)
@@ -851,6 +852,7 @@
   extends _ f
     | Just Refl <- eqT @e @PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM = Just f
     | Just Refl <- eqT @e @PhysicalDeviceRayTracingInvocationReorderFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSwapchainMaintenance1FeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderCoreBuiltinsFeaturesARM = Just f
     | Just Refl <- eqT @e @PhysicalDeviceFaultFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceOpticalFlowFeaturesNV = Just f
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
--- a/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
@@ -505,7 +505,8 @@
 --
 -- -   #VUID-vkCmdDrawIndirectCount-None-06887# If the current render pass
 --     instance uses a depth\/stencil attachment with a read-only layout
---     for the stencil aspect and stencil test is enabled,
+--     for the stencil aspect, both front and back @writeMask@ are not
+--     zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -2369,7 +2370,8 @@
 --
 -- -   #VUID-vkCmdDrawIndexedIndirectCount-None-06887# If the current
 --     render pass instance uses a depth\/stencil attachment with a
---     read-only layout for the stencil aspect and stencil test is enabled,
+--     read-only layout for the stencil aspect, both front and back
+--     @writeMask@ are not zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
diff --git a/src/Vulkan/Dynamic.hs b/src/Vulkan/Dynamic.hs
--- a/src/Vulkan/Dynamic.hs
+++ b/src/Vulkan/Dynamic.hs
@@ -346,6 +346,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (RayTracingPipelineCreateInfoNV)
 import {-# SOURCE #-} Vulkan.Core10.FundamentalTypes (Rect2D)
 import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (RefreshCycleDurationGOOGLE)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (ReleaseSwapchainImagesInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_rdma (RemoteAddressNV)
 import {-# SOURCE #-} Vulkan.Core10.Handles (RenderPass)
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
@@ -1256,6 +1257,7 @@
   , pVkBindOpticalFlowSessionImageNV :: FunPtr (Ptr Device_T -> OpticalFlowSessionNV -> OpticalFlowSessionBindingPointNV -> ImageView -> ImageLayout -> IO Result)
   , pVkCmdOpticalFlowExecuteNV :: FunPtr (Ptr CommandBuffer_T -> OpticalFlowSessionNV -> ("pExecuteInfo" ::: Ptr OpticalFlowExecuteInfoNV) -> IO ())
   , pVkGetDeviceFaultInfoEXT :: FunPtr (Ptr Device_T -> ("pFaultCounts" ::: Ptr DeviceFaultCountsEXT) -> ("pFaultInfo" ::: Ptr DeviceFaultInfoEXT) -> IO Result)
+  , pVkReleaseSwapchainImagesEXT :: FunPtr (Ptr Device_T -> ("pReleaseInfo" ::: Ptr ReleaseSwapchainImagesInfoEXT) -> IO Result)
   }
 
 deriving instance Eq DeviceCmds
@@ -1694,7 +1696,7 @@
     nullFunPtr
     nullFunPtr
     nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
 
 foreign import ccall
 #if !defined(SAFE_FOREIGN_CALLS)
@@ -2219,6 +2221,7 @@
   vkBindOpticalFlowSessionImageNV <- getDeviceProcAddr' handle (Ptr "vkBindOpticalFlowSessionImageNV"#)
   vkCmdOpticalFlowExecuteNV <- getDeviceProcAddr' handle (Ptr "vkCmdOpticalFlowExecuteNV"#)
   vkGetDeviceFaultInfoEXT <- getDeviceProcAddr' handle (Ptr "vkGetDeviceFaultInfoEXT"#)
+  vkReleaseSwapchainImagesEXT <- getDeviceProcAddr' handle (Ptr "vkReleaseSwapchainImagesEXT"#)
   pure $ DeviceCmds handle
     (castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetDeviceProcAddr)
     (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDevice)
@@ -2656,4 +2659,5 @@
     (castFunPtr @_ @(Ptr Device_T -> OpticalFlowSessionNV -> OpticalFlowSessionBindingPointNV -> ImageView -> ImageLayout -> IO Result) vkBindOpticalFlowSessionImageNV)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> OpticalFlowSessionNV -> ("pExecuteInfo" ::: Ptr OpticalFlowExecuteInfoNV) -> IO ()) vkCmdOpticalFlowExecuteNV)
     (castFunPtr @_ @(Ptr Device_T -> ("pFaultCounts" ::: Ptr DeviceFaultCountsEXT) -> ("pFaultInfo" ::: Ptr DeviceFaultInfoEXT) -> IO Result) vkGetDeviceFaultInfoEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pReleaseInfo" ::: Ptr ReleaseSwapchainImagesInfoEXT) -> IO Result) vkReleaseSwapchainImagesEXT)
 
diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs
--- a/src/Vulkan/Extensions.hs
+++ b/src/Vulkan/Extensions.hs
@@ -126,7 +126,9 @@
                           , module Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
                           , module Vulkan.Extensions.VK_EXT_subgroup_size_control
                           , module Vulkan.Extensions.VK_EXT_subpass_merge_feedback
+                          , module Vulkan.Extensions.VK_EXT_surface_maintenance1
                           , module Vulkan.Extensions.VK_EXT_swapchain_colorspace
+                          , module Vulkan.Extensions.VK_EXT_swapchain_maintenance1
                           , module Vulkan.Extensions.VK_EXT_texel_buffer_alignment
                           , module Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr
                           , module Vulkan.Extensions.VK_EXT_tooling_info
@@ -434,7 +436,9 @@
 import Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
 import Vulkan.Extensions.VK_EXT_subgroup_size_control
 import Vulkan.Extensions.VK_EXT_subpass_merge_feedback
+import Vulkan.Extensions.VK_EXT_surface_maintenance1
 import Vulkan.Extensions.VK_EXT_swapchain_colorspace
+import Vulkan.Extensions.VK_EXT_swapchain_maintenance1
 import Vulkan.Extensions.VK_EXT_texel_buffer_alignment
 import Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr
 import Vulkan.Extensions.VK_EXT_tooling_info
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
@@ -92,7 +92,9 @@
 import Vulkan.Extensions.VK_EXT_shader_image_atomic_int64 (pattern EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_shader_module_identifier (pattern EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_subgroup_size_control (pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME)
+import Vulkan.Extensions.VK_EXT_surface_maintenance1 (pattern EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_swapchain_colorspace (pattern EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME)
+import Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (pattern EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_texel_buffer_alignment (pattern EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr (pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_transform_feedback (pattern EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME)
@@ -601,6 +603,17 @@
   EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME ->
     [ EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME
     , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+    ]
+  EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME ->
+    [ KHR_SURFACE_EXTENSION_NAME
+    , KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME
+    ]
+  EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME ->
+    [ KHR_SWAPCHAIN_EXTENSION_NAME
+    , EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME
+    , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+    , KHR_SURFACE_EXTENSION_NAME
+    , KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME
     ]
   EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   NV_DEVICE_GENERATED_COMMANDS_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
@@ -482,7 +482,11 @@
 -- transition the image’s layout, queue rendering commands to it, etc.
 -- Finally, the application presents the image with
 -- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR', which releases the
--- acquisition of the image.
+-- acquisition of the image. The application /can/ also release the
+-- acquisition of the image through
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.releaseSwapchainImagesEXT',
+-- if the image is not in use by the device, and skip the present
+-- operation.
 --
 -- The presentation engine controls the order in which presentable images
 -- are acquired for use by the application.
@@ -501,6 +505,7 @@
 -- 'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.ReleaseSwapchainImagesInfoEXT',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
 -- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.acquireFullScreenExclusiveModeEXT',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
diff --git a/src/Vulkan/Extensions/VK_EXT_mesh_shader.hs b/src/Vulkan/Extensions/VK_EXT_mesh_shader.hs
--- a/src/Vulkan/Extensions/VK_EXT_mesh_shader.hs
+++ b/src/Vulkan/Extensions/VK_EXT_mesh_shader.hs
@@ -793,7 +793,8 @@
 --
 -- -   #VUID-vkCmdDrawMeshTasksEXT-None-06887# If the current render pass
 --     instance uses a depth\/stencil attachment with a read-only layout
---     for the stencil aspect and stencil test is enabled,
+--     for the stencil aspect, both front and back @writeMask@ are not
+--     zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -2553,7 +2554,8 @@
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectEXT-None-06887# If the current
 --     render pass instance uses a depth\/stencil attachment with a
---     read-only layout for the stencil aspect and stencil test is enabled,
+--     read-only layout for the stencil aspect, both front and back
+--     @writeMask@ are not zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -4304,7 +4306,8 @@
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-06887# If the current
 --     render pass instance uses a depth\/stencil attachment with a
---     read-only layout for the stencil aspect and stencil test is enabled,
+--     read-only layout for the stencil aspect, both front and back
+--     @writeMask@ are not zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
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
@@ -658,7 +658,8 @@
 --
 -- -   #VUID-vkCmdDrawMultiEXT-None-06887# If the current render pass
 --     instance uses a depth\/stencil attachment with a read-only layout
---     for the stencil aspect and stencil test is enabled,
+--     for the stencil aspect, both front and back @writeMask@ are not
+--     zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -2479,7 +2480,8 @@
 --
 -- -   #VUID-vkCmdDrawMultiIndexedEXT-None-06887# If the current render
 --     pass instance uses a depth\/stencil attachment with a read-only
---     layout for the stencil aspect and stencil test is enabled,
+--     layout for the stencil aspect, both front and back @writeMask@ are
+--     not zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_opacity_micromap.hs b/src/Vulkan/Extensions/VK_EXT_opacity_micromap.hs
--- a/src/Vulkan/Extensions/VK_EXT_opacity_micromap.hs
+++ b/src/Vulkan/Extensions/VK_EXT_opacity_micromap.hs
@@ -34,6 +34,9 @@
 --
 --     -   Eric Werness
 --
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_opacity_micromap.adoc VK_EXT_opacity_micromap>
+--
 -- == Other Extension Metadata
 --
 -- [__Last Modified Date__]
diff --git a/src/Vulkan/Extensions/VK_EXT_opacity_micromap.hs-boot b/src/Vulkan/Extensions/VK_EXT_opacity_micromap.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_opacity_micromap.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_opacity_micromap.hs-boot
@@ -34,6 +34,9 @@
 --
 --     -   Eric Werness
 --
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_opacity_micromap.adoc VK_EXT_opacity_micromap>
+--
 -- == Other Extension Metadata
 --
 -- [__Last Modified Date__]
diff --git a/src/Vulkan/Extensions/VK_EXT_surface_maintenance1.hs b/src/Vulkan/Extensions/VK_EXT_surface_maintenance1.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_surface_maintenance1.hs
@@ -0,0 +1,663 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_surface_maintenance1 - instance extension
+--
+-- == VK_EXT_surface_maintenance1
+--
+-- [__Name String__]
+--     @VK_EXT_surface_maintenance1@
+--
+-- [__Extension Type__]
+--     Instance extension
+--
+-- [__Registered Extension Number__]
+--     275
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires support for Vulkan 1.0
+--
+--     -   Requires @VK_KHR_surface@ to be enabled
+--
+--     -   Requires @VK_KHR_get_surface_capabilities2@ to be enabled
+--
+-- [__Contact__]
+--
+--     -   Shahbaz Youssefi
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_surface_maintenance1] @syoussefi%0A*Here describe the issue or question you have about the VK_EXT_surface_maintenance1 extension* >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_surface_maintenance1.adoc VK_EXT_surface_maintenance1>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2022-11-09
+--
+-- [__Contributors__]
+--
+--     -   Jeff Juliano, NVIDIA
+--
+--     -   Lionel Landwerlin, Intel
+--
+--     -   Shahbaz Youssefi, Google
+--
+--     -   Chris Forbes, Google
+--
+--     -   Ian Elliott, Google
+--
+--     -   Hans-Kristian Arntzen, Valve
+--
+--     -   Daniel Stone, Collabora
+--
+-- == Description
+--
+-- @VK_EXT_surface_maintenance1@ adds a collection of window system
+-- integration features that were intentionally left out or overlooked in
+-- the original @VK_KHR_surface@ extension.
+--
+-- The new features are as follows:
+--
+-- -   Allow querying number of min\/max images from a surface for a
+--     particular presentation mode.
+--
+-- -   Allow querying a surface’s scaled presentation capabilities.
+--
+-- -   Allow querying a surface for the set of presentation modes which can
+--     be easily switched between without requiring swapchain recreation.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR':
+--
+--     -   'SurfacePresentModeEXT'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR':
+--
+--     -   'SurfacePresentModeCompatibilityEXT'
+--
+--     -   'SurfacePresentScalingCapabilitiesEXT'
+--
+-- == New Enums
+--
+-- -   'PresentGravityFlagBitsEXT'
+--
+-- -   'PresentScalingFlagBitsEXT'
+--
+-- == New Bitmasks
+--
+-- -   'PresentGravityFlagsEXT'
+--
+-- -   'PresentScalingFlagsEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME'
+--
+-- -   'EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT'
+--
+-- == Version History
+--
+-- -   Revision 0, 2019-02-27 (Lionel Landwerlin)
+--
+--     -   Internal revisions
+--
+-- -   Revision 1, 2022-11-09 (Shahbaz Youssefi)
+--
+--     -   Add functionality and complete spec
+--
+-- == See Also
+--
+-- 'PresentGravityFlagBitsEXT', 'PresentGravityFlagsEXT',
+-- 'PresentScalingFlagBitsEXT', 'PresentScalingFlagsEXT',
+-- 'SurfacePresentModeCompatibilityEXT', 'SurfacePresentModeEXT',
+-- 'SurfacePresentScalingCapabilitiesEXT'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_surface_maintenance1 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_surface_maintenance1  ( SurfacePresentModeEXT(..)
+                                                      , SurfacePresentScalingCapabilitiesEXT(..)
+                                                      , SurfacePresentModeCompatibilityEXT(..)
+                                                      , PresentScalingFlagsEXT
+                                                      , PresentScalingFlagBitsEXT( PRESENT_SCALING_ONE_TO_ONE_BIT_EXT
+                                                                                 , PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT
+                                                                                 , PRESENT_SCALING_STRETCH_BIT_EXT
+                                                                                 , ..
+                                                                                 )
+                                                      , PresentGravityFlagsEXT
+                                                      , PresentGravityFlagBitsEXT( PRESENT_GRAVITY_MIN_BIT_EXT
+                                                                                 , PRESENT_GRAVITY_MAX_BIT_EXT
+                                                                                 , PRESENT_GRAVITY_CENTERED_BIT_EXT
+                                                                                 , ..
+                                                                                 )
+                                                      , EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION
+                                                      , pattern EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION
+                                                      , EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME
+                                                      , pattern EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME
+                                                      , PresentModeKHR(..)
+                                                      ) where
+
+import Data.Bits (Bits)
+import Data.Bits (FiniteBits)
+import Vulkan.Internal.Utils (enumReadPrec)
+import Vulkan.Internal.Utils (enumShowsPrec)
+import Foreign.Marshal.Alloc (allocaBytes)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+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 GHC.Read (Read(readPrec))
+import GHC.Show (Show(showsPrec))
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.Core10.FundamentalTypes (Extent2D)
+import Vulkan.Core10.FundamentalTypes (Flags)
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT))
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR(..))
+-- | VkSurfacePresentModeEXT - Structure describing present mode of a surface
+--
+-- = Description
+--
+-- If the 'SurfacePresentModeEXT' structure is included in the @pNext@
+-- chain of
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR',
+-- the values returned in
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageCount@,
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@maxImageCount@,
+-- 'SurfacePresentScalingCapabilitiesEXT'::@minScaledImageExtent@, and
+-- 'SurfacePresentScalingCapabilitiesEXT'::@maxScaledImageExtent@ are valid
+-- only for the specified @presentMode@. If @presentMode@ is
+-- 'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
+-- or
+-- 'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR',
+-- the per-present mode image counts /must/ both be one. The per-present
+-- mode image counts /may/ be less-than or greater-than the image counts
+-- returned when 'SurfacePresentModeEXT' is not provided.
+--
+-- Note
+--
+-- If
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModesCreateInfoEXT'
+-- is provided to swapchain creation, the requirements for forward progress
+-- may be less strict. For example, a FIFO swapchain might only require 2
+-- images to guarantee forward progress, but a MAILBOX one might require 4.
+-- Without the per-present image counts, such an implementation would have
+-- to return 4 in
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageCount@,
+-- which pessimizes FIFO. Conversely, an implementation may return a low
+-- number for minImageCount, but internally bump the image count when
+-- application queries
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getSwapchainImagesKHR', which can
+-- surprise applications, and is not discoverable until swapchain creation.
+-- Using 'SurfacePresentModeEXT' and
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModesCreateInfoEXT'
+-- together effectively removes this problem.
+--
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModesCreateInfoEXT'
+-- is required for the specification to be backwards compatible with
+-- applications that do not know about, or make use of this feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_surface_maintenance1 VK_EXT_surface_maintenance1>,
+-- 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SurfacePresentModeEXT = SurfacePresentModeEXT
+  { -- | @presentMode@ is the presentation mode the swapchain will use.
+    --
+    -- #VUID-VkSurfacePresentModeEXT-presentMode-07780# @presentMode@ /must/ be
+    -- a value reported by
+    -- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR'
+    -- for the specified surface.
+    --
+    -- #VUID-VkSurfacePresentModeEXT-presentMode-parameter# @presentMode@
+    -- /must/ be a valid 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR'
+    -- value
+    presentMode :: PresentModeKHR }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SurfacePresentModeEXT)
+#endif
+deriving instance Show SurfacePresentModeEXT
+
+instance ToCStruct SurfacePresentModeEXT where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfacePresentModeEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PresentModeKHR)) (presentMode)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PresentModeKHR)) (zero)
+    f
+
+instance FromCStruct SurfacePresentModeEXT where
+  peekCStruct p = do
+    presentMode <- peek @PresentModeKHR ((p `plusPtr` 16 :: Ptr PresentModeKHR))
+    pure $ SurfacePresentModeEXT
+             presentMode
+
+instance Storable SurfacePresentModeEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SurfacePresentModeEXT where
+  zero = SurfacePresentModeEXT
+           zero
+
+
+-- | VkSurfacePresentScalingCapabilitiesEXT - Structure describing the
+-- presentation scaling capabilities of the surface
+--
+-- = Description
+--
+-- Before creating a swapchain whose scaling mode /can/ be specified
+-- through the use of
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentScalingCreateInfoEXT',
+-- obtain the set of supported scaling modes by including a
+-- 'SurfacePresentModeEXT' structure in the @pNext@ chain of
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
+-- when calling
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'.
+-- The implementation /must/ return the same values in
+-- 'SurfacePresentScalingCapabilitiesEXT' for any of the compatible present
+-- modes as obtained through 'SurfacePresentModeCompatibilityEXT'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_surface_maintenance1 VK_EXT_surface_maintenance1>,
+-- 'Vulkan.Core10.FundamentalTypes.Extent2D', 'PresentGravityFlagsEXT',
+-- 'PresentScalingFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SurfacePresentScalingCapabilitiesEXT = SurfacePresentScalingCapabilitiesEXT
+  { -- | @supportedPresentScaling@ is a bitmask of 'PresentScalingFlagBitsEXT'
+    -- representing the scaling methods supported by the surface, or @0@ if
+    -- application-defined scaling is not supported.
+    --
+    -- #VUID-VkSurfacePresentScalingCapabilitiesEXT-supportedPresentScaling-parameter#
+    -- @supportedPresentScaling@ /must/ be a valid combination of
+    -- 'PresentScalingFlagBitsEXT' values
+    supportedPresentScaling :: PresentScalingFlagsEXT
+  , -- | @supportedPresentGravityX@ is a bitmask of 'PresentGravityFlagBitsEXT'
+    -- representing the X-axis pixel gravity supported by the surface, or @0@
+    -- if Vulkan-defined pixel gravity is not supported for the X axis.
+    --
+    -- #VUID-VkSurfacePresentScalingCapabilitiesEXT-supportedPresentGravityX-parameter#
+    -- @supportedPresentGravityX@ /must/ be a valid combination of
+    -- 'PresentGravityFlagBitsEXT' values
+    supportedPresentGravityX :: PresentGravityFlagsEXT
+  , -- | @supportedPresentGravityY@ is a bitmask of 'PresentGravityFlagBitsEXT'
+    -- representing the Y-axis pixel gravity supported by the surface, or @0@
+    -- if Vulkan-defined pixel gravity is not supported for the Y axis.
+    --
+    -- #VUID-VkSurfacePresentScalingCapabilitiesEXT-supportedPresentGravityY-parameter#
+    -- @supportedPresentGravityY@ /must/ be a valid combination of
+    -- 'PresentGravityFlagBitsEXT' values
+    supportedPresentGravityY :: PresentGravityFlagsEXT
+  , -- | @minScaledImageExtent@ contains the smallest valid swapchain extent for
+    -- the surface on the specified device when one of the scaling methods
+    -- specified in @supportedPresentScaling@ is used, or the special value
+    -- (0xFFFFFFFF, 0xFFFFFFFF) indicating that the surface size will be
+    -- determined by the extent of a swapchain targeting the surface. The
+    -- @width@ and @height@ of the extent will each be smaller than or equal to
+    -- the corresponding @width@ and @height@ of
+    -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageExtent@.
+    minScaledImageExtent :: Extent2D
+  , -- | @maxScaledImageExtent@ contains the largest valid swapchain extent for
+    -- the surface on the specified device when one of the scaling methods
+    -- specified in @supportedPresentScaling@ is used, or the special value
+    -- described above for @minScaledImageExtent@. The @width@ and @height@ of
+    -- the extent will each be greater than or equal to the corresponding
+    -- @width@ and @height@ of
+    -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@maxImageExtent@.
+    maxScaledImageExtent :: Extent2D
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SurfacePresentScalingCapabilitiesEXT)
+#endif
+deriving instance Show SurfacePresentScalingCapabilitiesEXT
+
+instance ToCStruct SurfacePresentScalingCapabilitiesEXT where
+  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfacePresentScalingCapabilitiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PresentScalingFlagsEXT)) (supportedPresentScaling)
+    poke ((p `plusPtr` 20 :: Ptr PresentGravityFlagsEXT)) (supportedPresentGravityX)
+    poke ((p `plusPtr` 24 :: Ptr PresentGravityFlagsEXT)) (supportedPresentGravityY)
+    poke ((p `plusPtr` 28 :: Ptr Extent2D)) (minScaledImageExtent)
+    poke ((p `plusPtr` 36 :: Ptr Extent2D)) (maxScaledImageExtent)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct SurfacePresentScalingCapabilitiesEXT where
+  peekCStruct p = do
+    supportedPresentScaling <- peek @PresentScalingFlagsEXT ((p `plusPtr` 16 :: Ptr PresentScalingFlagsEXT))
+    supportedPresentGravityX <- peek @PresentGravityFlagsEXT ((p `plusPtr` 20 :: Ptr PresentGravityFlagsEXT))
+    supportedPresentGravityY <- peek @PresentGravityFlagsEXT ((p `plusPtr` 24 :: Ptr PresentGravityFlagsEXT))
+    minScaledImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 28 :: Ptr Extent2D))
+    maxScaledImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 36 :: Ptr Extent2D))
+    pure $ SurfacePresentScalingCapabilitiesEXT
+             supportedPresentScaling
+             supportedPresentGravityX
+             supportedPresentGravityY
+             minScaledImageExtent
+             maxScaledImageExtent
+
+instance Storable SurfacePresentScalingCapabilitiesEXT where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SurfacePresentScalingCapabilitiesEXT where
+  zero = SurfacePresentScalingCapabilitiesEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkSurfacePresentModeCompatibilityEXT - Structure describing the subset
+-- of compatible presentation modes for the purposes of switching without
+-- swapchain recreation
+--
+-- = Description
+--
+-- If @pPresentModes@ is @NULL@, then the number of present modes that are
+-- compatible with the one specified in 'SurfacePresentModeEXT' is returned
+-- in @presentModeCount@. Otherwise, @presentModeCount@ must be set by the
+-- user to the number of elements in the @pPresentModes@ array, and on
+-- return the variable is overwritten with the number of values actually
+-- written to @pPresentModes@. If the value of @presentModeCount@ is less
+-- than the number of compatible present modes that are supported, at most
+-- @presentModeCount@ values will be written to @pPresentModes@. The
+-- implementation /must/ include the present mode passed to
+-- 'SurfacePresentModeEXT' in @pPresentModes@, unless @presentModeCount@ is
+-- zero.
+--
+-- Before creating a swapchain whose present modes /can/ be modified
+-- through the use of
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModesCreateInfoEXT',
+-- obtain the set of present modes compatible with a given initial present
+-- mode by including a 'SurfacePresentModeEXT' structure in the @pNext@
+-- chain of
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
+-- when calling
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkSurfacePresentModeCompatibilityEXT-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT'
+--
+-- -   #VUID-VkSurfacePresentModeCompatibilityEXT-pPresentModes-parameter#
+--     If @presentModeCount@ is not @0@, and @pPresentModes@ is not @NULL@,
+--     @pPresentModes@ /must/ be a valid pointer to an array of
+--     @presentModeCount@ 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR'
+--     values
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_surface_maintenance1 VK_EXT_surface_maintenance1>,
+-- 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SurfacePresentModeCompatibilityEXT = SurfacePresentModeCompatibilityEXT
+  { -- | @presentModeCount@ is an integer related to the number of present modes
+    -- available or queried, as described below.
+    presentModeCount :: Word32
+  , -- | @pPresentModes@ is a pointer to an array of
+    -- 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' in which present modes
+    -- compatible with a given present mode are returned.
+    presentModes :: Ptr PresentModeKHR
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SurfacePresentModeCompatibilityEXT)
+#endif
+deriving instance Show SurfacePresentModeCompatibilityEXT
+
+instance ToCStruct SurfacePresentModeCompatibilityEXT where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfacePresentModeCompatibilityEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (presentModeCount)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr PresentModeKHR))) (presentModes)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct SurfacePresentModeCompatibilityEXT where
+  peekCStruct p = do
+    presentModeCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pPresentModes <- peek @(Ptr PresentModeKHR) ((p `plusPtr` 24 :: Ptr (Ptr PresentModeKHR)))
+    pure $ SurfacePresentModeCompatibilityEXT
+             presentModeCount pPresentModes
+
+instance Storable SurfacePresentModeCompatibilityEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SurfacePresentModeCompatibilityEXT where
+  zero = SurfacePresentModeCompatibilityEXT
+           zero
+           zero
+
+
+type PresentScalingFlagsEXT = PresentScalingFlagBitsEXT
+
+-- | VkPresentScalingFlagBitsEXT - Bitmask specifying presentation scaling
+-- methods
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_surface_maintenance1 VK_EXT_surface_maintenance1>,
+-- 'PresentScalingFlagsEXT'
+newtype PresentScalingFlagBitsEXT = PresentScalingFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
+
+-- | 'PRESENT_SCALING_ONE_TO_ONE_BIT_EXT' specifies that no scaling occurs,
+-- and pixels in the swapchain image are mapped to one and only one pixel
+-- in the surface. The mapping between pixels is defined by the chosen
+-- presentation gravity.
+pattern PRESENT_SCALING_ONE_TO_ONE_BIT_EXT = PresentScalingFlagBitsEXT 0x00000001
+
+-- | 'PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT' specifies that the
+-- swapchain image will be minified or magnified such that at least one of
+-- the resulting width or height is equal to the corresponding surface
+-- dimension, and the other resulting dimension is less than or equal to
+-- the corresponding surface dimension, with the aspect ratio of the
+-- resulting image being identical to that of the original swapchain image.
+pattern PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT = PresentScalingFlagBitsEXT 0x00000002
+
+-- | 'PRESENT_SCALING_STRETCH_BIT_EXT' specifies that the swapchain image
+-- will be minified or magnified such that the resulting image dimensions
+-- are equal to those of the surface.
+pattern PRESENT_SCALING_STRETCH_BIT_EXT = PresentScalingFlagBitsEXT 0x00000004
+
+conNamePresentScalingFlagBitsEXT :: String
+conNamePresentScalingFlagBitsEXT = "PresentScalingFlagBitsEXT"
+
+enumPrefixPresentScalingFlagBitsEXT :: String
+enumPrefixPresentScalingFlagBitsEXT = "PRESENT_SCALING_"
+
+showTablePresentScalingFlagBitsEXT :: [(PresentScalingFlagBitsEXT, String)]
+showTablePresentScalingFlagBitsEXT =
+  [
+    ( PRESENT_SCALING_ONE_TO_ONE_BIT_EXT
+    , "ONE_TO_ONE_BIT_EXT"
+    )
+  ,
+    ( PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT
+    , "ASPECT_RATIO_STRETCH_BIT_EXT"
+    )
+  ,
+    ( PRESENT_SCALING_STRETCH_BIT_EXT
+    , "STRETCH_BIT_EXT"
+    )
+  ]
+
+instance Show PresentScalingFlagBitsEXT where
+  showsPrec =
+    enumShowsPrec
+      enumPrefixPresentScalingFlagBitsEXT
+      showTablePresentScalingFlagBitsEXT
+      conNamePresentScalingFlagBitsEXT
+      (\(PresentScalingFlagBitsEXT x) -> x)
+      (\x -> showString "0x" . showHex x)
+
+instance Read PresentScalingFlagBitsEXT where
+  readPrec =
+    enumReadPrec
+      enumPrefixPresentScalingFlagBitsEXT
+      showTablePresentScalingFlagBitsEXT
+      conNamePresentScalingFlagBitsEXT
+      PresentScalingFlagBitsEXT
+
+type PresentGravityFlagsEXT = PresentGravityFlagBitsEXT
+
+-- | VkPresentGravityFlagBitsEXT - Bitmask specifying presentation pixel
+-- gravity on either the x or y axis
+--
+-- = Description
+--
+-- If the value in
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@currentTransform@
+-- is not
+-- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_IDENTITY_BIT_KHR',
+-- it is implementation-defined whether the gravity configuration applies
+-- to the presented image before or after transformation.
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_surface_maintenance1 VK_EXT_surface_maintenance1>,
+-- 'PresentGravityFlagsEXT'
+newtype PresentGravityFlagBitsEXT = PresentGravityFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
+
+-- | 'PRESENT_GRAVITY_MIN_BIT_EXT' means that the pixels will gravitate
+-- towards the top or left side of the surface.
+pattern PRESENT_GRAVITY_MIN_BIT_EXT = PresentGravityFlagBitsEXT 0x00000001
+
+-- | 'PRESENT_GRAVITY_MAX_BIT_EXT' means that the pixels will gravitate
+-- towards the bottom or right side of the surface.
+pattern PRESENT_GRAVITY_MAX_BIT_EXT = PresentGravityFlagBitsEXT 0x00000002
+
+-- | 'PRESENT_GRAVITY_CENTERED_BIT_EXT' means that the pixels will be
+-- centered in the surface.
+pattern PRESENT_GRAVITY_CENTERED_BIT_EXT = PresentGravityFlagBitsEXT 0x00000004
+
+conNamePresentGravityFlagBitsEXT :: String
+conNamePresentGravityFlagBitsEXT = "PresentGravityFlagBitsEXT"
+
+enumPrefixPresentGravityFlagBitsEXT :: String
+enumPrefixPresentGravityFlagBitsEXT = "PRESENT_GRAVITY_"
+
+showTablePresentGravityFlagBitsEXT :: [(PresentGravityFlagBitsEXT, String)]
+showTablePresentGravityFlagBitsEXT =
+  [
+    ( PRESENT_GRAVITY_MIN_BIT_EXT
+    , "MIN_BIT_EXT"
+    )
+  ,
+    ( PRESENT_GRAVITY_MAX_BIT_EXT
+    , "MAX_BIT_EXT"
+    )
+  ,
+    ( PRESENT_GRAVITY_CENTERED_BIT_EXT
+    , "CENTERED_BIT_EXT"
+    )
+  ]
+
+instance Show PresentGravityFlagBitsEXT where
+  showsPrec =
+    enumShowsPrec
+      enumPrefixPresentGravityFlagBitsEXT
+      showTablePresentGravityFlagBitsEXT
+      conNamePresentGravityFlagBitsEXT
+      (\(PresentGravityFlagBitsEXT x) -> x)
+      (\x -> showString "0x" . showHex x)
+
+instance Read PresentGravityFlagBitsEXT where
+  readPrec =
+    enumReadPrec
+      enumPrefixPresentGravityFlagBitsEXT
+      showTablePresentGravityFlagBitsEXT
+      conNamePresentGravityFlagBitsEXT
+      PresentGravityFlagBitsEXT
+
+type EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION"
+pattern EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION = 1
+
+
+type EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME = "VK_EXT_surface_maintenance1"
+
+-- No documentation found for TopLevel "VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME"
+pattern EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME = "VK_EXT_surface_maintenance1"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_surface_maintenance1.hs-boot b/src/Vulkan/Extensions/VK_EXT_surface_maintenance1.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_surface_maintenance1.hs-boot
@@ -0,0 +1,168 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_surface_maintenance1 - instance extension
+--
+-- == VK_EXT_surface_maintenance1
+--
+-- [__Name String__]
+--     @VK_EXT_surface_maintenance1@
+--
+-- [__Extension Type__]
+--     Instance extension
+--
+-- [__Registered Extension Number__]
+--     275
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires support for Vulkan 1.0
+--
+--     -   Requires @VK_KHR_surface@ to be enabled
+--
+--     -   Requires @VK_KHR_get_surface_capabilities2@ to be enabled
+--
+-- [__Contact__]
+--
+--     -   Shahbaz Youssefi
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_surface_maintenance1] @syoussefi%0A*Here describe the issue or question you have about the VK_EXT_surface_maintenance1 extension* >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_surface_maintenance1.adoc VK_EXT_surface_maintenance1>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2022-11-09
+--
+-- [__Contributors__]
+--
+--     -   Jeff Juliano, NVIDIA
+--
+--     -   Lionel Landwerlin, Intel
+--
+--     -   Shahbaz Youssefi, Google
+--
+--     -   Chris Forbes, Google
+--
+--     -   Ian Elliott, Google
+--
+--     -   Hans-Kristian Arntzen, Valve
+--
+--     -   Daniel Stone, Collabora
+--
+-- == Description
+--
+-- @VK_EXT_surface_maintenance1@ adds a collection of window system
+-- integration features that were intentionally left out or overlooked in
+-- the original @VK_KHR_surface@ extension.
+--
+-- The new features are as follows:
+--
+-- -   Allow querying number of min\/max images from a surface for a
+--     particular presentation mode.
+--
+-- -   Allow querying a surface’s scaled presentation capabilities.
+--
+-- -   Allow querying a surface for the set of presentation modes which can
+--     be easily switched between without requiring swapchain recreation.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR':
+--
+--     -   'SurfacePresentModeEXT'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR':
+--
+--     -   'SurfacePresentModeCompatibilityEXT'
+--
+--     -   'SurfacePresentScalingCapabilitiesEXT'
+--
+-- == New Enums
+--
+-- -   'PresentGravityFlagBitsEXT'
+--
+-- -   'PresentScalingFlagBitsEXT'
+--
+-- == New Bitmasks
+--
+-- -   'PresentGravityFlagsEXT'
+--
+-- -   'PresentScalingFlagsEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME'
+--
+-- -   'EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT'
+--
+-- == Version History
+--
+-- -   Revision 0, 2019-02-27 (Lionel Landwerlin)
+--
+--     -   Internal revisions
+--
+-- -   Revision 1, 2022-11-09 (Shahbaz Youssefi)
+--
+--     -   Add functionality and complete spec
+--
+-- == See Also
+--
+-- 'PresentGravityFlagBitsEXT', 'PresentGravityFlagsEXT',
+-- 'PresentScalingFlagBitsEXT', 'PresentScalingFlagsEXT',
+-- 'SurfacePresentModeCompatibilityEXT', 'SurfacePresentModeEXT',
+-- 'SurfacePresentScalingCapabilitiesEXT'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_surface_maintenance1 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_surface_maintenance1  ( SurfacePresentModeCompatibilityEXT
+                                                      , SurfacePresentModeEXT
+                                                      , SurfacePresentScalingCapabilitiesEXT
+                                                      ) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data SurfacePresentModeCompatibilityEXT
+
+instance ToCStruct SurfacePresentModeCompatibilityEXT
+instance Show SurfacePresentModeCompatibilityEXT
+
+instance FromCStruct SurfacePresentModeCompatibilityEXT
+
+
+data SurfacePresentModeEXT
+
+instance ToCStruct SurfacePresentModeEXT
+instance Show SurfacePresentModeEXT
+
+instance FromCStruct SurfacePresentModeEXT
+
+
+data SurfacePresentScalingCapabilitiesEXT
+
+instance ToCStruct SurfacePresentScalingCapabilitiesEXT
+instance Show SurfacePresentScalingCapabilitiesEXT
+
+instance FromCStruct SurfacePresentScalingCapabilitiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_swapchain_maintenance1.hs b/src/Vulkan/Extensions/VK_EXT_swapchain_maintenance1.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_swapchain_maintenance1.hs
@@ -0,0 +1,1037 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_swapchain_maintenance1 - device extension
+--
+-- == VK_EXT_swapchain_maintenance1
+--
+-- [__Name String__]
+--     @VK_EXT_swapchain_maintenance1@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     276
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires support for Vulkan 1.0
+--
+--     -   Requires @VK_KHR_swapchain@ to be enabled for any device-level
+--         functionality
+--
+--     -   Requires @VK_EXT_surface_maintenance1@ to be enabled for any
+--         device-level functionality
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@ to be enabled
+--         for any device-level functionality
+--
+-- [__Contact__]
+--
+--     -   Shahbaz Youssefi
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_swapchain_maintenance1] @syoussefi%0A*Here describe the issue or question you have about the VK_EXT_swapchain_maintenance1 extension* >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_swapchain_maintenance1.adoc VK_EXT_swapchain_maintenance1>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2022-10-28
+--
+-- [__Contributors__]
+--
+--     -   Jeff Juliano, NVIDIA
+--
+--     -   Shahbaz Youssefi, Google
+--
+--     -   Chris Forbes, Google
+--
+--     -   Ian Elliott, Google
+--
+--     -   Yiwei Zhang, Google
+--
+--     -   Charlie Lao, Google
+--
+--     -   Chad Versace, Google
+--
+--     -   Ralph Potter, Samsung
+--
+--     -   Igor Nazarov, Samsung
+--
+--     -   Hyunchang Kim, Samsung
+--
+--     -   Suenghwan Lee, Samsung
+--
+--     -   Munseong Kang, Samsung
+--
+--     -   Joonyong Park, Samsung
+--
+--     -   Hans-Kristian Arntzen, Valve
+--
+--     -   Lisa Wu, Arm
+--
+--     -   Daniel Stone, Collabora
+--
+--     -   Pan Gao, Huawei
+--
+-- == Description
+--
+-- @VK_EXT_swapchain_maintenance1@ adds a collection of window system
+-- integration features that were intentionally left out or overlooked in
+-- the original @VK_KHR_swapchain@ extension.
+--
+-- The new features are as follows:
+--
+-- -   Specify a fence that will be signaled when the resources associated
+--     with a present operation /can/ be safely destroyed.
+--
+-- -   Allow changing the present mode a swapchain is using at per-present
+--     granularity.
+--
+-- -   Allow applications to define the behavior when presenting a
+--     swapchain image to a surface with different dimensions than the
+--     image. Using this feature /may/ allow implementations to avoid
+--     returning 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR' in this
+--     situation.
+--
+-- -   Allow applications to defer swapchain memory allocation for improved
+--     startup time and memory footprint.
+--
+-- -   Allow applications to release previously acquired images without
+--     presenting them.
+--
+-- == New Commands
+--
+-- -   'releaseSwapchainImagesEXT'
+--
+-- == New Structures
+--
+-- -   'ReleaseSwapchainImagesInfoEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceSwapchainMaintenance1FeaturesEXT'
+--
+-- -   Extending 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR':
+--
+--     -   'SwapchainPresentFenceInfoEXT'
+--
+--     -   'SwapchainPresentModeInfoEXT'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR':
+--
+--     -   'SwapchainPresentModesCreateInfoEXT'
+--
+--     -   'SwapchainPresentScalingCreateInfoEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME'
+--
+-- -   'EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateFlagBitsKHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_swapchain.SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT'
+--
+-- == Version History
+--
+-- -   Revision 0, 2019-05-28
+--
+--     -   Initial revisions
+--
+-- -   Revision 1, 2022-08-21 (Shahbaz Youssefi)
+--
+--     -   Add functionality and complete spec
+--
+-- == See Also
+--
+-- 'PhysicalDeviceSwapchainMaintenance1FeaturesEXT',
+-- 'ReleaseSwapchainImagesInfoEXT', 'SwapchainPresentFenceInfoEXT',
+-- 'SwapchainPresentModeInfoEXT', 'SwapchainPresentModesCreateInfoEXT',
+-- 'SwapchainPresentScalingCreateInfoEXT', 'releaseSwapchainImagesEXT'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_swapchain_maintenance1 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_swapchain_maintenance1  ( releaseSwapchainImagesEXT
+                                                        , PhysicalDeviceSwapchainMaintenance1FeaturesEXT(..)
+                                                        , SwapchainPresentFenceInfoEXT(..)
+                                                        , SwapchainPresentModesCreateInfoEXT(..)
+                                                        , SwapchainPresentModeInfoEXT(..)
+                                                        , SwapchainPresentScalingCreateInfoEXT(..)
+                                                        , ReleaseSwapchainImagesInfoEXT(..)
+                                                        , EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION
+                                                        , pattern EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION
+                                                        , EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME
+                                                        , pattern EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME
+                                                        , SwapchainKHR(..)
+                                                        , PresentModeKHR(..)
+                                                        , SwapchainCreateFlagBitsKHR(..)
+                                                        , SwapchainCreateFlagsKHR
+                                                        , PresentScalingFlagBitsEXT(..)
+                                                        , PresentScalingFlagsEXT
+                                                        , PresentGravityFlagBitsEXT(..)
+                                                        , PresentGravityFlagsEXT
+                                                        ) 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 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 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 (Word32)
+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.NamedType ((:::))
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.Handles (Device(Device))
+import Vulkan.Dynamic (DeviceCmds(pVkReleaseSwapchainImagesEXT))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.Handles (Fence)
+import Vulkan.Extensions.VK_EXT_surface_maintenance1 (PresentGravityFlagsEXT)
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR)
+import Vulkan.Extensions.VK_EXT_surface_maintenance1 (PresentScalingFlagsEXT)
+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.Exception (VulkanException(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.VK_EXT_surface_maintenance1 (PresentGravityFlagBitsEXT(..))
+import Vulkan.Extensions.VK_EXT_surface_maintenance1 (PresentGravityFlagsEXT)
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR(..))
+import Vulkan.Extensions.VK_EXT_surface_maintenance1 (PresentScalingFlagBitsEXT(..))
+import Vulkan.Extensions.VK_EXT_surface_maintenance1 (PresentScalingFlagsEXT)
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagsKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkReleaseSwapchainImagesEXT
+  :: FunPtr (Ptr Device_T -> Ptr ReleaseSwapchainImagesInfoEXT -> IO Result) -> Ptr Device_T -> Ptr ReleaseSwapchainImagesInfoEXT -> IO Result
+
+-- | vkReleaseSwapchainImagesEXT - Release previously acquired but unused
+-- images
+--
+-- = Description
+--
+-- Only images that are not in use by the device /can/ be released.
+--
+-- Releasing images is a read-only operation that will not affect the
+-- content of the released images. Upon reacquiring the image, the image
+-- contents and its layout will be the same as they were prior to releasing
+-- it. However, if a mechanism other than Vulkan is used to modify the
+-- platform window associated with the swapchain, the content of all
+-- presentable images in the swapchain becomes undefined.
+--
+-- Note
+--
+-- This functionality is useful during swapchain recreation, where acquired
+-- images from the old swapchain can be released instead of presented.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_swapchain_maintenance1 VK_EXT_swapchain_maintenance1>,
+-- 'Vulkan.Core10.Handles.Device', 'ReleaseSwapchainImagesInfoEXT'
+releaseSwapchainImagesEXT :: forall io
+                           . (MonadIO io)
+                          => -- | @device@ is the device associated with
+                             -- 'ReleaseSwapchainImagesInfoEXT'::@swapchain@.
+                             --
+                             -- #VUID-vkReleaseSwapchainImagesEXT-device-parameter# @device@ /must/ be a
+                             -- valid 'Vulkan.Core10.Handles.Device' handle
+                             Device
+                          -> -- | @pReleaseInfo@ is a pointer to a 'ReleaseSwapchainImagesInfoEXT'
+                             -- structure containing parameters of the release.
+                             --
+                             -- #VUID-vkReleaseSwapchainImagesEXT-pReleaseInfo-parameter# @pReleaseInfo@
+                             -- /must/ be a valid pointer to a valid 'ReleaseSwapchainImagesInfoEXT'
+                             -- structure
+                             ("releaseInfo" ::: ReleaseSwapchainImagesInfoEXT)
+                          -> io ()
+releaseSwapchainImagesEXT device releaseInfo = liftIO . evalContT $ do
+  let vkReleaseSwapchainImagesEXTPtr = pVkReleaseSwapchainImagesEXT (case device of Device{deviceCmds} -> deviceCmds)
+  lift $ unless (vkReleaseSwapchainImagesEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkReleaseSwapchainImagesEXT is null" Nothing Nothing
+  let vkReleaseSwapchainImagesEXT' = mkVkReleaseSwapchainImagesEXT vkReleaseSwapchainImagesEXTPtr
+  pReleaseInfo <- ContT $ withCStruct (releaseInfo)
+  r <- lift $ traceAroundEvent "vkReleaseSwapchainImagesEXT" (vkReleaseSwapchainImagesEXT'
+                                                                (deviceHandle (device))
+                                                                pReleaseInfo)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT - Structure describing
+-- whether implementation supports swapchain maintenance1 functionality
+--
+-- = Members
+--
+-- This structure describes the following feature:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceSwapchainMaintenance1FeaturesEXT' 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. 'PhysicalDeviceSwapchainMaintenance1FeaturesEXT' /can/ also
+-- be used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to selectively enable these features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_swapchain_maintenance1 VK_EXT_swapchain_maintenance1>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceSwapchainMaintenance1FeaturesEXT = PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+  { -- | #features-swapchainMaintenance1# @swapchainMaintenance1@ indicates that
+    -- the implementation supports the following:
+    --
+    -- -   'SwapchainPresentFenceInfoEXT', specifying a fence that is signaled
+    --     when the resources associated with a present operation /can/ be
+    --     safely destroyed.
+    --
+    -- -   'SwapchainPresentModesCreateInfoEXT' and
+    --     'SwapchainPresentModeInfoEXT', allowing the swapchain to switch
+    --     present modes without a need for recreation.
+    --
+    -- -   'SwapchainPresentScalingCreateInfoEXT', specifying the scaling
+    --     behavior of the swapchain in presence of window resizing.
+    --
+    -- -   The
+    --     'Vulkan.Extensions.VK_KHR_swapchain.SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT'
+    --     flag, allowing the implementation to defer the allocation of
+    --     swapchain image memory until first acquisition.
+    --
+    -- -   'releaseSwapchainImagesEXT', allowing acquired swapchain images to
+    --     be released without presenting them.
+    swapchainMaintenance1 :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceSwapchainMaintenance1FeaturesEXT)
+#endif
+deriving instance Show PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+
+instance ToCStruct PhysicalDeviceSwapchainMaintenance1FeaturesEXT where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSwapchainMaintenance1FeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (swapchainMaintenance1))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceSwapchainMaintenance1FeaturesEXT where
+  peekCStruct p = do
+    swapchainMaintenance1 <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+             (bool32ToBool swapchainMaintenance1)
+
+instance Storable PhysicalDeviceSwapchainMaintenance1FeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceSwapchainMaintenance1FeaturesEXT where
+  zero = PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+           zero
+
+
+-- | VkSwapchainPresentFenceInfoEXT - Fences associated with a
+-- vkQueuePresentKHR operation
+--
+-- = Description
+--
+-- The set of /queue operations/ defined by queuing an image for
+-- presentation, as well as operations performed by the presentation engine
+-- access the payloads of objects associated with the presentation
+-- operation. The associated objects include:
+--
+-- -   The swapchain image, its implicitly bound memory, and any other
+--     resources bound to that memory.
+--
+-- -   The wait semaphores specified when queuing the image for
+--     presentation.
+--
+-- The application /can/ provide a fence that the implementation will
+-- signal when all such queue operations have completed and the
+-- presentation engine has taken a reference to the payload of any objects
+-- it accesses as part of the present operation. For all binary wait
+-- semaphores imported by the presentation engine using the equivalent of
+-- reference transference, as described in
+-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>,
+-- this fence /must/ not signal until all such semaphore payloads have been
+-- reset by the presentation engine.
+--
+-- The application /can/ destroy the wait semaphores associated with a
+-- given presentation operation when the associated fence is signaled, and
+-- /can/ destroy the swapchain when the fences associated with all past
+-- presentation requests have signaled.
+--
+-- Fences associated with presentations to the same swapchain on the same
+-- 'Vulkan.Core10.Handles.Queue' /must/ be signaled in the same order as
+-- the present operations.
+--
+-- To specify a fence for each swapchain in a present operation, include
+-- the 'SwapchainPresentFenceInfoEXT' structure in the @pNext@ chain of the
+-- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' structure.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkSwapchainPresentFenceInfoEXT-swapchainCount-07757#
+--     @swapchainCount@ /must/ be equal to
+--     'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@
+--
+-- -   #VUID-VkSwapchainPresentFenceInfoEXT-pFences-07758# Each element of
+--     @pFences@ /must/ be unsignaled
+--
+-- -   #VUID-VkSwapchainPresentFenceInfoEXT-pFences-07759# Each element of
+--     @pFences@ /must/ not be associated with any other queue command that
+--     has not yet completed execution on that queue
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkSwapchainPresentFenceInfoEXT-sType-sType# @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT'
+--
+-- -   #VUID-VkSwapchainPresentFenceInfoEXT-pFences-parameter# @pFences@
+--     /must/ be a valid pointer to an array of @swapchainCount@ valid
+--     'Vulkan.Core10.Handles.Fence' handles
+--
+-- -   #VUID-VkSwapchainPresentFenceInfoEXT-swapchainCount-arraylength#
+--     @swapchainCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_swapchain_maintenance1 VK_EXT_swapchain_maintenance1>,
+-- 'Vulkan.Core10.Handles.Fence',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SwapchainPresentFenceInfoEXT = SwapchainPresentFenceInfoEXT
+  { -- | @pFences@ is a list of fences with @swapchainCount@ entries. Each entry
+    -- /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' or the handle of a
+    -- fence to signal when the relevant operations on the associated swapchain
+    -- have completed.
+    fences :: Vector Fence }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SwapchainPresentFenceInfoEXT)
+#endif
+deriving instance Show SwapchainPresentFenceInfoEXT
+
+instance ToCStruct SwapchainPresentFenceInfoEXT where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SwapchainPresentFenceInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (fences)) :: Word32))
+    pPFences' <- ContT $ allocaBytes @Fence ((Data.Vector.length (fences)) * 8)
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPFences' `plusPtr` (8 * (i)) :: Ptr Fence) (e)) (fences)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Fence))) (pPFences')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct SwapchainPresentFenceInfoEXT where
+  peekCStruct p = do
+    swapchainCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pFences <- peek @(Ptr Fence) ((p `plusPtr` 24 :: Ptr (Ptr Fence)))
+    pFences' <- generateM (fromIntegral swapchainCount) (\i -> peek @Fence ((pFences `advancePtrBytes` (8 * (i)) :: Ptr Fence)))
+    pure $ SwapchainPresentFenceInfoEXT
+             pFences'
+
+instance Zero SwapchainPresentFenceInfoEXT where
+  zero = SwapchainPresentFenceInfoEXT
+           mempty
+
+
+-- | VkSwapchainPresentModesCreateInfoEXT - All presentation modes usable by
+-- the swapchain
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkSwapchainPresentModesCreateInfoEXT-None-07762# Each entry in
+--     pPresentModes /must/ be one of the
+--     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' values returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR'
+--     for the surface
+--
+-- -   #VUID-VkSwapchainPresentModesCreateInfoEXT-pPresentModes-07763# The
+--     entries in pPresentModes /must/ be a subset of the present modes
+--     returned in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeCompatibilityEXT'::@pPresentModes@,
+--     given
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'::@presentMode@
+--     in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
+--
+-- -   #VUID-VkSwapchainPresentModesCreateInfoEXT-presentMode-07764#
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'::@presentMode@
+--     /must/ be included in @pPresentModes@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkSwapchainPresentModesCreateInfoEXT-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT'
+--
+-- -   #VUID-VkSwapchainPresentModesCreateInfoEXT-pPresentModes-parameter#
+--     @pPresentModes@ /must/ be a valid pointer to an array of
+--     @presentModeCount@ valid
+--     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' values
+--
+-- -   #VUID-VkSwapchainPresentModesCreateInfoEXT-presentModeCount-arraylength#
+--     @presentModeCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_swapchain_maintenance1 VK_EXT_swapchain_maintenance1>,
+-- 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SwapchainPresentModesCreateInfoEXT = SwapchainPresentModesCreateInfoEXT
+  { -- | @pPresentModes@ is a list of presentation modes with @presentModeCount@
+    -- entries
+    presentModes :: Vector PresentModeKHR }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SwapchainPresentModesCreateInfoEXT)
+#endif
+deriving instance Show SwapchainPresentModesCreateInfoEXT
+
+instance ToCStruct SwapchainPresentModesCreateInfoEXT where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SwapchainPresentModesCreateInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (presentModes)) :: Word32))
+    pPPresentModes' <- ContT $ allocaBytes @PresentModeKHR ((Data.Vector.length (presentModes)) * 4)
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPresentModes' `plusPtr` (4 * (i)) :: Ptr PresentModeKHR) (e)) (presentModes)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr PresentModeKHR))) (pPPresentModes')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct SwapchainPresentModesCreateInfoEXT where
+  peekCStruct p = do
+    presentModeCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pPresentModes <- peek @(Ptr PresentModeKHR) ((p `plusPtr` 24 :: Ptr (Ptr PresentModeKHR)))
+    pPresentModes' <- generateM (fromIntegral presentModeCount) (\i -> peek @PresentModeKHR ((pPresentModes `advancePtrBytes` (4 * (i)) :: Ptr PresentModeKHR)))
+    pure $ SwapchainPresentModesCreateInfoEXT
+             pPresentModes'
+
+instance Zero SwapchainPresentModesCreateInfoEXT where
+  zero = SwapchainPresentModesCreateInfoEXT
+           mempty
+
+
+-- | VkSwapchainPresentModeInfoEXT - Presentation modes for a
+-- vkQueuePresentKHR operation
+--
+-- = Description
+--
+-- If the @pNext@ chain of
+-- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' includes a
+-- 'SwapchainPresentModeInfoEXT' structure, then that structure defines the
+-- presentation modes used for the current and subsequent presentation
+-- operations.
+--
+-- When the application changes present modes with
+-- 'SwapchainPresentModeInfoEXT', images that have already been queued for
+-- presentation will continue to be presented according to the previous
+-- present mode. The current image being queued for presentation and
+-- subsequent images will be presented according to the new present mode.
+-- The behavior during the transition between the two modes is defined as
+-- follows.
+--
+-- -   Transition from
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR'
+--     to
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR':
+--     the presentation engine updates the shared presentable image
+--     according to the behavior of
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'.
+--
+-- -   Transition from
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
+--     to
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR':
+--     the presentation engine /may/ update the shared presentable image or
+--     defer that to its regular refresh cycle, according to the behavior
+--     of
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR'.
+--
+-- -   Transition between
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_KHR' and
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_RELAXED_KHR':
+--     Images continue to be appended to the same FIFO queue, and the
+--     behavior with respect to waiting for vertical blanking period will
+--     follow the new mode for current and subsequent images.
+--
+-- -   Transition from
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_IMMEDIATE_KHR' to
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_KHR' or
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_RELAXED_KHR': As
+--     all prior present requests in the
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_IMMEDIATE_KHR' mode
+--     are applied immediately, there are no outstanding present operations
+--     in this mode, and current and subsequent images are appended to the
+--     FIFO queue and presented according to the new mode.
+--
+-- -   Transition from
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_MAILBOX_KHR' to
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_KHR' or
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_RELAXED_KHR':
+--     Presentation in both modes require waiting for the next vertical
+--     blanking period, with
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_MAILBOX_KHR' allowing
+--     the pending present operation to be replaced by a new one. In this
+--     case, the current present operation will replace the pending present
+--     operation and is applied according to the new mode.
+--
+-- -   Transition from
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_KHR' or
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_RELAXED_KHR' to
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_IMMEDIATE_KHR' or
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_MAILBOX_KHR': If the
+--     FIFO queue is empty, presentation is done according to the behavior
+--     of the new mode. If there are present operations in the FIFO queue,
+--     once the last present operation is performed based on the respective
+--     vertical blanking period, the current and subsequent updates are
+--     applied according to the new mode.
+--
+-- -   The behavior during transition between any other present modes, if
+--     possible, is implementation defined.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkSwapchainPresentModeInfoEXT-swapchainCount-07760#
+--     @swapchainCount@ /must/ be equal to
+--     'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@
+--
+-- -   #VUID-VkSwapchainPresentModeInfoEXT-pPresentModes-07761# Each entry
+--     in @pPresentModes@ must be a presentation mode specified in
+--     'SwapchainPresentModesCreateInfoEXT'::pPresentModes when creating
+--     the entry’s corresponding swapchain
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkSwapchainPresentModeInfoEXT-sType-sType# @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT'
+--
+-- -   #VUID-VkSwapchainPresentModeInfoEXT-pPresentModes-parameter#
+--     @pPresentModes@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ valid
+--     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' values
+--
+-- -   #VUID-VkSwapchainPresentModeInfoEXT-swapchainCount-arraylength#
+--     @swapchainCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_swapchain_maintenance1 VK_EXT_swapchain_maintenance1>,
+-- 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SwapchainPresentModeInfoEXT = SwapchainPresentModeInfoEXT
+  { -- | @pPresentModes@ is a list of presentation modes with @swapchainCount@
+    -- entries.
+    presentModes :: Vector PresentModeKHR }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SwapchainPresentModeInfoEXT)
+#endif
+deriving instance Show SwapchainPresentModeInfoEXT
+
+instance ToCStruct SwapchainPresentModeInfoEXT where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SwapchainPresentModeInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (presentModes)) :: Word32))
+    pPPresentModes' <- ContT $ allocaBytes @PresentModeKHR ((Data.Vector.length (presentModes)) * 4)
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPresentModes' `plusPtr` (4 * (i)) :: Ptr PresentModeKHR) (e)) (presentModes)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr PresentModeKHR))) (pPPresentModes')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct SwapchainPresentModeInfoEXT where
+  peekCStruct p = do
+    swapchainCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pPresentModes <- peek @(Ptr PresentModeKHR) ((p `plusPtr` 24 :: Ptr (Ptr PresentModeKHR)))
+    pPresentModes' <- generateM (fromIntegral swapchainCount) (\i -> peek @PresentModeKHR ((pPresentModes `advancePtrBytes` (4 * (i)) :: Ptr PresentModeKHR)))
+    pure $ SwapchainPresentModeInfoEXT
+             pPresentModes'
+
+instance Zero SwapchainPresentModeInfoEXT where
+  zero = SwapchainPresentModeInfoEXT
+           mempty
+
+
+-- | VkSwapchainPresentScalingCreateInfoEXT - Scaling behavior when
+-- presenting to the surface
+--
+-- = Description
+--
+-- If @presentScaling@ is @0@, the result of presenting a swapchain image
+-- with dimensions that do not match the surface dimensions is
+-- implementation and platform-dependent. If @presentGravityX@ or
+-- @presentGravityY@ are @0@, the presentation gravity /must/ match that
+-- defined by the native platform surface on platforms which define surface
+-- gravity.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07765#
+--     If @presentGravityX@ is @0@, @presentGravityY@ /must/ be @0@
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07766#
+--     If @presentGravityX@ is not @0@, @presentGravityY@ /must/ not be @0@
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentScaling-07767#
+--     @presentScaling@ /must/ not have more than one bit set
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07768#
+--     @presentGravityX@ /must/ not have more than one bit set
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityY-07769#
+--     @presentGravityY@ /must/ not have more than one bit set
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentScaling-07770#
+--     @presentScaling@ /must/ be a valid scaling method for the surface as
+--     returned in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT'::@supportedPresentScaling@,
+--     given
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'::@presentMode@
+--     in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentScaling-07771#
+--     If the swapchain is created with
+--     'SwapchainPresentModesCreateInfoEXT', @presentScaling@ /must/ be a
+--     valid scaling method for the surface as returned in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT'::@supportedPresentScaling@,
+--     given each present mode in
+--     'SwapchainPresentModesCreateInfoEXT'::@pPresentModes@ in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07772#
+--     @presentGravityX@ /must/ be a valid x-axis present gravity for the
+--     surface as returned in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT'::@supportedPresentGravityX@,
+--     given
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'::@presentMode@
+--     in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07773#
+--     If the swapchain is created with
+--     'SwapchainPresentModesCreateInfoEXT', @presentGravityX@ /must/ be a
+--     valid x-axis present gravity for the surface as returned in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT'::@supportedPresentGravityX@,
+--     given each present mode in
+--     'SwapchainPresentModesCreateInfoEXT'::@pPresentModes@ in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityY-07774#
+--     @presentGravityY@ /must/ be a valid y-axis present gravity for the
+--     surface as returned in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT'::@supportedPresentGravityY@,
+--     given
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'::@presentMode@
+--     in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityY-07775#
+--     If the swapchain is created with
+--     'SwapchainPresentModesCreateInfoEXT', @presentGravityY@ /must/ be a
+--     valid y-axis present gravity for the surface as returned in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT'::@supportedPresentGravityY@,
+--     given each present mode in
+--     'SwapchainPresentModesCreateInfoEXT'::@pPresentModes@ in
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT'
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-scalingBehavior-parameter#
+--     @scalingBehavior@ /must/ be a valid combination of
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.PresentScalingFlagBitsEXT'
+--     values
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-parameter#
+--     @presentGravityX@ /must/ be a valid combination of
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.PresentGravityFlagBitsEXT'
+--     values
+--
+-- -   #VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityY-parameter#
+--     @presentGravityY@ /must/ be a valid combination of
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.PresentGravityFlagBitsEXT'
+--     values
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_swapchain_maintenance1 VK_EXT_swapchain_maintenance1>,
+-- 'Vulkan.Extensions.VK_EXT_surface_maintenance1.PresentGravityFlagsEXT',
+-- 'Vulkan.Extensions.VK_EXT_surface_maintenance1.PresentScalingFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SwapchainPresentScalingCreateInfoEXT = SwapchainPresentScalingCreateInfoEXT
+  { -- No documentation found for Nested "VkSwapchainPresentScalingCreateInfoEXT" "scalingBehavior"
+    scalingBehavior :: PresentScalingFlagsEXT
+  , -- | @presentGravityX@ is @0@ or the x-axis direction in which swapchain
+    -- image pixels gravitate relative to the surface when @presentScaling@
+    -- does not result in a one-to-one pixel mapping between the scaled
+    -- swapchain image and the surface.
+    presentGravityX :: PresentGravityFlagsEXT
+  , -- | @presentGravityY@ is @0@ or the y-axis direction in which swapchain
+    -- image pixels gravitate relative to the surface when @presentScaling@
+    -- does not result in a one-to-one pixel mapping between the scaled
+    -- swapchain image and the surface.
+    presentGravityY :: PresentGravityFlagsEXT
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SwapchainPresentScalingCreateInfoEXT)
+#endif
+deriving instance Show SwapchainPresentScalingCreateInfoEXT
+
+instance ToCStruct SwapchainPresentScalingCreateInfoEXT where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SwapchainPresentScalingCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PresentScalingFlagsEXT)) (scalingBehavior)
+    poke ((p `plusPtr` 20 :: Ptr PresentGravityFlagsEXT)) (presentGravityX)
+    poke ((p `plusPtr` 24 :: Ptr PresentGravityFlagsEXT)) (presentGravityY)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct SwapchainPresentScalingCreateInfoEXT where
+  peekCStruct p = do
+    scalingBehavior <- peek @PresentScalingFlagsEXT ((p `plusPtr` 16 :: Ptr PresentScalingFlagsEXT))
+    presentGravityX <- peek @PresentGravityFlagsEXT ((p `plusPtr` 20 :: Ptr PresentGravityFlagsEXT))
+    presentGravityY <- peek @PresentGravityFlagsEXT ((p `plusPtr` 24 :: Ptr PresentGravityFlagsEXT))
+    pure $ SwapchainPresentScalingCreateInfoEXT
+             scalingBehavior presentGravityX presentGravityY
+
+instance Storable SwapchainPresentScalingCreateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SwapchainPresentScalingCreateInfoEXT where
+  zero = SwapchainPresentScalingCreateInfoEXT
+           zero
+           zero
+           zero
+
+
+-- | VkReleaseSwapchainImagesInfoEXT - Structure describing a list of
+-- swapchain image indices to be released
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkReleaseSwapchainImagesInfoEXT-pImageIndices-07785# Each
+--     element of @pImageIndices@ /must/ be the index of a presentable
+--     image acquired from the swapchain specified by @swapchain@
+--
+-- -   #VUID-VkReleaseSwapchainImagesInfoEXT-pImageIndices-07786# All uses
+--     of presentable images identified by elements of @pImageIndices@
+--     /must/ have completed execution
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkReleaseSwapchainImagesInfoEXT-sType-sType# @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT'
+--
+-- -   #VUID-VkReleaseSwapchainImagesInfoEXT-pNext-pNext# @pNext@ /must/ be
+--     @NULL@
+--
+-- -   #VUID-VkReleaseSwapchainImagesInfoEXT-swapchain-parameter#
+--     @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   #VUID-VkReleaseSwapchainImagesInfoEXT-pImageIndices-parameter#
+--     @pImageIndices@ /must/ be a valid pointer to an array of
+--     @imageIndexCount@ @uint32_t@ values
+--
+-- -   #VUID-VkReleaseSwapchainImagesInfoEXT-imageIndexCount-arraylength#
+--     @imageIndexCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_swapchain_maintenance1 VK_EXT_swapchain_maintenance1>,
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR', 'releaseSwapchainImagesEXT'
+data ReleaseSwapchainImagesInfoEXT = ReleaseSwapchainImagesInfoEXT
+  { -- | @swapchain@ is a swapchain to which images are being released.
+    swapchain :: SwapchainKHR
+  , -- | @pImageIndices@ is a pointer to an array of indices into the array of
+    -- @swapchain@’s presentable images, with @imageIndexCount@ entries.
+    imageIndices :: Vector Word32
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (ReleaseSwapchainImagesInfoEXT)
+#endif
+deriving instance Show ReleaseSwapchainImagesInfoEXT
+
+instance ToCStruct ReleaseSwapchainImagesInfoEXT where
+  withCStruct x f = allocaBytes 40 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ReleaseSwapchainImagesInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (swapchain)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (imageIndices)) :: Word32))
+    pPImageIndices' <- ContT $ allocaBytes @Word32 ((Data.Vector.length (imageIndices)) * 4)
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPImageIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (imageIndices)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word32))) (pPImageIndices')
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (zero)
+    f
+
+instance FromCStruct ReleaseSwapchainImagesInfoEXT where
+  peekCStruct p = do
+    swapchain <- peek @SwapchainKHR ((p `plusPtr` 16 :: Ptr SwapchainKHR))
+    imageIndexCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pImageIndices <- peek @(Ptr Word32) ((p `plusPtr` 32 :: Ptr (Ptr Word32)))
+    pImageIndices' <- generateM (fromIntegral imageIndexCount) (\i -> peek @Word32 ((pImageIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ ReleaseSwapchainImagesInfoEXT
+             swapchain pImageIndices'
+
+instance Zero ReleaseSwapchainImagesInfoEXT where
+  zero = ReleaseSwapchainImagesInfoEXT
+           zero
+           mempty
+
+
+type EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION"
+pattern EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION = 1
+
+
+type EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME = "VK_EXT_swapchain_maintenance1"
+
+-- No documentation found for TopLevel "VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME"
+pattern EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME = "VK_EXT_swapchain_maintenance1"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_swapchain_maintenance1.hs-boot b/src/Vulkan/Extensions/VK_EXT_swapchain_maintenance1.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_swapchain_maintenance1.hs-boot
@@ -0,0 +1,242 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_swapchain_maintenance1 - device extension
+--
+-- == VK_EXT_swapchain_maintenance1
+--
+-- [__Name String__]
+--     @VK_EXT_swapchain_maintenance1@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     276
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires support for Vulkan 1.0
+--
+--     -   Requires @VK_KHR_swapchain@ to be enabled for any device-level
+--         functionality
+--
+--     -   Requires @VK_EXT_surface_maintenance1@ to be enabled for any
+--         device-level functionality
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@ to be enabled
+--         for any device-level functionality
+--
+-- [__Contact__]
+--
+--     -   Shahbaz Youssefi
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_swapchain_maintenance1] @syoussefi%0A*Here describe the issue or question you have about the VK_EXT_swapchain_maintenance1 extension* >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_swapchain_maintenance1.adoc VK_EXT_swapchain_maintenance1>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2022-10-28
+--
+-- [__Contributors__]
+--
+--     -   Jeff Juliano, NVIDIA
+--
+--     -   Shahbaz Youssefi, Google
+--
+--     -   Chris Forbes, Google
+--
+--     -   Ian Elliott, Google
+--
+--     -   Yiwei Zhang, Google
+--
+--     -   Charlie Lao, Google
+--
+--     -   Chad Versace, Google
+--
+--     -   Ralph Potter, Samsung
+--
+--     -   Igor Nazarov, Samsung
+--
+--     -   Hyunchang Kim, Samsung
+--
+--     -   Suenghwan Lee, Samsung
+--
+--     -   Munseong Kang, Samsung
+--
+--     -   Joonyong Park, Samsung
+--
+--     -   Hans-Kristian Arntzen, Valve
+--
+--     -   Lisa Wu, Arm
+--
+--     -   Daniel Stone, Collabora
+--
+--     -   Pan Gao, Huawei
+--
+-- == Description
+--
+-- @VK_EXT_swapchain_maintenance1@ adds a collection of window system
+-- integration features that were intentionally left out or overlooked in
+-- the original @VK_KHR_swapchain@ extension.
+--
+-- The new features are as follows:
+--
+-- -   Specify a fence that will be signaled when the resources associated
+--     with a present operation /can/ be safely destroyed.
+--
+-- -   Allow changing the present mode a swapchain is using at per-present
+--     granularity.
+--
+-- -   Allow applications to define the behavior when presenting a
+--     swapchain image to a surface with different dimensions than the
+--     image. Using this feature /may/ allow implementations to avoid
+--     returning 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR' in this
+--     situation.
+--
+-- -   Allow applications to defer swapchain memory allocation for improved
+--     startup time and memory footprint.
+--
+-- -   Allow applications to release previously acquired images without
+--     presenting them.
+--
+-- == New Commands
+--
+-- -   'releaseSwapchainImagesEXT'
+--
+-- == New Structures
+--
+-- -   'ReleaseSwapchainImagesInfoEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceSwapchainMaintenance1FeaturesEXT'
+--
+-- -   Extending 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR':
+--
+--     -   'SwapchainPresentFenceInfoEXT'
+--
+--     -   'SwapchainPresentModeInfoEXT'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR':
+--
+--     -   'SwapchainPresentModesCreateInfoEXT'
+--
+--     -   'SwapchainPresentScalingCreateInfoEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME'
+--
+-- -   'EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateFlagBitsKHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_swapchain.SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT'
+--
+-- == Version History
+--
+-- -   Revision 0, 2019-05-28
+--
+--     -   Initial revisions
+--
+-- -   Revision 1, 2022-08-21 (Shahbaz Youssefi)
+--
+--     -   Add functionality and complete spec
+--
+-- == See Also
+--
+-- 'PhysicalDeviceSwapchainMaintenance1FeaturesEXT',
+-- 'ReleaseSwapchainImagesInfoEXT', 'SwapchainPresentFenceInfoEXT',
+-- 'SwapchainPresentModeInfoEXT', 'SwapchainPresentModesCreateInfoEXT',
+-- 'SwapchainPresentScalingCreateInfoEXT', 'releaseSwapchainImagesEXT'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_swapchain_maintenance1 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_swapchain_maintenance1  ( PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+                                                        , ReleaseSwapchainImagesInfoEXT
+                                                        , SwapchainPresentFenceInfoEXT
+                                                        , SwapchainPresentModeInfoEXT
+                                                        , SwapchainPresentModesCreateInfoEXT
+                                                        , SwapchainPresentScalingCreateInfoEXT
+                                                        ) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+
+instance ToCStruct PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+instance Show PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+
+instance FromCStruct PhysicalDeviceSwapchainMaintenance1FeaturesEXT
+
+
+data ReleaseSwapchainImagesInfoEXT
+
+instance ToCStruct ReleaseSwapchainImagesInfoEXT
+instance Show ReleaseSwapchainImagesInfoEXT
+
+instance FromCStruct ReleaseSwapchainImagesInfoEXT
+
+
+data SwapchainPresentFenceInfoEXT
+
+instance ToCStruct SwapchainPresentFenceInfoEXT
+instance Show SwapchainPresentFenceInfoEXT
+
+instance FromCStruct SwapchainPresentFenceInfoEXT
+
+
+data SwapchainPresentModeInfoEXT
+
+instance ToCStruct SwapchainPresentModeInfoEXT
+instance Show SwapchainPresentModeInfoEXT
+
+instance FromCStruct SwapchainPresentModeInfoEXT
+
+
+data SwapchainPresentModesCreateInfoEXT
+
+instance ToCStruct SwapchainPresentModesCreateInfoEXT
+instance Show SwapchainPresentModesCreateInfoEXT
+
+instance FromCStruct SwapchainPresentModesCreateInfoEXT
+
+
+data SwapchainPresentScalingCreateInfoEXT
+
+instance ToCStruct SwapchainPresentScalingCreateInfoEXT
+instance Show SwapchainPresentScalingCreateInfoEXT
+
+instance FromCStruct SwapchainPresentScalingCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs
--- a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs
+++ b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs
@@ -1847,7 +1847,8 @@
 --
 -- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-06887# If the current
 --     render pass instance uses a depth\/stencil attachment with a
---     read-only layout for the stencil aspect and stencil test is enabled,
+--     read-only layout for the stencil aspect, both front and back
+--     @writeMask@ are not zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs b/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs
--- a/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs
+++ b/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs
@@ -322,11 +322,9 @@
 -- swapchain creation will fail with the result code
 -- 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DISPLAY_KHR'. If any
 -- error occurs, no swapchains will be created. Images presented to
--- multiple swapchains /must/ be re-acquired from all of them before
--- transitioning away from
--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR'. After
--- destroying one or more of the swapchains, the remaining swapchains and
--- the presentable images /can/ continue to be used.
+-- multiple swapchains /must/ be re-acquired from all of them before being
+-- modified. After destroying one or more of the swapchains, the remaining
+-- swapchains and the presentable images /can/ continue to be used.
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs b/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
--- a/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
+++ b/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
@@ -228,6 +228,9 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveWin32InfoEXT)
 import Vulkan.Extensions.Handles (SurfaceKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_surface_maintenance1 (SurfacePresentModeCompatibilityEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_surface_maintenance1 (SurfacePresentModeEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_surface_maintenance1 (SurfacePresentScalingCapabilitiesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface_protected_capabilities (SurfaceProtectedCapabilitiesKHR)
 import Vulkan.Exception (VulkanException(..))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR))
@@ -262,13 +265,15 @@
 --
 -- == Valid Usage
 --
--- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-06520#
+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-06521#
+--     If the @VK_GOOGLE_surfaceless_query@ extension is not enabled,
 --     @pSurfaceInfo->surface@ /must/ be a valid
 --     'Vulkan.Extensions.Handles.SurfaceKHR' handle
 --
--- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-06210#
---     @pSurfaceInfo->surface@ /must/ be supported by @physicalDevice@, as
---     reported by
+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-06522#
+--     If @pSurfaceInfo->surface@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ be supported by
+--     @physicalDevice@, as reported by
 --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR'
 --     or an equivalent platform-specific mechanism
 --
@@ -279,6 +284,32 @@
 --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
 --     structure /must/ be included in the @pNext@ chain of @pSurfaceInfo@
 --
+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07776# If a
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeCompatibilityEXT'
+--     structure is included in the @pNext@ chain of
+--     @pSurfaceCapabilities@, a
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
+--     structure /must/ be included in the @pNext@ chain of @pSurfaceInfo@
+--
+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07777# If a
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT'
+--     structure is included in the @pNext@ chain of
+--     @pSurfaceCapabilities@, a
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
+--     structure /must/ be included in the @pNext@ chain of @pSurfaceInfo@
+--
+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07778# If a
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeCompatibilityEXT'
+--     structure is included in the @pNext@ chain of
+--     @pSurfaceCapabilities@, @pSurfaceInfo->surface@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07779# If a
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT'
+--     structure is included in the @pNext@ chain of
+--     @pSurfaceCapabilities@, @pSurfaceInfo->surface@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-physicalDevice-parameter#
@@ -544,9 +575,10 @@
 -- -   #VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-pNext# Each @pNext@
 --     member of any structure (including this one) in the @pNext@ chain
 --     /must/ be either @NULL@ or a pointer to a valid instance of
---     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT'
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT',
 --     or
---     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT'
 --
 -- -   #VUID-VkPhysicalDeviceSurfaceInfo2KHR-sType-unique# The @sType@
 --     value of each struct in the @pNext@ chain /must/ be unique
@@ -582,6 +614,7 @@
   getNext PhysicalDeviceSurfaceInfo2KHR{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceSurfaceInfo2KHR e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @SurfacePresentModeEXT = Just f
     | Just Refl <- eqT @e @SurfaceFullScreenExclusiveWin32InfoEXT = Just f
     | Just Refl <- eqT @e @SurfaceFullScreenExclusiveInfoEXT = Just f
     | otherwise = Nothing
@@ -650,6 +683,8 @@
 --     'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR',
 --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT',
 --     'Vulkan.Extensions.VK_NV_present_barrier.SurfaceCapabilitiesPresentBarrierNV',
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeCompatibilityEXT',
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT',
 --     or
 --     'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR'
 --
@@ -682,6 +717,8 @@
   getNext SurfaceCapabilities2KHR{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends SurfaceCapabilities2KHR e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @SurfacePresentModeCompatibilityEXT = Just f
+    | Just Refl <- eqT @e @SurfacePresentScalingCapabilitiesEXT = Just f
     | Just Refl <- eqT @e @SurfaceCapabilitiesPresentBarrierNV = Just f
     | Just Refl <- eqT @e @SurfaceCapabilitiesFullScreenExclusiveEXT = Just f
     | Just Refl <- eqT @e @SurfaceProtectedCapabilitiesKHR = Just f
diff --git a/src/Vulkan/Extensions/VK_KHR_surface.hs b/src/Vulkan/Extensions/VK_KHR_surface.hs
--- a/src/Vulkan/Extensions/VK_KHR_surface.hs
+++ b/src/Vulkan/Extensions/VK_KHR_surface.hs
@@ -1282,7 +1282,11 @@
 -- = See Also
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_surface VK_KHR_surface>,
+-- 'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeCompatibilityEXT',
+-- 'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentModeEXT',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModeInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModesCreateInfoEXT',
 -- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.getPhysicalDeviceSurfacePresentModes2EXT',
 -- 'getPhysicalDeviceSurfacePresentModesKHR'
 newtype PresentModeKHR = PresentModeKHR Int32
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
@@ -1102,7 +1102,8 @@
                                                                               , ..
                                                                               )
                                            , SwapchainCreateFlagsKHR
-                                           , SwapchainCreateFlagBitsKHR( SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR
+                                           , SwapchainCreateFlagBitsKHR( SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT
+                                                                       , SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR
                                                                        , SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
                                                                        , SWAPCHAIN_CREATE_PROTECTED_BIT_KHR
                                                                        , ..
@@ -1247,6 +1248,10 @@
 import Vulkan.Extensions.Handles (SwapchainKHR)
 import Vulkan.Extensions.Handles (SwapchainKHR(..))
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_present_barrier (SwapchainPresentBarrierCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (SwapchainPresentFenceInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (SwapchainPresentModeInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (SwapchainPresentModesCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_swapchain_maintenance1 (SwapchainPresentScalingCreateInfoEXT)
 import Vulkan.Exception (VulkanException(..))
 import Vulkan.Core10.APIConstants (pattern MAX_DEVICE_GROUP_SIZE)
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR))
@@ -1756,6 +1761,15 @@
 -- | vkAcquireNextImageKHR - Retrieve the index of the next available
 -- presentable image
 --
+-- = Description
+--
+-- If the @swapchain@ has been created with the
+-- 'SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT' flag, the image
+-- whose index is returned in @pImageIndex@ will be fully backed by memory
+-- before this call returns to the application, as if it is bound
+-- completely and contiguously to a single
+-- 'Vulkan.Core10.Handles.DeviceMemory' object.
+--
 -- == Valid Usage
 --
 -- -   #VUID-vkAcquireNextImageKHR-swapchain-01285# @swapchain@ /must/ not
@@ -1776,14 +1790,11 @@
 -- -   #VUID-vkAcquireNextImageKHR-semaphore-01780# @semaphore@ and @fence@
 --     /must/ not both be equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
--- -   #VUID-vkAcquireNextImageKHR-swapchain-01802# If the number of
---     currently acquired images is greater than the difference between the
---     number of images in @swapchain@ and the value of
---     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageCount@
---     as returned by a call to
---     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
---     with the @surface@ used to create @swapchain@, @timeout@ /must/ not
---     be @UINT64_MAX@
+-- -   #VUID-vkAcquireNextImageKHR-surface-07783# If
+--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#swapchain-acquire-forward-progress forward progress>
+--     cannot be guaranteed for the @surface@ used to create the
+--     @swapchain@ member of @pAcquireInfo@, the @timeout@ member of
+--     @pAcquireInfo@ /must/ not be @UINT64_MAX@
 --
 -- -   #VUID-vkAcquireNextImageKHR-semaphore-03265# @semaphore@ /must/ have
 --     a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
@@ -2262,17 +2273,19 @@
 -- | vkAcquireNextImage2KHR - Retrieve the index of the next available
 -- presentable image
 --
+-- = Description
+--
+-- If the @swapchain@ has been created with the
+-- 'SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT' flag, the image
+-- whose index is returned in @pImageIndex@ will be fully backed by memory
+-- before this call returns to the application.
+--
 -- == Valid Usage
 --
--- -   #VUID-vkAcquireNextImage2KHR-swapchain-01803# If the number of
---     currently acquired images is greater than the difference between the
---     number of images in the @swapchain@ member of @pAcquireInfo@ and the
---     value of
---     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageCount@
---     as returned by a call to
---     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
---     with the @surface@ used to create @swapchain@, the @timeout@ member
---     of @pAcquireInfo@ /must/ not be @UINT64_MAX@
+-- -   #VUID-vkAcquireNextImage2KHR-surface-07784# If
+--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#swapchain-acquire-forward-progress forward progress>
+--     cannot be guaranteed for the @surface@ used to create @swapchain@,
+--     the @timeout@ member of @pAcquireInfo@ /must/ not be @UINT64_MAX@
 --
 -- == Valid Usage (Implicit)
 --
@@ -2540,14 +2553,31 @@
 --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR'
 --     for the surface
 --
--- -   #VUID-VkSwapchainCreateInfoKHR-imageExtent-01274# @imageExtent@
---     /must/ be between @minImageExtent@ and @maxImageExtent@, inclusive,
---     where @minImageExtent@ and @maxImageExtent@ are members of the
+-- -   #VUID-VkSwapchainCreateInfoKHR-pNext-07781# If a
+--     'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentScalingCreateInfoEXT'
+--     structure was not included in the @pNext@ chain, or it is included
+--     and
+--     'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentScalingCreateInfoEXT'::@scalingBehavior@
+--     is zero then @imageExtent@ /must/ be between @minImageExtent@ and
+--     @maxImageExtent@, inclusive, where @minImageExtent@ and
+--     @maxImageExtent@ are members of the
 --     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure
 --     returned by
 --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
 --     for the surface
 --
+-- -   #VUID-VkSwapchainCreateInfoKHR-pNext-07782# If a
+--     'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentScalingCreateInfoEXT'
+--     structure was included in the @pNext@ chain and
+--     'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentScalingCreateInfoEXT'::@scalingBehavior@
+--     is not zero then @imageExtent@ /must/ be between
+--     @minScaledImageExtent@ and @maxScaledImageExtent@, inclusive, where
+--     @minScaledImageExtent@ and @maxScaledImageExtent@ are members of the
+--     'Vulkan.Extensions.VK_EXT_surface_maintenance1.SurfacePresentScalingCapabilitiesEXT'
+--     structure returned by
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
+--     for the surface and @presentMode@
+--
 -- -   #VUID-VkSwapchainCreateInfoKHR-imageExtent-01689# @imageExtent@
 --     members @width@ and @height@ /must/ both be non-zero
 --
@@ -2705,8 +2735,10 @@
 --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT',
 --     'Vulkan.Extensions.VK_EXT_display_control.SwapchainCounterCreateInfoEXT',
 --     'Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD',
+--     'Vulkan.Extensions.VK_NV_present_barrier.SwapchainPresentBarrierCreateInfoNV',
+--     'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModesCreateInfoEXT',
 --     or
---     'Vulkan.Extensions.VK_NV_present_barrier.SwapchainPresentBarrierCreateInfoNV'
+--     'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentScalingCreateInfoEXT'
 --
 -- -   #VUID-VkSwapchainCreateInfoKHR-sType-unique# The @sType@ value of
 --     each struct in the @pNext@ chain /must/ be unique
@@ -2804,7 +2836,9 @@
     -- On some platforms, it is normal that @maxImageExtent@ /may/ become
     -- @(0, 0)@, for example when the window is minimized. In such a case, it
     -- is not possible to create a swapchain due to the Valid Usage
-    -- requirements.
+    -- requirements , unless scaling is selected through
+    -- 'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentScalingCreateInfoEXT',
+    -- if supported .
     imageExtent :: Extent2D
   , -- | @imageArrayLayers@ is the number of views in a multiview\/stereo
     -- surface. For non-stereoscopic-3D applications, this value is 1.
@@ -2885,6 +2919,8 @@
   getNext SwapchainCreateInfoKHR{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends SwapchainCreateInfoKHR e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @SwapchainPresentScalingCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @SwapchainPresentModesCreateInfoEXT = Just f
     | Just Refl <- eqT @e @ImageCompressionControlEXT = Just f
     | Just Refl <- eqT @e @SwapchainPresentBarrierCreateInfoNV = Just f
     | Just Refl <- eqT @e @SurfaceFullScreenExclusiveWin32InfoEXT = Just f
@@ -3056,8 +3092,11 @@
 --     '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'
+--     'Vulkan.Extensions.VK_KHR_incremental_present.PresentRegionsKHR',
+--     'Vulkan.Extensions.VK_GOOGLE_display_timing.PresentTimesInfoGOOGLE',
+--     'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentFenceInfoEXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_swapchain_maintenance1.SwapchainPresentModeInfoEXT'
 --
 -- -   #VUID-VkPresentInfoKHR-sType-unique# The @sType@ value of each
 --     struct in the @pNext@ chain /must/ be unique
@@ -3131,6 +3170,8 @@
   getNext PresentInfoKHR{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends PresentInfoKHR e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @SwapchainPresentModeInfoEXT = Just f
+    | Just Refl <- eqT @e @SwapchainPresentFenceInfoEXT = Just f
     | Just Refl <- eqT @e @PresentFrameTokenGGP = Just f
     | Just Refl <- eqT @e @PresentTimesInfoGOOGLE = Just f
     | Just Refl <- eqT @e @PresentIdKHR = Just f
@@ -3362,6 +3403,12 @@
 -- -   #VUID-VkBindImageMemorySwapchainInfoKHR-imageIndex-01644#
 --     @imageIndex@ /must/ be less than the number of images in @swapchain@
 --
+-- -   #VUID-VkBindImageMemorySwapchainInfoKHR-swapchain-07756# If the
+--     @swapchain@ has been created with
+--     'SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT', @imageIndex@
+--     /must/ be one that has previously been returned by
+--     'acquireNextImageKHR' or 'acquireNextImage2KHR'
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkBindImageMemorySwapchainInfoKHR-sType-sType# @sType@ /must/
@@ -3888,6 +3935,12 @@
 newtype SwapchainCreateFlagBitsKHR = SwapchainCreateFlagBitsKHR Flags
   deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
 
+-- | 'SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT' specifies that the
+-- implementation /may/ defer allocation of memory associated with each
+-- swapchain image until its index is to be returned from
+-- 'acquireNextImageKHR' or 'acquireNextImage2KHR' for the first time.
+pattern SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT = SwapchainCreateFlagBitsKHR 0x00000008
+
 -- | 'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' specifies that the images of
 -- the swapchain /can/ be used to create a
 -- 'Vulkan.Core10.Handles.ImageView' with a different format than what the
@@ -3920,6 +3973,10 @@
 showTableSwapchainCreateFlagBitsKHR :: [(SwapchainCreateFlagBitsKHR, String)]
 showTableSwapchainCreateFlagBitsKHR =
   [
+    ( SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT
+    , "DEFERRED_MEMORY_ALLOCATION_BIT_EXT"
+    )
+  ,
     ( SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR
     , "MUTABLE_FORMAT_BIT_KHR"
     )
diff --git a/src/Vulkan/Extensions/VK_LUNARG_direct_driver_loading.hs b/src/Vulkan/Extensions/VK_LUNARG_direct_driver_loading.hs
--- a/src/Vulkan/Extensions/VK_LUNARG_direct_driver_loading.hs
+++ b/src/Vulkan/Extensions/VK_LUNARG_direct_driver_loading.hs
@@ -56,7 +56,7 @@
 --
 -- == New Function Pointers
 --
--- -   'PFN_vkGetInstanceProcAddr'
+-- -   'PFN_vkGetInstanceProcAddrLUNARG'
 --
 -- == New Enums
 --
@@ -86,7 +86,7 @@
 --
 -- == See Also
 --
--- 'PFN_vkGetInstanceProcAddr', 'DirectDriverLoadingFlagsLUNARG',
+-- 'PFN_vkGetInstanceProcAddrLUNARG', 'DirectDriverLoadingFlagsLUNARG',
 -- 'DirectDriverLoadingInfoLUNARG', 'DirectDriverLoadingListLUNARG',
 -- 'DirectDriverLoadingModeLUNARG'
 --
@@ -104,8 +104,8 @@
                                                                                          , DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG
                                                                                          , ..
                                                                                          )
-                                                          , PFN_vkGetInstanceProcAddr
-                                                          , FN_vkGetInstanceProcAddr
+                                                          , PFN_vkGetInstanceProcAddrLUNARG
+                                                          , FN_vkGetInstanceProcAddrLUNARG
                                                           , LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION
                                                           , pattern LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION
                                                           , LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME
@@ -165,16 +165,20 @@
 --
 -- = See Also
 --
--- 'PFN_vkGetInstanceProcAddr',
+-- 'PFN_vkGetInstanceProcAddrLUNARG',
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_LUNARG_direct_driver_loading VK_LUNARG_direct_driver_loading>,
 -- 'DirectDriverLoadingFlagsLUNARG', 'DirectDriverLoadingListLUNARG',
 -- 'Vulkan.Core10.Enums.StructureType.StructureType'
 data DirectDriverLoadingInfoLUNARG = DirectDriverLoadingInfoLUNARG
-  { -- | #VUID-VkDirectDriverLoadingInfoLUNARG-flags-zerobitmask# @flags@ /must/
+  { -- | @flags@ is reserved for future use.
+    --
+    -- #VUID-VkDirectDriverLoadingInfoLUNARG-flags-zerobitmask# @flags@ /must/
     -- be @0@
     flags :: DirectDriverLoadingFlagsLUNARG
-  , -- No documentation found for Nested "VkDirectDriverLoadingInfoLUNARG" "pfnGetInstanceProcAddr"
-    pfnGetInstanceProcAddr :: PFN_vkGetInstanceProcAddr
+  , -- | @pfnGetInstanceProcAddr@ is a 'PFN_vkGetInstanceProcAddrLUNARG' pointer
+    -- to the driver 'Vulkan.Core10.DeviceInitialization.getInstanceProcAddr'
+    -- function.
+    pfnGetInstanceProcAddr :: PFN_vkGetInstanceProcAddrLUNARG
   }
   deriving (Typeable, Eq)
 #if defined(GENERIC_INSTANCES)
@@ -188,7 +192,7 @@
     poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG)
     poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
     poke ((p `plusPtr` 16 :: Ptr DirectDriverLoadingFlagsLUNARG)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr PFN_vkGetInstanceProcAddr)) (pfnGetInstanceProcAddr)
+    poke ((p `plusPtr` 24 :: Ptr PFN_vkGetInstanceProcAddrLUNARG)) (pfnGetInstanceProcAddr)
     f
   cStructSize = 32
   cStructAlignment = 8
@@ -196,13 +200,13 @@
     poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG)
     poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
     poke ((p `plusPtr` 16 :: Ptr DirectDriverLoadingFlagsLUNARG)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr PFN_vkGetInstanceProcAddr)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr PFN_vkGetInstanceProcAddrLUNARG)) (zero)
     f
 
 instance FromCStruct DirectDriverLoadingInfoLUNARG where
   peekCStruct p = do
     flags <- peek @DirectDriverLoadingFlagsLUNARG ((p `plusPtr` 16 :: Ptr DirectDriverLoadingFlagsLUNARG))
-    pfnGetInstanceProcAddr <- peek @PFN_vkGetInstanceProcAddr ((p `plusPtr` 24 :: Ptr PFN_vkGetInstanceProcAddr))
+    pfnGetInstanceProcAddr <- peek @PFN_vkGetInstanceProcAddrLUNARG ((p `plusPtr` 24 :: Ptr PFN_vkGetInstanceProcAddrLUNARG))
     pure $ DirectDriverLoadingInfoLUNARG
              flags pfnGetInstanceProcAddr
 
@@ -221,6 +225,15 @@
 -- | VkDirectDriverLoadingListLUNARG - Structure specifying additional
 -- drivers to load
 --
+-- = Description
+--
+-- When creating a Vulkan instance for which additional drivers are to be
+-- included, add a 'DirectDriverLoadingListLUNARG' structure to the pNext
+-- chain of the 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo'
+-- structure, and include in it the list of 'DirectDriverLoadingInfoLUNARG'
+-- structures which contain the information necessary to load additional
+-- drivers.
+--
 -- == Valid Usage (Implicit)
 --
 -- = See Also
@@ -229,10 +242,15 @@
 -- 'DirectDriverLoadingInfoLUNARG', 'DirectDriverLoadingModeLUNARG',
 -- 'Vulkan.Core10.Enums.StructureType.StructureType'
 data DirectDriverLoadingListLUNARG = DirectDriverLoadingListLUNARG
-  { -- | #VUID-VkDirectDriverLoadingListLUNARG-mode-parameter# @mode@ /must/ be a
+  { -- | @mode@ controls the mode in which to load the provided drivers.
+    --
+    -- #VUID-VkDirectDriverLoadingListLUNARG-mode-parameter# @mode@ /must/ be a
     -- valid 'DirectDriverLoadingModeLUNARG' value
     mode :: DirectDriverLoadingModeLUNARG
-  , -- | #VUID-VkDirectDriverLoadingListLUNARG-pDrivers-parameter# @pDrivers@
+  , -- | @pDrivers@ is a pointer to an array of @driverCount@
+    -- 'DirectDriverLoadingInfoLUNARG' structures.
+    --
+    -- #VUID-VkDirectDriverLoadingListLUNARG-pDrivers-parameter# @pDrivers@
     -- /must/ be a valid pointer to an array of @driverCount@ valid
     -- 'DirectDriverLoadingInfoLUNARG' structures
     drivers :: Vector DirectDriverLoadingInfoLUNARG
@@ -327,10 +345,12 @@
 newtype DirectDriverLoadingModeLUNARG = DirectDriverLoadingModeLUNARG Int32
   deriving newtype (Eq, Ord, Storable, Zero)
 
--- No documentation found for Nested "VkDirectDriverLoadingModeLUNARG" "VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG"
+-- | 'DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG' specifies that the
+-- provided drivers are used instead of the system-loaded drivers.
 pattern DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG = DirectDriverLoadingModeLUNARG 0
 
--- No documentation found for Nested "VkDirectDriverLoadingModeLUNARG" "VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG"
+-- | 'DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG' specifies that the
+-- provided drivers are used in addition to the system-loaded drivers.
 pattern DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG = DirectDriverLoadingModeLUNARG 1
 
 {-# COMPLETE
@@ -374,14 +394,29 @@
       conNameDirectDriverLoadingModeLUNARG
       DirectDriverLoadingModeLUNARG
 
-type FN_vkGetInstanceProcAddr = Ptr Instance_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
--- | PFN_vkGetInstanceProcAddr - Type definition for vkGetInstanceProcAddr
+type FN_vkGetInstanceProcAddrLUNARG = Ptr Instance_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
+-- | PFN_vkGetInstanceProcAddrLUNARG - Type definition for
+-- vkGetInstanceProcAddr
 --
+-- = Description
+--
+-- This type is compatible with the type of a pointer to the
+-- 'Vulkan.Core10.DeviceInitialization.getInstanceProcAddr' command, but is
+-- used only to specify device driver addresses in
+-- 'DirectDriverLoadingInfoLUNARG'::@pfnGetInstanceProcAddr@.
+--
+-- Note
+--
+-- This type exists only because of limitations in the XML schema and
+-- processing scripts, and its name may change in the future. Ideally we
+-- would use the @PFN_vkGetInstanceProcAddr@ type generated in the
+-- @vulkan_core.h@ header.
+--
 -- = See Also
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_LUNARG_direct_driver_loading VK_LUNARG_direct_driver_loading>,
 -- 'DirectDriverLoadingInfoLUNARG'
-type PFN_vkGetInstanceProcAddr = FunPtr FN_vkGetInstanceProcAddr
+type PFN_vkGetInstanceProcAddrLUNARG = FunPtr FN_vkGetInstanceProcAddrLUNARG
 
 
 type LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION = 1
diff --git a/src/Vulkan/Extensions/VK_LUNARG_direct_driver_loading.hs-boot b/src/Vulkan/Extensions/VK_LUNARG_direct_driver_loading.hs-boot
--- a/src/Vulkan/Extensions/VK_LUNARG_direct_driver_loading.hs-boot
+++ b/src/Vulkan/Extensions/VK_LUNARG_direct_driver_loading.hs-boot
@@ -56,7 +56,7 @@
 --
 -- == New Function Pointers
 --
--- -   'PFN_vkGetInstanceProcAddr'
+-- -   'PFN_vkGetInstanceProcAddrLUNARG'
 --
 -- == New Enums
 --
@@ -86,7 +86,7 @@
 --
 -- == See Also
 --
--- 'PFN_vkGetInstanceProcAddr', 'DirectDriverLoadingFlagsLUNARG',
+-- 'PFN_vkGetInstanceProcAddrLUNARG', 'DirectDriverLoadingFlagsLUNARG',
 -- 'DirectDriverLoadingInfoLUNARG', 'DirectDriverLoadingListLUNARG',
 -- 'DirectDriverLoadingModeLUNARG'
 --
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
@@ -1178,7 +1178,8 @@
 --
 -- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-06887# If the current
 --     render pass instance uses a depth\/stencil attachment with a
---     read-only layout for the stencil aspect and stencil test is enabled,
+--     read-only layout for the stencil aspect, both front and back
+--     @writeMask@ are not zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
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
@@ -804,7 +804,8 @@
 --
 -- -   #VUID-vkCmdDrawMeshTasksNV-None-06887# If the current render pass
 --     instance uses a depth\/stencil attachment with a read-only layout
---     for the stencil aspect and stencil test is enabled,
+--     for the stencil aspect, both front and back @writeMask@ are not
+--     zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -2536,7 +2537,8 @@
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-06887# If the current render
 --     pass instance uses a depth\/stencil attachment with a read-only
---     layout for the stencil aspect and stencil test is enabled,
+--     layout for the stencil aspect, both front and back @writeMask@ are
+--     not zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
@@ -4319,7 +4321,8 @@
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-06887# If the current
 --     render pass instance uses a depth\/stencil attachment with a
---     read-only layout for the stencil aspect and stencil test is enabled,
+--     read-only layout for the stencil aspect, both front and back
+--     @writeMask@ are not zero, and stencil test is enabled,
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
 --     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
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 = 236
+pattern HEADER_VERSION = 237
 
 
 pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 3 236
+pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 3 237
 
 
 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.24.1
+version:        3.24.2
 synopsis:       Bindings to the Vulkan graphics API.
 description:    Please see [the readme](https://github.com/expipiplus1/vulkan/#readme)
 category:       Graphics
@@ -409,7 +409,9 @@
       Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
       Vulkan.Extensions.VK_EXT_subgroup_size_control
       Vulkan.Extensions.VK_EXT_subpass_merge_feedback
+      Vulkan.Extensions.VK_EXT_surface_maintenance1
       Vulkan.Extensions.VK_EXT_swapchain_colorspace
+      Vulkan.Extensions.VK_EXT_swapchain_maintenance1
       Vulkan.Extensions.VK_EXT_texel_buffer_alignment
       Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr
       Vulkan.Extensions.VK_EXT_tooling_info
