diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,9 @@
 
 ## WIP
 
+## [3.6.7] - 2020-09-25
+  - Bump API version to v1.2.154
+
 ## [3.6.6] - 2020-08-27
   - Bump API version to 1.2.152
   - NoDuplicateRecordFields for Vulkan.Dynamic
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
@@ -85,11 +85,14 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (BindShaderGroupIndirectCommandNV)
 import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (BindSparseInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (BindVertexBufferIndirectCommandNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (BlitImageInfo2KHR)
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (BufferCopy)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (BufferCopy2KHR)
 import {-# SOURCE #-} Vulkan.Core10.Buffer (BufferCreateInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_buffer_device_address (BufferDeviceAddressCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferDeviceAddressInfo)
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (BufferImageCopy)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (BufferImageCopy2KHR)
 import {-# SOURCE #-} Vulkan.Core10.OtherTypes (BufferMemoryBarrier)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (BufferMemoryRequirementsInfo2)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferOpaqueCaptureAddressCreateInfo)
@@ -114,7 +117,11 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix (CooperativeMatrixPropertiesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureToMemoryInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (CopyBufferInfo2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (CopyBufferToImageInfo2KHR)
 import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (CopyDescriptorSet)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (CopyImageInfo2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (CopyImageToBufferInfo2KHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyMemoryToAccelerationStructureInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_win32 (D3D12FenceSubmitInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerMarkerInfoEXT)
@@ -231,7 +238,9 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_headless_surface (HeadlessSurfaceCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_MVK_ios_surface (IOSSurfaceCreateInfoMVK)
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ImageBlit)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (ImageBlit2KHR)
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ImageCopy)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (ImageCopy2KHR)
 import {-# SOURCE #-} Vulkan.Core10.Image (ImageCreateInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierExplicitCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierListCreateInfoEXT)
@@ -244,6 +253,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface (ImagePipeSurfaceCreateInfoFUCHSIA)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (ImagePlaneMemoryRequirementsInfo)
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ImageResolve)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (ImageResolve2KHR)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageSparseMemoryRequirementsInfo2)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage (ImageStencilUsageCreateInfo)
 import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (ImageSubresource)
@@ -377,6 +387,8 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetPropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PhysicalDevicePrivateDataFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceProperties2)
@@ -507,6 +519,7 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (RenderPassMultiviewCreateInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (RenderPassSampleLocationsBeginInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_render_pass_transform (RenderPassTransformBeginInfoQCOM)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (ResolveImageInfo2KHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
 import {-# SOURCE #-} Vulkan.Core10.Sampler (SamplerCreateInfo)
@@ -802,6 +815,7 @@
   Extends DeviceCreateInfo DeviceDiagnosticsConfigCreateInfoNV = ()
   Extends DeviceCreateInfo PhysicalDeviceRobustness2FeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceImageRobustnessFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDevicePortabilitySubsetFeaturesKHR = ()
   Extends DeviceCreateInfo PhysicalDevice4444FormatsFeaturesEXT = ()
   Extends DeviceQueueCreateInfo DeviceQueueGlobalPriorityCreateInfoEXT = ()
   Extends FenceCreateInfo ExportFenceCreateInfo = ()
@@ -919,6 +933,7 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceDiagnosticsConfigFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceRobustness2FeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceImageRobustnessFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDevicePortabilitySubsetFeaturesKHR = ()
   Extends PhysicalDeviceFeatures2 PhysicalDevice4444FormatsFeaturesEXT = ()
   Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceExternalImageFormatInfo = ()
   Extends PhysicalDeviceImageFormatInfo2 ImageFormatListCreateInfo = ()
@@ -968,6 +983,7 @@
   Extends PhysicalDeviceProperties2 PhysicalDeviceVulkan12Properties = ()
   Extends PhysicalDeviceProperties2 PhysicalDeviceCustomBorderColorPropertiesEXT = ()
   Extends PhysicalDeviceProperties2 PhysicalDeviceRobustness2PropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDevicePortabilitySubsetPropertiesKHR = ()
   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveInfoEXT = ()
   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveWin32InfoEXT = ()
   Extends PipelineColorBlendStateCreateInfo PipelineColorBlendAdvancedStateCreateInfoEXT = ()
@@ -1381,6 +1397,8 @@
   STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT -> go @PhysicalDeviceRobustness2FeaturesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT -> go @PhysicalDeviceRobustness2PropertiesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT -> go @PhysicalDeviceImageRobustnessFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR -> go @PhysicalDevicePortabilitySubsetFeaturesKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR -> go @PhysicalDevicePortabilitySubsetPropertiesKHR
   STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT -> go @PhysicalDevice4444FormatsFeaturesEXT
   t -> throwIO $ IOError Nothing InvalidArgument "peekChainHead" ("Unrecognized struct type: " <> show t) Nothing Nothing
  where
@@ -1678,6 +1696,8 @@
 {-# complete (::&) :: PhysicalDeviceRobustness2FeaturesEXT #-}
 {-# complete (::&) :: PhysicalDeviceRobustness2PropertiesEXT #-}
 {-# complete (::&) :: PhysicalDeviceImageRobustnessFeaturesEXT #-}
+{-# complete (::&) :: PhysicalDevicePortabilitySubsetFeaturesKHR #-}
+{-# complete (::&) :: PhysicalDevicePortabilitySubsetPropertiesKHR #-}
 {-# complete (::&) :: PhysicalDevice4444FormatsFeaturesEXT #-}
 
 -- | View the head and tail of a 'Chain', see '::&'
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
@@ -9209,8 +9209,11 @@
 -- = See Also
 --
 -- 'BufferImageCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferImageCopy2KHR',
 -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags', 'ImageBlit',
--- 'ImageCopy', 'ImageResolve'
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageBlit2KHR', 'ImageCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageCopy2KHR', 'ImageResolve',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageResolve2KHR'
 data ImageSubresourceLayers = ImageSubresourceLayers
   { -- | @aspectMask@ is a combination of
     -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits', selecting
diff --git a/src/Vulkan/Core10/DescriptorSet.hs b/src/Vulkan/Core10/DescriptorSet.hs
--- a/src/Vulkan/Core10/DescriptorSet.hs
+++ b/src/Vulkan/Core10/DescriptorSet.hs
@@ -981,6 +981,13 @@
 --     or (for three-plane formats only)
 --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
 --
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@mutableComparisonSamplers@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', then @sampler@ /must/
+--     have been created with
+--     'Vulkan.Core10.Sampler.SamplerCreateInfo'::@compareEnable@ set to
+--     'Vulkan.Core10.FundamentalTypes.FALSE'.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   Both of @imageView@, and @sampler@ that are valid handles of
diff --git a/src/Vulkan/Core10/Device.hs b/src/Vulkan/Core10/Device.hs
--- a/src/Vulkan/Core10/Device.hs
+++ b/src/Vulkan/Core10/Device.hs
@@ -118,6 +118,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PhysicalDevicePrivateDataFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingFeaturesKHR)
@@ -591,6 +592,11 @@
 --     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@shaderOutputLayer@
 --     /must/ both be 'Vulkan.Core10.FundamentalTypes.TRUE'
 --
+-- -   If the @VK_KHR_portability_subset@ extension is included in
+--     @pProperties@ of
+--     'Vulkan.Core10.ExtensionDiscovery.enumerateDeviceExtensionProperties',
+--     @ppEnabledExtensions@ /must/ include \"VK_KHR_portability_subset\".
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -641,6 +647,7 @@
 --     'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR',
 --     'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
 --     'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR',
 --     'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT',
 --     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
 --     'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingFeaturesKHR',
@@ -745,6 +752,7 @@
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b
   extends _ f
     | Just Refl <- eqT @e @PhysicalDevice4444FormatsFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePortabilitySubsetFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceImageRobustnessFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceRobustness2FeaturesEXT = Just f
     | Just Refl <- eqT @e @DeviceDiagnosticsConfigCreateInfoNV = Just f
diff --git a/src/Vulkan/Core10/DeviceInitialization.hs b/src/Vulkan/Core10/DeviceInitialization.hs
--- a/src/Vulkan/Core10/DeviceInitialization.hs
+++ b/src/Vulkan/Core10/DeviceInitialization.hs
@@ -4280,14 +4280,18 @@
     standardSampleLocations :: Bool
   , -- | @optimalBufferCopyOffsetAlignment@ is the optimal buffer offset
     -- alignment in bytes for
-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage' and
+    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyBufferToImage2KHR',
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
+    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyImageToBuffer2KHR', and
     -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. The per
     -- texel alignment requirements are enforced, but applications /should/ use
     -- the optimal alignment for optimal performance and power use.
     optimalBufferCopyOffsetAlignment :: DeviceSize
   , -- | @optimalBufferCopyRowPitchAlignment@ is the optimal buffer row pitch
     -- alignment in bytes for
-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage' and
+    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyBufferToImage2KHR',
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
+    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyImageToBuffer2KHR', and
     -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. Row pitch is
     -- the number of bytes between texels with the same X coordinate in
     -- adjacent rows (Y coordinates differ by one). The per texel alignment
diff --git a/src/Vulkan/Core10/Enums/Filter.hs b/src/Vulkan/Core10/Enums/Filter.hs
--- a/src/Vulkan/Core10/Enums/Filter.hs
+++ b/src/Vulkan/Core10/Enums/Filter.hs
@@ -28,6 +28,7 @@
 --
 -- = See Also
 --
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BlitImageInfo2KHR',
 -- 'Vulkan.Core10.Sampler.SamplerCreateInfo',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
diff --git a/src/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs b/src/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs
--- a/src/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs
+++ b/src/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs
@@ -84,11 +84,13 @@
 --
 -- -   'FORMAT_FEATURE_BLIT_SRC_BIT' specifies that an image /can/ be used
 --     as @srcImage@ for the
---     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' command.
+--     'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' commands.
 --
 -- -   'FORMAT_FEATURE_BLIT_DST_BIT' specifies that an image /can/ be used
 --     as @dstImage@ for the
---     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' command.
+--     'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' commands.
 --
 -- -   'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' specifies that if
 --     'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' is also set, an image view /can/
@@ -98,6 +100,7 @@
 --     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'.
 --     If 'FORMAT_FEATURE_BLIT_SRC_BIT' is also set, an image can be used
 --     as the @srcImage@ to
+--     'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
 --     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' with a @filter@
 --     of 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'. This bit /must/ only
 --     be exposed for formats that also support the
@@ -279,12 +282,14 @@
 -- input attachment.
 pattern FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = FormatFeatureFlagBits 0x00000200
 -- | 'FORMAT_FEATURE_BLIT_SRC_BIT' specifies that an image /can/ be used as
--- @srcImage@ for the 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
--- command.
+-- @srcImage@ for the
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' commands.
 pattern FORMAT_FEATURE_BLIT_SRC_BIT = FormatFeatureFlagBits 0x00000400
 -- | 'FORMAT_FEATURE_BLIT_DST_BIT' specifies that an image /can/ be used as
--- @dstImage@ for the 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
--- command.
+-- @dstImage@ for the
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' commands.
 pattern FORMAT_FEATURE_BLIT_DST_BIT = FormatFeatureFlagBits 0x00000800
 -- | 'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' specifies that if
 -- 'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' is also set, an image view /can/ be
@@ -292,9 +297,10 @@
 -- 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', or @mipmapMode@ set to
 -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'. If
 -- 'FORMAT_FEATURE_BLIT_SRC_BIT' is also set, an image can be used as the
--- @srcImage@ to 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' with a
--- @filter@ of 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'. This bit /must/
--- only be exposed for formats that also support the
+-- @srcImage@ to 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR'
+-- and 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' with a @filter@
+-- of 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'. This bit /must/ only be
+-- exposed for formats that also support the
 -- 'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' or 'FORMAT_FEATURE_BLIT_SRC_BIT'.
 --
 -- If the format being queried is a depth\/stencil format, this bit only
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
@@ -66,9 +66,14 @@
 -- 'Vulkan.Core10.Pass.AttachmentReference',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BlitImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyBufferToImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyImageToBufferInfo2KHR',
 -- 'Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
 -- 'Vulkan.Core10.Image.ImageCreateInfo',
 -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ResolveImageInfo2KHR',
 -- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
diff --git a/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs b/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs
--- a/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs
+++ b/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs
@@ -113,9 +113,11 @@
 --     including
 --     'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults'
 --
--- -   'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
+-- -   'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
 --
--- -   'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage'
+-- -   'Vulkan.Extensions.VK_KHR_copy_commands2.cmdResolveImage2KHR' and
+--     'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage'
 --
 -- -   All
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,
diff --git a/src/Vulkan/Core10/Enums/PrimitiveTopology.hs b/src/Vulkan/Core10/Enums/PrimitiveTopology.hs
--- a/src/Vulkan/Core10/Enums/PrimitiveTopology.hs
+++ b/src/Vulkan/Core10/Enums/PrimitiveTopology.hs
@@ -87,7 +87,12 @@
 pattern PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = PrimitiveTopology 4
 -- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_FAN' specifies a series of
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-fans connected triangle primitives>
--- with all triangles sharing a common vertex.
+-- with all triangles sharing a common vertex. If the
+-- @VK_KHR_portability_subset@ extension is enabled, and
+-- 'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@triangleFans@
+-- is 'Vulkan.Core10.FundamentalTypes.FALSE', then triangle fans are not
+-- supported by the implementation, and 'PRIMITIVE_TOPOLOGY_TRIANGLE_FAN'
+-- /must/ not be used.
 pattern PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = PrimitiveTopology 5
 -- | 'PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY' specifies a series of
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-line-lists-with-adjacency separate line primitives with adjacency>.
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
@@ -50,6 +50,17 @@
                                                         , STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
                                                         , STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR
+                                                        , STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR
+                                                        , STRUCTURE_TYPE_IMAGE_BLIT_2_KHR
+                                                        , STRUCTURE_TYPE_IMAGE_COPY_2_KHR
+                                                        , STRUCTURE_TYPE_BUFFER_COPY_2_KHR
+                                                        , STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR
+                                                        , STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR
+                                                        , STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR
+                                                        , STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR
+                                                        , STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR
+                                                        , STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT
@@ -172,6 +183,8 @@
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV
                                                         , STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR
                                                         , STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT
                                                         , STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT
                                                         , STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT
@@ -514,9 +527,12 @@
 -- 'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo',
 -- 'Vulkan.Core10.SparseResourceMemoryManagement.BindSparseInfo',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BlitImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferCopy2KHR',
 -- 'Vulkan.Core10.Buffer.BufferCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferDeviceAddressInfo',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferImageCopy2KHR',
 -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.BufferMemoryRequirementsInfo2',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo',
@@ -534,7 +550,11 @@
 -- 'Vulkan.Extensions.VK_NV_cooperative_matrix.CooperativeMatrixPropertiesNV',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureToMemoryInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyBufferInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyBufferToImageInfo2KHR',
 -- 'Vulkan.Core10.DescriptorSet.CopyDescriptorSet',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyImageToBufferInfo2KHR',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyMemoryToAccelerationStructureInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.D3D12FenceSubmitInfoKHR',
 -- 'Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerMarkerInfoEXT',
@@ -626,6 +646,8 @@
 -- 'Vulkan.Extensions.VK_EXT_hdr_metadata.HdrMetadataEXT',
 -- 'Vulkan.Extensions.VK_EXT_headless_surface.HeadlessSurfaceCreateInfoEXT',
 -- 'Vulkan.Extensions.VK_MVK_ios_surface.IOSSurfaceCreateInfoMVK',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageBlit2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageCopy2KHR',
 -- 'Vulkan.Core10.Image.ImageCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
 -- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT',
@@ -636,6 +658,7 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2',
 -- 'Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface.ImagePipeSurfaceCreateInfoFUCHSIA',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageResolve2KHR',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageSparseMemoryRequirementsInfo2',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR',
@@ -753,6 +776,8 @@
 -- 'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
 -- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
+-- 'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR',
+-- 'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetPropertiesKHR',
 -- 'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
@@ -872,6 +897,7 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT',
 -- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ResolveImageInfo2KHR',
 -- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT',
 -- 'Vulkan.Core10.Sampler.SamplerCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT',
@@ -1027,6 +1053,28 @@
 pattern STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = StructureType 1000346000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = StructureType 1000340000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR"
+pattern STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = StructureType 1000337010
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR"
+pattern STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = StructureType 1000337009
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR"
+pattern STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = StructureType 1000337008
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR"
+pattern STRUCTURE_TYPE_IMAGE_COPY_2_KHR = StructureType 1000337007
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR"
+pattern STRUCTURE_TYPE_BUFFER_COPY_2_KHR = StructureType 1000337006
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR"
+pattern STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = StructureType 1000337005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR"
+pattern STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = StructureType 1000337004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR"
+pattern STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = StructureType 1000337003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR"
+pattern STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = StructureType 1000337002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR"
+pattern STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = StructureType 1000337001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR"
+pattern STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = StructureType 1000337000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = StructureType 1000335000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT"
@@ -1271,6 +1319,10 @@
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = StructureType 1000164001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"
 pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = StructureType 1000164000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR = StructureType 1000163001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR = StructureType 1000163000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"
 pattern STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = StructureType 1000160001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"
@@ -1862,6 +1914,17 @@
              STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
              STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT,
+             STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR,
+             STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR,
+             STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
+             STRUCTURE_TYPE_IMAGE_COPY_2_KHR,
+             STRUCTURE_TYPE_BUFFER_COPY_2_KHR,
+             STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR,
+             STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR,
+             STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR,
+             STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR,
+             STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR,
+             STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT,
@@ -1984,6 +2047,8 @@
              STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV,
              STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR,
              STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT,
              STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT,
              STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT,
@@ -2308,6 +2373,17 @@
     STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO -> showString "STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"
     STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT"
     STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT"
+    STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR -> showString "STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR"
+    STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR -> showString "STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR"
+    STRUCTURE_TYPE_IMAGE_BLIT_2_KHR -> showString "STRUCTURE_TYPE_IMAGE_BLIT_2_KHR"
+    STRUCTURE_TYPE_IMAGE_COPY_2_KHR -> showString "STRUCTURE_TYPE_IMAGE_COPY_2_KHR"
+    STRUCTURE_TYPE_BUFFER_COPY_2_KHR -> showString "STRUCTURE_TYPE_BUFFER_COPY_2_KHR"
+    STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR -> showString "STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR"
+    STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR -> showString "STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR"
+    STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR -> showString "STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR"
+    STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR -> showString "STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR"
+    STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR -> showString "STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR"
+    STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR -> showString "STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR"
     STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT"
     STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT"
     STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT"
@@ -2430,6 +2506,8 @@
     STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV"
     STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV"
     STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR"
     STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"
     STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"
     STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
@@ -2754,6 +2832,17 @@
                             , ("STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO", pure STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO)
                             , ("STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT)
                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR", pure STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR)
+                            , ("STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR", pure STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR)
+                            , ("STRUCTURE_TYPE_IMAGE_BLIT_2_KHR", pure STRUCTURE_TYPE_IMAGE_BLIT_2_KHR)
+                            , ("STRUCTURE_TYPE_IMAGE_COPY_2_KHR", pure STRUCTURE_TYPE_IMAGE_COPY_2_KHR)
+                            , ("STRUCTURE_TYPE_BUFFER_COPY_2_KHR", pure STRUCTURE_TYPE_BUFFER_COPY_2_KHR)
+                            , ("STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR", pure STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR)
+                            , ("STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR", pure STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR)
+                            , ("STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR", pure STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR)
+                            , ("STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR", pure STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR)
+                            , ("STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR", pure STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR)
+                            , ("STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR", pure STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR)
                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT)
                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT)
                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT)
@@ -2876,6 +2965,8 @@
                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV)
                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV)
                             , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR)
                             , ("STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
                             , ("STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT)
                             , ("STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT", pure STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT)
diff --git a/src/Vulkan/Core10/Event.hs b/src/Vulkan/Core10/Event.hs
--- a/src/Vulkan/Core10/Event.hs
+++ b/src/Vulkan/Core10/Event.hs
@@ -75,6 +75,15 @@
 --
 -- When created, the event object is in the unsignaled state.
 --
+-- == Valid Usage
+--
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@events@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', then the implementation
+--     does not support
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-events events>,
+--     and 'createEvent' /must/ not be used.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
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
@@ -118,9 +118,13 @@
 -- = See Also
 --
 -- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferImageCopy2KHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.ImageBlit',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageBlit2KHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.ImageCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageCopy2KHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.ImageResolve',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageResolve2KHR',
 -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind'
 data Offset3D = Offset3D
   { -- | @x@ is the x offset.
@@ -239,10 +243,13 @@
 -- = See Also
 --
 -- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferImageCopy2KHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.ImageCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageCopy2KHR',
 -- 'Vulkan.Core10.Image.ImageCreateInfo',
 -- 'Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
 -- 'Vulkan.Core10.CommandBufferBuilding.ImageResolve',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageResolve2KHR',
 -- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties',
 -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties',
 -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind'
@@ -434,6 +441,7 @@
 -- 'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR',
 -- 'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
 -- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
+-- 'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
@@ -600,8 +608,10 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
 -- 'Vulkan.Core10.CommandBufferBuilding.BufferCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferCopy2KHR',
 -- 'Vulkan.Core10.Buffer.BufferCreateInfo',
 -- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferImageCopy2KHR',
 -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
 -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
diff --git a/src/Vulkan/Core10/FundamentalTypes.hs-boot b/src/Vulkan/Core10/FundamentalTypes.hs-boot
--- a/src/Vulkan/Core10/FundamentalTypes.hs-boot
+++ b/src/Vulkan/Core10/FundamentalTypes.hs-boot
@@ -83,8 +83,10 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
 -- 'Vulkan.Core10.CommandBufferBuilding.BufferCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferCopy2KHR',
 -- 'Vulkan.Core10.Buffer.BufferCreateInfo',
 -- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferImageCopy2KHR',
 -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
 -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
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
@@ -478,6 +478,7 @@
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers',
 -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureIndirectKHR',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureKHR',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
@@ -488,9 +489,13 @@
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdCopyAccelerationStructureNV',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyAccelerationStructureToMemoryKHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyBuffer2KHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyBufferToImage2KHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyImage2KHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyImageToBuffer2KHR',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyMemoryToAccelerationStructureKHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
 -- 'Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerBeginEXT',
@@ -537,6 +542,7 @@
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdResetEvent',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdResolveImage2KHR',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetBlendConstants',
 -- 'Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.cmdSetCheckpointNV',
 -- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetCoarseSampleOrderNV',
@@ -657,6 +663,9 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.BufferMemoryRequirementsInfo2',
 -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyBufferInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyBufferToImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyImageToBufferInfo2KHR',
 -- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
 -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
@@ -729,12 +738,17 @@
 -- = See Also
 --
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BlitImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyBufferToImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyImageInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.CopyImageToBufferInfo2KHR',
 -- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
 -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageSparseMemoryRequirementsInfo2',
 -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo',
+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ResolveImageInfo2KHR',
 -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBindInfo',
 -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageOpaqueMemoryBindInfo',
 -- 'Vulkan.Core10.MemoryManagement.bindImageMemory',
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
@@ -310,6 +310,23 @@
 --     @arrayLayers@ specified in 'ImageCreateInfo' when @image@ was
 --     created
 --
+-- -   If @format@ is a color format, the @aspectMask@ member of
+--     @pSubresource@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   If @format@ has a depth component, the @aspectMask@ member of
+--     @pSubresource@ /must/ contain
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
+--
+-- -   If @format@ has a stencil component, the @aspectMask@ member of
+--     @pSubresource@ /must/ contain
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--
+-- -   If @format@ does not contain a stencil or depth component, the
+--     @aspectMask@ member of @pSubresource@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--
 -- -   If the @tiling@ of the @image@ is
 --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and its
 --     @format@ is a
@@ -1223,6 +1240,18 @@
 -- -   If @flags@ contains
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
 --     @mipLevels@ /must/ be @1@
+--
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@imageView2DOn3DImage@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @flags@ /must/ not
+--     contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'.
+--
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@multisampleArrayImage@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', and @samples@ is not
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT', then
+--     @arrayLayers@ /must/ be @1@.
 --
 -- = Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Core10/ImageView.hs b/src/Vulkan/Core10/ImageView.hs
--- a/src/Vulkan/Core10/ImageView.hs
+++ b/src/Vulkan/Core10/ImageView.hs
@@ -1069,6 +1069,20 @@
 --     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', the remaining
 --     number of layers /must/ be a multiple of @6@
 --
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@imageViewFormatSwizzle@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', all elements of
+--     @components@ /must/ be
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'.
+--
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@imageViewFormatReinterpretation@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', the
+--     'Vulkan.Core10.Enums.Format.Format' in @format@ /must/ not contain a
+--     different number of components, or a different number of bits in
+--     each component, than the format of the 'Vulkan.Core10.Handles.Image'
+--     in @image@.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
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
@@ -37,8 +37,6 @@
                                , PrimitiveTopology(..)
                                , CompareOp(..)
                                , PolygonMode(..)
-                               , CullModeFlagBits(..)
-                               , CullModeFlags
                                , FrontFace(..)
                                , BlendFactor(..)
                                , BlendOp(..)
@@ -46,6 +44,8 @@
                                , LogicOp(..)
                                , VertexInputRate(..)
                                , DynamicState(..)
+                               , CullModeFlagBits(..)
+                               , CullModeFlags
                                , ShaderStageFlagBits(..)
                                , ShaderStageFlags
                                , PipelineCreateFlagBits(..)
@@ -1387,30 +1387,36 @@
 -- | VkVertexInputBindingDescription - Structure specifying vertex input
 -- binding description
 --
+-- == Valid Usage
+--
+-- -   @binding@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+--
+-- -   @stride@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindingStride@
+--
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, @stride@
+--     /must/ be a multiple of, and at least as large as,
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetPropertiesKHR'::@minVertexInputBindingStrideAlignment@.
+--
 -- == Valid Usage (Implicit)
 --
+-- -   @inputRate@ /must/ be a valid
+--     'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate' value
+--
 -- = See Also
 --
 -- 'PipelineVertexInputStateCreateInfo',
 -- 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'
 data VertexInputBindingDescription = VertexInputBindingDescription
   { -- | @binding@ is the binding number that this structure describes.
-    --
-    -- @binding@ /must/ be less than
-    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
     binding :: Word32
   , -- | @stride@ is the distance in bytes between two consecutive elements
     -- within the buffer.
-    --
-    -- @stride@ /must/ be less than or equal to
-    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindingStride@
     stride :: Word32
   , -- | @inputRate@ is a 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'
     -- value specifying whether vertex attribute addressing is a function of
     -- the vertex index or of the instance index.
-    --
-    -- @inputRate@ /must/ be a valid
-    -- 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate' value
     inputRate :: VertexInputRate
   }
   deriving (Typeable, Eq)
@@ -1458,41 +1464,50 @@
 -- | VkVertexInputAttributeDescription - Structure specifying vertex input
 -- attribute description
 --
+-- == Valid Usage
+--
+-- -   @location@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
+--
+-- -   @binding@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+--
+-- -   @offset@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributeOffset@
+--
+-- -   @format@ /must/ be allowed as a vertex buffer format, as specified
+--     by the
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_VERTEX_BUFFER_BIT'
+--     flag in
+--     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
+--     returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
+--
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@vertexAttributeAccessBeyondStride@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', the sum of @offset@ plus
+--     the size of the vertex attribute data described by @format@ /must/
+--     not be greater than @stride@ in the 'VertexInputBindingDescription'
+--     referenced in @binding@.
+--
 -- == Valid Usage (Implicit)
 --
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
 -- = See Also
 --
 -- 'Vulkan.Core10.Enums.Format.Format',
 -- 'PipelineVertexInputStateCreateInfo'
 data VertexInputAttributeDescription = VertexInputAttributeDescription
   { -- | @location@ is the shader binding location number for this attribute.
-    --
-    -- @location@ /must/ be less than
-    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
     location :: Word32
   , -- | @binding@ is the binding number which this attribute takes its data
     -- from.
-    --
-    -- @binding@ /must/ be less than
-    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
     binding :: Word32
   , -- | @format@ is the size and type of the vertex attribute data.
-    --
-    -- @format@ /must/ be allowed as a vertex buffer format, as specified by
-    -- the
-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_VERTEX_BUFFER_BIT'
-    -- flag in
-    -- 'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
-    -- returned by
-    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
-    --
-    -- @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
     format :: Format
   , -- | @offset@ is a byte offset of this attribute relative to the start of an
     -- element in the vertex input binding.
-    --
-    -- @offset@ /must/ be less than or equal to
-    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributeOffset@
     offset :: Word32
   }
   deriving (Typeable, Eq)
@@ -1711,6 +1726,11 @@
 --     feature is not enabled, @topology@ /must/ not be
 --     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'
 --
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@triangleFans@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @topology@ /must/ not be
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_FAN'.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -2103,6 +2123,13 @@
 --     @polygonMode@ /must/ not be
 --     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
 --
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@pointPolygons@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', and
+--     @rasterizerDiscardEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE',
+--     @polygonMode@ /must/ not be
+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_POINT'.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -2550,6 +2577,20 @@
 --     or equal to
 --     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::advancedBlendMaxColorAttachments
 --
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @srcColorBlendFactor@
+--     /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'.
+--
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @dstColorBlendFactor@
+--     /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @srcColorBlendFactor@ /must/ be a valid
@@ -3018,6 +3059,16 @@
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBounds depth bounds testing>
 --     feature is not enabled, @depthBoundsTestEnable@ /must/ be
 --     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@separateStencilMaskRef@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', and the value of
+--     'PipelineDepthStencilStateCreateInfo'::@stencilTestEnable@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', and the value of
+--     'PipelineRasterizationStateCreateInfo'::@cullMode@ is
+--     'Vulkan.Core10.Enums.CullModeFlagBits.CULL_MODE_NONE', the value of
+--     @reference@ in each of the 'StencilOpState' structs in @front@ and
+--     @back@ /must/ be the same.
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Core10/Sampler.hs b/src/Vulkan/Core10/Sampler.hs
--- a/src/Vulkan/Core10/Sampler.hs
+++ b/src/Vulkan/Core10/Sampler.hs
@@ -302,6 +302,11 @@
 -- -   The absolute value of @mipLodBias@ /must/ be less than or equal to
 --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSamplerLodBias@
 --
+-- -   If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@samplerMipLodBias@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @mipLodBias@ /must/ be
+--     zero.
+--
 -- -   @maxLod@ /must/ be greater than or equal to @minLod@
 --
 -- -   If the
diff --git a/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs b/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs
--- a/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs
+++ b/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs
@@ -52,18 +52,10 @@
   deriving newtype (Eq, Ord, Storable, Zero, Bits)
 
 -- | 'PEER_MEMORY_FEATURE_COPY_SRC_BIT' specifies that the memory /can/ be
--- accessed as the source of a
--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', or
--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer' command.
+-- accessed as the source of any @vkCmdCopy*@ command.
 pattern PEER_MEMORY_FEATURE_COPY_SRC_BIT = PeerMemoryFeatureFlagBits 0x00000001
 -- | 'PEER_MEMORY_FEATURE_COPY_DST_BIT' specifies that the memory /can/ be
--- accessed as the destination of a
--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', or
--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer' command.
+-- accessed as the destination of any @vkCmdCopy*@ command.
 pattern PEER_MEMORY_FEATURE_COPY_DST_BIT = PeerMemoryFeatureFlagBits 0x00000002
 -- | 'PEER_MEMORY_FEATURE_GENERIC_SRC_BIT' specifies that the memory /can/ be
 -- read as any memory access type.
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs
--- a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs
@@ -524,7 +524,7 @@
 -- or the same Vulkan driver running on two logically different devices).
 --
 -- Khronos\' conformance testing can not guarantee that @deviceUUID@ values
--- are actually unique, so implementers should make their own best efforts
+-- are actually unique, so implementors should make their own best efforts
 -- to ensure this. In particular, hard-coded @deviceUUID@ values,
 -- especially all-@0@ bits, /should/ never be used.
 --
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
@@ -150,6 +150,8 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetPropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PhysicalDevicePrivateDataFeaturesEXT)
 import Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
 import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
@@ -642,6 +644,7 @@
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceFeatures2 e => b) -> Maybe b
   extends _ f
     | Just Refl <- eqT @e @PhysicalDevice4444FormatsFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePortabilitySubsetFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceImageRobustnessFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceRobustness2FeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDiagnosticsConfigFeaturesNV = Just f
@@ -781,6 +784,7 @@
 --     'Vulkan.Extensions.VK_EXT_pci_bus_info.PhysicalDevicePCIBusInfoPropertiesEXT',
 --     'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR',
 --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetPropertiesKHR',
 --     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
 --     'Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR',
 --     'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR',
@@ -832,6 +836,7 @@
   getNext PhysicalDeviceProperties2{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceProperties2 e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @PhysicalDevicePortabilitySubsetPropertiesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceRobustness2PropertiesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceCustomBorderColorPropertiesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceVulkan12Properties = Just f
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
--- a/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
@@ -1802,8 +1802,8 @@
     -- 'SubpassDescription2' structures describing each subpass.
     subpasses :: Vector (SomeStruct SubpassDescription2)
   , -- | @pDependencies@ is a pointer to an array of @dependencyCount@
-    -- 'Vulkan.Core10.Pass.SubpassDependency' structures describing
-    -- dependencies between pairs of subpasses.
+    -- 'SubpassDependency2' structures describing dependencies between pairs of
+    -- subpasses.
     dependencies :: Vector SubpassDependency2
   , -- | @pCorrelatedViewMasks@ is a pointer to an array of view masks indicating
     -- sets of views that /may/ be more efficient to render concurrently.
diff --git a/src/Vulkan/Dynamic.hs b/src/Vulkan/Dynamic.hs
--- a/src/Vulkan/Dynamic.hs
+++ b/src/Vulkan/Dynamic.hs
@@ -44,6 +44,7 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindBufferMemoryInfo)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindImageMemoryInfo)
 import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (BindSparseInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (BlitImageInfo2KHR)
 import {-# SOURCE #-} Vulkan.Core10.FundamentalTypes (Bool32)
 import {-# SOURCE #-} Vulkan.Core10.Handles (Buffer)
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (BufferCopy)
@@ -77,7 +78,11 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureToMemoryInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (CopyBufferInfo2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (CopyBufferToImageInfo2KHR)
 import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (CopyDescriptorSet)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (CopyImageInfo2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (CopyImageToBufferInfo2KHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyMemoryToAccelerationStructureInfoKHR)
 import {-# SOURCE #-} Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlags)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerMarkerInfoEXT)
@@ -277,6 +282,7 @@
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
 import {-# SOURCE #-} Vulkan.Core10.Pass (RenderPassCreateInfo)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (RenderPassCreateInfo2)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (ResolveImageInfo2KHR)
 import {-# SOURCE #-} Vulkan.Core10.Enums.Result (Result)
 import {-# SOURCE #-} Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
@@ -913,6 +919,12 @@
   , pVkDestroyPrivateDataSlotEXT :: FunPtr (Ptr Device_T -> PrivateDataSlotEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
   , pVkSetPrivateDataEXT :: FunPtr (Ptr Device_T -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> ("data" ::: Word64) -> IO Result)
   , pVkGetPrivateDataEXT :: FunPtr (Ptr Device_T -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> ("pData" ::: Ptr Word64) -> IO ())
+  , pVkCmdCopyBuffer2KHR :: FunPtr (Ptr CommandBuffer_T -> ("pCopyBufferInfo" ::: Ptr CopyBufferInfo2KHR) -> IO ())
+  , pVkCmdCopyImage2KHR :: FunPtr (Ptr CommandBuffer_T -> ("pCopyImageInfo" ::: Ptr CopyImageInfo2KHR) -> IO ())
+  , pVkCmdBlitImage2KHR :: FunPtr (Ptr CommandBuffer_T -> ("pBlitImageInfo" ::: Ptr BlitImageInfo2KHR) -> IO ())
+  , pVkCmdCopyBufferToImage2KHR :: FunPtr (Ptr CommandBuffer_T -> ("pCopyBufferToImageInfo" ::: Ptr CopyBufferToImageInfo2KHR) -> IO ())
+  , pVkCmdCopyImageToBuffer2KHR :: FunPtr (Ptr CommandBuffer_T -> ("pCopyImageToBufferInfo" ::: Ptr CopyImageToBufferInfo2KHR) -> IO ())
+  , pVkCmdResolveImage2KHR :: FunPtr (Ptr CommandBuffer_T -> ("pResolveImageInfo" ::: Ptr ResolveImageInfo2KHR) -> IO ())
   }
 
 deriving instance Eq DeviceCmds
@@ -957,7 +969,7 @@
     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
 
 foreign import ccall
 #if !defined(SAFE_FOREIGN_CALLS)
@@ -1275,6 +1287,12 @@
   vkDestroyPrivateDataSlotEXT <- getDeviceProcAddr' handle (Ptr "vkDestroyPrivateDataSlotEXT"#)
   vkSetPrivateDataEXT <- getDeviceProcAddr' handle (Ptr "vkSetPrivateDataEXT"#)
   vkGetPrivateDataEXT <- getDeviceProcAddr' handle (Ptr "vkGetPrivateDataEXT"#)
+  vkCmdCopyBuffer2KHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyBuffer2KHR"#)
+  vkCmdCopyImage2KHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyImage2KHR"#)
+  vkCmdBlitImage2KHR <- getDeviceProcAddr' handle (Ptr "vkCmdBlitImage2KHR"#)
+  vkCmdCopyBufferToImage2KHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyBufferToImage2KHR"#)
+  vkCmdCopyImageToBuffer2KHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyImageToBuffer2KHR"#)
+  vkCmdResolveImage2KHR <- getDeviceProcAddr' handle (Ptr "vkCmdResolveImage2KHR"#)
   pure $ DeviceCmds handle
     (castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetDeviceProcAddr)
     (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDevice)
@@ -1580,4 +1598,10 @@
     (castFunPtr @_ @(Ptr Device_T -> PrivateDataSlotEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyPrivateDataSlotEXT)
     (castFunPtr @_ @(Ptr Device_T -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> ("data" ::: Word64) -> IO Result) vkSetPrivateDataEXT)
     (castFunPtr @_ @(Ptr Device_T -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> ("pData" ::: Ptr Word64) -> IO ()) vkGetPrivateDataEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pCopyBufferInfo" ::: Ptr CopyBufferInfo2KHR) -> IO ()) vkCmdCopyBuffer2KHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pCopyImageInfo" ::: Ptr CopyImageInfo2KHR) -> IO ()) vkCmdCopyImage2KHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pBlitImageInfo" ::: Ptr BlitImageInfo2KHR) -> IO ()) vkCmdBlitImage2KHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pCopyBufferToImageInfo" ::: Ptr CopyBufferToImageInfo2KHR) -> IO ()) vkCmdCopyBufferToImage2KHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pCopyImageToBufferInfo" ::: Ptr CopyImageToBufferInfo2KHR) -> IO ()) vkCmdCopyImageToBuffer2KHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pResolveImageInfo" ::: Ptr ResolveImageInfo2KHR) -> IO ()) vkCmdResolveImage2KHR)
 
diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs
--- a/src/Vulkan/Extensions.hs
+++ b/src/Vulkan/Extensions.hs
@@ -106,6 +106,7 @@
                           , module Vulkan.Extensions.VK_KHR_android_surface
                           , module Vulkan.Extensions.VK_KHR_bind_memory2
                           , module Vulkan.Extensions.VK_KHR_buffer_device_address
+                          , module Vulkan.Extensions.VK_KHR_copy_commands2
                           , module Vulkan.Extensions.VK_KHR_create_renderpass2
                           , module Vulkan.Extensions.VK_KHR_dedicated_allocation
                           , module Vulkan.Extensions.VK_KHR_deferred_host_operations
@@ -143,6 +144,7 @@
                           , module Vulkan.Extensions.VK_KHR_performance_query
                           , module Vulkan.Extensions.VK_KHR_pipeline_executable_properties
                           , module Vulkan.Extensions.VK_KHR_pipeline_library
+                          , module Vulkan.Extensions.VK_KHR_portability_subset
                           , module Vulkan.Extensions.VK_KHR_push_descriptor
                           , module Vulkan.Extensions.VK_KHR_ray_tracing
                           , module Vulkan.Extensions.VK_KHR_relaxed_block_layout
@@ -319,6 +321,7 @@
 import Vulkan.Extensions.VK_KHR_android_surface
 import Vulkan.Extensions.VK_KHR_bind_memory2
 import Vulkan.Extensions.VK_KHR_buffer_device_address
+import Vulkan.Extensions.VK_KHR_copy_commands2
 import Vulkan.Extensions.VK_KHR_create_renderpass2
 import Vulkan.Extensions.VK_KHR_dedicated_allocation
 import Vulkan.Extensions.VK_KHR_deferred_host_operations
@@ -356,6 +359,7 @@
 import Vulkan.Extensions.VK_KHR_performance_query
 import Vulkan.Extensions.VK_KHR_pipeline_executable_properties
 import Vulkan.Extensions.VK_KHR_pipeline_library
+import Vulkan.Extensions.VK_KHR_portability_subset
 import Vulkan.Extensions.VK_KHR_push_descriptor
 import Vulkan.Extensions.VK_KHR_ray_tracing
 import Vulkan.Extensions.VK_KHR_relaxed_block_layout
diff --git a/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs b/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
--- a/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
+++ b/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
@@ -172,21 +172,21 @@
 -- 'Vulkan.Core10.Enums.StructureType.StructureType', 'XYColorEXT',
 -- 'setHdrMetadataEXT'
 data HdrMetadataEXT = HdrMetadataEXT
-  { -- | @displayPrimaryRed@ is the mastering display’s red primary in
+  { -- | @displayPrimaryRed@ is the reference monitor’s red primary in
     -- chromaticity coordinates
     displayPrimaryRed :: XYColorEXT
-  , -- | @displayPrimaryGreen@ is the mastering display’s green primary in
+  , -- | @displayPrimaryGreen@ is the reference monitor’s green primary in
     -- chromaticity coordinates
     displayPrimaryGreen :: XYColorEXT
-  , -- | @displayPrimaryBlue@ is the mastering display’s blue primary in
+  , -- | @displayPrimaryBlue@ is the reference monitor’s blue primary in
     -- chromaticity coordinates
     displayPrimaryBlue :: XYColorEXT
-  , -- | @whitePoint@ is the mastering display’s white-point in chromaticity
+  , -- | @whitePoint@ is the reference monitor’s white-point in chromaticity
     -- coordinates
     whitePoint :: XYColorEXT
-  , -- | @maxLuminance@ is the maximum luminance of the mastering display in nits
+  , -- | @maxLuminance@ is the maximum luminance of the reference monitor in nits
     maxLuminance :: Float
-  , -- | @minLuminance@ is the minimum luminance of the mastering display in nits
+  , -- | @minLuminance@ is the minimum luminance of the reference monitor in nits
     minLuminance :: Float
   , -- | @maxContentLightLevel@ is content’s maximum luminance in nits
     maxContentLightLevel :: Float
diff --git a/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs b/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs
@@ -0,0 +1,2728 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_copy_commands2  ( cmdCopyBuffer2KHR
+                                                , cmdCopyImage2KHR
+                                                , cmdBlitImage2KHR
+                                                , cmdCopyBufferToImage2KHR
+                                                , cmdCopyImageToBuffer2KHR
+                                                , cmdResolveImage2KHR
+                                                , BufferCopy2KHR(..)
+                                                , ImageCopy2KHR(..)
+                                                , ImageBlit2KHR(..)
+                                                , BufferImageCopy2KHR(..)
+                                                , ImageResolve2KHR(..)
+                                                , CopyBufferInfo2KHR(..)
+                                                , CopyImageInfo2KHR(..)
+                                                , BlitImageInfo2KHR(..)
+                                                , CopyBufferToImageInfo2KHR(..)
+                                                , CopyImageToBufferInfo2KHR(..)
+                                                , ResolveImageInfo2KHR(..)
+                                                , KHR_COPY_COMMANDS_2_SPEC_VERSION
+                                                , pattern KHR_COPY_COMMANDS_2_SPEC_VERSION
+                                                , KHR_COPY_COMMANDS_2_EXTENSION_NAME
+                                                , pattern KHR_COPY_COMMANDS_2_EXTENSION_NAME
+                                                ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+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 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.CStruct.Utils (lowerArrayPtr)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBlitImage2KHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyBuffer2KHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyBufferToImage2KHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyImage2KHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyImageToBuffer2KHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdResolveImage2KHR))
+import Vulkan.Core10.FundamentalTypes (DeviceSize)
+import Vulkan.Core10.FundamentalTypes (Extent3D)
+import Vulkan.Core10.Enums.Filter (Filter)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import Vulkan.Core10.CommandBufferBuilding (ImageSubresourceLayers)
+import Vulkan.Core10.FundamentalTypes (Offset3D)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_COPY_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_BLIT_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_COPY_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyBuffer2KHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyBufferInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyBufferInfo2KHR -> IO ()
+
+-- | vkCmdCopyBuffer2KHR - Copy data between buffer regions
+--
+-- = Description
+--
+-- This command is functionally identical to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer', but includes
+-- extensible sub-structures that include @sType@ and @pNext@ parameters,
+-- allowing them to be more easily extended.
+--
+-- == Valid Usage
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @srcBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @dstBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
+--     /must/ not be an unprotected buffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pCopyBufferInfo@ /must/ be a valid pointer to a valid
+--     'CopyBufferInfo2KHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CopyBufferInfo2KHR'
+cmdCopyBuffer2KHR :: forall io
+                   . (MonadIO io)
+                  => -- | @commandBuffer@ is the command buffer into which the command will be
+                     -- recorded.
+                     CommandBuffer
+                  -> -- | @pCopyBufferInfo@ is a pointer to a 'CopyBufferInfo2KHR' structure
+                     -- describing the copy parameters.
+                     CopyBufferInfo2KHR
+                  -> io ()
+cmdCopyBuffer2KHR commandBuffer copyBufferInfo = liftIO . evalContT $ do
+  let vkCmdCopyBuffer2KHRPtr = pVkCmdCopyBuffer2KHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyBuffer2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBuffer2KHR is null" Nothing Nothing
+  let vkCmdCopyBuffer2KHR' = mkVkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHRPtr
+  pCopyBufferInfo <- ContT $ withCStruct (copyBufferInfo)
+  lift $ vkCmdCopyBuffer2KHR' (commandBufferHandle (commandBuffer)) pCopyBufferInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyImage2KHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyImageInfo2KHR -> IO ()
+
+-- | vkCmdCopyImage2KHR - Copy data between images
+--
+-- = Description
+--
+-- This command is functionally identical to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage', but includes
+-- extensible sub-structures that include @sType@ and @pNext@ parameters,
+-- allowing them to be more easily extended.
+--
+-- == Valid Usage
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
+--     /must/ not be an unprotected image
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pCopyImageInfo@ /must/ be a valid pointer to a valid
+--     'CopyImageInfo2KHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CopyImageInfo2KHR'
+cmdCopyImage2KHR :: forall io
+                  . (MonadIO io)
+                 => -- | @commandBuffer@ is the command buffer into which the command will be
+                    -- recorded.
+                    CommandBuffer
+                 -> -- | @pCopyImageInfo@ is a pointer to a 'CopyImageInfo2KHR' structure
+                    -- describing the copy parameters.
+                    CopyImageInfo2KHR
+                 -> io ()
+cmdCopyImage2KHR commandBuffer copyImageInfo = liftIO . evalContT $ do
+  let vkCmdCopyImage2KHRPtr = pVkCmdCopyImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyImage2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImage2KHR is null" Nothing Nothing
+  let vkCmdCopyImage2KHR' = mkVkCmdCopyImage2KHR vkCmdCopyImage2KHRPtr
+  pCopyImageInfo <- ContT $ withCStruct (copyImageInfo)
+  lift $ vkCmdCopyImage2KHR' (commandBufferHandle (commandBuffer)) pCopyImageInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBlitImage2KHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr BlitImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr BlitImageInfo2KHR -> IO ()
+
+-- | vkCmdBlitImage2KHR - Copy regions of an image, potentially performing
+-- format conversion,
+--
+-- = Description
+--
+-- This command is functionally identical to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage', but includes
+-- extensible sub-structures that include @sType@ and @pNext@ parameters,
+-- allowing them to be more easily extended.
+--
+-- == Valid Usage
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
+--     /must/ not be an unprotected image
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pBlitImageInfo@ /must/ be a valid pointer to a valid
+--     'BlitImageInfo2KHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'BlitImageInfo2KHR', 'Vulkan.Core10.Handles.CommandBuffer'
+cmdBlitImage2KHR :: forall io
+                  . (MonadIO io)
+                 => -- | @commandBuffer@ is the command buffer into which the command will be
+                    -- recorded.
+                    CommandBuffer
+                 -> -- | @pBlitImageInfo@ is a pointer to a 'BlitImageInfo2KHR' structure
+                    -- describing the blit parameters.
+                    BlitImageInfo2KHR
+                 -> io ()
+cmdBlitImage2KHR commandBuffer blitImageInfo = liftIO . evalContT $ do
+  let vkCmdBlitImage2KHRPtr = pVkCmdBlitImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBlitImage2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBlitImage2KHR is null" Nothing Nothing
+  let vkCmdBlitImage2KHR' = mkVkCmdBlitImage2KHR vkCmdBlitImage2KHRPtr
+  pBlitImageInfo <- ContT $ withCStruct (blitImageInfo)
+  lift $ vkCmdBlitImage2KHR' (commandBufferHandle (commandBuffer)) pBlitImageInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyBufferToImage2KHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyBufferToImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyBufferToImageInfo2KHR -> IO ()
+
+-- | vkCmdCopyBufferToImage2KHR - Copy data from a buffer into an image
+--
+-- = Description
+--
+-- This command is functionally identical to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', but includes
+-- extensible sub-structures that include @sType@ and @pNext@ parameters,
+-- allowing them to be more easily extended.
+--
+-- == Valid Usage
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @srcBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
+--     /must/ not be an unprotected image
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pCopyBufferToImageInfo@ /must/ be a valid pointer to a valid
+--     'CopyBufferToImageInfo2KHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CopyBufferToImageInfo2KHR'
+cmdCopyBufferToImage2KHR :: forall io
+                          . (MonadIO io)
+                         => -- | @commandBuffer@ is the command buffer into which the command will be
+                            -- recorded.
+                            CommandBuffer
+                         -> -- | @pCopyBufferToImageInfo@ is a pointer to a 'CopyBufferToImageInfo2KHR'
+                            -- structure describing the copy parameters.
+                            CopyBufferToImageInfo2KHR
+                         -> io ()
+cmdCopyBufferToImage2KHR commandBuffer copyBufferToImageInfo = liftIO . evalContT $ do
+  let vkCmdCopyBufferToImage2KHRPtr = pVkCmdCopyBufferToImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyBufferToImage2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBufferToImage2KHR is null" Nothing Nothing
+  let vkCmdCopyBufferToImage2KHR' = mkVkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHRPtr
+  pCopyBufferToImageInfo <- ContT $ withCStruct (copyBufferToImageInfo)
+  lift $ vkCmdCopyBufferToImage2KHR' (commandBufferHandle (commandBuffer)) pCopyBufferToImageInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyImageToBuffer2KHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyImageToBufferInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyImageToBufferInfo2KHR -> IO ()
+
+-- | vkCmdCopyImageToBuffer2KHR - Copy image data into a buffer
+--
+-- = Description
+--
+-- This command is functionally identical to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer', but includes
+-- extensible sub-structures that include @sType@ and @pNext@ parameters,
+-- allowing them to be more easily extended.
+--
+-- == Valid Usage
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @dstBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
+--     /must/ not be an unprotected buffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pCopyImageToBufferInfo@ /must/ be a valid pointer to a valid
+--     'CopyImageToBufferInfo2KHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CopyImageToBufferInfo2KHR'
+cmdCopyImageToBuffer2KHR :: forall io
+                          . (MonadIO io)
+                         => -- | @commandBuffer@ is the command buffer into which the command will be
+                            -- recorded.
+                            CommandBuffer
+                         -> -- | @pCopyImageToBufferInfo@ is a pointer to a 'cmdCopyImageToBuffer2KHR'
+                            -- structure describing the copy parameters.
+                            CopyImageToBufferInfo2KHR
+                         -> io ()
+cmdCopyImageToBuffer2KHR commandBuffer copyImageToBufferInfo = liftIO . evalContT $ do
+  let vkCmdCopyImageToBuffer2KHRPtr = pVkCmdCopyImageToBuffer2KHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyImageToBuffer2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImageToBuffer2KHR is null" Nothing Nothing
+  let vkCmdCopyImageToBuffer2KHR' = mkVkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHRPtr
+  pCopyImageToBufferInfo <- ContT $ withCStruct (copyImageToBufferInfo)
+  lift $ vkCmdCopyImageToBuffer2KHR' (commandBufferHandle (commandBuffer)) pCopyImageToBufferInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdResolveImage2KHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr ResolveImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr ResolveImageInfo2KHR -> IO ()
+
+-- | vkCmdResolveImage2KHR - Resolve regions of an image
+--
+-- = Description
+--
+-- This command is functionally identical to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage', but includes
+-- extensible sub-structures that include @sType@ and @pNext@ parameters,
+-- allowing them to be more easily extended.
+--
+-- == Valid Usage
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
+--     /must/ not be an unprotected image
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pResolveImageInfo@ /must/ be a valid pointer to a valid
+--     'ResolveImageInfo2KHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'ResolveImageInfo2KHR'
+cmdResolveImage2KHR :: forall io
+                     . (MonadIO io)
+                    => -- | @commandBuffer@ is the command buffer into which the command will be
+                       -- recorded.
+                       CommandBuffer
+                    -> -- | @pResolveImageInfo@ is a pointer to a 'ResolveImageInfo2KHR' structure
+                       -- describing the resolve parameters.
+                       ResolveImageInfo2KHR
+                    -> io ()
+cmdResolveImage2KHR commandBuffer resolveImageInfo = liftIO . evalContT $ do
+  let vkCmdResolveImage2KHRPtr = pVkCmdResolveImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdResolveImage2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResolveImage2KHR is null" Nothing Nothing
+  let vkCmdResolveImage2KHR' = mkVkCmdResolveImage2KHR vkCmdResolveImage2KHRPtr
+  pResolveImageInfo <- ContT $ withCStruct (resolveImageInfo)
+  lift $ vkCmdResolveImage2KHR' (commandBufferHandle (commandBuffer)) pResolveImageInfo
+  pure $ ()
+
+
+-- | VkBufferCopy2KHR - Structure specifying a buffer copy operation
+--
+-- == Valid Usage
+--
+-- -   The @size@ /must/ be greater than @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_COPY_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'CopyBufferInfo2KHR', 'Vulkan.Core10.FundamentalTypes.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data BufferCopy2KHR = BufferCopy2KHR
+  { -- | @srcOffset@ is the starting offset in bytes from the start of
+    -- @srcBuffer@.
+    srcOffset :: DeviceSize
+  , -- | @dstOffset@ is the starting offset in bytes from the start of
+    -- @dstBuffer@.
+    dstOffset :: DeviceSize
+  , -- | @size@ is the number of bytes to copy.
+    size :: DeviceSize
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (BufferCopy2KHR)
+#endif
+deriving instance Show BufferCopy2KHR
+
+instance ToCStruct BufferCopy2KHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferCopy2KHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_COPY_2_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (srcOffset)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (dstOffset)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (size)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_COPY_2_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct BufferCopy2KHR where
+  peekCStruct p = do
+    srcOffset <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    dstOffset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    size <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    pure $ BufferCopy2KHR
+             srcOffset dstOffset size
+
+instance Storable BufferCopy2KHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BufferCopy2KHR where
+  zero = BufferCopy2KHR
+           zero
+           zero
+           zero
+
+
+-- | VkImageCopy2KHR - Structure specifying an image copy operation
+--
+-- == Valid Usage
+--
+-- -   The number of slices of the @extent@ (for 3D) or layers of the
+--     @srcSubresource@ (for non-3D) /must/ match the number of slices of
+--     the @extent@ (for 3D) or layers of the @dstSubresource@ (for non-3D)
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_COPY_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcSubresource@ /must/ be a valid
+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'
+--     structure
+--
+-- -   @dstSubresource@ /must/ be a valid
+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'
+--     structure
+--
+-- = See Also
+--
+-- 'CopyImageInfo2KHR', 'Vulkan.Core10.FundamentalTypes.Extent3D',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',
+-- 'Vulkan.Core10.FundamentalTypes.Offset3D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImageCopy2KHR = ImageCopy2KHR
+  { -- | @srcSubresource@ and @dstSubresource@ are
+    -- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers' structures
+    -- specifying the image subresources of the images used for the source and
+    -- destination image data, respectively.
+    srcSubresource :: ImageSubresourceLayers
+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
+    -- in texels of the sub-regions of the source and destination image data.
+    srcOffset :: Offset3D
+  , -- No documentation found for Nested "VkImageCopy2KHR" "dstSubresource"
+    dstSubresource :: ImageSubresourceLayers
+  , -- No documentation found for Nested "VkImageCopy2KHR" "dstOffset"
+    dstOffset :: Offset3D
+  , -- | @extent@ is the size in texels of the image to copy in @width@, @height@
+    -- and @depth@.
+    extent :: Extent3D
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (ImageCopy2KHR)
+#endif
+deriving instance Show ImageCopy2KHR
+
+instance ToCStruct ImageCopy2KHR where
+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageCopy2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_COPY_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (srcOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (dstOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (extent) . ($ ())
+    lift $ f
+  cStructSize = 88
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_COPY_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct ImageCopy2KHR where
+  peekCStruct p = do
+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))
+    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))
+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers))
+    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 60 :: Ptr Offset3D))
+    extent <- peekCStruct @Extent3D ((p `plusPtr` 72 :: Ptr Extent3D))
+    pure $ ImageCopy2KHR
+             srcSubresource srcOffset dstSubresource dstOffset extent
+
+instance Zero ImageCopy2KHR where
+  zero = ImageCopy2KHR
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkImageBlit2KHR - Structure specifying an image blit operation
+--
+-- = Description
+--
+-- For each element of the @pRegions@ array, a blit operation is performed
+-- for the specified source and destination regions.
+--
+-- == Valid Usage
+--
+-- -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ match
+--
+-- -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ match
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_BLIT_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcSubresource@ /must/ be a valid
+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'
+--     structure
+--
+-- -   @dstSubresource@ /must/ be a valid
+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'
+--     structure
+--
+-- = See Also
+--
+-- 'BlitImageInfo2KHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',
+-- 'Vulkan.Core10.FundamentalTypes.Offset3D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImageBlit2KHR = ImageBlit2KHR
+  { -- | @srcSubresource@ is the subresource to blit from.
+    srcSubresource :: ImageSubresourceLayers
+  , -- | @srcOffsets@ is a pointer to an array of two
+    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the
+    -- bounds of the source region within @srcSubresource@.
+    srcOffsets :: (Offset3D, Offset3D)
+  , -- | @dstSubresource@ is the subresource to blit into.
+    dstSubresource :: ImageSubresourceLayers
+  , -- | @dstOffsets@ is a pointer to an array of two
+    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the
+    -- bounds of the destination region within @dstSubresource@.
+    dstOffsets :: (Offset3D, Offset3D)
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (ImageBlit2KHR)
+#endif
+deriving instance Show ImageBlit2KHR
+
+instance ToCStruct ImageBlit2KHR where
+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageBlit2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_BLIT_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())
+    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 32 :: Ptr (FixedArray 2 Offset3D)))
+    case (srcOffsets) of
+      (e0, e1) -> do
+        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())
+        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())
+    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 72 :: Ptr (FixedArray 2 Offset3D)))
+    case (dstOffsets) of
+      (e0, e1) -> do
+        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())
+        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
+    lift $ f
+  cStructSize = 96
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_BLIT_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 32 :: Ptr (FixedArray 2 Offset3D)))
+    case ((zero, zero)) of
+      (e0, e1) -> do
+        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())
+        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 72 :: Ptr (FixedArray 2 Offset3D)))
+    case ((zero, zero)) of
+      (e0, e1) -> do
+        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())
+        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
+    lift $ f
+
+instance FromCStruct ImageBlit2KHR where
+  peekCStruct p = do
+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))
+    let psrcOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 32 :: Ptr (FixedArray 2 Offset3D)))
+    srcOffsets0 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 0 :: Ptr Offset3D))
+    srcOffsets1 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 12 :: Ptr Offset3D))
+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 56 :: Ptr ImageSubresourceLayers))
+    let pdstOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 72 :: Ptr (FixedArray 2 Offset3D)))
+    dstOffsets0 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 0 :: Ptr Offset3D))
+    dstOffsets1 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 12 :: Ptr Offset3D))
+    pure $ ImageBlit2KHR
+             srcSubresource ((srcOffsets0, srcOffsets1)) dstSubresource ((dstOffsets0, dstOffsets1))
+
+instance Zero ImageBlit2KHR where
+  zero = ImageBlit2KHR
+           zero
+           (zero, zero)
+           zero
+           (zero, zero)
+
+
+-- | VkBufferImageCopy2KHR - Structure specifying a buffer image copy
+-- operation
+--
+-- = Description
+--
+-- This structure is functionally identical to
+-- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy', but adds @sType@
+-- and @pNext@ parameters, allowing it to be more easily extended.
+--
+-- == Valid Usage
+--
+-- -   @bufferRowLength@ /must/ be @0@, or greater than or equal to the
+--     @width@ member of @imageExtent@
+--
+-- -   @bufferImageHeight@ /must/ be @0@, or greater than or equal to the
+--     @height@ member of @imageExtent@
+--
+-- -   The @aspectMask@ member of @imageSubresource@ /must/ only have a
+--     single bit set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @imageSubresource@ /must/ be a valid
+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'
+--     structure
+--
+-- = See Also
+--
+-- 'CopyBufferToImageInfo2KHR', 'CopyImageToBufferInfo2KHR',
+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
+-- 'Vulkan.Core10.FundamentalTypes.Extent3D',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',
+-- 'Vulkan.Core10.FundamentalTypes.Offset3D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data BufferImageCopy2KHR = BufferImageCopy2KHR
+  { -- | @bufferOffset@ is the offset in bytes from the start of the buffer
+    -- object where the image data is copied from or to.
+    bufferOffset :: DeviceSize
+  , -- | @bufferRowLength@ and @bufferImageHeight@ specify in texels a subregion
+    -- of a larger two- or three-dimensional image in buffer memory, and
+    -- control the addressing calculations. If either of these values is zero,
+    -- that aspect of the buffer memory is considered to be tightly packed
+    -- according to the @imageExtent@.
+    bufferRowLength :: Word32
+  , -- No documentation found for Nested "VkBufferImageCopy2KHR" "bufferImageHeight"
+    bufferImageHeight :: Word32
+  , -- | @imageSubresource@ is a
+    -- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers' used to
+    -- specify the specific image subresources of the image used for the source
+    -- or destination image data.
+    imageSubresource :: ImageSubresourceLayers
+  , -- | @imageOffset@ selects the initial @x@, @y@, @z@ offsets in texels of the
+    -- sub-region of the source or destination image data.
+    imageOffset :: Offset3D
+  , -- | @imageExtent@ is the size in texels of the image to copy in @width@,
+    -- @height@ and @depth@.
+    imageExtent :: Extent3D
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (BufferImageCopy2KHR)
+#endif
+deriving instance Show BufferImageCopy2KHR
+
+instance ToCStruct BufferImageCopy2KHR where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferImageCopy2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (bufferOffset)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (bufferRowLength)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (bufferImageHeight)
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr ImageSubresourceLayers)) (imageSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr Offset3D)) (imageOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent3D)) (imageExtent) . ($ ())
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct BufferImageCopy2KHR where
+  peekCStruct p = do
+    bufferOffset <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    bufferRowLength <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    bufferImageHeight <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    imageSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 32 :: Ptr ImageSubresourceLayers))
+    imageOffset <- peekCStruct @Offset3D ((p `plusPtr` 48 :: Ptr Offset3D))
+    imageExtent <- peekCStruct @Extent3D ((p `plusPtr` 60 :: Ptr Extent3D))
+    pure $ BufferImageCopy2KHR
+             bufferOffset bufferRowLength bufferImageHeight imageSubresource imageOffset imageExtent
+
+instance Zero BufferImageCopy2KHR where
+  zero = BufferImageCopy2KHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkImageResolve2KHR - Structure specifying an image resolve operation
+--
+-- == Valid Usage
+--
+-- -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ only contain
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ match
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcSubresource@ /must/ be a valid
+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'
+--     structure
+--
+-- -   @dstSubresource@ /must/ be a valid
+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'
+--     structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Extent3D',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',
+-- 'Vulkan.Core10.FundamentalTypes.Offset3D', 'ResolveImageInfo2KHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImageResolve2KHR = ImageResolve2KHR
+  { -- | @srcSubresource@ and @dstSubresource@ are
+    -- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers' structures
+    -- specifying the image subresources of the images used for the source and
+    -- destination image data, respectively. Resolve of depth\/stencil images
+    -- is not supported.
+    srcSubresource :: ImageSubresourceLayers
+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
+    -- in texels of the sub-regions of the source and destination image data.
+    srcOffset :: Offset3D
+  , -- No documentation found for Nested "VkImageResolve2KHR" "dstSubresource"
+    dstSubresource :: ImageSubresourceLayers
+  , -- No documentation found for Nested "VkImageResolve2KHR" "dstOffset"
+    dstOffset :: Offset3D
+  , -- | @extent@ is the size in texels of the source image to resolve in
+    -- @width@, @height@ and @depth@.
+    extent :: Extent3D
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (ImageResolve2KHR)
+#endif
+deriving instance Show ImageResolve2KHR
+
+instance ToCStruct ImageResolve2KHR where
+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageResolve2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (srcOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (dstOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (extent) . ($ ())
+    lift $ f
+  cStructSize = 88
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct ImageResolve2KHR where
+  peekCStruct p = do
+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))
+    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))
+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers))
+    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 60 :: Ptr Offset3D))
+    extent <- peekCStruct @Extent3D ((p `plusPtr` 72 :: Ptr Extent3D))
+    pure $ ImageResolve2KHR
+             srcSubresource srcOffset dstSubresource dstOffset extent
+
+instance Zero ImageResolve2KHR where
+  zero = ImageResolve2KHR
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkCopyBufferInfo2KHR - Structure specifying parameters of a buffer copy
+-- command
+--
+-- = Description
+--
+-- Members defined by this structure with the same name as parameters in
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer' have the identical
+-- effect to those parameters; the child structure 'BufferCopy2KHR' is a
+-- variant of 'Vulkan.Core10.CommandBufferBuilding.BufferCopy' which
+-- includes @sType@ and @pNext@ parameters, allowing it to be extended.
+--
+-- == Valid Usage
+--
+-- -   The @srcOffset@ member of each element of @pRegions@ /must/ be less
+--     than the size of @srcBuffer@
+--
+-- -   The @dstOffset@ member of each element of @pRegions@ /must/ be less
+--     than the size of @dstBuffer@
+--
+-- -   The @size@ member of each element of @pRegions@ /must/ be less than
+--     or equal to the size of @srcBuffer@ minus @srcOffset@
+--
+-- -   The @size@ member of each element of @pRegions@ /must/ be less than
+--     or equal to the size of @dstBuffer@ minus @dstOffset@
+--
+-- -   The union of the source regions, and the union of the destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   @srcBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'BufferCopy2KHR' structures
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Both of @dstBuffer@, and @srcBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'BufferCopy2KHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdCopyBuffer2KHR'
+data CopyBufferInfo2KHR = CopyBufferInfo2KHR
+  { -- | @srcBuffer@ is the source buffer.
+    srcBuffer :: Buffer
+  , -- | @dstBuffer@ is the destination buffer.
+    dstBuffer :: Buffer
+  , -- | @pRegions@ is a pointer to an array of 'BufferCopy2KHR' structures
+    -- specifying the regions to copy.
+    regions :: Vector BufferCopy2KHR
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (CopyBufferInfo2KHR)
+#endif
+deriving instance Show CopyBufferInfo2KHR
+
+instance ToCStruct CopyBufferInfo2KHR where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CopyBufferInfo2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (srcBuffer)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (dstBuffer)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))
+    pPRegions' <- ContT $ allocaBytesAligned @BufferCopy2KHR ((Data.Vector.length (regions)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (40 * (i)) :: Ptr BufferCopy2KHR) (e) . ($ ())) (regions)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr BufferCopy2KHR))) (pPRegions')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (zero)
+    pPRegions' <- ContT $ allocaBytesAligned @BufferCopy2KHR ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (40 * (i)) :: Ptr BufferCopy2KHR) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr BufferCopy2KHR))) (pPRegions')
+    lift $ f
+
+instance FromCStruct CopyBufferInfo2KHR where
+  peekCStruct p = do
+    srcBuffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
+    dstBuffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))
+    regionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pRegions <- peek @(Ptr BufferCopy2KHR) ((p `plusPtr` 40 :: Ptr (Ptr BufferCopy2KHR)))
+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @BufferCopy2KHR ((pRegions `advancePtrBytes` (40 * (i)) :: Ptr BufferCopy2KHR)))
+    pure $ CopyBufferInfo2KHR
+             srcBuffer dstBuffer pRegions'
+
+instance Zero CopyBufferInfo2KHR where
+  zero = CopyBufferInfo2KHR
+           zero
+           zero
+           mempty
+
+
+-- | VkCopyImageInfo2KHR - Structure specifying parameters of an image copy
+-- command
+--
+-- == Valid Usage
+--
+-- -   The union of all source regions, and the union of all destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'
+--
+-- -   @srcImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   If @srcImage@ is non-sparse then the image or /disjoint/ plane to be
+--     copied /must/ be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @srcImageLayout@ /must/ specify the layout of the image subresources
+--     of @srcImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @srcImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @dstImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
+--
+-- -   @dstImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstImage@ is non-sparse then the image or /disjoint/ plane that
+--     is the destination of the copy /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstImageLayout@ /must/ specify the layout of the image subresources
+--     of @dstImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @dstImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+--
+-- -   If the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and
+--     @dstImage@ is not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and
+--     @dstImage@ /must/ be compatible, as defined
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-compatibility above>
+--
+-- -   In a copy to or from a plane of a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image>,
+--     the 'Vulkan.Core10.Enums.Format.Format' of the image and plane
+--     /must/ be compatible according to
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes the description of compatible planes>
+--     for the plane being copied
+--
+-- -   The sample count of @srcImage@ and @dstImage@ /must/ match
+--
+-- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @srcImage@ was created
+--
+-- -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @dstImage@ was created
+--
+-- -   The @srcOffset@ and @extent@ members of each element of @pRegions@
+--     /must/ respect the image transfer granularity requirements of
+--     @commandBuffer@’s command pool’s queue family, as described in
+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
+--
+-- -   The @dstOffset@ and @extent@ members of each element of @pRegions@
+--     /must/ respect the image transfer granularity requirements of
+--     @commandBuffer@’s command pool’s queue family, as described in
+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
+--
+-- -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@
+--     containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- -   If neither @srcImage@ nor @dstImage@ has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
+--     then for each element of @pRegions@, @srcSubresource.aspectMask@ and
+--     @dstSubresource.aspectMask@ /must/ match
+--
+-- -   If @srcImage@ has a 'Vulkan.Core10.Enums.Format.Format' with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>
+--     then for each element of @pRegions@, @srcSubresource.aspectMask@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
+--
+-- -   If @srcImage@ has a 'Vulkan.Core10.Enums.Format.Format' with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>
+--     then for each element of @pRegions@, @srcSubresource.aspectMask@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--
+-- -   If @dstImage@ has a 'Vulkan.Core10.Enums.Format.Format' with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>
+--     then for each element of @pRegions@, @dstSubresource.aspectMask@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
+--
+-- -   If @dstImage@ has a 'Vulkan.Core10.Enums.Format.Format' with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>
+--     then for each element of @pRegions@, @dstSubresource.aspectMask@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--
+-- -   If @srcImage@ has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
+--     and the @dstImage@ does not have a multi-planar image format, then
+--     for each element of @pRegions@, @dstSubresource.aspectMask@ /must/
+--     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   If @dstImage@ has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
+--     and the @srcImage@ does not have a multi-planar image format, then
+--     for each element of @pRegions@, @srcSubresource.aspectMask@ /must/
+--     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   If @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element
+--     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and and
+--     @srcSubresource.layerCount@ /must/ be @1@
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element
+--     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and and
+--     @dstSubresource.layerCount@ /must/ be @1@
+--
+-- -   For each element of @pRegions@, @srcSubresource.aspectMask@ /must/
+--     specify aspects present in @srcImage@
+--
+-- -   For each element of @pRegions@, @dstSubresource.aspectMask@ /must/
+--     specify aspects present in @dstImage@
+--
+-- -   For each element of @pRegions@, @srcOffset.x@ and (@extent.width@ +
+--     @srcOffset.x@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the width of the specified @srcSubresource@ of
+--     @srcImage@
+--
+-- -   For each element of @pRegions@, @srcOffset.y@ and (@extent.height@ +
+--     @srcOffset.y@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the height of the specified @srcSubresource@ of
+--     @srcImage@
+--
+-- -   If @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@
+--     /must/ be @1@
+--
+-- -   For each element of @pRegions@, @srcOffset.z@ and (@extent.depth@ +
+--     @srcOffset.z@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the depth of the specified @srcSubresource@ of
+--     @srcImage@
+--
+-- -   If @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/
+--     be @1@
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/
+--     be @1@
+--
+-- -   If @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element
+--     of @pRegions@, @srcOffset.z@ /must/ be @0@
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element
+--     of @pRegions@, @dstOffset.z@ /must/ be @0@
+--
+-- -   If @srcImage@ and @dstImage@ are both of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element
+--     of @pRegions@, @extent.depth@ /must/ be @1@
+--
+-- -   If @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @dstImage@ is of
+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each
+--     element of @pRegions@, @extent.depth@ /must/ equal
+--     @srcSubresource.layerCount@
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @srcImage@ is of
+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each
+--     element of @pRegions@, @extent.depth@ /must/ equal
+--     @dstSubresource.layerCount@
+--
+-- -   For each element of @pRegions@, @dstOffset.x@ and (@extent.width@ +
+--     @dstOffset.x@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the width of the specified @dstSubresource@ of
+--     @dstImage@
+--
+-- -   For each element of @pRegions@, @dstOffset.y@ and (@extent.height@ +
+--     @dstOffset.y@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the height of the specified @dstSubresource@ of
+--     @dstImage@
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@
+--     /must/ be @1@
+--
+-- -   For each element of @pRegions@, @dstOffset.z@ and (@extent.depth@ +
+--     @dstOffset.z@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the depth of the specified @dstSubresource@ of
+--     @dstImage@
+--
+-- -   If @srcImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     then for each element of @pRegions@, all members of @srcOffset@
+--     /must/ be a multiple of the corresponding dimensions of the
+--     compressed texel block
+--
+-- -   If @srcImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     then for each element of @pRegions@, @extent.width@ /must/ be a
+--     multiple of the compressed texel block width or (@extent.width@ +
+--     @srcOffset.x@) /must/ equal the width of the specified
+--     @srcSubresource@ of @srcImage@
+--
+-- -   If @srcImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     then for each element of @pRegions@, @extent.height@ /must/ be a
+--     multiple of the compressed texel block height or (@extent.height@ +
+--     @srcOffset.y@) /must/ equal the height of the specified
+--     @srcSubresource@ of @srcImage@
+--
+-- -   If @srcImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     then for each element of @pRegions@, @extent.depth@ /must/ be a
+--     multiple of the compressed texel block depth or (@extent.depth@ +
+--     @srcOffset.z@) /must/ equal the depth of the specified
+--     @srcSubresource@ of @srcImage@
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     then for each element of @pRegions@, all members of @dstOffset@
+--     /must/ be a multiple of the corresponding dimensions of the
+--     compressed texel block
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     then for each element of @pRegions@, @extent.width@ /must/ be a
+--     multiple of the compressed texel block width or (@extent.width@ +
+--     @dstOffset.x@) /must/ equal the width of the specified
+--     @dstSubresource@ of @dstImage@
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     then for each element of @pRegions@, @extent.height@ /must/ be a
+--     multiple of the compressed texel block height or (@extent.height@ +
+--     @dstOffset.y@) /must/ equal the height of the specified
+--     @dstSubresource@ of @dstImage@
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     then for each element of @pRegions@, @extent.depth@ /must/ be a
+--     multiple of the compressed texel block depth or (@extent.depth@ +
+--     @dstOffset.z@) /must/ equal the depth of the specified
+--     @dstSubresource@ of @dstImage@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'ImageCopy2KHR' structures
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Both of @dstImage@, and @srcImage@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Image', 'ImageCopy2KHR',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdCopyImage2KHR'
+data CopyImageInfo2KHR = CopyImageInfo2KHR
+  { -- | @srcImage@ is the source image.
+    srcImage :: Image
+  , -- | @srcImageLayout@ is the current layout of the source image subresource.
+    srcImageLayout :: ImageLayout
+  , -- | @dstImage@ is the destination image.
+    dstImage :: Image
+  , -- | @dstImageLayout@ is the current layout of the destination image
+    -- subresource.
+    dstImageLayout :: ImageLayout
+  , -- | @pRegions@ is a pointer to an array of 'ImageCopy2KHR' structures
+    -- specifying the regions to copy.
+    regions :: Vector ImageCopy2KHR
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (CopyImageInfo2KHR)
+#endif
+deriving instance Show CopyImageInfo2KHR
+
+instance ToCStruct CopyImageInfo2KHR where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CopyImageInfo2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (dstImage)
+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (dstImageLayout)
+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))
+    pPRegions' <- ContT $ allocaBytesAligned @ImageCopy2KHR ((Data.Vector.length (regions)) * 88) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (88 * (i)) :: Ptr ImageCopy2KHR) (e) . ($ ())) (regions)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageCopy2KHR))) (pPRegions')
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (zero)
+    pPRegions' <- ContT $ allocaBytesAligned @ImageCopy2KHR ((Data.Vector.length (mempty)) * 88) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (88 * (i)) :: Ptr ImageCopy2KHR) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageCopy2KHR))) (pPRegions')
+    lift $ f
+
+instance FromCStruct CopyImageInfo2KHR where
+  peekCStruct p = do
+    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
+    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))
+    dstImage <- peek @Image ((p `plusPtr` 32 :: Ptr Image))
+    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 40 :: Ptr ImageLayout))
+    regionCount <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    pRegions <- peek @(Ptr ImageCopy2KHR) ((p `plusPtr` 48 :: Ptr (Ptr ImageCopy2KHR)))
+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @ImageCopy2KHR ((pRegions `advancePtrBytes` (88 * (i)) :: Ptr ImageCopy2KHR)))
+    pure $ CopyImageInfo2KHR
+             srcImage srcImageLayout dstImage dstImageLayout pRegions'
+
+instance Zero CopyImageInfo2KHR where
+  zero = CopyImageInfo2KHR
+           zero
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkBlitImageInfo2KHR - Structure specifying parameters of blit image
+-- command
+--
+-- == Valid Usage
+--
+-- -   [[VUID-{refpage}-pRegions-00215]] The source region specified by
+--     each element of @pRegions@ /must/ be a region that is contained
+--     within @srcImage@
+--
+-- -   [[VUID-{refpage}-pRegions-00216]] The destination region specified
+--     by each element of @pRegions@ /must/ be a region that is contained
+--     within @dstImage@
+--
+-- -   [[VUID-{refpage}-pRegions-00217]] The union of all destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory with any texel that /may/ be sampled during the blit
+--     operation
+--
+-- -   [[VUID-{refpage}-srcImage-01999]] The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
+--
+-- -   [[VUID-{refpage}-srcImage-01561]] @srcImage@ /must/ not use a format
+--     listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>
+--
+-- -   [[VUID-{refpage}-srcImage-00219]] @srcImage@ /must/ have been
+--     created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   [[VUID-{refpage}-srcImage-00220]] If @srcImage@ is non-sparse then
+--     it /must/ be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   [[VUID-{refpage}-srcImageLayout-00221]] @srcImageLayout@ /must/
+--     specify the layout of the image subresources of @srcImage@ specified
+--     in @pRegions@ at the time this command is executed on a
+--     'Vulkan.Core10.Handles.Device'
+--
+-- -   [[VUID-{refpage}-srcImageLayout-01398]] @srcImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   [[VUID-{refpage}-dstImage-02000]] The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @dstImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'
+--
+-- -   [[VUID-{refpage}-dstImage-01562]] @dstImage@ /must/ not use a format
+--     listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>
+--
+-- -   [[VUID-{refpage}-dstImage-00224]] @dstImage@ /must/ have been
+--     created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   [[VUID-{refpage}-dstImage-00225]] If @dstImage@ is non-sparse then
+--     it /must/ be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   [[VUID-{refpage}-dstImageLayout-00226]] @dstImageLayout@ /must/
+--     specify the layout of the image subresources of @dstImage@ specified
+--     in @pRegions@ at the time this command is executed on a
+--     'Vulkan.Core10.Handles.Device'
+--
+-- -   [[VUID-{refpage}-dstImageLayout-01399]] @dstImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   [[VUID-{refpage}-srcImage-00229]] If either of @srcImage@ or
+--     @dstImage@ was created with a signed integer
+--     'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been
+--     created with a signed integer 'Vulkan.Core10.Enums.Format.Format'
+--
+-- -   [[VUID-{refpage}-srcImage-00230]] If either of @srcImage@ or
+--     @dstImage@ was created with an unsigned integer
+--     'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been
+--     created with an unsigned integer 'Vulkan.Core10.Enums.Format.Format'
+--
+-- -   [[VUID-{refpage}-srcImage-00231]] If either of @srcImage@ or
+--     @dstImage@ was created with a depth\/stencil format, the other
+--     /must/ have exactly the same format
+--
+-- -   [[VUID-{refpage}-srcImage-00232]] If @srcImage@ was created with a
+--     depth\/stencil format, @filter@ /must/ be
+--     'Vulkan.Core10.Enums.Filter.FILTER_NEAREST'
+--
+-- -   [[VUID-{refpage}-srcImage-00233]] @srcImage@ /must/ have been
+--     created with a @samples@ value of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   [[VUID-{refpage}-dstImage-00234]] @dstImage@ /must/ have been
+--     created with a @samples@ value of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   [[VUID-{refpage}-filter-02001]] If @filter@ is
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   [[VUID-{refpage}-filter-02002]] If @filter@ is
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   [[VUID-{refpage}-filter-00237]] If @filter@ is
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', @srcImage@
+--     /must/ be of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   [[VUID-{refpage}-srcSubresource-01705]] The
+--     @srcSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   [[VUID-{refpage}-dstSubresource-01706]] The
+--     @dstSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   [[VUID-{refpage}-srcSubresource-01707]] The
+--     @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @srcImage@ was created
+--
+-- -   [[VUID-{refpage}-dstSubresource-01708]] The
+--     @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @dstImage@ was created
+--
+-- -   [[VUID-{refpage}-dstImage-02545]] @dstImage@ and @srcImage@ /must/
+--     not have been created with @flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- -   [[VUID-{refpage}-srcImage-00240]] If either @srcImage@ or @dstImage@
+--     is of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for
+--     each element of @pRegions@, @srcSubresource.baseArrayLayer@ and
+--     @dstSubresource.baseArrayLayer@ /must/ each be @0@, and
+--     @srcSubresource.layerCount@ and @dstSubresource.layerCount@ /must/
+--     each be @1@.
+--
+-- -   [[VUID-{refpage}-aspectMask-00241]] For each element of @pRegions@,
+--     @srcSubresource.aspectMask@ /must/ specify aspects present in
+--     @srcImage@
+--
+-- -   [[VUID-{refpage}-aspectMask-00242]] For each element of @pRegions@,
+--     @dstSubresource.aspectMask@ /must/ specify aspects present in
+--     @dstImage@
+--
+-- -   [[VUID-{refpage}-srcOffset-00243]] For each element of @pRegions@,
+--     @srcOffset@[0].x and @srcOffset@[1].x /must/ both be greater than or
+--     equal to @0@ and less than or equal to the width of the specified
+--     @srcSubresource@ of @srcImage@
+--
+-- -   [[VUID-{refpage}-srcOffset-00244]] For each element of @pRegions@,
+--     @srcOffset@[0].y and @srcOffset@[1].y /must/ both be greater than or
+--     equal to @0@ and less than or equal to the height of the specified
+--     @srcSubresource@ of @srcImage@
+--
+-- -   [[VUID-{refpage}-srcImage-00245]] If @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @srcOffset@[0].y /must/ be @0@ and @srcOffset@[1].y
+--     /must/ be @1@
+--
+-- -   [[VUID-{refpage}-srcOffset-00246]] For each element of @pRegions@,
+--     @srcOffset@[0].z and @srcOffset@[1].z /must/ both be greater than or
+--     equal to @0@ and less than or equal to the depth of the specified
+--     @srcSubresource@ of @srcImage@
+--
+-- -   [[VUID-{refpage}-srcImage-00247]] If @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element
+--     of @pRegions@, @srcOffset@[0].z /must/ be @0@ and @srcOffset@[1].z
+--     /must/ be @1@
+--
+-- -   [[VUID-{refpage}-dstOffset-00248]] For each element of @pRegions@,
+--     @dstOffset@[0].x and @dstOffset@[1].x /must/ both be greater than or
+--     equal to @0@ and less than or equal to the width of the specified
+--     @dstSubresource@ of @dstImage@
+--
+-- -   [[VUID-{refpage}-dstOffset-00249]] For each element of @pRegions@,
+--     @dstOffset@[0].y and @dstOffset@[1].y /must/ both be greater than or
+--     equal to @0@ and less than or equal to the height of the specified
+--     @dstSubresource@ of @dstImage@
+--
+-- -   [[VUID-{refpage}-dstImage-00250]] If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @dstOffset@[0].y /must/ be @0@ and @dstOffset@[1].y
+--     /must/ be @1@
+--
+-- -   [[VUID-{refpage}-dstOffset-00251]] For each element of @pRegions@,
+--     @dstOffset@[0].z and @dstOffset@[1].z /must/ both be greater than or
+--     equal to @0@ and less than or equal to the depth of the specified
+--     @dstSubresource@ of @dstImage@
+--
+-- -   [[VUID-{refpage}-dstImage-00252]] If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element
+--     of @pRegions@, @dstOffset@[0].z /must/ be @0@ and @dstOffset@[1].z
+--     /must/ be @1@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'ImageBlit2KHR' structures
+--
+-- -   @filter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter' value
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Both of @dstImage@, and @srcImage@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Filter.Filter', 'Vulkan.Core10.Handles.Image',
+-- 'ImageBlit2KHR', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdBlitImage2KHR'
+data BlitImageInfo2KHR = BlitImageInfo2KHR
+  { -- | @srcImage@ is the source image.
+    srcImage :: Image
+  , -- | @srcImageLayout@ is the layout of the source image subresources for the
+    -- blit.
+    srcImageLayout :: ImageLayout
+  , -- | @dstImage@ is the destination image.
+    dstImage :: Image
+  , -- | @dstImageLayout@ is the layout of the destination image subresources for
+    -- the blit.
+    dstImageLayout :: ImageLayout
+  , -- | @pRegions@ is a pointer to an array of 'ImageBlit2KHR' structures
+    -- specifying the regions to blit.
+    regions :: Vector ImageBlit2KHR
+  , -- | @filter@ is a 'Vulkan.Core10.Enums.Filter.Filter' specifying the filter
+    -- to apply if the blits require scaling.
+    filter' :: Filter
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (BlitImageInfo2KHR)
+#endif
+deriving instance Show BlitImageInfo2KHR
+
+instance ToCStruct BlitImageInfo2KHR where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BlitImageInfo2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (dstImage)
+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (dstImageLayout)
+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))
+    pPRegions' <- ContT $ allocaBytesAligned @ImageBlit2KHR ((Data.Vector.length (regions)) * 96) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (96 * (i)) :: Ptr ImageBlit2KHR) (e) . ($ ())) (regions)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageBlit2KHR))) (pPRegions')
+    lift $ poke ((p `plusPtr` 56 :: Ptr Filter)) (filter')
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (zero)
+    pPRegions' <- ContT $ allocaBytesAligned @ImageBlit2KHR ((Data.Vector.length (mempty)) * 96) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (96 * (i)) :: Ptr ImageBlit2KHR) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageBlit2KHR))) (pPRegions')
+    lift $ poke ((p `plusPtr` 56 :: Ptr Filter)) (zero)
+    lift $ f
+
+instance FromCStruct BlitImageInfo2KHR where
+  peekCStruct p = do
+    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
+    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))
+    dstImage <- peek @Image ((p `plusPtr` 32 :: Ptr Image))
+    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 40 :: Ptr ImageLayout))
+    regionCount <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    pRegions <- peek @(Ptr ImageBlit2KHR) ((p `plusPtr` 48 :: Ptr (Ptr ImageBlit2KHR)))
+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @ImageBlit2KHR ((pRegions `advancePtrBytes` (96 * (i)) :: Ptr ImageBlit2KHR)))
+    filter' <- peek @Filter ((p `plusPtr` 56 :: Ptr Filter))
+    pure $ BlitImageInfo2KHR
+             srcImage srcImageLayout dstImage dstImageLayout pRegions' filter'
+
+instance Zero BlitImageInfo2KHR where
+  zero = BlitImageInfo2KHR
+           zero
+           zero
+           zero
+           zero
+           mempty
+           zero
+
+
+-- | VkCopyBufferToImageInfo2KHR - Structure specifying parameters of a
+-- buffer to image copy command
+--
+-- == Valid Usage
+--
+-- -   @srcBuffer@ /must/ be large enough to contain all buffer locations
+--     that are accessed according to
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,
+--     for each element of @pRegions@
+--
+-- -   The image region specified by each element of @pRegions@ /must/ be a
+--     region that is contained within @dstImage@ if the @dstImage@’s
+--     'Vulkan.Core10.Enums.Format.Format' is not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     and /must/ be a region that is contained within the plane being
+--     copied to if the @dstImage@’s 'Vulkan.Core10.Enums.Format.Format' is
+--     a multi-planar format
+--
+-- -   The union of all source regions, and the union of all destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   @srcBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @dstImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
+--
+-- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstImage@ /must/ have a sample count equal to
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   @dstImageLayout@ /must/ specify the layout of the image subresources
+--     of @dstImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @dstImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+--
+-- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   The @imageSubresource.baseArrayLayer@ +
+--     @imageSubresource.layerCount@ of each element of @pRegions@ /must/
+--     be less than or equal to the @arrayLayers@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   The @imageOffset@ and @imageExtent@ members of each element of
+--     @pRegions@ /must/ respect the image transfer granularity
+--     requirements of @commandBuffer@’s command pool’s queue family, as
+--     described in
+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
+--
+-- -   @dstImage@ /must/ not have been created with @flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- -   If the queue family used to create the
+--     'Vulkan.Core10.Handles.CommandPool' which @commandBuffer@ was
+--     allocated from does not support
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a
+--     multiple of @4@
+--
+-- -   If @dstImage@ has a depth\/stencil format, the @bufferOffset@ member
+--     of any element of @pRegions@ /must/ be a multiple of @4@
+--
+-- -   If @dstImage@ does not have either a depth\/stencil or a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a
+--     multiple of the format’s texel block size
+--
+-- -   If @dstImage@ has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a
+--     multiple of the element size of the compatible format for the format
+--     and the @aspectMask@ of the @imageSubresource@ as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>
+--
+-- -   For each element of @pRegions@, @imageOffset.x@ and
+--     (@imageExtent.width@ + @imageOffset.x@) /must/ both be greater than
+--     or equal to @0@ and less than or equal to the width of the specified
+--     @imageSubresource@ of @dstImage@ where this refers to the width of
+--     the /plane/ of the image involved in the copy in the case of a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+--
+-- -   For each element of @pRegions@, @imageOffset.y@ and
+--     (imageExtent.height + @imageOffset.y@) /must/ both be greater than
+--     or equal to @0@ and less than or equal to the height of the
+--     specified @imageSubresource@ of @dstImage@ where this refers to the
+--     height of the /plane/ of the image involved in the copy in the case
+--     of a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @imageOffset.y@ /must/ be @0@ and
+--     @imageExtent.height@ /must/ be @1@
+--
+-- -   For each element of @pRegions@, @imageOffset.z@ and
+--     (imageExtent.depth + @imageOffset.z@) /must/ both be greater than or
+--     equal to @0@ and less than or equal to the depth of the specified
+--     @imageSubresource@ of @dstImage@
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element
+--     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@
+--     /must/ be @1@
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ /must/ be a
+--     multiple of the compressed texel block width
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferImageHeight@ /must/ be a
+--     multiple of the compressed texel block height
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, all members of @imageOffset@ /must/
+--     be a multiple of the corresponding dimensions of the compressed
+--     texel block
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple
+--     of the compressed texel block size in bytes
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @imageExtent.width@ /must/ be a
+--     multiple of the compressed texel block width or (@imageExtent.width@
+--     + @imageOffset.x@) /must/ equal the width of the specified
+--     @imageSubresource@ of @dstImage@
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @imageExtent.height@ /must/ be a
+--     multiple of the compressed texel block height or
+--     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of
+--     the specified @imageSubresource@ of @dstImage@
+--
+-- -   If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @imageExtent.depth@ /must/ be a
+--     multiple of the compressed texel block depth or (@imageExtent.depth@
+--     + @imageOffset.z@) /must/ equal the depth of the specified
+--     @imageSubresource@ of @dstImage@
+--
+-- -   For each element of @pRegions@, @imageSubresource.aspectMask@ /must/
+--     specify aspects present in @dstImage@
+--
+-- -   If @dstImage@ has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     then for each element of @pRegions@, @imageSubresource.aspectMask@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--     (with
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--     valid only for image formats with three planes)
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each element of
+--     @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be @0@ and
+--     @imageSubresource.layerCount@ /must/ be @1@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'BufferImageCopy2KHR' structures
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Both of @dstImage@, and @srcBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy2KHR',
+-- 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdCopyBufferToImage2KHR'
+data CopyBufferToImageInfo2KHR = CopyBufferToImageInfo2KHR
+  { -- | @srcBuffer@ is the source buffer.
+    srcBuffer :: Buffer
+  , -- | @dstImage@ is the destination image.
+    dstImage :: Image
+  , -- | @dstImageLayout@ is the layout of the destination image subresources for
+    -- the copy.
+    dstImageLayout :: ImageLayout
+  , -- | @pRegions@ is a pointer to an array of 'BufferImageCopy2KHR' structures
+    -- specifying the regions to copy.
+    regions :: Vector BufferImageCopy2KHR
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (CopyBufferToImageInfo2KHR)
+#endif
+deriving instance Show CopyBufferToImageInfo2KHR
+
+instance ToCStruct CopyBufferToImageInfo2KHR where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CopyBufferToImageInfo2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (srcBuffer)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (dstImage)
+    lift $ poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (dstImageLayout)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))
+    pPRegions' <- ContT $ allocaBytesAligned @BufferImageCopy2KHR ((Data.Vector.length (regions)) * 72) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (72 * (i)) :: Ptr BufferImageCopy2KHR) (e) . ($ ())) (regions)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr BufferImageCopy2KHR))) (pPRegions')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (zero)
+    pPRegions' <- ContT $ allocaBytesAligned @BufferImageCopy2KHR ((Data.Vector.length (mempty)) * 72) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (72 * (i)) :: Ptr BufferImageCopy2KHR) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr BufferImageCopy2KHR))) (pPRegions')
+    lift $ f
+
+instance FromCStruct CopyBufferToImageInfo2KHR where
+  peekCStruct p = do
+    srcBuffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
+    dstImage <- peek @Image ((p `plusPtr` 24 :: Ptr Image))
+    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 32 :: Ptr ImageLayout))
+    regionCount <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    pRegions <- peek @(Ptr BufferImageCopy2KHR) ((p `plusPtr` 40 :: Ptr (Ptr BufferImageCopy2KHR)))
+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @BufferImageCopy2KHR ((pRegions `advancePtrBytes` (72 * (i)) :: Ptr BufferImageCopy2KHR)))
+    pure $ CopyBufferToImageInfo2KHR
+             srcBuffer dstImage dstImageLayout pRegions'
+
+instance Zero CopyBufferToImageInfo2KHR where
+  zero = CopyBufferToImageInfo2KHR
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkCopyImageToBufferInfo2KHR - Structure specifying parameters of a image
+-- to buffer copy command
+--
+-- == Valid Usage
+--
+-- -   @dstBuffer@ /must/ be large enough to contain all buffer locations
+--     that are accessed according to
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,
+--     for each element of @pRegions@
+--
+-- -   The image region specified by each element of @pRegions@ /must/ be a
+--     region that is contained within @srcImage@ if the @srcImage@’s
+--     'Vulkan.Core10.Enums.Format.Format' is not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     and /must/ be a region that is contained within the plane being
+--     copied if the @srcImage@’s 'Vulkan.Core10.Enums.Format.Format' is a
+--     multi-planar format
+--
+-- -   The union of all source regions, and the union of all destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   @srcImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'
+--
+-- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @srcImage@ /must/ have a sample count equal to
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   @srcImageLayout@ /must/ specify the layout of the image subresources
+--     of @srcImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @srcImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+--
+-- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   The @imageSubresource.baseArrayLayer@ +
+--     @imageSubresource.layerCount@ of each element of @pRegions@ /must/
+--     be less than or equal to the @arrayLayers@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   The @imageOffset@ and @imageExtent@ members of each element of
+--     @pRegions@ /must/ respect the image transfer granularity
+--     requirements of @commandBuffer@’s command pool’s queue family, as
+--     described in
+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
+--
+-- -   @srcImage@ /must/ not have been created with @flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- -   If the queue family used to create the
+--     'Vulkan.Core10.Handles.CommandPool' which @commandBuffer@ was
+--     allocated from does not support
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a
+--     multiple of @4@
+--
+-- -   If @srcImage@ has a depth\/stencil format, the @bufferOffset@ member
+--     of any element of @pRegions@ /must/ be a multiple of @4@
+--
+-- -   If {imageparam} does not have either a depth\/stencil or a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a
+--     multiple of the format’s texel block size
+--
+-- -   If {imageparam} has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a
+--     multiple of the element size of the compatible format for the format
+--     and the @aspectMask@ of the @imageSubresource@ as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>
+--
+-- -   For each element of @pRegions@, @imageOffset.x@ and
+--     (@imageExtent.width@ + @imageOffset.x@) /must/ both be greater than
+--     or equal to @0@ and less than or equal to the width of the specified
+--     @imageSubresource@ of {imageparam} where this refers to the width of
+--     the /plane/ of the image involved in the copy in the case of a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+--
+-- -   For each element of @pRegions@, @imageOffset.y@ and
+--     (imageExtent.height + @imageOffset.y@) /must/ both be greater than
+--     or equal to @0@ and less than or equal to the height of the
+--     specified @imageSubresource@ of {imageparam} where this refers to
+--     the height of the /plane/ of the image involved in the copy in the
+--     case of a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+--
+-- -   If {imageparam} is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @imageOffset.y@ /must/ be @0@ and
+--     @imageExtent.height@ /must/ be @1@
+--
+-- -   For each element of @pRegions@, @imageOffset.z@ and
+--     (imageExtent.depth + @imageOffset.z@) /must/ both be greater than or
+--     equal to @0@ and less than or equal to the depth of the specified
+--     @imageSubresource@ of {imageparam}
+--
+-- -   If {imageparam} is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element
+--     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@
+--     /must/ be @1@
+--
+-- -   If {imageparam} is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ /must/ be a
+--     multiple of the compressed texel block width
+--
+-- -   If {imageparam} is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferImageHeight@ /must/ be a
+--     multiple of the compressed texel block height
+--
+-- -   If {imageparam} is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, all members of @imageOffset@ /must/
+--     be a multiple of the corresponding dimensions of the compressed
+--     texel block
+--
+-- -   If {imageparam} is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple
+--     of the compressed texel block size in bytes
+--
+-- -   If {imageparam} is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @imageExtent.width@ /must/ be a
+--     multiple of the compressed texel block width or (@imageExtent.width@
+--     + @imageOffset.x@) /must/ equal the width of the specified
+--     @imageSubresource@ of {imageparam}
+--
+-- -   If {imageparam} is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @imageExtent.height@ /must/ be a
+--     multiple of the compressed texel block height or
+--     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of
+--     the specified @imageSubresource@ of {imageparam}
+--
+-- -   If {imageparam} is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @imageExtent.depth@ /must/ be a
+--     multiple of the compressed texel block depth or (@imageExtent.depth@
+--     + @imageOffset.z@) /must/ equal the depth of the specified
+--     @imageSubresource@ of {imageparam}
+--
+-- -   For each element of @pRegions@, @imageSubresource.aspectMask@ /must/
+--     specify aspects present in {imageparam}
+--
+-- -   If {imageparam} has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     then for each element of @pRegions@, @imageSubresource.aspectMask@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--     (with
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--     valid only for image formats with three planes)
+--
+-- -   If {imageparam} is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each element of
+--     @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be @0@ and
+--     @imageSubresource.layerCount@ /must/ be @1@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'BufferImageCopy2KHR' structures
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Both of @dstBuffer@, and @srcImage@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy2KHR',
+-- 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdCopyImageToBuffer2KHR'
+data CopyImageToBufferInfo2KHR = CopyImageToBufferInfo2KHR
+  { -- | @srcImage@ is the source image.
+    srcImage :: Image
+  , -- | @srcImageLayout@ is the layout of the source image subresources for the
+    -- copy.
+    srcImageLayout :: ImageLayout
+  , -- | @dstBuffer@ is the destination buffer.
+    dstBuffer :: Buffer
+  , -- | @pRegions@ is a pointer to an array of 'BufferImageCopy2KHR' structures
+    -- specifying the regions to copy.
+    regions :: Vector BufferImageCopy2KHR
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (CopyImageToBufferInfo2KHR)
+#endif
+deriving instance Show CopyImageToBufferInfo2KHR
+
+instance ToCStruct CopyImageToBufferInfo2KHR where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CopyImageToBufferInfo2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Buffer)) (dstBuffer)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))
+    pPRegions' <- ContT $ allocaBytesAligned @BufferImageCopy2KHR ((Data.Vector.length (regions)) * 72) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (72 * (i)) :: Ptr BufferImageCopy2KHR) (e) . ($ ())) (regions)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr BufferImageCopy2KHR))) (pPRegions')
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Buffer)) (zero)
+    pPRegions' <- ContT $ allocaBytesAligned @BufferImageCopy2KHR ((Data.Vector.length (mempty)) * 72) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (72 * (i)) :: Ptr BufferImageCopy2KHR) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr BufferImageCopy2KHR))) (pPRegions')
+    lift $ f
+
+instance FromCStruct CopyImageToBufferInfo2KHR where
+  peekCStruct p = do
+    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
+    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))
+    dstBuffer <- peek @Buffer ((p `plusPtr` 32 :: Ptr Buffer))
+    regionCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    pRegions <- peek @(Ptr BufferImageCopy2KHR) ((p `plusPtr` 48 :: Ptr (Ptr BufferImageCopy2KHR)))
+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @BufferImageCopy2KHR ((pRegions `advancePtrBytes` (72 * (i)) :: Ptr BufferImageCopy2KHR)))
+    pure $ CopyImageToBufferInfo2KHR
+             srcImage srcImageLayout dstBuffer pRegions'
+
+instance Zero CopyImageToBufferInfo2KHR where
+  zero = CopyImageToBufferInfo2KHR
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkResolveImageInfo2KHR - Structure specifying parameters of resolve
+-- image command
+--
+-- == Valid Usage
+--
+-- -   The union of all source regions, and the union of all destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @srcImage@ /must/ have a sample count equal to any valid sample
+--     count value other than
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstImage@ /must/ have a sample count equal to
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   @srcImageLayout@ /must/ specify the layout of the image subresources
+--     of @srcImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @srcImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   @dstImageLayout@ /must/ specify the layout of the image subresources
+--     of @dstImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @dstImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @dstImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--
+-- -   @srcImage@ and @dstImage@ /must/ have been created with the same
+--     image format
+--
+-- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @srcImage@ was created
+--
+-- -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @dstImage@ was created
+--
+-- -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@
+--     containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- -   If either @srcImage@ or @dstImage@ are of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element
+--     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and
+--     @srcSubresource.layerCount@ /must/ be @1@
+--
+-- -   If either @srcImage@ or @dstImage@ are of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element
+--     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and
+--     @dstSubresource.layerCount@ /must/ be @1@
+--
+-- -   For each element of @pRegions@, @srcOffset.x@ and (@extent.width@ +
+--     @srcOffset.x@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the width of the specified @srcSubresource@ of
+--     @srcImage@
+--
+-- -   For each element of @pRegions@, @srcOffset.y@ and (@extent.height@ +
+--     @srcOffset.y@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the height of the specified @srcSubresource@ of
+--     @srcImage@
+--
+-- -   If @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@
+--     /must/ be @1@
+--
+-- -   For each element of @pRegions@, @srcOffset.z@ and (@extent.depth@ +
+--     @srcOffset.z@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the depth of the specified @srcSubresource@ of
+--     @srcImage@
+--
+-- -   If @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element
+--     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/
+--     be @1@
+--
+-- -   For each element of @pRegions@, @dstOffset.x@ and (@extent.width@ +
+--     @dstOffset.x@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the width of the specified @dstSubresource@ of
+--     @dstImage@
+--
+-- -   For each element of @pRegions@, @dstOffset.y@ and (@extent.height@ +
+--     @dstOffset.y@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the height of the specified @dstSubresource@ of
+--     @dstImage@
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element
+--     of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@
+--     /must/ be @1@
+--
+-- -   For each element of @pRegions@, @dstOffset.z@ and (@extent.depth@ +
+--     @dstOffset.z@) /must/ both be greater than or equal to @0@ and less
+--     than or equal to the depth of the specified @dstSubresource@ of
+--     @dstImage@
+--
+-- -   If @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element
+--     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/
+--     be @1@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'ImageResolve2KHR' structures
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Both of @dstImage@, and @srcImage@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout', 'ImageResolve2KHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdResolveImage2KHR'
+data ResolveImageInfo2KHR = ResolveImageInfo2KHR
+  { -- | @srcImage@ is the source image.
+    srcImage :: Image
+  , -- | @srcImageLayout@ is the layout of the source image subresources for the
+    -- resolve.
+    srcImageLayout :: ImageLayout
+  , -- | @dstImage@ is the destination image.
+    dstImage :: Image
+  , -- | @dstImageLayout@ is the layout of the destination image subresources for
+    -- the resolve.
+    dstImageLayout :: ImageLayout
+  , -- | @pRegions@ is a pointer to an array of 'ImageResolve2KHR' structures
+    -- specifying the regions to resolve.
+    regions :: Vector ImageResolve2KHR
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (ResolveImageInfo2KHR)
+#endif
+deriving instance Show ResolveImageInfo2KHR
+
+instance ToCStruct ResolveImageInfo2KHR where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ResolveImageInfo2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (dstImage)
+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (dstImageLayout)
+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))
+    pPRegions' <- ContT $ allocaBytesAligned @ImageResolve2KHR ((Data.Vector.length (regions)) * 88) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (88 * (i)) :: Ptr ImageResolve2KHR) (e) . ($ ())) (regions)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageResolve2KHR))) (pPRegions')
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (zero)
+    pPRegions' <- ContT $ allocaBytesAligned @ImageResolve2KHR ((Data.Vector.length (mempty)) * 88) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (88 * (i)) :: Ptr ImageResolve2KHR) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageResolve2KHR))) (pPRegions')
+    lift $ f
+
+instance FromCStruct ResolveImageInfo2KHR where
+  peekCStruct p = do
+    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
+    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))
+    dstImage <- peek @Image ((p `plusPtr` 32 :: Ptr Image))
+    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 40 :: Ptr ImageLayout))
+    regionCount <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    pRegions <- peek @(Ptr ImageResolve2KHR) ((p `plusPtr` 48 :: Ptr (Ptr ImageResolve2KHR)))
+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @ImageResolve2KHR ((pRegions `advancePtrBytes` (88 * (i)) :: Ptr ImageResolve2KHR)))
+    pure $ ResolveImageInfo2KHR
+             srcImage srcImageLayout dstImage dstImageLayout pRegions'
+
+instance Zero ResolveImageInfo2KHR where
+  zero = ResolveImageInfo2KHR
+           zero
+           zero
+           zero
+           zero
+           mempty
+
+
+type KHR_COPY_COMMANDS_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_COPY_COMMANDS_2_SPEC_VERSION"
+pattern KHR_COPY_COMMANDS_2_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_COPY_COMMANDS_2_SPEC_VERSION = 1
+
+
+type KHR_COPY_COMMANDS_2_EXTENSION_NAME = "VK_KHR_copy_commands2"
+
+-- No documentation found for TopLevel "VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME"
+pattern KHR_COPY_COMMANDS_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_COPY_COMMANDS_2_EXTENSION_NAME = "VK_KHR_copy_commands2"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs-boot b/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs-boot
@@ -0,0 +1,104 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_copy_commands2  ( BlitImageInfo2KHR
+                                                , BufferCopy2KHR
+                                                , BufferImageCopy2KHR
+                                                , CopyBufferInfo2KHR
+                                                , CopyBufferToImageInfo2KHR
+                                                , CopyImageInfo2KHR
+                                                , CopyImageToBufferInfo2KHR
+                                                , ImageBlit2KHR
+                                                , ImageCopy2KHR
+                                                , ImageResolve2KHR
+                                                , ResolveImageInfo2KHR
+                                                ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data BlitImageInfo2KHR
+
+instance ToCStruct BlitImageInfo2KHR
+instance Show BlitImageInfo2KHR
+
+instance FromCStruct BlitImageInfo2KHR
+
+
+data BufferCopy2KHR
+
+instance ToCStruct BufferCopy2KHR
+instance Show BufferCopy2KHR
+
+instance FromCStruct BufferCopy2KHR
+
+
+data BufferImageCopy2KHR
+
+instance ToCStruct BufferImageCopy2KHR
+instance Show BufferImageCopy2KHR
+
+instance FromCStruct BufferImageCopy2KHR
+
+
+data CopyBufferInfo2KHR
+
+instance ToCStruct CopyBufferInfo2KHR
+instance Show CopyBufferInfo2KHR
+
+instance FromCStruct CopyBufferInfo2KHR
+
+
+data CopyBufferToImageInfo2KHR
+
+instance ToCStruct CopyBufferToImageInfo2KHR
+instance Show CopyBufferToImageInfo2KHR
+
+instance FromCStruct CopyBufferToImageInfo2KHR
+
+
+data CopyImageInfo2KHR
+
+instance ToCStruct CopyImageInfo2KHR
+instance Show CopyImageInfo2KHR
+
+instance FromCStruct CopyImageInfo2KHR
+
+
+data CopyImageToBufferInfo2KHR
+
+instance ToCStruct CopyImageToBufferInfo2KHR
+instance Show CopyImageToBufferInfo2KHR
+
+instance FromCStruct CopyImageToBufferInfo2KHR
+
+
+data ImageBlit2KHR
+
+instance ToCStruct ImageBlit2KHR
+instance Show ImageBlit2KHR
+
+instance FromCStruct ImageBlit2KHR
+
+
+data ImageCopy2KHR
+
+instance ToCStruct ImageCopy2KHR
+instance Show ImageCopy2KHR
+
+instance FromCStruct ImageCopy2KHR
+
+
+data ImageResolve2KHR
+
+instance ToCStruct ImageResolve2KHR
+instance Show ImageResolve2KHR
+
+instance FromCStruct ImageResolve2KHR
+
+
+data ResolveImageInfo2KHR
+
+instance ToCStruct ResolveImageInfo2KHR
+instance Show ResolveImageInfo2KHR
+
+instance FromCStruct ResolveImageInfo2KHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_portability_subset.hs b/src/Vulkan/Extensions/VK_KHR_portability_subset.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_portability_subset.hs
@@ -0,0 +1,315 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_portability_subset  ( PhysicalDevicePortabilitySubsetFeaturesKHR(..)
+                                                    , PhysicalDevicePortabilitySubsetPropertiesKHR(..)
+                                                    , KHR_PORTABILITY_SUBSET_SPEC_VERSION
+                                                    , pattern KHR_PORTABILITY_SUBSET_SPEC_VERSION
+                                                    , KHR_PORTABILITY_SUBSET_EXTENSION_NAME
+                                                    , pattern KHR_PORTABILITY_SUBSET_EXTENSION_NAME
+                                                    ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR))
+-- | VkPhysicalDevicePortabilitySubsetFeaturesKHR - Structure describing the
+-- features that may not be supported by an implementation of the Vulkan
+-- 1.0 Portability Subset
+--
+-- = Members
+--
+-- The members of the 'PhysicalDevicePortabilitySubsetFeaturesKHR'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePortabilitySubsetFeaturesKHR' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the features are supported.
+-- 'PhysicalDevicePortabilitySubsetFeaturesKHR' /can/ also be used in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePortabilitySubsetFeaturesKHR = PhysicalDevicePortabilitySubsetFeaturesKHR
+  { -- | @constantAlphaColorBlendFactors@ indicates whether this implementation
+    -- supports constant /alpha/
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors>
+    -- used as source or destination /color/
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blending>.
+    constantAlphaColorBlendFactors :: Bool
+  , -- | @events@ indicates whether this implementation supports synchronization
+    -- using
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-events>.
+    events :: Bool
+  , -- | @imageViewFormatReinterpretation@ indicates whether this implementation
+    -- supports a 'Vulkan.Core10.Handles.ImageView' being created with a texel
+    -- format containing a different number of components, or a different
+    -- number of bits in each component, than the texel format of the
+    -- underlying 'Vulkan.Core10.Handles.Image'.
+    imageViewFormatReinterpretation :: Bool
+  , -- | @imageViewFormatSwizzle@ indicates whether this implementation supports
+    -- remapping format components using
+    -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@components@.
+    imageViewFormatSwizzle :: Bool
+  , -- | @imageView2DOn3DImage@ indicates whether this implementation supports a
+    -- 'Vulkan.Core10.Handles.Image' being created with the
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
+    -- flag set, permitting a 2D or 2D array image view to be created on a 3D
+    -- 'Vulkan.Core10.Handles.Image'.
+    imageView2DOn3DImage :: Bool
+  , -- | @multisampleArrayImage@ indicates whether this implementation supports a
+    -- 'Vulkan.Core10.Handles.Image' being created as a 2D array with multiple
+    -- samples per texel.
+    multisampleArrayImage :: Bool
+  , -- | @mutableComparisonSamplers@ indicates whether this implementation allows
+    -- descriptors with comparison samplers to be
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates updated>.
+    mutableComparisonSamplers :: Bool
+  , -- | @pointPolygons@ indicates whether this implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast>
+    -- using a /point/
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-polygonmode>.
+    pointPolygons :: Bool
+  , -- | @samplerMipLodBias@ indicates whether this implementation supports
+    -- setting a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-mipLodBias mipmap LOD bias value>
+    -- when
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers creating a sampler>.
+    samplerMipLodBias :: Bool
+  , -- | @separateStencilMaskRef@ indicates whether this implementation supports
+    -- separate front and back
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil>
+    -- reference values.
+    separateStencilMaskRef :: Bool
+  , -- | @shaderSampleRateInterpolationFunctions@ indicates whether this
+    -- implementation supports fragment shaders which use the
+    -- @InterpolationFunction@
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table capability>
+    -- and the extended instructions @InterpolateAtCentroid@,
+    -- @InterpolateAtOffset@, and @InterpolateAtSample@ from the @GLSL.std.450@
+    -- extended instruction set. This member is only meaningful if the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sampleRateShading sampleRateShading>
+    -- feature is supported.
+    shaderSampleRateInterpolationFunctions :: Bool
+  , -- | @tessellationIsolines@ indicates whether this implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation-isoline-tessellation isoline output>
+    -- from the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>
+    -- stage of a graphics pipeline. This member is only meaningful if
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+    -- are supported.
+    tessellationIsolines :: Bool
+  , -- | @tessellationPointMode@ indicates whether this implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation-point-mode point output>
+    -- from the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>
+    -- stage of a graphics pipeline. This member is only meaningful if
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+    -- are supported.
+    tessellationPointMode :: Bool
+  , -- | @triangleFans@ indicates whether this implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-fans>
+    -- primitive topology.
+    triangleFans :: Bool
+  , -- | @vertexAttributeAccessBeyondStride@ indicates whether this
+    -- implementation supports accessing a vertex input attribute beyond the
+    -- stride of the corresponding vertex input binding.
+    vertexAttributeAccessBeyondStride :: Bool
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDevicePortabilitySubsetFeaturesKHR)
+#endif
+deriving instance Show PhysicalDevicePortabilitySubsetFeaturesKHR
+
+instance ToCStruct PhysicalDevicePortabilitySubsetFeaturesKHR where
+  withCStruct x f = allocaBytesAligned 80 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePortabilitySubsetFeaturesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (constantAlphaColorBlendFactors))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (events))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (imageViewFormatReinterpretation))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (imageViewFormatSwizzle))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (imageView2DOn3DImage))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (multisampleArrayImage))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (mutableComparisonSamplers))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (pointPolygons))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (samplerMipLodBias))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (separateStencilMaskRef))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (shaderSampleRateInterpolationFunctions))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (tessellationIsolines))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (tessellationPointMode))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (triangleFans))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (vertexAttributeAccessBeyondStride))
+    f
+  cStructSize = 80
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevicePortabilitySubsetFeaturesKHR where
+  peekCStruct p = do
+    constantAlphaColorBlendFactors <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    events <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    imageViewFormatReinterpretation <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    imageViewFormatSwizzle <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    imageView2DOn3DImage <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    multisampleArrayImage <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    mutableComparisonSamplers <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    pointPolygons <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    samplerMipLodBias <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    separateStencilMaskRef <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
+    shaderSampleRateInterpolationFunctions <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    tessellationIsolines <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
+    tessellationPointMode <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))
+    triangleFans <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))
+    vertexAttributeAccessBeyondStride <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))
+    pure $ PhysicalDevicePortabilitySubsetFeaturesKHR
+             (bool32ToBool constantAlphaColorBlendFactors) (bool32ToBool events) (bool32ToBool imageViewFormatReinterpretation) (bool32ToBool imageViewFormatSwizzle) (bool32ToBool imageView2DOn3DImage) (bool32ToBool multisampleArrayImage) (bool32ToBool mutableComparisonSamplers) (bool32ToBool pointPolygons) (bool32ToBool samplerMipLodBias) (bool32ToBool separateStencilMaskRef) (bool32ToBool shaderSampleRateInterpolationFunctions) (bool32ToBool tessellationIsolines) (bool32ToBool tessellationPointMode) (bool32ToBool triangleFans) (bool32ToBool vertexAttributeAccessBeyondStride)
+
+instance Storable PhysicalDevicePortabilitySubsetFeaturesKHR where
+  sizeOf ~_ = 80
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePortabilitySubsetFeaturesKHR where
+  zero = PhysicalDevicePortabilitySubsetFeaturesKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDevicePortabilitySubsetPropertiesKHR - Structure describing
+-- additional properties supported by a portable implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDevicePortabilitySubsetPropertiesKHR'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePortabilitySubsetPropertiesKHR' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePortabilitySubsetPropertiesKHR = PhysicalDevicePortabilitySubsetPropertiesKHR
+  { -- | @minVertexInputBindingStrideAlignment@ indicates the minimum alignment
+    -- for vertex input strides.
+    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@stride@ /must/
+    -- be a multiple of, and at least as large as, this value.
+    minVertexInputBindingStrideAlignment :: Word32 }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDevicePortabilitySubsetPropertiesKHR)
+#endif
+deriving instance Show PhysicalDevicePortabilitySubsetPropertiesKHR
+
+instance ToCStruct PhysicalDevicePortabilitySubsetPropertiesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePortabilitySubsetPropertiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (minVertexInputBindingStrideAlignment)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDevicePortabilitySubsetPropertiesKHR where
+  peekCStruct p = do
+    minVertexInputBindingStrideAlignment <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PhysicalDevicePortabilitySubsetPropertiesKHR
+             minVertexInputBindingStrideAlignment
+
+instance Storable PhysicalDevicePortabilitySubsetPropertiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePortabilitySubsetPropertiesKHR where
+  zero = PhysicalDevicePortabilitySubsetPropertiesKHR
+           zero
+
+
+type KHR_PORTABILITY_SUBSET_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION"
+pattern KHR_PORTABILITY_SUBSET_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_PORTABILITY_SUBSET_SPEC_VERSION = 1
+
+
+type KHR_PORTABILITY_SUBSET_EXTENSION_NAME = "VK_KHR_portability_subset"
+
+-- No documentation found for TopLevel "VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME"
+pattern KHR_PORTABILITY_SUBSET_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_PORTABILITY_SUBSET_EXTENSION_NAME = "VK_KHR_portability_subset"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_portability_subset.hs-boot b/src/Vulkan/Extensions/VK_KHR_portability_subset.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_portability_subset.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_portability_subset  ( PhysicalDevicePortabilitySubsetFeaturesKHR
+                                                    , PhysicalDevicePortabilitySubsetPropertiesKHR
+                                                    ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDevicePortabilitySubsetFeaturesKHR
+
+instance ToCStruct PhysicalDevicePortabilitySubsetFeaturesKHR
+instance Show PhysicalDevicePortabilitySubsetFeaturesKHR
+
+instance FromCStruct PhysicalDevicePortabilitySubsetFeaturesKHR
+
+
+data PhysicalDevicePortabilitySubsetPropertiesKHR
+
+instance ToCStruct PhysicalDevicePortabilitySubsetPropertiesKHR
+instance Show PhysicalDevicePortabilitySubsetPropertiesKHR
+
+instance FromCStruct PhysicalDevicePortabilitySubsetPropertiesKHR
+
diff --git a/src/Vulkan/Version.hs b/src/Vulkan/Version.hs
--- a/src/Vulkan/Version.hs
+++ b/src/Vulkan/Version.hs
@@ -14,11 +14,11 @@
 import Data.Word (Word32)
 
 pattern HEADER_VERSION :: Word32
-pattern HEADER_VERSION = 152
+pattern HEADER_VERSION = 154
 
 
 pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 152
+pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 154
 
 
 pattern MAKE_VERSION :: Word32 -> Word32 -> Word32 -> Word32
diff --git a/vulkan.cabal b/vulkan.cabal
--- a/vulkan.cabal
+++ b/vulkan.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 06be98e0c8372433f3ac2d3c9ad40001abe816143e1d491edc5ac2656e3ad2e4
+-- hash: 78297cbb2ebab10d73e86eb391df435a119a9f23ac6445cccc0d15d85ba0a1d9
 
 name:           vulkan
-version:        3.6.6
+version:        3.6.7
 synopsis:       Bindings to the Vulkan graphics API.
 category:       Graphics
 homepage:       https://github.com/expipiplus1/vulkan#readme
@@ -356,6 +356,7 @@
       Vulkan.Extensions.VK_KHR_android_surface
       Vulkan.Extensions.VK_KHR_bind_memory2
       Vulkan.Extensions.VK_KHR_buffer_device_address
+      Vulkan.Extensions.VK_KHR_copy_commands2
       Vulkan.Extensions.VK_KHR_create_renderpass2
       Vulkan.Extensions.VK_KHR_dedicated_allocation
       Vulkan.Extensions.VK_KHR_deferred_host_operations
@@ -393,6 +394,7 @@
       Vulkan.Extensions.VK_KHR_performance_query
       Vulkan.Extensions.VK_KHR_pipeline_executable_properties
       Vulkan.Extensions.VK_KHR_pipeline_library
+      Vulkan.Extensions.VK_KHR_portability_subset
       Vulkan.Extensions.VK_KHR_push_descriptor
       Vulkan.Extensions.VK_KHR_ray_tracing
       Vulkan.Extensions.VK_KHR_relaxed_block_layout
