diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,9 @@
 
 ## WIP
 
+## [3.11] - 2021-06-21
+- Bump API version to v1.2.182
+
 ## [3.10.4] - 2021-06-14
 - Bump API version to v1.2.181
 
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: vulkan
-version: "3.10.4"
+version: "3.11"
 synopsis: Bindings to the Vulkan graphics API.
 category: Graphics
 maintainer: Joe Hermaszewski <live.long.and.prosper@monoid.al>
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
@@ -59,10 +59,15 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureGeometryAabbsDataKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureGeometryInstancesDataKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureGeometryKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureGeometryMotionTrianglesDataNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureGeometryTrianglesDataKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureInfoNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureInstanceKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureMatrixMotionInstanceNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureMemoryRequirementsInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureMotionInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureMotionInstanceNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureSRTMotionInstanceNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureVersionInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (AcquireNextImageInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (AcquireProfilingLockInfoKHR)
@@ -321,6 +326,8 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryWin32HandlePropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_external_memory (MemoryZirconHandlePropertiesFUCHSIA)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_metal_surface (MetalSurfaceCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (MultiDrawIndexedInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (MultiDrawInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (MultisamplePropertiesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_mutable_descriptor_type (MutableDescriptorTypeCreateInfoVALVE)
 import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_mutable_descriptor_type (MutableDescriptorTypeListVALVE)
@@ -367,6 +374,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_physical_device_drm (PhysicalDeviceDrmPropertiesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state2 (PhysicalDeviceExtendedDynamicState2FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT)
@@ -412,6 +420,8 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceMemoryProperties2)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawPropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_multiview_per_view_attributes (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties)
@@ -433,6 +443,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceProvokingVertexPropertiesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_push_descriptor (PhysicalDevicePushDescriptorPropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_query (PhysicalDeviceRayQueryFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (PhysicalDeviceRayTracingMotionBlurFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelineFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelinePropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (PhysicalDeviceRayTracingPropertiesNV)
@@ -572,6 +583,7 @@
 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_NV_ray_tracing_motion_blur (SRTDataNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
 import {-# SOURCE #-} Vulkan.Core10.Sampler (SamplerCreateInfo)
@@ -771,6 +783,8 @@
 
 
 type family Extends (a :: [Type] -> Type) (b :: Type) :: Constraint where
+  Extends AccelerationStructureCreateInfoKHR AccelerationStructureMotionInfoNV = ()
+  Extends AccelerationStructureGeometryTrianglesDataKHR AccelerationStructureGeometryMotionTrianglesDataNV = ()
   Extends AndroidHardwareBufferPropertiesANDROID AndroidHardwareBufferFormatPropertiesANDROID = ()
   Extends AttachmentDescription2 AttachmentDescriptionStencilLayout = ()
   Extends AttachmentReference2 AttachmentReferenceStencilLayout = ()
@@ -809,6 +823,7 @@
   Extends DeviceCreateInfo PhysicalDeviceSamplerYcbcrConversionFeatures = ()
   Extends DeviceCreateInfo PhysicalDeviceProtectedMemoryFeatures = ()
   Extends DeviceCreateInfo PhysicalDeviceBlendOperationAdvancedFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceMultiDrawFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceInlineUniformBlockFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceShaderDrawParametersFeatures = ()
   Extends DeviceCreateInfo PhysicalDeviceShaderFloat16Int8Features = ()
@@ -890,6 +905,7 @@
   Extends DeviceCreateInfo PhysicalDeviceInheritedViewportScissorFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceProvokingVertexFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceRayTracingMotionBlurFeaturesNV = ()
   Extends DeviceQueueCreateInfo DeviceQueueGlobalPriorityCreateInfoEXT = ()
   Extends FenceCreateInfo ExportFenceCreateInfo = ()
   Extends FenceCreateInfo ExportFenceWin32HandleInfoKHR = ()
@@ -953,6 +969,7 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceSamplerYcbcrConversionFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceProtectedMemoryFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceBlendOperationAdvancedFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceMultiDrawFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceInlineUniformBlockFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderDrawParametersFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderFloat16Int8Features = ()
@@ -1039,6 +1056,7 @@
   Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceImageViewImageFormatInfoEXT = ()
   Extends PhysicalDeviceMemoryProperties2 PhysicalDeviceMemoryBudgetPropertiesEXT = ()
   Extends PhysicalDeviceProperties2 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceMultiDrawPropertiesEXT = ()
   Extends PhysicalDeviceProperties2 PhysicalDevicePushDescriptorPropertiesKHR = ()
   Extends PhysicalDeviceProperties2 PhysicalDeviceDriverProperties = ()
   Extends PhysicalDeviceProperties2 PhysicalDeviceIDProperties = ()
@@ -1085,6 +1103,8 @@
   Extends PhysicalDeviceProperties2 PhysicalDeviceFragmentShadingRatePropertiesKHR = ()
   Extends PhysicalDeviceProperties2 PhysicalDeviceFragmentShadingRateEnumsPropertiesNV = ()
   Extends PhysicalDeviceProperties2 PhysicalDeviceProvokingVertexPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceDrmPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceRayTracingMotionBlurFeaturesNV = ()
   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveInfoEXT = ()
   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveWin32InfoEXT = ()
   Extends PipelineColorBlendStateCreateInfo PipelineColorBlendAdvancedStateCreateInfoEXT = ()
@@ -1280,6 +1300,7 @@
   STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT -> go @DevicePrivateDataCreateInfoEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT -> go @PhysicalDevicePrivateDataFeaturesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV -> go @PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT -> go @PhysicalDeviceMultiDrawPropertiesEXT
   STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV -> go @GraphicsPipelineShaderGroupsCreateInfoNV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 -> go @(PhysicalDeviceFeatures2 '[])
   STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR -> go @PhysicalDevicePushDescriptorPropertiesKHR
@@ -1353,6 +1374,7 @@
   STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT -> go @PhysicalDeviceSampleLocationsPropertiesEXT
   STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO -> go @SamplerReductionModeCreateInfo
   STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT -> go @PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT -> go @PhysicalDeviceMultiDrawFeaturesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT -> go @PhysicalDeviceBlendOperationAdvancedPropertiesEXT
   STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT -> go @PipelineColorBlendAdvancedStateCreateInfoEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT -> go @PhysicalDeviceInlineUniformBlockFeaturesEXT
@@ -1546,6 +1568,10 @@
   STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT -> go @PhysicalDeviceProvokingVertexFeaturesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT -> go @PhysicalDeviceProvokingVertexPropertiesEXT
   STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT -> go @PipelineRasterizationProvokingVertexStateCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT -> go @PhysicalDeviceDrmPropertiesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV -> go @PhysicalDeviceRayTracingMotionBlurFeaturesNV
+  STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV -> throwIO $ IOError Nothing InvalidArgument "peekChainHead" ("struct type STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV contains an undiscriminated union (DeviceOrHostAddressConstKHR) and can't be safely peeked") Nothing Nothing
+  STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV -> go @AccelerationStructureMotionInfoNV
   t -> throwIO $ IOError Nothing InvalidArgument "peekChainHead" ("Unrecognized struct type: " <> show t) Nothing Nothing
  where
   go :: forall e . (Typeable e, FromCStruct e, ToCStruct e, Show e) => IO b
@@ -1616,6 +1642,7 @@
 {-# complete (::&) :: DevicePrivateDataCreateInfoEXT #-}
 {-# complete (::&) :: PhysicalDevicePrivateDataFeaturesEXT #-}
 {-# complete (::&) :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV #-}
+{-# complete (::&) :: PhysicalDeviceMultiDrawPropertiesEXT #-}
 {-# complete (::&) :: GraphicsPipelineShaderGroupsCreateInfoNV #-}
 {-# complete (::&) :: PhysicalDeviceFeatures2 #-}
 {-# complete (::&) :: PhysicalDevicePushDescriptorPropertiesKHR #-}
@@ -1689,6 +1716,7 @@
 {-# complete (::&) :: PhysicalDeviceSampleLocationsPropertiesEXT #-}
 {-# complete (::&) :: SamplerReductionModeCreateInfo #-}
 {-# complete (::&) :: PhysicalDeviceBlendOperationAdvancedFeaturesEXT #-}
+{-# complete (::&) :: PhysicalDeviceMultiDrawFeaturesEXT #-}
 {-# complete (::&) :: PhysicalDeviceBlendOperationAdvancedPropertiesEXT #-}
 {-# complete (::&) :: PipelineColorBlendAdvancedStateCreateInfoEXT #-}
 {-# complete (::&) :: PhysicalDeviceInlineUniformBlockFeaturesEXT #-}
@@ -1882,6 +1910,10 @@
 {-# complete (::&) :: PhysicalDeviceProvokingVertexFeaturesEXT #-}
 {-# complete (::&) :: PhysicalDeviceProvokingVertexPropertiesEXT #-}
 {-# complete (::&) :: PipelineRasterizationProvokingVertexStateCreateInfoEXT #-}
+{-# complete (::&) :: PhysicalDeviceDrmPropertiesEXT #-}
+{-# complete (::&) :: PhysicalDeviceRayTracingMotionBlurFeaturesNV #-}
+{-# complete (::&) :: AccelerationStructureGeometryMotionTrianglesDataNV #-}
+{-# complete (::&) :: AccelerationStructureMotionInfoNV #-}
 
 -- | 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
@@ -2894,11 +2894,11 @@
 --     within the corresponding vertex buffer binding, as described in
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
 --
--- -   #VUID-vkCmdDrawIndexed-indexSize-00463# (@indexSize@ × (@firstIndex@
---     + @indexCount@) + @offset@) /must/ be less than or equal to the size
---     of the bound index buffer, with @indexSize@ being based on the type
---     specified by @indexType@, where the index buffer, @indexType@, and
---     @offset@ are specified via 'cmdBindIndexBuffer'
+-- -   #VUID-vkCmdDrawIndexed-firstIndex-04932# (@indexSize@ ×
+--     (@firstIndex@ + @indexCount@) + @offset@) /must/ be less than or
+--     equal to the size of the bound index buffer, with @indexSize@ being
+--     based on the type specified by @indexType@, where the index buffer,
+--     @indexType@, and @offset@ are specified via 'cmdBindIndexBuffer'
 --
 -- == Valid Usage (Implicit)
 --
@@ -9535,13 +9535,13 @@
 -- at any specific stage of the pipeline, it /may/ instead do so at any
 -- logically later stage.
 --
--- Timestamps /may/ only be meaningfully compared if they are written by
--- commands submitted to the same queue.
+-- Comparisons between timestamps are not meaningful if the timestamps are
+-- written by commands submitted to different queues.
 --
 -- Note
 --
--- An example of such a comparison is determining the execution time of a
--- sequence of commands.
+-- An example of such a comparison is subtracting an older timestamp from a
+-- newer one to determine the execution time of a sequence of commands.
 --
 -- If 'cmdWriteTimestamp' is called while executing a render pass instance
 -- that has multiview enabled, the timestamp uses N consecutive query
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
@@ -129,6 +129,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_mutable_descriptor_type (PhysicalDeviceMutableDescriptorTypeFeaturesVALVE)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR)
@@ -139,6 +140,7 @@
 import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceProvokingVertexFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_query (PhysicalDeviceRayQueryFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (PhysicalDeviceRayTracingMotionBlurFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelineFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PhysicalDeviceRepresentativeFragmentTestFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2FeaturesEXT)
@@ -752,6 +754,7 @@
 --     'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
 --     'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
 --     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
+--     'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawFeaturesEXT',
 --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
 --     'Vulkan.Extensions.VK_VALVE_mutable_descriptor_type.PhysicalDeviceMutableDescriptorTypeFeaturesVALVE',
 --     'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR',
@@ -762,6 +765,7 @@
 --     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
 --     'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexFeaturesEXT',
 --     'Vulkan.Extensions.VK_KHR_ray_query.PhysicalDeviceRayQueryFeaturesKHR',
+--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV',
 --     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelineFeaturesKHR',
 --     'Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
 --     'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT',
@@ -783,6 +787,7 @@
 --     'Vulkan.Extensions.VK_KHR_shader_terminate_invocation.PhysicalDeviceShaderTerminateInvocationFeaturesKHR',
 --     'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImageFeaturesNV',
 --     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT',
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceSubpassShadingFeaturesHUAWEI VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>,
 --     'Vulkan.Extensions.VK_KHR_synchronization2.PhysicalDeviceSynchronization2FeaturesKHR',
 --     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
 --     'Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT',
@@ -879,6 +884,7 @@
   getNext DeviceCreateInfo{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceRayTracingMotionBlurFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceProvokingVertexFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceInheritedViewportScissorFeaturesNV = Just f
@@ -960,6 +966,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMultiDrawFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f
diff --git a/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs b/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs
--- a/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs
+++ b/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs
@@ -4,6 +4,7 @@
                                                    , PipelineCreateFlagBits( PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT
                                                                            , PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT
                                                                            , PIPELINE_CREATE_DERIVATIVE_BIT
+                                                                           , PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
                                                                            , PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
                                                                            , PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT
                                                                            , PIPELINE_CREATE_LIBRARY_BIT_KHR
@@ -147,6 +148,9 @@
 --     corresponding pipeline rather than continuing to create additional
 --     pipelines.
 --
+-- -   'PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' specifies that the
+--     pipeline is allowed to use OpTraceRaysMotionNV.
+--
 -- It is valid to set both 'PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT' and
 -- 'PIPELINE_CREATE_DERIVATIVE_BIT'. This allows a pipeline to be both a
 -- parent and possibly a child in a pipeline hierarchy. See
@@ -165,6 +169,8 @@
 pattern PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                       = PipelineCreateFlagBits 0x00000002
 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DERIVATIVE_BIT"
 pattern PIPELINE_CREATE_DERIVATIVE_BIT                              = PipelineCreateFlagBits 0x00000004
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV"
+pattern PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV             = PipelineCreateFlagBits 0x00100000
 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT"
 pattern PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT             = PipelineCreateFlagBits 0x00000200
 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT"
@@ -209,6 +215,7 @@
   [ (PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT                 , "DISABLE_OPTIMIZATION_BIT")
   , (PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                    , "ALLOW_DERIVATIVES_BIT")
   , (PIPELINE_CREATE_DERIVATIVE_BIT                           , "DERIVATIVE_BIT")
+  , (PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV          , "RAY_TRACING_ALLOW_MOTION_BIT_NV")
   , (PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT          , "EARLY_RETURN_ON_FAILURE_BIT_EXT")
   , (PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT, "FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT")
   , (PIPELINE_CREATE_LIBRARY_BIT_KHR                          , "LIBRARY_BIT_KHR")
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
@@ -49,6 +49,8 @@
                                                         , STRUCTURE_TYPE_MEMORY_BARRIER
                                                         , STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
                                                         , STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT
                                                         , STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT
                                                         , STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT
@@ -60,6 +62,7 @@
                                                         , STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA
                                                         , STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA
                                                         , STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT
                                                         , STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT
                                                         , STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT
@@ -84,6 +87,9 @@
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV
                                                         , STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV
@@ -533,9 +539,11 @@
 -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryAabbsDataKHR',
 -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryInstancesDataKHR',
 -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV',
 -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryTrianglesDataKHR',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureInfoNV',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureMemoryRequirementsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV',
 -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureVersionInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR',
 -- 'Vulkan.Extensions.VK_KHR_performance_query.AcquireProfilingLockInfoKHR',
@@ -786,6 +794,7 @@
 -- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_discard_rectangles.PhysicalDeviceDiscardRectanglePropertiesEXT',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
+-- 'Vulkan.Extensions.VK_EXT_physical_device_drm.PhysicalDeviceDrmPropertiesEXT',
 -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',
@@ -828,6 +837,8 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceMemoryProperties2',
 -- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
 -- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV',
+-- 'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawPropertiesEXT',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
 -- 'Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties',
@@ -848,6 +859,7 @@
 -- 'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexPropertiesEXT',
 -- 'Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR',
 -- 'Vulkan.Extensions.VK_KHR_ray_query.PhysicalDeviceRayQueryFeaturesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelineFeaturesKHR',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV',
@@ -881,6 +893,8 @@
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
 -- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlPropertiesEXT',
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceSubpassShadingFeaturesHUAWEI VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceSubpassShadingPropertiesHUAWEI VkPhysicalDeviceSubpassShadingPropertiesHUAWEI>,
 -- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR',
 -- 'Vulkan.Extensions.VK_KHR_synchronization2.PhysicalDeviceSynchronization2FeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
@@ -1007,6 +1021,7 @@
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassEndInfo',
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkSubpassShadingPipelineCreateInfoHUAWEI VkSubpassShadingPipelineCreateInfoHUAWEI>,
 -- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT',
 -- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR',
 -- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT',
@@ -1178,6 +1193,10 @@
 pattern STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO               = StructureType 47
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"
 pattern STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                 = StructureType 48
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT = StructureType 1000392001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT   = StructureType 1000392000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT"
 pattern STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = StructureType 1000388001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT"
@@ -1200,6 +1219,8 @@
 pattern STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA   = StructureType 1000364001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA"
 pattern STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA  = StructureType 1000364000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT        = StructureType 1000353000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT"
 pattern STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT  = StructureType 1000352002
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT"
@@ -1248,6 +1269,12 @@
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = StructureType 1000332000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = StructureType 1000330000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV     = StructureType 1000327002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV = StructureType 1000327001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV = StructureType 1000327000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV"
 pattern STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = StructureType 1000326002
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV"
@@ -2147,6 +2174,8 @@
              STRUCTURE_TYPE_MEMORY_BARRIER,
              STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO,
              STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT,
              STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT,
              STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT,
@@ -2158,6 +2187,7 @@
              STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
              STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA,
              STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT,
              STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT,
              STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT,
@@ -2182,6 +2212,9 @@
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV,
              STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV,
@@ -2665,6 +2698,8 @@
   , (STRUCTURE_TYPE_MEMORY_BARRIER                           , "MEMORY_BARRIER")
   , (STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO              , "LOADER_INSTANCE_CREATE_INFO")
   , (STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                , "LOADER_DEVICE_CREATE_INFO")
+  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT, "PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT")
+  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT  , "PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT")
   , (STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT, "QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT")
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT
     , "PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT"
@@ -2680,6 +2715,7 @@
   , (STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA      , "MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA")
   , (STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA    , "MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA")
   , (STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA   , "IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA")
+  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT         , "PHYSICAL_DEVICE_DRM_PROPERTIES_EXT")
   , (STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT   , "VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT")
   , (STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT     , "VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT")
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT
@@ -2715,6 +2751,13 @@
     )
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT
     , "PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT"
+    )
+  , (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV, "ACCELERATION_STRUCTURE_MOTION_INFO_NV")
+  , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV
+    , "PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV"
+    )
+  , ( STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV
+    , "ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV"
     )
   , ( STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV
     , "PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV"
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
@@ -201,7 +201,8 @@
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoPictureResourceKHR VkVideoPictureResourceKHR>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoSessionCreateInfoKHR VkVideoSessionCreateInfoKHR>,
 -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR',
--- 'Vulkan.Core10.Pass.getRenderAreaGranularity'
+-- 'Vulkan.Core10.Pass.getRenderAreaGranularity',
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkGetSubpassShadingMaxWorkgroupSizeHUAWEI vkGetSubpassShadingMaxWorkgroupSizeHUAWEI>
 data Extent2D = Extent2D
   { -- | @width@ is the width of the extent.
     width :: Word32
@@ -431,6 +432,7 @@
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT',
 -- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_physical_device_drm.PhysicalDeviceDrmPropertiesEXT',
 -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',
@@ -458,6 +460,7 @@
 -- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
 -- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawFeaturesEXT',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
 -- 'Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
 -- 'Vulkan.Extensions.VK_VALVE_mutable_descriptor_type.PhysicalDeviceMutableDescriptorTypeFeaturesVALVE',
@@ -472,6 +475,7 @@
 -- 'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexFeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexPropertiesEXT',
 -- 'Vulkan.Extensions.VK_KHR_ray_query.PhysicalDeviceRayQueryFeaturesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelineFeaturesKHR',
 -- 'Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT',
@@ -497,6 +501,7 @@
 -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceSparseProperties',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
 -- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT',
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceSubpassShadingFeaturesHUAWEI VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>,
 -- 'Vulkan.Extensions.VK_KHR_synchronization2.PhysicalDeviceSynchronization2FeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
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
@@ -124,6 +124,7 @@
 --
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
+-- 'Vulkan.Extensions.VK_EXT_acquire_drm_display.acquireDrmDisplayEXT',
 -- 'Vulkan.Extensions.VK_NV_acquire_winrt_display.acquireWinrtDisplayNV',
 -- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.acquireXlibDisplayEXT',
 -- 'Vulkan.Core10.Device.createDevice',
@@ -137,6 +138,7 @@
 -- 'Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayPlaneCapabilities2KHR',
 -- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR',
 -- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneSupportedDisplaysKHR',
+-- 'Vulkan.Extensions.VK_EXT_acquire_drm_display.getDrmDisplayEXT',
 -- 'Vulkan.Extensions.VK_EXT_calibrated_timestamps.getPhysicalDeviceCalibrateableTimeDomainsEXT',
 -- 'Vulkan.Extensions.VK_NV_cooperative_matrix.getPhysicalDeviceCooperativeMatrixPropertiesNV',
 -- 'Vulkan.Extensions.VK_EXT_directfb_surface.getPhysicalDeviceDirectFBPresentationSupportEXT',
@@ -550,6 +552,8 @@
 -- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
 -- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
 -- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksNV',
+-- 'Vulkan.Extensions.VK_EXT_multi_draw.cmdDrawMultiEXT',
+-- 'Vulkan.Extensions.VK_EXT_multi_draw.cmdDrawMultiIndexedEXT',
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR>,
 -- 'Vulkan.Extensions.VK_EXT_conditional_rendering.cmdEndConditionalRenderingEXT',
 -- 'Vulkan.Extensions.VK_EXT_debug_utils.cmdEndDebugUtilsLabelEXT',
@@ -623,6 +627,7 @@
 -- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV',
 -- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV',
 -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT',
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI>,
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysIndirectKHR',
 -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysKHR',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV',
@@ -1134,11 +1139,13 @@
 -- 'Vulkan.Core10.Pass.FramebufferCreateInfo',
 -- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
 -- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkSubpassShadingPipelineCreateInfoHUAWEI VkSubpassShadingPipelineCreateInfoHUAWEI>,
 -- 'Vulkan.Core10.Pass.createRenderPass',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.createRenderPass2',
 -- 'Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR',
 -- 'Vulkan.Core10.Pass.destroyRenderPass',
--- 'Vulkan.Core10.Pass.getRenderAreaGranularity'
+-- 'Vulkan.Core10.Pass.getRenderAreaGranularity',
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkGetSubpassShadingMaxWorkgroupSizeHUAWEI vkGetSubpassShadingMaxWorkgroupSizeHUAWEI>
 newtype RenderPass = RenderPass Word64
   deriving newtype (Eq, Ord, Storable, Zero)
   deriving anyclass (IsHandle)
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
@@ -540,15 +540,18 @@
 --
 --     -   If @tiling@ is
 --         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR', then
---         @imageCreateMaybeLinear@ is @true@.
+--         @imageCreateMaybeLinear@ is
+--         'Vulkan.Core10.FundamentalTypes.TRUE'.
 --
 --     -   If @tiling@ is
 --         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then
---         @imageCreateMaybeLinear@ is @false@.
+--         @imageCreateMaybeLinear@ is
+--         'Vulkan.Core10.FundamentalTypes.FALSE'.
 --
 --     -   If @tiling@ is
 --         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---         then @imageCreateMaybeLinear_@ is @true@ if and only if
+--         then @imageCreateMaybeLinear@ is
+--         'Vulkan.Core10.FundamentalTypes.TRUE' if and only if
 --         @imageCreateDrmFormatModifiers@ contains
 --         @DRM_FORMAT_MOD_LINEAR@.
 --
@@ -843,7 +846,7 @@
 --     @mipLevels@ /must/ be equal to @1@, and @imageCreateMaybeLinear@ (as
 --     defined in
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---     /must/ be @false@,
+--     /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE',
 --
 -- -   #VUID-VkImageCreateInfo-samples-02558# If @samples@ is not
 --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT',
@@ -1045,7 +1048,7 @@
 --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'.
 --     and @imageCreateMaybeLinear@ (as defined in
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---     /must/ be @false@
+--     /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE'
 --
 -- -   #VUID-VkImageCreateInfo-flags-01572# If @flags@ contains
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT',
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
@@ -1338,6 +1338,10 @@
 --     include
 --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR'
 --
+-- -   #VUID-VkComputePipelineCreateInfo-flags-04945# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV'
+--
 -- -   #VUID-VkComputePipelineCreateInfo-flags-02874# @flags@ /must/ not
 --     include
 --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
@@ -1358,9 +1362,10 @@
 -- -   #VUID-VkComputePipelineCreateInfo-pNext-pNext# Each @pNext@ member
 --     of any structure (including this one) in the @pNext@ chain /must/ be
 --     either @NULL@ or a pointer to a valid instance of
---     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD'
+--     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD',
+--     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT',
 --     or
---     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkSubpassShadingPipelineCreateInfoHUAWEI VkSubpassShadingPipelineCreateInfoHUAWEI>
 --
 -- -   #VUID-VkComputePipelineCreateInfo-sType-unique# The @sType@ value of
 --     each struct in the @pNext@ chain /must/ be unique
@@ -1862,7 +1867,8 @@
   , -- | @primitiveRestartEnable@ controls whether a special vertex index value
     -- is treated as restarting the assembly of primitives. This enable only
     -- applies to indexed draws
-    -- ('Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed' and
+    -- ('Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed',
+    -- 'Vulkan.Extensions.VK_EXT_multi_draw.cmdDrawMultiIndexedEXT', and
     -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'), and the
     -- special index value is either 0xFFFFFFFF when the @indexType@ parameter
     -- of 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer' is equal to
@@ -4111,6 +4117,10 @@
 -- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03577# @flags@ /must/ not
 --     include
 --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-04947# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV'
 --
 -- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03378# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
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
@@ -121,6 +121,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_physical_device_drm (PhysicalDeviceDrmPropertiesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state2 (PhysicalDeviceExtendedDynamicState2FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT)
@@ -157,6 +158,8 @@
 import Vulkan.Core10.DeviceInitialization (PhysicalDeviceMemoryProperties)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawPropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_multiview_per_view_attributes (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties)
@@ -177,6 +180,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceProvokingVertexPropertiesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_push_descriptor (PhysicalDevicePushDescriptorPropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_query (PhysicalDeviceRayQueryFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (PhysicalDeviceRayTracingMotionBlurFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelineFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelinePropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (PhysicalDeviceRayTracingPropertiesNV)
@@ -761,6 +765,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMultiDrawFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f
@@ -829,6 +834,7 @@
 --     'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsPropertiesNV',
 --     'Vulkan.Extensions.VK_EXT_discard_rectangles.PhysicalDeviceDiscardRectanglePropertiesEXT',
 --     'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
+--     'Vulkan.Extensions.VK_EXT_physical_device_drm.PhysicalDeviceDrmPropertiesEXT',
 --     'Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
 --     'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
 --     'Vulkan.Extensions.VK_EXT_fragment_density_map2.PhysicalDeviceFragmentDensityMap2PropertiesEXT',
@@ -840,6 +846,7 @@
 --     'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationPropertiesEXT',
 --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
 --     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV',
+--     'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawPropertiesEXT',
 --     'Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
 --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties',
 --     'Vulkan.Extensions.VK_EXT_pci_bus_info.PhysicalDevicePCIBusInfoPropertiesEXT',
@@ -849,6 +856,7 @@
 --     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
 --     'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexPropertiesEXT',
 --     'Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR',
+--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV',
 --     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR',
 --     'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV',
 --     'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT',
@@ -860,6 +868,7 @@
 --     'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImagePropertiesNV',
 --     'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
 --     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlPropertiesEXT',
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceSubpassShadingPropertiesHUAWEI VkPhysicalDeviceSubpassShadingPropertiesHUAWEI>,
 --     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
 --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreProperties',
 --     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
@@ -898,6 +907,8 @@
   getNext PhysicalDeviceProperties2{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceProperties2 e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceRayTracingMotionBlurFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDrmPropertiesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceProvokingVertexPropertiesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRateEnumsPropertiesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRatePropertiesKHR = Just f
@@ -944,6 +955,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceIDProperties = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDriverProperties = Just f
     | Just Refl <- eqT @e @PhysicalDevicePushDescriptorPropertiesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMultiDrawPropertiesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = Just f
     | otherwise = Nothing
 
diff --git a/src/Vulkan/Dynamic.hs b/src/Vulkan/Dynamic.hs
--- a/src/Vulkan/Dynamic.hs
+++ b/src/Vulkan/Dynamic.hs
@@ -234,6 +234,8 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryWin32HandlePropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_external_memory (MemoryZirconHandlePropertiesFUCHSIA)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_metal_surface (MetalSurfaceCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (MultiDrawIndexedInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (MultiDrawInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (MultisamplePropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core10.Enums.ObjectType (ObjectType)
 import {-# SOURCE #-} Vulkan.Core10.FuncPointers (PFN_vkVoidFunction)
@@ -454,6 +456,8 @@
   , pVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV :: FunPtr (Ptr PhysicalDevice_T -> ("pCombinationCount" ::: Ptr Word32) -> ("pCombinations" ::: Ptr FramebufferMixedSamplesCombinationNV) -> IO Result)
   , pVkGetPhysicalDeviceToolPropertiesEXT :: FunPtr (Ptr PhysicalDevice_T -> ("pToolCount" ::: Ptr Word32) -> ("pToolProperties" ::: Ptr PhysicalDeviceToolPropertiesEXT) -> IO Result)
   , pVkGetPhysicalDeviceFragmentShadingRatesKHR :: FunPtr (Ptr PhysicalDevice_T -> ("pFragmentShadingRateCount" ::: Ptr Word32) -> ("pFragmentShadingRates" ::: Ptr PhysicalDeviceFragmentShadingRateKHR) -> IO Result)
+  , pVkAcquireDrmDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> ("drmFd" ::: Int32) -> DisplayKHR -> IO Result)
+  , pVkGetDrmDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> ("drmFd" ::: Int32) -> ("connectorId" ::: Word32) -> Ptr DisplayKHR -> IO Result)
   }
 
 deriving instance Eq InstanceCmds
@@ -470,7 +474,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 nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
 
 -- | A version of 'getInstanceProcAddr' which can be called
 -- with a null pointer for the instance.
@@ -574,6 +578,8 @@
   vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"#)
   vkGetPhysicalDeviceToolPropertiesEXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceToolPropertiesEXT"#)
   vkGetPhysicalDeviceFragmentShadingRatesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFragmentShadingRatesKHR"#)
+  vkAcquireDrmDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkAcquireDrmDisplayEXT"#)
+  vkGetDrmDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkGetDrmDisplayEXT"#)
   pure $ InstanceCmds handle
     (castFunPtr @_ @(Ptr Instance_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyInstance)
     (castFunPtr @_ @(Ptr Instance_T -> ("pPhysicalDeviceCount" ::: Ptr Word32) -> ("pPhysicalDevices" ::: Ptr (Ptr PhysicalDevice_T)) -> IO Result) vkEnumeratePhysicalDevices)
@@ -660,6 +666,8 @@
     (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pCombinationCount" ::: Ptr Word32) -> ("pCombinations" ::: Ptr FramebufferMixedSamplesCombinationNV) -> IO Result) vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)
     (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pToolCount" ::: Ptr Word32) -> ("pToolProperties" ::: Ptr PhysicalDeviceToolPropertiesEXT) -> IO Result) vkGetPhysicalDeviceToolPropertiesEXT)
     (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pFragmentShadingRateCount" ::: Ptr Word32) -> ("pFragmentShadingRates" ::: Ptr PhysicalDeviceFragmentShadingRateKHR) -> IO Result) vkGetPhysicalDeviceFragmentShadingRatesKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("drmFd" ::: Int32) -> DisplayKHR -> IO Result) vkAcquireDrmDisplayEXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("drmFd" ::: Int32) -> ("connectorId" ::: Word32) -> Ptr DisplayKHR -> IO Result) vkGetDrmDisplayEXT)
 
 data DeviceCmds = DeviceCmds
   { deviceCmdsHandle :: Ptr Device_T
@@ -756,6 +764,8 @@
   , pVkCmdBindVertexBuffers :: FunPtr (Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> IO ())
   , pVkCmdDraw :: FunPtr (Ptr CommandBuffer_T -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ())
   , pVkCmdDrawIndexed :: FunPtr (Ptr CommandBuffer_T -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ())
+  , pVkCmdDrawMultiEXT :: FunPtr (Ptr CommandBuffer_T -> ("drawCount" ::: Word32) -> ("pVertexInfo" ::: Ptr MultiDrawInfoEXT) -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("stride" ::: Word32) -> IO ())
+  , pVkCmdDrawMultiIndexedEXT :: FunPtr (Ptr CommandBuffer_T -> ("drawCount" ::: Word32) -> ("pIndexInfo" ::: Ptr MultiDrawIndexedInfoEXT) -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("stride" ::: Word32) -> ("pVertexOffset" ::: Ptr Int32) -> IO ())
   , pVkCmdDrawIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
   , pVkCmdDrawIndexedIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
   , pVkCmdDispatch :: FunPtr (Ptr CommandBuffer_T -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ())
@@ -948,7 +958,7 @@
   , pVkGetPipelineExecutableStatisticsKHR :: FunPtr (Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pStatisticCount" ::: Ptr Word32) -> ("pStatistics" ::: Ptr PipelineExecutableStatisticKHR) -> IO Result)
   , pVkGetPipelineExecutableInternalRepresentationsKHR :: FunPtr (Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pInternalRepresentationCount" ::: Ptr Word32) -> ("pInternalRepresentations" ::: Ptr PipelineExecutableInternalRepresentationKHR) -> IO Result)
   , pVkCmdSetLineStippleEXT :: FunPtr (Ptr CommandBuffer_T -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> IO ())
-  , pVkCreateAccelerationStructureKHR :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result)
+  , pVkCreateAccelerationStructureKHR :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result)
   , pVkCmdBuildAccelerationStructuresKHR :: FunPtr (Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("ppBuildRangeInfos" ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) -> IO ())
   , pVkCmdBuildAccelerationStructuresIndirectKHR :: FunPtr (Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("pIndirectDeviceAddresses" ::: Ptr DeviceAddress) -> ("pIndirectStrides" ::: Ptr Word32) -> ("ppMaxPrimitiveCounts" ::: Ptr (Ptr Word32)) -> IO ())
   , pVkBuildAccelerationStructuresKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("ppBuildRangeInfos" ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) -> IO Result)
@@ -1051,7 +1061,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 nullFunPtr nullFunPtr nullFunPtr nullFunPtr
 
 foreign import ccall
 #if !defined(SAFE_FOREIGN_CALLS)
@@ -1165,6 +1175,8 @@
   vkCmdBindVertexBuffers <- getDeviceProcAddr' handle (Ptr "vkCmdBindVertexBuffers"#)
   vkCmdDraw <- getDeviceProcAddr' handle (Ptr "vkCmdDraw"#)
   vkCmdDrawIndexed <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexed"#)
+  vkCmdDrawMultiEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMultiEXT"#)
+  vkCmdDrawMultiIndexedEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMultiIndexedEXT"#)
   vkCmdDrawIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndirect"#)
   vkCmdDrawIndexedIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexedIndirect"#)
   vkCmdDispatch <- getDeviceProcAddr' handle (Ptr "vkCmdDispatch"#)
@@ -1506,6 +1518,8 @@
     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> IO ()) vkCmdBindVertexBuffers)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ()) vkCmdDraw)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ()) vkCmdDrawIndexed)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("drawCount" ::: Word32) -> ("pVertexInfo" ::: Ptr MultiDrawInfoEXT) -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawMultiEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("drawCount" ::: Word32) -> ("pIndexInfo" ::: Ptr MultiDrawIndexedInfoEXT) -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("stride" ::: Word32) -> ("pVertexOffset" ::: Ptr Int32) -> IO ()) vkCmdDrawMultiIndexedEXT)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndirect)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndexedIndirect)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()) vkCmdDispatch)
@@ -1698,7 +1712,7 @@
     (castFunPtr @_ @(Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pStatisticCount" ::: Ptr Word32) -> ("pStatistics" ::: Ptr PipelineExecutableStatisticKHR) -> IO Result) vkGetPipelineExecutableStatisticsKHR)
     (castFunPtr @_ @(Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pInternalRepresentationCount" ::: Ptr Word32) -> ("pInternalRepresentations" ::: Ptr PipelineExecutableInternalRepresentationKHR) -> IO Result) vkGetPipelineExecutableInternalRepresentationsKHR)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> IO ()) vkCmdSetLineStippleEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result) vkCreateAccelerationStructureKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result) vkCreateAccelerationStructureKHR)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("ppBuildRangeInfos" ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) -> IO ()) vkCmdBuildAccelerationStructuresKHR)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("pIndirectDeviceAddresses" ::: Ptr DeviceAddress) -> ("pIndirectStrides" ::: Ptr Word32) -> ("ppMaxPrimitiveCounts" ::: Ptr (Ptr Word32)) -> IO ()) vkCmdBuildAccelerationStructuresIndirectKHR)
     (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("ppBuildRangeInfos" ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) -> IO Result) vkBuildAccelerationStructuresKHR)
diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs
--- a/src/Vulkan/Extensions.hs
+++ b/src/Vulkan/Extensions.hs
@@ -25,6 +25,7 @@
                           , module Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
                           , module Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
                           , module Vulkan.Extensions.VK_EXT_4444_formats
+                          , module Vulkan.Extensions.VK_EXT_acquire_drm_display
                           , module Vulkan.Extensions.VK_EXT_acquire_xlib_display
                           , module Vulkan.Extensions.VK_EXT_astc_decode_mode
                           , module Vulkan.Extensions.VK_EXT_blend_operation_advanced
@@ -68,7 +69,9 @@
                           , module Vulkan.Extensions.VK_EXT_memory_budget
                           , module Vulkan.Extensions.VK_EXT_memory_priority
                           , module Vulkan.Extensions.VK_EXT_metal_surface
+                          , module Vulkan.Extensions.VK_EXT_multi_draw
                           , module Vulkan.Extensions.VK_EXT_pci_bus_info
+                          , module Vulkan.Extensions.VK_EXT_physical_device_drm
                           , module Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control
                           , module Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
                           , module Vulkan.Extensions.VK_EXT_post_depth_coverage
@@ -224,6 +227,7 @@
                           , module Vulkan.Extensions.VK_NV_inherited_viewport_scissor
                           , module Vulkan.Extensions.VK_NV_mesh_shader
                           , module Vulkan.Extensions.VK_NV_ray_tracing
+                          , module Vulkan.Extensions.VK_NV_ray_tracing_motion_blur
                           , module Vulkan.Extensions.VK_NV_representative_fragment_test
                           , module Vulkan.Extensions.VK_NV_sample_mask_override_coverage
                           , module Vulkan.Extensions.VK_NV_scissor_exclusive
@@ -266,6 +270,7 @@
 import Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
 import Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
 import Vulkan.Extensions.VK_EXT_4444_formats
+import Vulkan.Extensions.VK_EXT_acquire_drm_display
 import Vulkan.Extensions.VK_EXT_acquire_xlib_display
 import Vulkan.Extensions.VK_EXT_astc_decode_mode
 import Vulkan.Extensions.VK_EXT_blend_operation_advanced
@@ -309,7 +314,9 @@
 import Vulkan.Extensions.VK_EXT_memory_budget
 import Vulkan.Extensions.VK_EXT_memory_priority
 import Vulkan.Extensions.VK_EXT_metal_surface
+import Vulkan.Extensions.VK_EXT_multi_draw
 import Vulkan.Extensions.VK_EXT_pci_bus_info
+import Vulkan.Extensions.VK_EXT_physical_device_drm
 import Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control
 import Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
 import Vulkan.Extensions.VK_EXT_post_depth_coverage
@@ -465,6 +472,7 @@
 import Vulkan.Extensions.VK_NV_inherited_viewport_scissor
 import Vulkan.Extensions.VK_NV_mesh_shader
 import Vulkan.Extensions.VK_NV_ray_tracing
+import Vulkan.Extensions.VK_NV_ray_tracing_motion_blur
 import Vulkan.Extensions.VK_NV_representative_fragment_test
 import Vulkan.Extensions.VK_NV_sample_mask_override_coverage
 import Vulkan.Extensions.VK_NV_scissor_exclusive
diff --git a/src/Vulkan/Extensions/Dependencies.hs b/src/Vulkan/Extensions/Dependencies.hs
--- a/src/Vulkan/Extensions/Dependencies.hs
+++ b/src/Vulkan/Extensions/Dependencies.hs
@@ -14,6 +14,7 @@
 import Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME)
 import Vulkan.Core10 (pattern API_VERSION_1_0)
 import Vulkan.Extensions.VK_EXT_4444_formats (pattern EXT_4444_FORMATS_EXTENSION_NAME)
+import Vulkan.Extensions.VK_EXT_acquire_drm_display (pattern EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_acquire_xlib_display (pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_astc_decode_mode (pattern EXT_ASTC_DECODE_MODE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_buffer_device_address (pattern EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME)
@@ -49,6 +50,7 @@
 import Vulkan.Extensions.VK_EXT_memory_priority (pattern EXT_MEMORY_PRIORITY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_metal_surface (pattern EXT_METAL_SURFACE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_pci_bus_info (pattern EXT_PCI_BUS_INFO_EXTENSION_NAME)
+import Vulkan.Extensions.VK_EXT_physical_device_drm (pattern EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_provoking_vertex (pattern EXT_PROVOKING_VERTEX_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_queue_family_foreign (pattern EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_sampler_filter_minmax (pattern EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME)
@@ -168,6 +170,7 @@
 import Vulkan.Extensions.VK_NV_framebuffer_mixed_samples (pattern NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_mesh_shader (pattern NV_MESH_SHADER_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_ray_tracing (pattern NV_RAY_TRACING_EXTENSION_NAME)
+import Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (pattern NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_scissor_exclusive (pattern NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_shader_image_footprint (pattern NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_shader_sm_builtins (pattern NV_SHADER_SM_BUILTINS_EXTENSION_NAME)
@@ -466,9 +469,11 @@
   EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME             -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME             -> [KHR_SWAPCHAIN_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
   EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME               -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME           -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  KHR_SYNCHRONIZATION_2_EXTENSION_NAME                  -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME   -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME ->
+    [EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, KHR_DISPLAY_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
+  NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME         -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  KHR_SYNCHRONIZATION_2_EXTENSION_NAME                -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME ->
     [ KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME
     , KHR_CREATE_RENDERPASS_2_EXTENSION_NAME
@@ -476,6 +481,17 @@
     , KHR_MULTIVIEW_EXTENSION_NAME
     , KHR_MAINTENANCE2_EXTENSION_NAME
     ]
+  NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME ->
+    [ KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME
+    , KHR_SPIRV_1_4_EXTENSION_NAME
+    , KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME
+    , KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME
+    , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+    , EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME
+    , KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
+    , KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME
+    , KHR_MAINTENANCE3_EXTENSION_NAME
+    ]
   EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME ->
     [ KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME
     , KHR_MAINTENANCE1_EXTENSION_NAME
@@ -496,6 +512,7 @@
   VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME ->
     [KHR_MAINTENANCE3_EXTENSION_NAME, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME        -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME ->
     [ KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
     , KHR_EXTERNAL_MEMORY_EXTENSION_NAME
diff --git a/src/Vulkan/Extensions/Handles.hs b/src/Vulkan/Extensions/Handles.hs
--- a/src/Vulkan/Extensions/Handles.hs
+++ b/src/Vulkan/Extensions/Handles.hs
@@ -262,6 +262,7 @@
 --
 -- 'Vulkan.Extensions.VK_KHR_display.DisplayPlanePropertiesKHR',
 -- 'Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_acquire_drm_display.acquireDrmDisplayEXT',
 -- 'Vulkan.Extensions.VK_NV_acquire_winrt_display.acquireWinrtDisplayNV',
 -- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.acquireXlibDisplayEXT',
 -- 'Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR',
@@ -269,6 +270,7 @@
 -- 'Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayModeProperties2KHR',
 -- 'Vulkan.Extensions.VK_KHR_display.getDisplayModePropertiesKHR',
 -- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneSupportedDisplaysKHR',
+-- 'Vulkan.Extensions.VK_EXT_acquire_drm_display.getDrmDisplayEXT',
 -- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.getRandROutputDisplayEXT',
 -- 'Vulkan.Extensions.VK_NV_acquire_winrt_display.getWinrtDisplayNV',
 -- 'Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT',
diff --git a/src/Vulkan/Extensions/VK_EXT_acquire_drm_display.hs b/src/Vulkan/Extensions/VK_EXT_acquire_drm_display.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_acquire_drm_display.hs
@@ -0,0 +1,266 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_acquire_drm_display - instance extension
+--
+-- == VK_EXT_acquire_drm_display
+--
+-- [__Name String__]
+--     @VK_EXT_acquire_drm_display@
+--
+-- [__Extension Type__]
+--     Instance extension
+--
+-- [__Registered Extension Number__]
+--     286
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_EXT_direct_mode_display@
+--
+-- [__Contact__]
+--
+--     -   Drew DeVault <mailto:sir@cmpwn.com sir\@cmpwn.com>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-06-09
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Simon Zeni, Status Holdings, Ltd.
+--
+-- == Description
+--
+-- This extension allows an application to take exclusive control of a
+-- display using the Direct Rendering Manager (DRM) interface. When
+-- acquired, the display will be under full control of the application
+-- until the display is either released or the connector is unplugged.
+--
+-- == New Commands
+--
+-- -   'acquireDrmDisplayEXT'
+--
+-- -   'getDrmDisplayEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME'
+--
+-- -   'EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION'
+--
+-- == Issues
+--
+-- None.
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-05-11 (Simon Zeni)
+--
+--     -   Initial draft
+--
+-- = See Also
+--
+-- 'acquireDrmDisplayEXT', 'getDrmDisplayEXT'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_acquire_drm_display Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_EXT_acquire_drm_display  ( acquireDrmDisplayEXT
+                                                     , getDrmDisplayEXT
+                                                     , EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION
+                                                     , pattern EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION
+                                                     , EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME
+                                                     , pattern EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME
+                                                     , DisplayKHR(..)
+                                                     ) where
+
+import Vulkan.Internal.Utils (traceAroundEvent)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Foreign.Storable (Storable(peek))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Extensions.Handles (DisplayKHR)
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Dynamic (InstanceCmds(pVkAcquireDrmDisplayEXT))
+import Vulkan.Dynamic (InstanceCmds(pVkGetDrmDisplayEXT))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAcquireDrmDisplayEXT
+  :: FunPtr (Ptr PhysicalDevice_T -> Int32 -> DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Int32 -> DisplayKHR -> IO Result
+
+-- | vkAcquireDrmDisplayEXT - Acquire access to a VkDisplayKHR using DRM
+--
+-- = Description
+--
+-- All permissions necessary to control the display are granted to the
+-- Vulkan instance associated with the provided @physicalDevice@ until the
+-- display is either released or the connector is unplugged. The provided
+-- @drmFd@ must correspond to the one owned by the @physicalDevice@. If
+-- not, the error code 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' must be
+-- returned. The DRM FD must have DRM master permissions. If any error is
+-- encountered during the acquisition of the display, the call must return
+-- the error code 'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'.
+--
+-- The provided DRM fd should not be closed before the display is released,
+-- attempting to do it may result in undefined behaviour.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayKHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+acquireDrmDisplayEXT :: forall io
+                      . (MonadIO io)
+                     => -- | @physicalDevice@ The physical device the display is on.
+                        --
+                        -- #VUID-vkAcquireDrmDisplayEXT-physicalDevice-parameter# @physicalDevice@
+                        -- /must/ be a valid 'Vulkan.Core10.Handles.PhysicalDevice' handle
+                        PhysicalDevice
+                     -> -- | @drmFd@ DRM primary file descriptor.
+                        ("drmFd" ::: Int32)
+                     -> -- | @display@ The display the caller wishes Vulkan to control.
+                        --
+                        -- #VUID-vkAcquireDrmDisplayEXT-display-parameter# @display@ /must/ be a
+                        -- valid 'Vulkan.Extensions.Handles.DisplayKHR' handle
+                        --
+                        -- #VUID-vkAcquireDrmDisplayEXT-display-parent# @display@ /must/ have been
+                        -- created, allocated, or retrieved from @physicalDevice@
+                        DisplayKHR
+                     -> io ()
+acquireDrmDisplayEXT physicalDevice drmFd display = liftIO $ do
+  let vkAcquireDrmDisplayEXTPtr = pVkAcquireDrmDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  unless (vkAcquireDrmDisplayEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAcquireDrmDisplayEXT is null" Nothing Nothing
+  let vkAcquireDrmDisplayEXT' = mkVkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXTPtr
+  r <- traceAroundEvent "vkAcquireDrmDisplayEXT" (vkAcquireDrmDisplayEXT' (physicalDeviceHandle (physicalDevice)) (drmFd) (display))
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDrmDisplayEXT
+  :: FunPtr (Ptr PhysicalDevice_T -> Int32 -> Word32 -> Ptr DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Int32 -> Word32 -> Ptr DisplayKHR -> IO Result
+
+-- | vkGetDrmDisplayEXT - Query the VkDisplayKHR corresponding to a DRM
+-- connector ID
+--
+-- = Description
+--
+-- If there is no 'Vulkan.Extensions.Handles.DisplayKHR' corresponding to
+-- the @connectorId@ on the @physicalDevice@, the returning @display@ must
+-- be set to 'Vulkan.Core10.APIConstants.NULL_HANDLE'. The provided @drmFd@
+-- must correspond to the one owned by the @physicalDevice@. If not, the
+-- error code 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' must be returned.
+-- Master permissions are not required, because the file descriptor is just
+-- used for information gathering purposes. The given @connectorId@ must be
+-- a resource owned by the provided @drmFd@. If not, the error code
+-- 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' must be returned. If any
+-- error is encountered during the identification of the display, the call
+-- must return the error code
+-- 'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayKHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getDrmDisplayEXT :: forall io
+                  . (MonadIO io)
+                 => -- | @physicalDevice@ The physical device to query the display from.
+                    --
+                    -- #VUID-vkGetDrmDisplayEXT-physicalDevice-parameter# @physicalDevice@
+                    -- /must/ be a valid 'Vulkan.Core10.Handles.PhysicalDevice' handle
+                    PhysicalDevice
+                 -> -- | @drmFd@ DRM primary file descriptor.
+                    ("drmFd" ::: Int32)
+                 -> -- | @connectorId@ Identifier of the specified DRM connector.
+                    ("connectorId" ::: Word32)
+                 -> io (DisplayKHR)
+getDrmDisplayEXT physicalDevice drmFd connectorId = liftIO . evalContT $ do
+  let vkGetDrmDisplayEXTPtr = pVkGetDrmDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetDrmDisplayEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDrmDisplayEXT is null" Nothing Nothing
+  let vkGetDrmDisplayEXT' = mkVkGetDrmDisplayEXT vkGetDrmDisplayEXTPtr
+  pDisplay <- ContT $ bracket (callocBytes @DisplayKHR 8) free
+  r <- lift $ traceAroundEvent "vkGetDrmDisplayEXT" (vkGetDrmDisplayEXT' (physicalDeviceHandle (physicalDevice)) (drmFd) (connectorId) (pDisplay))
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  display <- lift $ peek @DisplayKHR pDisplay
+  pure $ (display)
+
+
+type EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION"
+pattern EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION = 1
+
+
+type EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_drm_display"
+
+-- No documentation found for TopLevel "VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME"
+pattern EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_drm_display"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
--- a/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
+++ b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
@@ -250,8 +250,8 @@
     -- means the implementation can use the smallest representable non-zero
     -- value in the screen space pixel fixed-point grid.
     extraPrimitiveOverestimationSizeGranularity :: Float
-  , -- | #limits-primitiveUnderestimation# @primitiveUnderestimation@ is true if
-    -- the implementation supports the
+  , -- | #limits-primitiveUnderestimation# @primitiveUnderestimation@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the
     -- 'CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT' conservative
     -- rasterization mode in addition to
     -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'. Otherwise the
@@ -259,38 +259,41 @@
     -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'.
     primitiveUnderestimation :: Bool
   , -- | #limits-conservativePointAndLineRasterization#
-    -- @conservativePointAndLineRasterization@ is true if the implementation
-    -- supports conservative rasterization of point and line primitives as well
-    -- as triangle primitives. Otherwise the implementation only supports
-    -- triangle primitives.
+    -- @conservativePointAndLineRasterization@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports
+    -- conservative rasterization of point and line primitives as well as
+    -- triangle primitives. Otherwise the implementation only supports triangle
+    -- primitives.
     conservativePointAndLineRasterization :: Bool
   , -- | #limits-degenerateTrianglesRasterized# @degenerateTrianglesRasterized@
     -- is false if the implementation culls primitives generated from triangles
     -- that become zero area after they are quantized to the fixed-point
-    -- rasterization pixel grid. @degenerateTrianglesRasterized@ is true if
-    -- these primitives are not culled and the provoking vertex attributes and
-    -- depth value are used for the fragments. The primitive area calculation
-    -- is done on the primitive generated from the clipped triangle if
-    -- applicable. Zero area primitives are backfacing and the application
-    -- /can/ enable backface culling if desired.
+    -- rasterization pixel grid. @degenerateTrianglesRasterized@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if these primitives are not culled
+    -- and the provoking vertex attributes and depth value are used for the
+    -- fragments. The primitive area calculation is done on the primitive
+    -- generated from the clipped triangle if applicable. Zero area primitives
+    -- are backfacing and the application /can/ enable backface culling if
+    -- desired.
     degenerateTrianglesRasterized :: Bool
   , -- | #limits-degenerateLinesRasterized# @degenerateLinesRasterized@ is false
     -- if the implementation culls lines that become zero length after they are
     -- quantized to the fixed-point rasterization pixel grid.
-    -- @degenerateLinesRasterized@ is true if zero length lines are not culled
-    -- and the provoking vertex attributes and depth value are used for the
-    -- fragments.
+    -- @degenerateLinesRasterized@ is 'Vulkan.Core10.FundamentalTypes.TRUE' if
+    -- zero length lines are not culled and the provoking vertex attributes and
+    -- depth value are used for the fragments.
     degenerateLinesRasterized :: Bool
   , -- | #limits-fullyCoveredFragmentShaderInputVariable#
-    -- @fullyCoveredFragmentShaderInputVariable@ is true if the implementation
-    -- supports the SPIR-V builtin fragment shader input variable
-    -- @FullyCoveredEXT@ which specifies that conservative rasterization is
-    -- enabled and the fragment area is fully covered by the generating
-    -- primitive.
+    -- @fullyCoveredFragmentShaderInputVariable@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the
+    -- SPIR-V builtin fragment shader input variable @FullyCoveredEXT@ which
+    -- specifies that conservative rasterization is enabled and the fragment
+    -- area is fully covered by the generating primitive.
     fullyCoveredFragmentShaderInputVariable :: Bool
   , -- | #limits-conservativeRasterizationPostDepthCoverage#
-    -- @conservativeRasterizationPostDepthCoverage@ is true if the
-    -- implementation supports conservative rasterization with the
+    -- @conservativeRasterizationPostDepthCoverage@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports
+    -- conservative rasterization with the
     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage PostDepthCoverage>
     -- execution mode enabled. When supported the
     -- 'Vulkan.Core10.FundamentalTypes.SampleMask' built-in input variable will
diff --git a/src/Vulkan/Extensions/VK_EXT_multi_draw.hs b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs
@@ -0,0 +1,1719 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_multi_draw - device extension
+--
+-- == VK_EXT_multi_draw
+--
+-- [__Name String__]
+--     @VK_EXT_multi_draw@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     393
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+-- [__Contact__]
+--
+--     -   Mike Blumenkrantz
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_EXT_multi_draw:%20&body=@zmike%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-05-19
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Mike Blumenkrantz, VALVE
+--
+--     -   Piers Daniell, NVIDIA
+--
+--     -   Jason Ekstrand, INTEL
+--
+--     -   Spencer Fricke, SAMSUNG
+--
+--     -   Ricardo Garcia, IGALIA
+--
+--     -   Jon Leech, KHRONOS
+--
+--     -   Stu Smith, AMD
+--
+-- == Description
+--
+-- Processing multiple draw commands in sequence incurs measurable overhead
+-- within drivers due to repeated state checks and updates during dispatch.
+-- This extension enables passing the entire sequence of draws directly to
+-- the driver in order to avoid any such overhead, using an array of
+-- 'MultiDrawInfoEXT' or 'MultiDrawIndexedInfoEXT' structs with
+-- 'cmdDrawMultiEXT' or 'cmdDrawMultiIndexedEXT', respectively. These
+-- functions could be used any time multiple draw commands are being
+-- recorded without any state changes between them in order to maximize
+-- performance.
+--
+-- == New Commands
+--
+-- -   'cmdDrawMultiEXT'
+--
+-- -   'cmdDrawMultiIndexedEXT'
+--
+-- == New Structures
+--
+-- -   'MultiDrawIndexedInfoEXT'
+--
+-- -   'MultiDrawInfoEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceMultiDrawFeaturesEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
+--
+--     -   'PhysicalDeviceMultiDrawPropertiesEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_MULTI_DRAW_EXTENSION_NAME'
+--
+-- -   'EXT_MULTI_DRAW_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT'
+--
+-- == New or Modified Built-In Variables
+--
+-- -   (modified)@DrawIndex@
+--
+-- == Version History
+--
+-- -   Version 1, 2021-01-20 (Mike Blumenkrantz)
+--
+--     -   Initial version
+--
+-- = See Also
+--
+-- 'MultiDrawIndexedInfoEXT', 'MultiDrawInfoEXT',
+-- 'PhysicalDeviceMultiDrawFeaturesEXT',
+-- 'PhysicalDeviceMultiDrawPropertiesEXT', 'cmdDrawMultiEXT',
+-- 'cmdDrawMultiIndexedEXT'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_multi_draw Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_EXT_multi_draw  ( cmdDrawMultiEXT
+                                            , cmdDrawMultiIndexedEXT
+                                            , MultiDrawInfoEXT(..)
+                                            , MultiDrawIndexedInfoEXT(..)
+                                            , PhysicalDeviceMultiDrawPropertiesEXT(..)
+                                            , PhysicalDeviceMultiDrawFeaturesEXT(..)
+                                            , EXT_MULTI_DRAW_SPEC_VERSION
+                                            , pattern EXT_MULTI_DRAW_SPEC_VERSION
+                                            , EXT_MULTI_DRAW_EXTENSION_NAME
+                                            , pattern EXT_MULTI_DRAW_EXTENSION_NAME
+                                            ) where
+
+import Vulkan.Internal.Utils (traceAroundEvent)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Utils (with)
+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 qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+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.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMultiEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMultiIndexedEXT))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawMultiEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr MultiDrawInfoEXT -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr MultiDrawInfoEXT -> Word32 -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDrawMultiEXT - Draw primitives
+--
+-- = Description
+--
+-- This command is equivalent to calling
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDraw' @drawCount@ times. The
+-- number of draw commands recorded is @drawCount@, with each command
+-- reading, sequentially, a @firstVertex@ and a @vertexCount@ from
+-- @pVertexInfo@.
+--
+-- == Valid Usage
+--
+-- -   #VUID-vkCmdDrawMultiEXT-magFilter-04553# If a
+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or
+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and
+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is
+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of
+--     this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-mipmapMode-04770# If a
+--     'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to
+--     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'
+--     and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'
+--     is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of
+--     this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02691# If a
+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02692# If a
+--     'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-filterCubic-02694# Any
+--     'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-filterCubicMinmax-02695# Any
+--     'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-flags-02696# Any
+--     'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02697# For each set /n/ that is
+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the
+--     pipeline bind point used by this command, a descriptor set /must/
+--     have been bound to /n/ at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02698# For each push constant that is
+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the
+--     pipeline bind point used by this command, a push constant value
+--     /must/ have been set for the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02699# Descriptors in each bound
+--     descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02700# A valid pipeline /must/ be bound
+--     to the pipeline bind point used by this command
+--
+-- -   #VUID-vkCmdDrawMultiEXT-commandBuffer-02701# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command requires any dynamic state, that state
+--     /must/ have been set or inherited for @commandBuffer@, and done so
+--     after any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02859# There /must/ not have been any
+--     calls to dynamic state setting commands for any state not specified
+--     as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to
+--     the pipeline bind point used by this command, since that pipeline
+--     was bound
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02702# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02703# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02704# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02705# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02706# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   #VUID-vkCmdDrawMultiEXT-commandBuffer-02707# If @commandBuffer@ is
+--     an unprotected command buffer, any resource accessed by the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command /must/ not be a protected resource
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04115# If a
+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@
+--     as a result of this command, then the @Type@ of the @Texel@ operand
+--     of that instruction /must/ have at least as many components as the
+--     image view’s format.
+--
+-- -   #VUID-vkCmdDrawMultiEXT-OpImageWrite-04469# If a
+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@
+--     as a result of this command, then the @Type@ of the @Texel@ operand
+--     of that instruction /must/ have at least as many components as the
+--     buffer view’s format.
+--
+-- -   #VUID-vkCmdDrawMultiEXT-SampledType-04470# If a
+--     'Vulkan.Core10.Handles.ImageView' with a
+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width
+--     is accessed as a result of this command, the @SampledType@ of the
+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of
+--     64.
+--
+-- -   #VUID-vkCmdDrawMultiEXT-SampledType-04471# If a
+--     'Vulkan.Core10.Handles.ImageView' with a
+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less
+--     than 64-bit is accessed as a result of this command, the
+--     @SampledType@ of the @OpTypeImage@ operand of that instruction
+--     /must/ have a @Width@ of 32.
+--
+-- -   #VUID-vkCmdDrawMultiEXT-SampledType-04472# If a
+--     'Vulkan.Core10.Handles.BufferView' with a
+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width
+--     is accessed as a result of this command, the @SampledType@ of the
+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of
+--     64.
+--
+-- -   #VUID-vkCmdDrawMultiEXT-SampledType-04473# If a
+--     'Vulkan.Core10.Handles.BufferView' with a
+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less
+--     than 64-bit is accessed as a result of this command, the
+--     @SampledType@ of the @OpTypeImage@ operand of that instruction
+--     /must/ have a @Width@ of 32.
+--
+-- -   #VUID-vkCmdDrawMultiEXT-sparseImageInt64Atomics-04474# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>
+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--     flag /must/ not be accessed by atomic instructions through an
+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this
+--     command.
+--
+-- -   #VUID-vkCmdDrawMultiEXT-sparseImageInt64Atomics-04475# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>
+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects
+--     created with the
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
+--     flag /must/ not be accessed by atomic instructions through an
+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this
+--     command.
+--
+-- -   #VUID-vkCmdDrawMultiEXT-renderPass-02684# The current render pass
+--     /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-subpass-02685# The subpass index of the
+--     current render pass /must/ be equal to the @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02686# Every input attachment used by
+--     the current subpass /must/ be bound to the pipeline via a descriptor
+--     set
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04584# Image subresources used as
+--     attachments in the current render pass /must/ not be accessed in any
+--     way other than as an attachment by this command, except for cases
+--     involving read-only access to depth\/stencil attachments as
+--     described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>
+--     chapter
+--
+-- -   #VUID-vkCmdDrawMultiEXT-maxMultiviewInstanceIndex-02688# If the draw
+--     is recorded in a render pass instance with multiview enabled, the
+--     maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   #VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-02689# If the bound
+--     graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass
+--     has a depth\/stencil attachment, then that attachment /must/ have
+--     been created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   #VUID-vkCmdDrawMultiEXT-viewportCount-03417# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'
+--     dynamic state enabled, then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @viewportCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ match the
+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@
+--     of the pipeline
+--
+-- -   #VUID-vkCmdDrawMultiEXT-scissorCount-03418# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @scissorCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'
+--     /must/ match the
+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@
+--     of the pipeline
+--
+-- -   #VUID-vkCmdDrawMultiEXT-viewportCount-03419# If the bound graphics
+--     pipeline state was created with both the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic states enabled then both
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     and
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @viewportCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ match the @scissorCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-viewportCount-04137# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'
+--     dynamic state enabled, then the bound graphics pipeline /must/ have
+--     been created with
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@
+--     greater or equal to the @viewportCount@ parameter in the last call
+--     to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-viewportCount-04138# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'
+--     dynamic states enabled then the @viewportCount@ parameter in the
+--     last call to
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'
+--     /must/ be greater than or equal to the @viewportCount@ parameter in
+--     the last call to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-viewportCount-04139# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'
+--     dynamic state enabled, then the bound graphics pipeline /must/ have
+--     been created with
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@
+--     greater or equal to the @viewportCount@ parameter in the last call
+--     to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-viewportCount-04140# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'
+--     dynamic states enabled then the @viewportCount@ parameter in the
+--     last call to
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'
+--     /must/ be greater than or equal to the @viewportCount@ parameter in
+--     the last call to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-VkPipelineVieportCreateInfo-04141# If the
+--     bound graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled and an instance of
+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'
+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics
+--     pipeline /must/ have been created with
+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@
+--     greater or equal to the @viewportCount@ parameter in the last call
+--     to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-VkPipelineVieportCreateInfo-04142# If the
+--     bound graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled and an instance of
+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'
+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics
+--     pipeline /must/ have been created with
+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@
+--     greater or equal to the @viewportCount@ parameter in the last call
+--     to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-primitiveTopology-03420# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @primitiveTopology@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'
+--     /must/ be of the same
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>
+--     as the pipeline
+--     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@
+--     state
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04875# If the bound graphics pipeline
+--     state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04876# If the bound graphics pipeline
+--     state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04877# If the bound graphics pipeline
+--     state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
+-- -   #VUID-vkCmdDrawMultiEXT-logicOp-04878# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command and the @logicOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.LogicOp.LogicOp' value
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04879# If the bound graphics pipeline
+--     state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
+-- -   #VUID-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-04552#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
+--     limit is not supported, the bound graphics pipeline was created with
+--     the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, and any of the shader stages of the bound
+--     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,
+--     then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @viewportCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ be @1@
+--
+-- -   #VUID-vkCmdDrawMultiEXT-blendEnable-04727# If rasterization is not
+--     disabled in the bound graphics pipeline, then for each color
+--     attachment in the subpass, if the corresponding image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-rasterizationSamples-04740# If rasterization
+--     is not disabled in the bound graphics pipeline, and neither the @@
+--     nor the @@ extensions are enabled, then
+--     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@
+--     /must/ be the same as the current subpass color and\/or
+--     depth\/stencil attachments
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04912# If the bound graphics pipeline
+--     was created with both the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'
+--     dynamic states enabled, then
+--     'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     draw command
+--
+-- -   #VUID-vkCmdDrawMultiEXT-pStrides-04913# If the bound graphics
+--     pipeline was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
+--     dynamic state enabled, then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'
+--     /must/ have been called in the current command buffer prior to this
+--     draw command, and the @pStrides@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'
+--     /must/ not be @NULL@
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04914# If the bound graphics pipeline
+--     state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
+--     dynamic state enabled, then
+--     'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     draw command
+--
+-- -   #VUID-vkCmdDrawMultiEXT-commandBuffer-02712# If @commandBuffer@ is a
+--     protected command buffer, any resource written to by the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command /must/ not be an unprotected resource
+--
+-- -   #VUID-vkCmdDrawMultiEXT-commandBuffer-02713# If @commandBuffer@ is a
+--     protected command buffer, pipeline stages other than the
+--     framebuffer-space and compute stages in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command /must/ not write to any resource
+--
+-- -   #VUID-vkCmdDrawMultiEXT-commandBuffer-04617# If any of the shader
+--     stages of the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline
+--     bind point used by this command uses the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-RayQueryKHR RayQueryKHR>
+--     capability, then @commandBuffer@ /must/ not be a protected command
+--     buffer
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04007# All vertex input bindings
+--     accessed via vertex input variables declared in the vertex shader
+--     entry point’s interface /must/ have either valid or
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04008# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-02721# For a given vertex buffer
+--     binding, any attribute data fetched /must/ be entirely contained
+--     within the corresponding vertex buffer binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- -   #VUID-vkCmdDrawMultiEXT-None-04933# The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDraw multiDraw>
+--     feature /must/ be enabled
+--
+-- -   #VUID-vkCmdDrawMultiEXT-drawCount-04934# @drawCount@ /must/ be less
+--     than 'PhysicalDeviceMultiDrawPropertiesEXT'::@maxMultiDrawCount@
+--
+-- -   #VUID-vkCmdDrawMultiEXT-drawCount-04935# If @drawCount@ is greater
+--     than zero, @pVertexInfo@ /must/ be a valid pointer to memory
+--     containing one or more valid instances of 'MultiDrawInfoEXT'
+--     structures
+--
+-- -   #VUID-vkCmdDrawMultiEXT-stride-04936# @stride@ must be a multiple of
+--     4
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-vkCmdDrawMultiEXT-commandBuffer-parameter# @commandBuffer@
+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   #VUID-vkCmdDrawMultiEXT-commandBuffer-recording# @commandBuffer@
+--     /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   #VUID-vkCmdDrawMultiEXT-commandBuffer-cmdpool# The
+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   #VUID-vkCmdDrawMultiEXT-renderpass# This command /must/ only be
+--     called inside 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> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'MultiDrawInfoEXT'
+cmdDrawMultiEXT :: forall io
+                 . (MonadIO io)
+                => -- | @commandBuffer@ is the command buffer into which the command is
+                   -- recorded.
+                   CommandBuffer
+                -> -- | @pVertexInfo@ is a pointer to an array of 'MultiDrawInfoEXT' with vertex
+                   -- info to be drawn.
+                   ("vertexInfo" ::: Vector MultiDrawInfoEXT)
+                -> -- | @instanceCount@ is the number of instances to draw.
+                   ("instanceCount" ::: Word32)
+                -> -- | @firstInstance@ is the instance ID of the first instance to draw.
+                   ("firstInstance" ::: Word32)
+                -> -- | @stride@ is the byte stride between consecutive elements of
+                   -- @pVertexInfo@.
+                   ("stride" ::: Word32)
+                -> io ()
+cmdDrawMultiEXT commandBuffer vertexInfo instanceCount firstInstance stride = liftIO . evalContT $ do
+  let vkCmdDrawMultiEXTPtr = pVkCmdDrawMultiEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdDrawMultiEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawMultiEXT is null" Nothing Nothing
+  let vkCmdDrawMultiEXT' = mkVkCmdDrawMultiEXT vkCmdDrawMultiEXTPtr
+  pPVertexInfo <- ContT $ allocaBytesAligned @MultiDrawInfoEXT ((Data.Vector.length (vertexInfo)) * 8) 4
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPVertexInfo `plusPtr` (8 * (i)) :: Ptr MultiDrawInfoEXT) (e)) (vertexInfo)
+  lift $ traceAroundEvent "vkCmdDrawMultiEXT" (vkCmdDrawMultiEXT' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (vertexInfo)) :: Word32)) (pPVertexInfo) (instanceCount) (firstInstance) (stride))
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawMultiIndexedEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr MultiDrawIndexedInfoEXT -> Word32 -> Word32 -> Word32 -> Ptr Int32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr MultiDrawIndexedInfoEXT -> Word32 -> Word32 -> Word32 -> Ptr Int32 -> IO ()
+
+-- | vkCmdDrawMultiIndexedEXT - Draw primitives
+--
+-- = Description
+--
+-- This command is equivalent to calling
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed' @drawCount@ times.
+-- The number of draw commands recorded is @drawCount@, with each command
+-- reading, sequentially, a @firstIndex@ and an @indexCount@ from
+-- @pIndexInfo@. If @pVertexOffset@ is @NULL@, a @vertexOffset@ is also
+-- read from @pIndexInfo@, otherwise the value from dereferencing
+-- @pVertexOffset@ is used.
+--
+-- == Valid Usage
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-magFilter-04553# If a
+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or
+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and
+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is
+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of
+--     this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-mipmapMode-04770# If a
+--     'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to
+--     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'
+--     and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'
+--     is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of
+--     this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02691# If a
+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02692# If a
+--     'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-filterCubic-02694# Any
+--     'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-filterCubicMinmax-02695# Any
+--     'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-flags-02696# Any
+--     'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02697# For each set /n/ that is
+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the
+--     pipeline bind point used by this command, a descriptor set /must/
+--     have been bound to /n/ at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02698# For each push constant
+--     that is statically used by the 'Vulkan.Core10.Handles.Pipeline'
+--     bound to the pipeline bind point used by this command, a push
+--     constant value /must/ have been set for the same pipeline bind
+--     point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
+--     compatible for push constants, with the
+--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
+--     'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02699# Descriptors in each bound
+--     descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02700# A valid pipeline /must/
+--     be bound to the pipeline bind point used by this command
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02701# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command requires any dynamic state, that state
+--     /must/ have been set or inherited for @commandBuffer@, and done so
+--     after any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02859# There /must/ not have
+--     been any calls to dynamic state setting commands for any state not
+--     specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object
+--     bound to the pipeline bind point used by this command, since that
+--     pipeline was bound
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02702# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02703# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02704# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02705# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02706# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02707# If
+--     @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04115# If a
+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@
+--     as a result of this command, then the @Type@ of the @Texel@ operand
+--     of that instruction /must/ have at least as many components as the
+--     image view’s format.
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-OpImageWrite-04469# If a
+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@
+--     as a result of this command, then the @Type@ of the @Texel@ operand
+--     of that instruction /must/ have at least as many components as the
+--     buffer view’s format.
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-SampledType-04470# If a
+--     'Vulkan.Core10.Handles.ImageView' with a
+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width
+--     is accessed as a result of this command, the @SampledType@ of the
+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of
+--     64.
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-SampledType-04471# If a
+--     'Vulkan.Core10.Handles.ImageView' with a
+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less
+--     than 64-bit is accessed as a result of this command, the
+--     @SampledType@ of the @OpTypeImage@ operand of that instruction
+--     /must/ have a @Width@ of 32.
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-SampledType-04472# If a
+--     'Vulkan.Core10.Handles.BufferView' with a
+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width
+--     is accessed as a result of this command, the @SampledType@ of the
+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of
+--     64.
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-SampledType-04473# If a
+--     'Vulkan.Core10.Handles.BufferView' with a
+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less
+--     than 64-bit is accessed as a result of this command, the
+--     @SampledType@ of the @OpTypeImage@ operand of that instruction
+--     /must/ have a @Width@ of 32.
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-sparseImageInt64Atomics-04474# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>
+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--     flag /must/ not be accessed by atomic instructions through an
+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this
+--     command.
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-sparseImageInt64Atomics-04475# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>
+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects
+--     created with the
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
+--     flag /must/ not be accessed by atomic instructions through an
+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this
+--     command.
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-renderPass-02684# The current render
+--     pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-subpass-02685# The subpass index of
+--     the current render pass /must/ be equal to the @subpass@ member of
+--     the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02686# Every input attachment
+--     used by the current subpass /must/ be bound to the pipeline via a
+--     descriptor set
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04584# Image subresources used
+--     as attachments in the current render pass /must/ not be accessed in
+--     any way other than as an attachment by this command, except for
+--     cases involving read-only access to depth\/stencil attachments as
+--     described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>
+--     chapter
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-maxMultiviewInstanceIndex-02688# If
+--     the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-02689# If the
+--     bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass
+--     has a depth\/stencil attachment, then that attachment /must/ have
+--     been created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03417# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'
+--     dynamic state enabled, then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @viewportCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ match the
+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@
+--     of the pipeline
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-scissorCount-03418# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @scissorCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'
+--     /must/ match the
+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@
+--     of the pipeline
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03419# If the bound
+--     graphics pipeline state was created with both the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic states enabled then both
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     and
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @viewportCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ match the @scissorCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-viewportCount-04137# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'
+--     dynamic state enabled, then the bound graphics pipeline /must/ have
+--     been created with
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@
+--     greater or equal to the @viewportCount@ parameter in the last call
+--     to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-viewportCount-04138# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'
+--     dynamic states enabled then the @viewportCount@ parameter in the
+--     last call to
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'
+--     /must/ be greater than or equal to the @viewportCount@ parameter in
+--     the last call to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-viewportCount-04139# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'
+--     dynamic state enabled, then the bound graphics pipeline /must/ have
+--     been created with
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@
+--     greater or equal to the @viewportCount@ parameter in the last call
+--     to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-viewportCount-04140# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'
+--     dynamic states enabled then the @viewportCount@ parameter in the
+--     last call to
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'
+--     /must/ be greater than or equal to the @viewportCount@ parameter in
+--     the last call to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-VkPipelineVieportCreateInfo-04141# If
+--     the bound graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled and an instance of
+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'
+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics
+--     pipeline /must/ have been created with
+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@
+--     greater or equal to the @viewportCount@ parameter in the last call
+--     to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-VkPipelineVieportCreateInfo-04142# If
+--     the bound graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled and an instance of
+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'
+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics
+--     pipeline /must/ have been created with
+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@
+--     greater or equal to the @viewportCount@ parameter in the last call
+--     to
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-03420# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @primitiveTopology@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'
+--     /must/ be of the same
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>
+--     as the pipeline
+--     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@
+--     state
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04875# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04876# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04877# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-logicOp-04878# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command and the @logicOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.LogicOp.LogicOp' value
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04879# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-04552#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
+--     limit is not supported, the bound graphics pipeline was created with
+--     the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'
+--     dynamic state enabled, and any of the shader stages of the bound
+--     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,
+--     then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @viewportCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+--     /must/ be @1@
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-blendEnable-04727# If rasterization
+--     is not disabled in the bound graphics pipeline, then for each color
+--     attachment in the subpass, if the corresponding image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-04740# If
+--     rasterization is not disabled in the bound graphics pipeline, and
+--     neither the @@ nor the @@ extensions are enabled, then
+--     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@
+--     /must/ be the same as the current subpass color and\/or
+--     depth\/stencil attachments
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04912# If the bound graphics
+--     pipeline was created with both the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'
+--     dynamic states enabled, then
+--     'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     draw command
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-pStrides-04913# If the bound graphics
+--     pipeline was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'
+--     dynamic state enabled, but not the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
+--     dynamic state enabled, then
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'
+--     /must/ have been called in the current command buffer prior to this
+--     draw command, and the @pStrides@ parameter of
+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'
+--     /must/ not be @NULL@
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04914# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
+--     dynamic state enabled, then
+--     'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     draw command
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712# If
+--     @commandBuffer@ is a protected command buffer, any resource written
+--     to by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be an
+--     unprotected resource
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02713# If
+--     @commandBuffer@ is a protected command buffer, pipeline stages other
+--     than the framebuffer-space and compute stages in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command /must/ not write to any resource
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-04617# If any of the
+--     shader stages of the 'Vulkan.Core10.Handles.Pipeline' bound to the
+--     pipeline bind point used by this command uses the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-RayQueryKHR RayQueryKHR>
+--     capability, then @commandBuffer@ /must/ not be a protected command
+--     buffer
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04007# All vertex input bindings
+--     accessed via vertex input variables declared in the vertex shader
+--     entry point’s interface /must/ have either valid or
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04008# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02721# For a given vertex buffer
+--     binding, any attribute data fetched /must/ be entirely contained
+--     within the corresponding vertex buffer binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-04937# The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDraw multiDraw>
+--     feature /must/ be enabled
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938# (@indexSize@ ×
+--     (@firstIndex@ + @indexCount@) + @offset@) /must/ be less than or
+--     equal to the size of the bound index buffer, with @indexSize@ being
+--     based on the type specified by @indexType@, where the index buffer,
+--     @indexType@, and @offset@ are specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939# @drawCount@ /must/
+--     be less than
+--     'PhysicalDeviceMultiDrawPropertiesEXT'::@maxMultiDrawCount@
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-drawCount-04940# If @drawCount@ is
+--     greater than zero, @pIndexInfo@ /must/ be a valid pointer to memory
+--     containing one or more valid instances of 'MultiDrawIndexedInfoEXT'
+--     structures
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-stride-04941# @stride@ must be a
+--     multiple of 4
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-parameter#
+--     @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-pVertexOffset-parameter# If
+--     @pVertexOffset@ is not @NULL@, @pVertexOffset@ /must/ be a valid
+--     pointer to a valid @int32_t@ value
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-recording#
+--     @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-cmdpool# The
+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-renderpass# This command /must/ only
+--     be called inside 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> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'MultiDrawIndexedInfoEXT'
+cmdDrawMultiIndexedEXT :: forall io
+                        . (MonadIO io)
+                       => -- | @commandBuffer@ is the command buffer into which the command is
+                          -- recorded.
+                          CommandBuffer
+                       -> -- | @pIndexInfo@ is a pointer to an array of 'MultiDrawIndexedInfoEXT' with
+                          -- index info to be drawn.
+                          ("indexInfo" ::: Vector MultiDrawIndexedInfoEXT)
+                       -> -- | @instanceCount@ is the number of instances to draw.
+                          ("instanceCount" ::: Word32)
+                       -> -- | @firstInstance@ is the instance ID of the first instance to draw.
+                          ("firstInstance" ::: Word32)
+                       -> -- | @stride@ is the byte stride between consecutive elements of
+                          -- @pIndexInfo@.
+                          ("stride" ::: Word32)
+                       -> -- | @pVertexOffset@ is @NULL@ or a pointer to the value added to the vertex
+                          -- index before indexing into the vertex buffer. When specified,
+                          -- 'MultiDrawIndexedInfoEXT'::@offset@ is ignored.
+                          ("vertexOffset" ::: Maybe Int32)
+                       -> io ()
+cmdDrawMultiIndexedEXT commandBuffer indexInfo instanceCount firstInstance stride vertexOffset = liftIO . evalContT $ do
+  let vkCmdDrawMultiIndexedEXTPtr = pVkCmdDrawMultiIndexedEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdDrawMultiIndexedEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawMultiIndexedEXT is null" Nothing Nothing
+  let vkCmdDrawMultiIndexedEXT' = mkVkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXTPtr
+  pPIndexInfo <- ContT $ allocaBytesAligned @MultiDrawIndexedInfoEXT ((Data.Vector.length (indexInfo)) * 12) 4
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexInfo `plusPtr` (12 * (i)) :: Ptr MultiDrawIndexedInfoEXT) (e)) (indexInfo)
+  pVertexOffset <- case (vertexOffset) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ with (j)
+  lift $ traceAroundEvent "vkCmdDrawMultiIndexedEXT" (vkCmdDrawMultiIndexedEXT' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (indexInfo)) :: Word32)) (pPIndexInfo) (instanceCount) (firstInstance) (stride) pVertexOffset)
+  pure $ ()
+
+
+-- | VkMultiDrawInfoEXT - Structure specifying a multi-draw command
+--
+-- = Description
+--
+-- The members of 'MultiDrawInfoEXT' have the same meaning as the
+-- @firstVertex@ and @vertexCount@ parameters in
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDraw'.
+--
+-- = See Also
+--
+-- 'cmdDrawMultiEXT'
+data MultiDrawInfoEXT = MultiDrawInfoEXT
+  { -- | @firstVertex@ is the first vertex to draw.
+    firstVertex :: Word32
+  , -- | @vertexCount@ is the number of vertices to draw.
+    vertexCount :: Word32
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (MultiDrawInfoEXT)
+#endif
+deriving instance Show MultiDrawInfoEXT
+
+instance ToCStruct MultiDrawInfoEXT where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MultiDrawInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (firstVertex)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (vertexCount)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct MultiDrawInfoEXT where
+  peekCStruct p = do
+    firstVertex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    vertexCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    pure $ MultiDrawInfoEXT
+             firstVertex vertexCount
+
+instance Storable MultiDrawInfoEXT where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MultiDrawInfoEXT where
+  zero = MultiDrawInfoEXT
+           zero
+           zero
+
+
+-- | VkMultiDrawIndexedInfoEXT - Structure specifying a multi-draw command
+--
+-- = Description
+--
+-- The @firstIndex@, @indexCount@, and @vertexOffset@ members of
+-- 'MultiDrawIndexedInfoEXT' have the same meaning as the @firstIndex@,
+-- @indexCount@, and @vertexOffset@ parameters, respectively, of
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed'.
+--
+-- = See Also
+--
+-- 'cmdDrawMultiIndexedEXT'
+data MultiDrawIndexedInfoEXT = MultiDrawIndexedInfoEXT
+  { -- | @firstIndex@ is the first index to draw.
+    firstIndex :: Word32
+  , -- | @indexCount@ is the number of vertices to draw.
+    indexCount :: Word32
+  , -- | @vertexOffset@ is the value added to the vertex index before indexing
+    -- into the vertex buffer for indexed multidraws.
+    vertexOffset :: Int32
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (MultiDrawIndexedInfoEXT)
+#endif
+deriving instance Show MultiDrawIndexedInfoEXT
+
+instance ToCStruct MultiDrawIndexedInfoEXT where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MultiDrawIndexedInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (firstIndex)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (indexCount)
+    poke ((p `plusPtr` 8 :: Ptr Int32)) (vertexOffset)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Int32)) (zero)
+    f
+
+instance FromCStruct MultiDrawIndexedInfoEXT where
+  peekCStruct p = do
+    firstIndex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    indexCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    vertexOffset <- peek @Int32 ((p `plusPtr` 8 :: Ptr Int32))
+    pure $ MultiDrawIndexedInfoEXT
+             firstIndex indexCount vertexOffset
+
+instance Storable MultiDrawIndexedInfoEXT where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MultiDrawIndexedInfoEXT where
+  zero = MultiDrawIndexedInfoEXT
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceMultiDrawPropertiesEXT - Structure describing multidraw
+-- limits of an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceMultiDrawPropertiesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the @VkPhysicalDeviceMultiDrawPropertiesPropertiesEXT@ structure is
+-- included in the @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'
+-- structure passed to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
+-- it is filled in with each corresponding implementation-dependent
+-- property.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMultiDrawPropertiesEXT = PhysicalDeviceMultiDrawPropertiesEXT
+  { -- | #limits-maxMultiDrawCount# @maxMultiDrawCount@ indicates the maximum
+    -- number of draw calls which /can/ be batched into a single multidraw.
+    maxMultiDrawCount :: Word32 }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceMultiDrawPropertiesEXT)
+#endif
+deriving instance Show PhysicalDeviceMultiDrawPropertiesEXT
+
+instance ToCStruct PhysicalDeviceMultiDrawPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMultiDrawPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxMultiDrawCount)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceMultiDrawPropertiesEXT where
+  peekCStruct p = do
+    maxMultiDrawCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PhysicalDeviceMultiDrawPropertiesEXT
+             maxMultiDrawCount
+
+instance Storable PhysicalDeviceMultiDrawPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMultiDrawPropertiesEXT where
+  zero = PhysicalDeviceMultiDrawPropertiesEXT
+           zero
+
+
+-- | VkPhysicalDeviceMultiDrawFeaturesEXT - Structure describing whether the
+-- implementation supports multi draw functionality
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceMultiDrawFeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceMultiDrawFeaturesEXT' structure is included in the
+-- @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
+-- structure passed to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
+-- it is filled in to indicate whether each corresponding feature is
+-- supported. 'PhysicalDeviceMultiDrawFeaturesEXT' /can/ also be used in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- selectively enable these features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMultiDrawFeaturesEXT = PhysicalDeviceMultiDrawFeaturesEXT
+  { -- | #features-multiDraw# @multiDraw@ indicates that the implementation
+    -- supports 'cmdDrawMultiEXT' and 'cmdDrawMultiIndexedEXT'.
+    multiDraw :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceMultiDrawFeaturesEXT)
+#endif
+deriving instance Show PhysicalDeviceMultiDrawFeaturesEXT
+
+instance ToCStruct PhysicalDeviceMultiDrawFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMultiDrawFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (multiDraw))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceMultiDrawFeaturesEXT where
+  peekCStruct p = do
+    multiDraw <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceMultiDrawFeaturesEXT
+             (bool32ToBool multiDraw)
+
+instance Storable PhysicalDeviceMultiDrawFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMultiDrawFeaturesEXT where
+  zero = PhysicalDeviceMultiDrawFeaturesEXT
+           zero
+
+
+type EXT_MULTI_DRAW_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_MULTI_DRAW_SPEC_VERSION"
+pattern EXT_MULTI_DRAW_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_MULTI_DRAW_SPEC_VERSION = 1
+
+
+type EXT_MULTI_DRAW_EXTENSION_NAME = "VK_EXT_multi_draw"
+
+-- No documentation found for TopLevel "VK_EXT_MULTI_DRAW_EXTENSION_NAME"
+pattern EXT_MULTI_DRAW_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_MULTI_DRAW_EXTENSION_NAME = "VK_EXT_multi_draw"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_multi_draw.hs-boot b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs-boot
@@ -0,0 +1,164 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_multi_draw - device extension
+--
+-- == VK_EXT_multi_draw
+--
+-- [__Name String__]
+--     @VK_EXT_multi_draw@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     393
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+-- [__Contact__]
+--
+--     -   Mike Blumenkrantz
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_EXT_multi_draw:%20&body=@zmike%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-05-19
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Mike Blumenkrantz, VALVE
+--
+--     -   Piers Daniell, NVIDIA
+--
+--     -   Jason Ekstrand, INTEL
+--
+--     -   Spencer Fricke, SAMSUNG
+--
+--     -   Ricardo Garcia, IGALIA
+--
+--     -   Jon Leech, KHRONOS
+--
+--     -   Stu Smith, AMD
+--
+-- == Description
+--
+-- Processing multiple draw commands in sequence incurs measurable overhead
+-- within drivers due to repeated state checks and updates during dispatch.
+-- This extension enables passing the entire sequence of draws directly to
+-- the driver in order to avoid any such overhead, using an array of
+-- 'MultiDrawInfoEXT' or 'MultiDrawIndexedInfoEXT' structs with
+-- 'cmdDrawMultiEXT' or 'cmdDrawMultiIndexedEXT', respectively. These
+-- functions could be used any time multiple draw commands are being
+-- recorded without any state changes between them in order to maximize
+-- performance.
+--
+-- == New Commands
+--
+-- -   'cmdDrawMultiEXT'
+--
+-- -   'cmdDrawMultiIndexedEXT'
+--
+-- == New Structures
+--
+-- -   'MultiDrawIndexedInfoEXT'
+--
+-- -   'MultiDrawInfoEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceMultiDrawFeaturesEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
+--
+--     -   'PhysicalDeviceMultiDrawPropertiesEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_MULTI_DRAW_EXTENSION_NAME'
+--
+-- -   'EXT_MULTI_DRAW_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT'
+--
+-- == New or Modified Built-In Variables
+--
+-- -   (modified)@DrawIndex@
+--
+-- == Version History
+--
+-- -   Version 1, 2021-01-20 (Mike Blumenkrantz)
+--
+--     -   Initial version
+--
+-- = See Also
+--
+-- 'MultiDrawIndexedInfoEXT', 'MultiDrawInfoEXT',
+-- 'PhysicalDeviceMultiDrawFeaturesEXT',
+-- 'PhysicalDeviceMultiDrawPropertiesEXT', 'cmdDrawMultiEXT',
+-- 'cmdDrawMultiIndexedEXT'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_multi_draw Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_EXT_multi_draw  ( MultiDrawIndexedInfoEXT
+                                            , MultiDrawInfoEXT
+                                            , PhysicalDeviceMultiDrawFeaturesEXT
+                                            , PhysicalDeviceMultiDrawPropertiesEXT
+                                            ) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data MultiDrawIndexedInfoEXT
+
+instance ToCStruct MultiDrawIndexedInfoEXT
+instance Show MultiDrawIndexedInfoEXT
+
+instance FromCStruct MultiDrawIndexedInfoEXT
+
+
+data MultiDrawInfoEXT
+
+instance ToCStruct MultiDrawInfoEXT
+instance Show MultiDrawInfoEXT
+
+instance FromCStruct MultiDrawInfoEXT
+
+
+data PhysicalDeviceMultiDrawFeaturesEXT
+
+instance ToCStruct PhysicalDeviceMultiDrawFeaturesEXT
+instance Show PhysicalDeviceMultiDrawFeaturesEXT
+
+instance FromCStruct PhysicalDeviceMultiDrawFeaturesEXT
+
+
+data PhysicalDeviceMultiDrawPropertiesEXT
+
+instance ToCStruct PhysicalDeviceMultiDrawPropertiesEXT
+instance Show PhysicalDeviceMultiDrawPropertiesEXT
+
+instance FromCStruct PhysicalDeviceMultiDrawPropertiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs
@@ -0,0 +1,241 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_physical_device_drm - device extension
+--
+-- == VK_EXT_physical_device_drm
+--
+-- [__Name String__]
+--     @VK_EXT_physical_device_drm@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     354
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
+-- [__Contact__]
+--
+--     -   Simon Ser
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_EXT_physical_device_drm:%20&body=@emersion%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-06-09
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Simon Ser
+--
+-- == Description
+--
+-- This extension provides new facilities to query DRM properties for
+-- physical devices, enabling users to match Vulkan physical devices with
+-- DRM nodes on Linux.
+--
+-- Its functionality closely overlaps with
+-- @EGL_EXT_device_drm@<VK_EXT_physical_device_drm-fn1.html 1>^. Unlike the
+-- EGL extension, this extension does not expose a string containing the
+-- name of the device file and instead exposes device minor numbers.
+--
+-- DRM defines multiple device node types. Each physical device may have
+-- one primary node and one render node associated. Physical devices may
+-- have no primary node (e.g. if the device doesn’t have a display
+-- subsystem), may have no render node (e.g. if it’s a software rendering
+-- engine), or may have neither (e.g. if it’s a software rendering engine
+-- without a display subsystem).
+--
+-- To query DRM properties for a physical device, chain
+-- 'PhysicalDeviceDrmPropertiesEXT' to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
+--
+--     -   'PhysicalDeviceDrmPropertiesEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME'
+--
+-- -   'EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT'
+--
+-- == References
+--
+-- 1.  #VK_EXT_physical_device_drm-fn1#
+--     <https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_device_drm.txt EGL_EXT_device_drm>
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-06-09
+--
+--     -   First stable revision
+--
+-- = See Also
+--
+-- 'PhysicalDeviceDrmPropertiesEXT'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_physical_device_drm Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_EXT_physical_device_drm  ( PhysicalDeviceDrmPropertiesEXT(..)
+                                                     , EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION
+                                                     , pattern EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION
+                                                     , EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME
+                                                     , pattern EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME
+                                                     ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import Data.Int (Int64)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT))
+-- | VkPhysicalDeviceDrmPropertiesEXT - Structure containing DRM information
+-- of a physical device
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceDrmPropertiesEXT' structure is included in the
+-- @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'
+-- structure passed to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
+-- it is filled in with each corresponding implementation-dependent
+-- property.
+--
+-- These are properties of the DRM information of a physical device.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDrmPropertiesEXT = PhysicalDeviceDrmPropertiesEXT
+  { -- | @hasPrimary@ is a boolean indicating whether the physical device has a
+    -- DRM primary node.
+    hasPrimary :: Bool
+  , -- | @hasRender@ is a boolean indicating whether the physical device has a
+    -- DRM render node.
+    hasRender :: Bool
+  , -- | @primaryMajor@ is the DRM primary node major number, if any.
+    primaryMajor :: Int64
+  , -- | @primaryMinor@ is the DRM primary node minor number, if any.
+    primaryMinor :: Int64
+  , -- | @renderMajor@ is the DRM render node major number, if any.
+    renderMajor :: Int64
+  , -- | @renderMinor@ is the DRM render node minor number, if any.
+    renderMinor :: Int64
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceDrmPropertiesEXT)
+#endif
+deriving instance Show PhysicalDeviceDrmPropertiesEXT
+
+instance ToCStruct PhysicalDeviceDrmPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDrmPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (hasPrimary))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (hasRender))
+    poke ((p `plusPtr` 24 :: Ptr Int64)) (primaryMajor)
+    poke ((p `plusPtr` 32 :: Ptr Int64)) (primaryMinor)
+    poke ((p `plusPtr` 40 :: Ptr Int64)) (renderMajor)
+    poke ((p `plusPtr` 48 :: Ptr Int64)) (renderMinor)
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Int64)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Int64)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Int64)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr Int64)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceDrmPropertiesEXT where
+  peekCStruct p = do
+    hasPrimary <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    hasRender <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    primaryMajor <- peek @Int64 ((p `plusPtr` 24 :: Ptr Int64))
+    primaryMinor <- peek @Int64 ((p `plusPtr` 32 :: Ptr Int64))
+    renderMajor <- peek @Int64 ((p `plusPtr` 40 :: Ptr Int64))
+    renderMinor <- peek @Int64 ((p `plusPtr` 48 :: Ptr Int64))
+    pure $ PhysicalDeviceDrmPropertiesEXT
+             (bool32ToBool hasPrimary) (bool32ToBool hasRender) primaryMajor primaryMinor renderMajor renderMinor
+
+instance Storable PhysicalDeviceDrmPropertiesEXT where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDrmPropertiesEXT where
+  zero = PhysicalDeviceDrmPropertiesEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+type EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION"
+pattern EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION = 1
+
+
+type EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME = "VK_EXT_physical_device_drm"
+
+-- No documentation found for TopLevel "VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME"
+pattern EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME = "VK_EXT_physical_device_drm"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot
@@ -0,0 +1,116 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_physical_device_drm - device extension
+--
+-- == VK_EXT_physical_device_drm
+--
+-- [__Name String__]
+--     @VK_EXT_physical_device_drm@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     354
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
+-- [__Contact__]
+--
+--     -   Simon Ser
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_EXT_physical_device_drm:%20&body=@emersion%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-06-09
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Simon Ser
+--
+-- == Description
+--
+-- This extension provides new facilities to query DRM properties for
+-- physical devices, enabling users to match Vulkan physical devices with
+-- DRM nodes on Linux.
+--
+-- Its functionality closely overlaps with
+-- @EGL_EXT_device_drm@<VK_EXT_physical_device_drm-fn1.html 1>^. Unlike the
+-- EGL extension, this extension does not expose a string containing the
+-- name of the device file and instead exposes device minor numbers.
+--
+-- DRM defines multiple device node types. Each physical device may have
+-- one primary node and one render node associated. Physical devices may
+-- have no primary node (e.g. if the device doesn’t have a display
+-- subsystem), may have no render node (e.g. if it’s a software rendering
+-- engine), or may have neither (e.g. if it’s a software rendering engine
+-- without a display subsystem).
+--
+-- To query DRM properties for a physical device, chain
+-- 'PhysicalDeviceDrmPropertiesEXT' to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
+--
+--     -   'PhysicalDeviceDrmPropertiesEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME'
+--
+-- -   'EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT'
+--
+-- == References
+--
+-- 1.  #VK_EXT_physical_device_drm-fn1#
+--     <https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_device_drm.txt EGL_EXT_device_drm>
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-06-09
+--
+--     -   First stable revision
+--
+-- = See Also
+--
+-- 'PhysicalDeviceDrmPropertiesEXT'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_physical_device_drm Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_EXT_physical_device_drm  (PhysicalDeviceDrmPropertiesEXT) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data PhysicalDeviceDrmPropertiesEXT
+
+instance ToCStruct PhysicalDeviceDrmPropertiesEXT
+instance Show PhysicalDeviceDrmPropertiesEXT
+
+instance FromCStruct PhysicalDeviceDrmPropertiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs
--- a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs
+++ b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs
@@ -1934,15 +1934,16 @@
     -- @maxTransformFeedbackBufferDataStride@ is the maximum stride between
     -- each capture of vertex data to the buffer.
     maxTransformFeedbackBufferDataStride :: Word32
-  , -- | #limits-transformFeedbackQueries# @transformFeedbackQueries@ is true if
-    -- the implementation supports the
+  , -- | #limits-transformFeedbackQueries# @transformFeedbackQueries@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the
     -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
     -- query type. @transformFeedbackQueries@ is false if queries of this type
     -- /cannot/ be created.
     transformFeedbackQueries :: Bool
   , -- | #limits-transformFeedbackStreamsLinesTriangles#
-    -- @transformFeedbackStreamsLinesTriangles@ is true if the implementation
-    -- supports the geometry shader @OpExecutionMode@ of @OutputLineStrip@ and
+    -- @transformFeedbackStreamsLinesTriangles@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the
+    -- geometry shader @OpExecutionMode@ of @OutputLineStrip@ and
     -- @OutputTriangleStrip@ in addition to @OutputPoints@ when more than one
     -- vertex stream is output. If @transformFeedbackStreamsLinesTriangles@ is
     -- false the implementation only supports an @OpExecutionMode@ of
@@ -1950,15 +1951,17 @@
     -- geometry shader.
     transformFeedbackStreamsLinesTriangles :: Bool
   , -- | #limits-transformFeedbackRasterizationStreamSelect#
-    -- @transformFeedbackRasterizationStreamSelect@ is true if the
-    -- implementation supports the @GeometryStreams@ SPIR-V capability and the
-    -- application can use 'PipelineRasterizationStateStreamCreateInfoEXT' to
-    -- modify which vertex stream output is used for rasterization. Otherwise
-    -- vertex stream @0@ /must/ always be used for rasterization.
+    -- @transformFeedbackRasterizationStreamSelect@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the
+    -- @GeometryStreams@ SPIR-V capability and the application can use
+    -- 'PipelineRasterizationStateStreamCreateInfoEXT' to modify which vertex
+    -- stream output is used for rasterization. Otherwise vertex stream @0@
+    -- /must/ always be used for rasterization.
     transformFeedbackRasterizationStreamSelect :: Bool
-  , -- | #limits-transformFeedbackDraw# @transformFeedbackDraw@ is true if the
-    -- implementation supports the 'cmdDrawIndirectByteCountEXT' function
-    -- otherwise the function /must/ not be called.
+  , -- | #limits-transformFeedbackDraw# @transformFeedbackDraw@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the
+    -- 'cmdDrawIndirectByteCountEXT' function otherwise the function /must/ not
+    -- be called.
     transformFeedbackDraw :: Bool
   }
   deriving (Typeable, Eq)
diff --git a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs
--- a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs
+++ b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs
@@ -1189,10 +1189,12 @@
                                                                                                , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR
                                                                                                , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR
                                                                                                , BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR
+                                                                                               , BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV
                                                                                                , ..
                                                                                                )
                                                         , AccelerationStructureCreateFlagsKHR
                                                         , AccelerationStructureCreateFlagBitsKHR( ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
+                                                                                                , ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV
                                                                                                 , ..
                                                                                                 )
                                                         , CopyAccelerationStructureModeKHR( COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR
@@ -1244,6 +1246,7 @@
 import Data.Bits ((.|.))
 import Data.Bits (shiftL)
 import Data.Bits (shiftR)
+import Data.Typeable (eqT)
 import Foreign.Marshal.Alloc (allocaBytesAligned)
 import Foreign.Marshal.Alloc (callocBytes)
 import Foreign.Marshal.Alloc (free)
@@ -1278,6 +1281,7 @@
 import Data.Bits (Bits)
 import Data.Bits (FiniteBits)
 import Data.String (IsString)
+import Data.Type.Equality ((:~:)(Refl))
 import Data.Typeable (Typeable)
 import Foreign.C.Types (CChar)
 import Foreign.C.Types (CFloat)
@@ -1307,13 +1311,18 @@
 import Vulkan.CStruct.Utils (advancePtrBytes)
 import Vulkan.Core10.FundamentalTypes (bool32ToBool)
 import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.CStruct.Extends (forgetExtensions)
 import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
 import Vulkan.NamedType ((:::))
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureGeometryMotionTrianglesDataNV)
 import Vulkan.Extensions.Handles (AccelerationStructureKHR)
 import Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureMotionInfoNV)
 import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
 import Vulkan.Core10.FundamentalTypes (Bool32)
 import Vulkan.Core10.Handles (Buffer)
+import Vulkan.CStruct.Extends (Chain)
 import Vulkan.Core10.Handles (CommandBuffer)
 import Vulkan.Core10.Handles (CommandBuffer(..))
 import Vulkan.Core10.Handles (CommandBuffer_T)
@@ -1340,15 +1349,24 @@
 import Vulkan.Dynamic (DeviceCmds(pVkWriteAccelerationStructuresPropertiesKHR))
 import Vulkan.Core10.FundamentalTypes (DeviceSize)
 import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
 import Vulkan.Core10.FundamentalTypes (Flags)
 import Vulkan.Core10.Enums.Format (Format)
 import Vulkan.Core10.Enums.IndexType (IndexType)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
 import Vulkan.Core10.Handles (QueryPool)
 import Vulkan.Core10.Handles (QueryPool(..))
 import Vulkan.Core10.Enums.QueryType (QueryType)
 import Vulkan.Core10.Enums.QueryType (QueryType(..))
 import Vulkan.Core10.Enums.Result (Result)
 import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.CStruct.Extends (SomeStruct(..))
 import Vulkan.Core10.Enums.StructureType (StructureType)
 import Vulkan.Exception (VulkanException(..))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR))
@@ -2500,7 +2518,7 @@
   unsafe
 #endif
   "dynamic" mkVkCreateAccelerationStructureKHR
-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result
+  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct AccelerationStructureCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct AccelerationStructureCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result
 
 -- | vkCreateAccelerationStructureKHR - Create a new acceleration structure
 -- object
@@ -2580,15 +2598,15 @@
 -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
 -- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
 -- 'Vulkan.Core10.Handles.Device'
-createAccelerationStructureKHR :: forall io
-                                . (MonadIO io)
+createAccelerationStructureKHR :: forall a io
+                                . (Extendss AccelerationStructureCreateInfoKHR a, PokeChain a, MonadIO io)
                                => -- | @device@ is the logical device that creates the acceleration structure
                                   -- object.
                                   Device
                                -> -- | @pCreateInfo@ is a pointer to a 'AccelerationStructureCreateInfoKHR'
                                   -- structure containing parameters affecting creation of the acceleration
                                   -- structure.
-                                  AccelerationStructureCreateInfoKHR
+                                  (AccelerationStructureCreateInfoKHR a)
                                -> -- | @pAllocator@ controls host memory allocation as described in the
                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
                                   -- chapter.
@@ -2604,7 +2622,7 @@
     Nothing -> pure nullPtr
     Just j -> ContT $ withCStruct (j)
   pPAccelerationStructure <- ContT $ bracket (callocBytes @AccelerationStructureKHR 8) free
-  r <- lift $ traceAroundEvent "vkCreateAccelerationStructureKHR" (vkCreateAccelerationStructureKHR' (deviceHandle (device)) pCreateInfo pAllocator (pPAccelerationStructure))
+  r <- lift $ traceAroundEvent "vkCreateAccelerationStructureKHR" (vkCreateAccelerationStructureKHR' (deviceHandle (device)) (forgetExtensions pCreateInfo) pAllocator (pPAccelerationStructure))
   lift $ when (r < SUCCESS) (throwIO (VulkanException r))
   pAccelerationStructure <- lift $ peek @AccelerationStructureKHR pPAccelerationStructure
   pure $ (pAccelerationStructure)
@@ -2617,7 +2635,7 @@
 -- favourite resource management library) as the last argument.
 -- To just extract the pair pass '(,)' as the last argument.
 --
-withAccelerationStructureKHR :: forall io r . MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> Maybe AllocationCallbacks -> (io AccelerationStructureKHR -> (AccelerationStructureKHR -> io ()) -> r) -> r
+withAccelerationStructureKHR :: forall a io r . (Extendss AccelerationStructureCreateInfoKHR a, PokeChain a, MonadIO io) => Device -> AccelerationStructureCreateInfoKHR a -> Maybe AllocationCallbacks -> (io AccelerationStructureKHR -> (AccelerationStructureKHR -> io ()) -> r) -> r
 withAccelerationStructureKHR device pCreateInfo pAllocator b =
   b (createAccelerationStructureKHR device pCreateInfo pAllocator)
     (\(o0) -> destroyAccelerationStructureKHR device o0 pAllocator)
@@ -2667,6 +2685,7 @@
 -- 'AccelerationStructureBuildGeometryInfoKHR'::@dstAccelerationStructure@.
 --
 -- Accesses to other input buffers as identified by any used values of
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV'::@vertexData@,
 -- 'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@,
 -- 'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@,
 -- 'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@,
@@ -4249,6 +4268,15 @@
 --     value in @geometry.instances.data.hostAddress@ must be a valid
 --     'Vulkan.Extensions.Handles.AccelerationStructureKHR' object
 --
+-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-04930# For any element
+--     of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@ with a
+--     @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR' with
+--     'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' set, each
+--     @accelerationStructureReference@ in any structure in
+--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
+--     value in @geometry.instances.data.hostAddress@ must be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' object
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkBuildAccelerationStructuresKHR-device-parameter# @device@
@@ -4925,8 +4953,51 @@
 -- @vertexStride@ for acceleration structure geometry is instead restricted
 -- to being a 32-bit value.
 --
+-- == Valid Usage
+--
+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735#
+--     @vertexStride@ /must/ be a multiple of the size in bytes of the
+--     smallest component of @vertexFormat@
+--
+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819#
+--     @vertexStride@ /must/ be less than or equal to 232-1
+--
+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797#
+--     @vertexFormat@ /must/ support the
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
+--     in
+--     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
+--     as returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
+--
+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798#
+--     @indexType@ /must/ be
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
+--
 -- == Valid Usage (Implicit)
 --
+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-sType#
+--     @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR'
+--
+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-pNext-pNext#
+--     @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV'
+--
+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-unique#
+--     The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter#
+--     @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
+--     value
+--
+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter#
+--     @indexType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.IndexType.IndexType' value
+--
 -- = See Also
 --
 -- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',
@@ -4934,48 +5005,22 @@
 -- 'Vulkan.Core10.Enums.Format.Format',
 -- 'Vulkan.Core10.Enums.IndexType.IndexType',
 -- 'Vulkan.Core10.Enums.StructureType.StructureType'
-data AccelerationStructureGeometryTrianglesDataKHR = AccelerationStructureGeometryTrianglesDataKHR
-  { -- | @vertexFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of each vertex
+data AccelerationStructureGeometryTrianglesDataKHR (es :: [Type]) = AccelerationStructureGeometryTrianglesDataKHR
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @vertexFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of each vertex
     -- element.
-    --
-    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797#
-    -- @vertexFormat@ /must/ support the
-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
-    -- in
-    -- 'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
-    -- as returned by
-    -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
-    --
-    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter#
-    -- @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
-    -- value
     vertexFormat :: Format
   , -- | @vertexData@ is a device or host address to memory containing vertex
     -- data for this geometry.
     vertexData :: DeviceOrHostAddressConstKHR
   , -- | @vertexStride@ is the stride in bytes between each vertex.
-    --
-    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735#
-    -- @vertexStride@ /must/ be a multiple of the size in bytes of the smallest
-    -- component of @vertexFormat@
-    --
-    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819#
-    -- @vertexStride@ /must/ be less than or equal to 232-1
     vertexStride :: DeviceSize
   , -- | @maxVertex@ is the highest index of a vertex that will be addressed by a
     -- build command using this structure.
     maxVertex :: Word32
   , -- | @indexType@ is the 'Vulkan.Core10.Enums.IndexType.IndexType' of each
     -- index element.
-    --
-    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798#
-    -- @indexType@ /must/ be 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',
-    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or
-    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
-    --
-    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter#
-    -- @indexType@ /must/ be a valid 'Vulkan.Core10.Enums.IndexType.IndexType'
-    -- value
     indexType :: IndexType
   , -- | @indexData@ is a device or host address to memory containing index data
     -- for this geometry.
@@ -4987,15 +5032,25 @@
   }
   deriving (Typeable)
 #if defined(GENERIC_INSTANCES)
-deriving instance Generic (AccelerationStructureGeometryTrianglesDataKHR)
+deriving instance Generic (AccelerationStructureGeometryTrianglesDataKHR (es :: [Type]))
 #endif
-deriving instance Show AccelerationStructureGeometryTrianglesDataKHR
+deriving instance Show (Chain es) => Show (AccelerationStructureGeometryTrianglesDataKHR es)
 
-instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR where
+instance Extensible AccelerationStructureGeometryTrianglesDataKHR where
+  extensibleTypeName = "AccelerationStructureGeometryTrianglesDataKHR"
+  setNext x next = x{next = next}
+  getNext AccelerationStructureGeometryTrianglesDataKHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureGeometryTrianglesDataKHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @AccelerationStructureGeometryMotionTrianglesDataNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss AccelerationStructureGeometryTrianglesDataKHR es, PokeChain es) => ToCStruct (AccelerationStructureGeometryTrianglesDataKHR es) where
   withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
   pokeCStruct p AccelerationStructureGeometryTrianglesDataKHR{..} f = evalContT $ do
     lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
     lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (vertexFormat)
     ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (vertexData) . ($ ())
     lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (vertexStride)
@@ -5008,7 +5063,8 @@
   cStructAlignment = 8
   pokeZeroCStruct p f = evalContT $ do
     lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
     lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
     ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
     lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
@@ -5018,8 +5074,9 @@
     ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
     lift $ f
 
-instance Zero AccelerationStructureGeometryTrianglesDataKHR where
+instance es ~ '[] => Zero (AccelerationStructureGeometryTrianglesDataKHR es) where
   zero = AccelerationStructureGeometryTrianglesDataKHR
+           ()
            zero
            zero
            zero
@@ -5099,9 +5156,16 @@
     -- addresses or just an array.
     arrayOfPointers :: Bool
   , -- | @data@ is either the address of an array of device or host addresses
-    -- referencing individual 'AccelerationStructureInstanceKHR' structures if
-    -- @arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or the
-    -- address of an array of 'AccelerationStructureInstanceKHR' structures.
+    -- referencing individual 'AccelerationStructureInstanceKHR' structures or
+    -- packed motion instance information as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-motion-instances motion instances>
+    -- if @arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or the
+    -- address of an array of 'AccelerationStructureInstanceKHR' or
+    -- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
+    -- structures. Addresses and 'AccelerationStructureInstanceKHR' structures
+    -- are tightly packed.
+    -- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
+    -- have a stride of 160 bytes.
     data' :: DeviceOrHostAddressConstKHR
   }
   deriving (Typeable)
@@ -5232,6 +5296,30 @@
 -- The geometry index is available to ray queries via the
 -- @OpRayQueryGetIntersectionGeometryIndexKHR@ instruction.
 --
+-- Setting 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' in @flags@
+-- indicates that this build is a motion top level acceleration structure.
+-- A motion top level uses instances of format
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
+-- if 'AccelerationStructureGeometryInstancesDataKHR'::@arrayOfPointers@ is
+-- 'Vulkan.Core10.FundamentalTypes.FALSE'.
+--
+-- If 'AccelerationStructureGeometryInstancesDataKHR'::@arrayOfPointers@ is
+-- 'Vulkan.Core10.FundamentalTypes.TRUE', the pointer for any given element
+-- of the array of instance pointers consists of 4 bits of
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceTypeNV'
+-- in the low 4 bits of the pointer identifying the type of structure at
+-- the pointer. The device address accessed is the value in the array with
+-- the low 4 bits set to zero. The structure at the pointer is one of
+-- 'AccelerationStructureInstanceKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMatrixMotionInstanceNV'
+-- or
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureSRTMotionInstanceNV',
+-- depending on the type value encoded in the low 4 bits.
+--
+-- A top level acceleration structure with either motion instances or
+-- vertex motion in its instances /must/ set
+-- 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' in @flags@.
+--
 -- == Valid Usage
 --
 -- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03654# @type@
@@ -5285,6 +5373,23 @@
 --     then it /must/ not have the
 --     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' bit set
 --
+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-04927#
+--     If @dstAccelerationStructure@ was created with
+--     'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' set in
+--     'AccelerationStructureCreateInfoKHR'::@flags@,
+--     'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' /must/ be set in
+--     @flags@
+--
+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04928# If
+--     'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' is set in @flags@,
+--     @dstAccelerationStructure@ /must/ have been created with
+--     'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' set in
+--     'AccelerationStructureCreateInfoKHR'::@flags@
+--
+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04929# If
+--     'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' is set in @flags@,
+--     @type@ /must/ not be 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-sType-sType#
@@ -5437,8 +5542,9 @@
 --
 -- -   For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR',
 --     @primitiveCount@ is the number of acceleration structures.
---     @primitiveCount@ 'AccelerationStructureInstanceKHR' structures are
---     consumed from
+--     @primitiveCount@ 'AccelerationStructureInstanceKHR' or
+--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
+--     structures are consumed from
 --     'AccelerationStructureGeometryInstancesDataKHR'::@data@, starting at
 --     an offset of @primitiveOffset@.
 --
@@ -5591,6 +5697,13 @@
 -- 'writeAccelerationStructuresPropertiesKHR' /can/ be used to obtain the
 -- compacted size required.
 --
+-- If the acceleration structure will be the target of a build operation
+-- with 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' it /must/ include
+-- 'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' in @flags@ and include
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV'
+-- as an extension structure in @pNext@ with the number of instances as
+-- metadata for the object.
+--
 -- == Valid Usage
 --
 -- -   #VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-03612# If
@@ -5617,6 +5730,18 @@
 -- -   #VUID-VkAccelerationStructureCreateInfoKHR-offset-03734# @offset@
 --     /must/ be a multiple of @256@ bytes
 --
+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-flags-04954# If
+--     'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' is set in @flags@ and
+--     @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR', one member of
+--     the @pNext@ chain /must/ be a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV'
+--
+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-flags-04955# If any
+--     geometry includes
+--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV'
+--     then @flags@ /must/ contain
+--     'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV'
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkAccelerationStructureCreateInfoKHR-sType-sType# @sType@
@@ -5624,8 +5749,12 @@
 --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR'
 --
 -- -   #VUID-VkAccelerationStructureCreateInfoKHR-pNext-pNext# @pNext@
---     /must/ be @NULL@
+--     /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV'
 --
+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-sType-unique# The @sType@
+--     value of each struct in the @pNext@ chain /must/ be unique
+--
 -- -   #VUID-VkAccelerationStructureCreateInfoKHR-createFlags-parameter#
 --     @createFlags@ /must/ be a valid combination of
 --     'AccelerationStructureCreateFlagBitsKHR' values
@@ -5644,8 +5773,10 @@
 -- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
 -- 'Vulkan.Core10.Enums.StructureType.StructureType',
 -- 'createAccelerationStructureKHR'
-data AccelerationStructureCreateInfoKHR = AccelerationStructureCreateInfoKHR
-  { -- | @createFlags@ is a bitmask of 'AccelerationStructureCreateFlagBitsKHR'
+data AccelerationStructureCreateInfoKHR (es :: [Type]) = AccelerationStructureCreateInfoKHR
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @createFlags@ is a bitmask of 'AccelerationStructureCreateFlagBitsKHR'
     -- specifying additional creation parameters of the acceleration structure.
     createFlags :: AccelerationStructureCreateFlagsKHR
   , -- | @buffer@ is the buffer on which the acceleration structure will be
@@ -5666,37 +5797,50 @@
     -- feature is being used.
     deviceAddress :: DeviceAddress
   }
-  deriving (Typeable, Eq)
+  deriving (Typeable)
 #if defined(GENERIC_INSTANCES)
-deriving instance Generic (AccelerationStructureCreateInfoKHR)
+deriving instance Generic (AccelerationStructureCreateInfoKHR (es :: [Type]))
 #endif
-deriving instance Show AccelerationStructureCreateInfoKHR
+deriving instance Show (Chain es) => Show (AccelerationStructureCreateInfoKHR es)
 
-instance ToCStruct AccelerationStructureCreateInfoKHR where
+instance Extensible AccelerationStructureCreateInfoKHR where
+  extensibleTypeName = "AccelerationStructureCreateInfoKHR"
+  setNext x next = x{next = next}
+  getNext AccelerationStructureCreateInfoKHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureCreateInfoKHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @AccelerationStructureMotionInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss AccelerationStructureCreateInfoKHR es, PokeChain es) => ToCStruct (AccelerationStructureCreateInfoKHR es) where
   withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureCreateFlagsKHR)) (createFlags)
-    poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer)
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (offset)
-    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (size)
-    poke ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR)) (type')
-    poke ((p `plusPtr` 56 :: Ptr DeviceAddress)) (deviceAddress)
-    f
+  pokeCStruct p AccelerationStructureCreateInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureCreateFlagsKHR)) (createFlags)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (offset)
+    lift $ poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (size)
+    lift $ poke ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR)) (type')
+    lift $ poke ((p `plusPtr` 56 :: Ptr DeviceAddress)) (deviceAddress)
+    lift $ f
   cStructSize = 64
   cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr Buffer)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR)) (zero)
-    f
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR)) (zero)
+    lift $ f
 
-instance FromCStruct AccelerationStructureCreateInfoKHR where
+instance (Extendss AccelerationStructureCreateInfoKHR es, PeekChain es) => FromCStruct (AccelerationStructureCreateInfoKHR es) where
   peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
     createFlags <- peek @AccelerationStructureCreateFlagsKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureCreateFlagsKHR))
     buffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))
     offset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
@@ -5704,16 +5848,11 @@
     type' <- peek @AccelerationStructureTypeKHR ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR))
     deviceAddress <- peek @DeviceAddress ((p `plusPtr` 56 :: Ptr DeviceAddress))
     pure $ AccelerationStructureCreateInfoKHR
-             createFlags buffer offset size type' deviceAddress
-
-instance Storable AccelerationStructureCreateInfoKHR where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
+             next createFlags buffer offset size type' deviceAddress
 
-instance Zero AccelerationStructureCreateInfoKHR where
+instance es ~ '[] => Zero (AccelerationStructureCreateInfoKHR es) where
   zero = AccelerationStructureCreateInfoKHR
+           ()
            zero
            zero
            zero
@@ -5817,7 +5956,8 @@
 --
 -- = See Also
 --
--- 'AccelerationStructureInstanceKHR'
+-- 'AccelerationStructureInstanceKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMatrixMotionInstanceNV'
 data TransformMatrixKHR = TransformMatrixKHR
   { -- No documentation found for Nested "VkTransformMatrixKHR" "matrixRow0"
     matrixRow0 :: (Float, Float, Float, Float)
@@ -5916,6 +6056,7 @@
 --
 -- = See Also
 --
+-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceDataNV',
 -- 'GeometryInstanceFlagsKHR', 'TransformMatrixKHR'
 data AccelerationStructureInstanceKHR = AccelerationStructureInstanceKHR
   { -- | @transform@ is a 'TransformMatrixKHR' structure describing a
@@ -6513,7 +6654,7 @@
 
 
 data AccelerationStructureGeometryDataKHR
-  = Triangles AccelerationStructureGeometryTrianglesDataKHR
+  = Triangles (SomeStruct AccelerationStructureGeometryTrianglesDataKHR)
   | Aabbs AccelerationStructureGeometryAabbsDataKHR
   | Instances AccelerationStructureGeometryInstancesDataKHR
   deriving (Show)
@@ -6522,7 +6663,7 @@
   withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
   pokeCStruct :: Ptr AccelerationStructureGeometryDataKHR -> AccelerationStructureGeometryDataKHR -> IO a -> IO a
   pokeCStruct p = (. const) . runContT .  \case
-    Triangles v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryTrianglesDataKHR p) (v) . ($ ())
+    Triangles v -> ContT $ pokeSomeCStruct (forgetExtensions (castPtr @_ @(AccelerationStructureGeometryTrianglesDataKHR _) p)) (v) . ($ ())
     Aabbs v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryAabbsDataKHR p) (v) . ($ ())
     Instances v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryInstancesDataKHR p) (v) . ($ ())
   pokeZeroCStruct :: Ptr AccelerationStructureGeometryDataKHR -> IO b -> IO b
@@ -6531,7 +6672,7 @@
   cStructAlignment = 8
 
 instance Zero AccelerationStructureGeometryDataKHR where
-  zero = Triangles zero
+  zero = Triangles (SomeStruct zero)
 
 
 type GeometryInstanceFlagsKHR = GeometryInstanceFlagBitsKHR
@@ -6689,6 +6830,8 @@
 -- and the final result acceleration structure, potentially at the expense
 -- of build time or trace performance.
 pattern BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR        = BuildAccelerationStructureFlagBitsKHR 0x00000010
+-- No documentation found for Nested "VkBuildAccelerationStructureFlagBitsKHR" "VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV"
+pattern BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV             = BuildAccelerationStructureFlagBitsKHR 0x00000020
 
 conNameBuildAccelerationStructureFlagBitsKHR :: String
 conNameBuildAccelerationStructureFlagBitsKHR = "BuildAccelerationStructureFlagBitsKHR"
@@ -6703,6 +6846,7 @@
   , (BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, "PREFER_FAST_TRACE_BIT_KHR")
   , (BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, "PREFER_FAST_BUILD_BIT_KHR")
   , (BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR       , "LOW_MEMORY_BIT_KHR")
+  , (BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV            , "MOTION_BIT_NV")
   ]
 
 instance Show BuildAccelerationStructureFlagBitsKHR where
@@ -6735,17 +6879,20 @@
 -- reused on a subsequent run.
 pattern ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR =
   AccelerationStructureCreateFlagBitsKHR 0x00000001
+-- No documentation found for Nested "VkAccelerationStructureCreateFlagBitsKHR" "VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV"
+pattern ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV = AccelerationStructureCreateFlagBitsKHR 0x00000004
 
 conNameAccelerationStructureCreateFlagBitsKHR :: String
 conNameAccelerationStructureCreateFlagBitsKHR = "AccelerationStructureCreateFlagBitsKHR"
 
 enumPrefixAccelerationStructureCreateFlagBitsKHR :: String
-enumPrefixAccelerationStructureCreateFlagBitsKHR =
-  "ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR"
+enumPrefixAccelerationStructureCreateFlagBitsKHR = "ACCELERATION_STRUCTURE_CREATE_"
 
 showTableAccelerationStructureCreateFlagBitsKHR :: [(AccelerationStructureCreateFlagBitsKHR, String)]
 showTableAccelerationStructureCreateFlagBitsKHR =
-  [(ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, "")]
+  [ (ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, "DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR")
+  , (ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV                        , "MOTION_BIT_NV")
+  ]
 
 instance Show AccelerationStructureCreateFlagBitsKHR where
   showsPrec = enumShowsPrec enumPrefixAccelerationStructureCreateFlagBitsKHR
diff --git a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot
@@ -1167,7 +1167,10 @@
 import Vulkan.CStruct (FromCStruct)
 import Vulkan.CStruct (ToCStruct)
 import Data.Kind (Type)
-
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
 data AabbPositionsKHR
 
 instance ToCStruct AabbPositionsKHR
@@ -1198,12 +1201,13 @@
 instance FromCStruct AccelerationStructureBuildSizesInfoKHR
 
 
-data AccelerationStructureCreateInfoKHR
+type role AccelerationStructureCreateInfoKHR nominal
+data AccelerationStructureCreateInfoKHR (es :: [Type])
 
-instance ToCStruct AccelerationStructureCreateInfoKHR
-instance Show AccelerationStructureCreateInfoKHR
+instance (Extendss AccelerationStructureCreateInfoKHR es, PokeChain es) => ToCStruct (AccelerationStructureCreateInfoKHR es)
+instance Show (Chain es) => Show (AccelerationStructureCreateInfoKHR es)
 
-instance FromCStruct AccelerationStructureCreateInfoKHR
+instance (Extendss AccelerationStructureCreateInfoKHR es, PeekChain es) => FromCStruct (AccelerationStructureCreateInfoKHR es)
 
 
 data AccelerationStructureDeviceAddressInfoKHR
@@ -1232,10 +1236,11 @@
 instance Show AccelerationStructureGeometryKHR
 
 
-data AccelerationStructureGeometryTrianglesDataKHR
+type role AccelerationStructureGeometryTrianglesDataKHR nominal
+data AccelerationStructureGeometryTrianglesDataKHR (es :: [Type])
 
-instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR
-instance Show AccelerationStructureGeometryTrianglesDataKHR
+instance (Extendss AccelerationStructureGeometryTrianglesDataKHR es, PokeChain es) => ToCStruct (AccelerationStructureGeometryTrianglesDataKHR es)
+instance Show (Chain es) => Show (AccelerationStructureGeometryTrianglesDataKHR es)
 
 
 data AccelerationStructureInstanceKHR
diff --git a/src/Vulkan/Extensions/VK_KHR_ray_tracing_pipeline.hs b/src/Vulkan/Extensions/VK_KHR_ray_tracing_pipeline.hs
--- a/src/Vulkan/Extensions/VK_KHR_ray_tracing_pipeline.hs
+++ b/src/Vulkan/Extensions/VK_KHR_ray_tracing_pipeline.hs
@@ -2160,6 +2160,12 @@
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPipelineTraceRaysIndirect ::rayTracingPipelineTraceRaysIndirect>
 --     feature /must/ be enabled
 --
+-- -   #VUID-vkCmdTraceRaysIndirectKHR-rayTracingMotionBlurPipelineTraceRaysIndirect-04951#
+--     If the bound ray tracing pipeline was created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV'
+--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV'::@rayTracingMotionBlurPipelineTraceRaysIndirect@
+--     feature /must/ be enabled
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-parameter#
diff --git a/src/Vulkan/Extensions/VK_KHR_synchronization2.hs b/src/Vulkan/Extensions/VK_KHR_synchronization2.hs
--- a/src/Vulkan/Extensions/VK_KHR_synchronization2.hs
+++ b/src/Vulkan/Extensions/VK_KHR_synchronization2.hs
@@ -880,7 +880,7 @@
 --     feature is not enabled, @stageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-vkCmdResetEvent2KHR-stageMask-03936# If the
+-- -   #VUID-vkCmdResetEvent2KHR-stageMask-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @stageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
@@ -1651,13 +1651,13 @@
 -- at any specific stage of the pipeline, it /may/ instead do so at any
 -- logically later stage.
 --
--- Timestamps /may/ only be meaningfully compared if they are written by
--- commands submitted to the same queue.
+-- Comparisons between timestamps are not meaningful if the timestamps are
+-- written by commands submitted to different queues.
 --
 -- Note
 --
--- An example of such a comparison is determining the execution time of a
--- sequence of commands.
+-- An example of such a comparison is subtracting an older timestamp from a
+-- newer one to determine the execution time of a sequence of commands.
 --
 -- If 'cmdWriteTimestamp2KHR' is called while executing a render pass
 -- instance that has multiview enabled, the timestamp uses N consecutive
@@ -1719,7 +1719,7 @@
 --     feature is not enabled, @stage@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03936# If the
+-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @stage@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
@@ -1909,7 +1909,7 @@
 --     feature is not enabled, @stage@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03936# If the
+-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @stage@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
@@ -2171,7 +2171,7 @@
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-03936# If the
+-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
@@ -2400,7 +2400,7 @@
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-03936# If the
+-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
@@ -2796,7 +2796,7 @@
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03936# If the
+-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
@@ -3043,7 +3043,7 @@
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-03936# If the
+-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
@@ -3798,7 +3798,7 @@
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03936# If the
+-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
@@ -4045,7 +4045,7 @@
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-03936# If the
+-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
@@ -4598,7 +4598,7 @@
 --     feature is not enabled, @stageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
 --
--- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-03936# If the
+-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-04956# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
 --     feature is not enabled, @stageMask@ /must/ not contain
 --     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
diff --git a/src/Vulkan/Extensions/VK_NV_ray_tracing.hs b/src/Vulkan/Extensions/VK_NV_ray_tracing.hs
--- a/src/Vulkan/Extensions/VK_NV_ray_tracing.hs
+++ b/src/Vulkan/Extensions/VK_NV_ray_tracing.hs
@@ -2651,6 +2651,10 @@
 --     not include
 --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR'
 --
+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-04948# @flags@ /must/
+--     not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV'
+--
 -- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-02957# @flags@ /must/
 --     not include both
 --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DEFER_COMPILE_BIT_NV'
diff --git a/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs
@@ -0,0 +1,1152 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_NV_ray_tracing_motion_blur - device extension
+--
+-- == VK_NV_ray_tracing_motion_blur
+--
+-- [__Name String__]
+--     @VK_NV_ray_tracing_motion_blur@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     328
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_ray_tracing_pipeline@
+--
+-- [__Contact__]
+--
+--     -   Eric Werness
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-06-16
+--
+-- [__Interactions and External Dependencies__]
+--
+--     -   This extension requires
+--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_ray_tracing_motion_blur.html SPV_NV_ray_tracing_motion_blur>
+--
+--     -   This extension provides API support for
+--         <https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_ray_tracing_motion_blur.txt GL_NV_ray_tracing_motion_blur>
+--
+-- [__Contributors__]
+--
+--     -   Eric Werness, NVIDIA
+--
+--     -   Ashwin Lele, NVIDIA
+--
+-- == Description
+--
+-- Ray tracing support in the API provides an efficient mechanism to
+-- intersect rays against static geometry, but rendering algorithms often
+-- want to support motion, which is more efficiently supported with
+-- motion-specific algorithms. This extension adds a set of mechanisms to
+-- support fast tracing of moving geometry:
+--
+-- -   A ray pipeline trace call which takes a time parameter
+--
+-- -   Flags to enable motion support in an acceleration structure
+--
+-- -   Support for time-varying vertex positions in a geometry
+--
+-- -   Motion instances to move existing instances over time
+--
+-- The motion represented here is parameterized across a normalized
+-- timestep between 0.0 and 1.0. A motion trace using OpTraceRaysMotionNV
+-- provides a time within that normalized range to be used when
+-- intersecting that ray with geometry. The geometry can be provided with
+-- motion by a combination of adding a second vertex position for time of
+-- 1.0 using 'AccelerationStructureGeometryMotionTrianglesDataNV' and
+-- providing multiple transforms in the instance using
+-- 'AccelerationStructureMotionInstanceNV'.
+--
+-- == New Structures
+--
+-- -   'AccelerationStructureMatrixMotionInstanceNV'
+--
+-- -   'AccelerationStructureMotionInstanceNV'
+--
+-- -   'AccelerationStructureSRTMotionInstanceNV'
+--
+-- -   'SRTDataNV'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureCreateInfoKHR':
+--
+--     -   'AccelerationStructureMotionInfoNV'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryTrianglesDataKHR':
+--
+--     -   'AccelerationStructureGeometryMotionTrianglesDataNV'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceRayTracingMotionBlurFeaturesNV'
+--
+-- == New Unions
+--
+-- -   'AccelerationStructureMotionInstanceDataNV'
+--
+-- == New Enums
+--
+-- -   'AccelerationStructureMotionInstanceTypeNV'
+--
+-- == New Bitmasks
+--
+-- -   'AccelerationStructureMotionInfoFlagsNV'
+--
+-- -   'AccelerationStructureMotionInstanceFlagsNV'
+--
+-- == New Enum Constants
+--
+-- -   'NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME'
+--
+-- -   'NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureCreateFlagBitsKHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_acceleration_structure.ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_acceleration_structure.BuildAccelerationStructureFlagBitsKHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_acceleration_structure.BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV'
+--
+-- == Issues
+--
+-- (1) What size is VkAccelerationStructureMotionInstanceNV?
+--
+-- -   Added a note on the structure size and made the stride explicit in
+--     the language.
+--
+-- (2) Allow arrayOfPointers for motion TLAS?
+--
+-- -   Yes, with a packed encoding to minimize the amount of data sent for
+--     metadata.
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-06-16 (Eric Werness, Ashwin Lele)
+--
+--     -   Initial external release
+--
+-- = See Also
+--
+-- 'AccelerationStructureGeometryMotionTrianglesDataNV',
+-- 'AccelerationStructureMatrixMotionInstanceNV',
+-- 'AccelerationStructureMotionInfoFlagsNV',
+-- 'AccelerationStructureMotionInfoNV',
+-- 'AccelerationStructureMotionInstanceDataNV',
+-- 'AccelerationStructureMotionInstanceFlagsNV',
+-- 'AccelerationStructureMotionInstanceNV',
+-- 'AccelerationStructureMotionInstanceTypeNV',
+-- 'AccelerationStructureSRTMotionInstanceNV',
+-- 'PhysicalDeviceRayTracingMotionBlurFeaturesNV', 'SRTDataNV'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing_motion_blur Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_NV_ray_tracing_motion_blur  ( PhysicalDeviceRayTracingMotionBlurFeaturesNV(..)
+                                                        , AccelerationStructureGeometryMotionTrianglesDataNV(..)
+                                                        , AccelerationStructureMotionInfoNV(..)
+                                                        , SRTDataNV(..)
+                                                        , AccelerationStructureSRTMotionInstanceNV(..)
+                                                        , AccelerationStructureMatrixMotionInstanceNV(..)
+                                                        , AccelerationStructureMotionInstanceNV(..)
+                                                        , AccelerationStructureMotionInstanceDataNV(..)
+                                                        , AccelerationStructureMotionInfoFlagsNV(..)
+                                                        , AccelerationStructureMotionInstanceFlagsNV(..)
+                                                        , AccelerationStructureMotionInstanceTypeNV( ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV
+                                                                                                   , ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV
+                                                                                                   , ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV
+                                                                                                   , ..
+                                                                                                   )
+                                                        , NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION
+                                                        , pattern NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION
+                                                        , NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME
+                                                        , pattern NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME
+                                                        , TransformMatrixKHR(..)
+                                                        , AccelerationStructureInstanceKHR(..)
+                                                        , DeviceOrHostAddressConstKHR(..)
+                                                        , GeometryInstanceFlagBitsKHR(..)
+                                                        , GeometryInstanceFlagsKHR
+                                                        , BuildAccelerationStructureFlagBitsKHR(..)
+                                                        , BuildAccelerationStructureFlagsKHR
+                                                        , AccelerationStructureCreateFlagBitsKHR(..)
+                                                        , AccelerationStructureCreateFlagsKHR
+                                                        ) where
+
+import Vulkan.Internal.Utils (enumReadPrec)
+import Vulkan.Internal.Utils (enumShowsPrec)
+import Control.Exception.Base (bracket)
+import Data.Bits ((.&.))
+import Data.Bits ((.|.))
+import Data.Bits (shiftL)
+import Data.Bits (shiftR)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Ptr (castPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Data.Coerce (coerce)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.Trans.Cont (runContT)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Data.Bits (Bits)
+import Data.Bits (FiniteBits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(..))
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import GHC.Show (Show(showsPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureInstanceKHR)
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Extensions.VK_KHR_acceleration_structure (DeviceOrHostAddressConstKHR)
+import Vulkan.Core10.FundamentalTypes (Flags)
+import Vulkan.Extensions.VK_KHR_acceleration_structure (GeometryInstanceFlagsKHR)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.VK_KHR_acceleration_structure (TransformMatrixKHR)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV))
+import Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureCreateFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureCreateFlagsKHR)
+import Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureInstanceKHR(..))
+import Vulkan.Extensions.VK_KHR_acceleration_structure (BuildAccelerationStructureFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_acceleration_structure (BuildAccelerationStructureFlagsKHR)
+import Vulkan.Extensions.VK_KHR_acceleration_structure (DeviceOrHostAddressConstKHR(..))
+import Vulkan.Extensions.VK_KHR_acceleration_structure (GeometryInstanceFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_acceleration_structure (GeometryInstanceFlagsKHR)
+import Vulkan.Extensions.VK_KHR_acceleration_structure (TransformMatrixKHR(..))
+-- | VkPhysicalDeviceRayTracingMotionBlurFeaturesNV - Structure describing
+-- the ray tracing motion blur features that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- This structure describes the following feature: * @sType@ is the type of
+-- this structure. * @pNext@ is @NULL@ or a pointer to a structure
+-- extending this structure. * #features-rayTracingMotionBlur#
+-- @rayTracingMotionBlur@ indicates whether the implementation supports the
+-- motion blur feature. *
+-- #features-rayTracingMotionBlurPipelineTraceRaysIndirect#
+-- @rayTracingMotionBlurPipelineTraceRaysIndirect@ indicates whether the
+-- implementation supports indirect trace ray commands with the motion blur
+-- feature enabled.
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceRayTracingMotionBlurFeaturesNV' structure is
+-- included in the @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
+-- structure passed to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
+-- it is filled in to indicate whether each corresponding feature is
+-- supported. 'PhysicalDeviceRayTracingMotionBlurFeaturesNV' /can/ also be
+-- used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- selectively enable these features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceRayTracingMotionBlurFeaturesNV = PhysicalDeviceRayTracingMotionBlurFeaturesNV
+  { -- No documentation found for Nested "VkPhysicalDeviceRayTracingMotionBlurFeaturesNV" "rayTracingMotionBlur"
+    rayTracingMotionBlur :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingMotionBlurFeaturesNV" "rayTracingMotionBlurPipelineTraceRaysIndirect"
+    rayTracingMotionBlurPipelineTraceRaysIndirect :: Bool
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceRayTracingMotionBlurFeaturesNV)
+#endif
+deriving instance Show PhysicalDeviceRayTracingMotionBlurFeaturesNV
+
+instance ToCStruct PhysicalDeviceRayTracingMotionBlurFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceRayTracingMotionBlurFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (rayTracingMotionBlur))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (rayTracingMotionBlurPipelineTraceRaysIndirect))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceRayTracingMotionBlurFeaturesNV where
+  peekCStruct p = do
+    rayTracingMotionBlur <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    rayTracingMotionBlurPipelineTraceRaysIndirect <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceRayTracingMotionBlurFeaturesNV
+             (bool32ToBool rayTracingMotionBlur) (bool32ToBool rayTracingMotionBlurPipelineTraceRaysIndirect)
+
+instance Storable PhysicalDeviceRayTracingMotionBlurFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceRayTracingMotionBlurFeaturesNV where
+  zero = PhysicalDeviceRayTracingMotionBlurFeaturesNV
+           zero
+           zero
+
+
+-- | VkAccelerationStructureGeometryMotionTrianglesDataNV - Structure
+-- specifying vertex motion in a bottom-level acceleration structure
+--
+-- = Description
+--
+-- If 'AccelerationStructureGeometryMotionTrianglesDataNV' is present in a
+-- geometry, the basic vertex positions are used for the position of the
+-- triangles in the geometry at time 0.0 and the @vertexData@ in
+-- 'AccelerationStructureGeometryMotionTrianglesDataNV' is used for the
+-- vertex positions at time 1.0, with positions linearly interpolated at
+-- intermediate times.
+--
+-- Indexing for 'AccelerationStructureGeometryMotionTrianglesDataNV'
+-- @vertexData@ is equivalent to the basic vertex position data.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.DeviceOrHostAddressConstKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AccelerationStructureGeometryMotionTrianglesDataNV = AccelerationStructureGeometryMotionTrianglesDataNV
+  { -- | @vertexData@ is a pointer to vertex data for this geometry at time 1.0
+    vertexData :: DeviceOrHostAddressConstKHR }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (AccelerationStructureGeometryMotionTrianglesDataNV)
+#endif
+deriving instance Show AccelerationStructureGeometryMotionTrianglesDataNV
+
+instance ToCStruct AccelerationStructureGeometryMotionTrianglesDataNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureGeometryMotionTrianglesDataNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (vertexData) . ($ ())
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
+    lift $ f
+
+instance Zero AccelerationStructureGeometryMotionTrianglesDataNV where
+  zero = AccelerationStructureGeometryMotionTrianglesDataNV
+           zero
+
+
+-- | VkAccelerationStructureMotionInfoNV - Structure specifying the
+-- parameters of a newly created acceleration structure object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AccelerationStructureMotionInfoFlagsNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AccelerationStructureMotionInfoNV = AccelerationStructureMotionInfoNV
+  { -- | @maxInstances@ is the maximum number of instances that /may/ be used in
+    -- the motion top-level acceleration structure.
+    maxInstances :: Word32
+  , -- | @flags@ is 0 and reserved for future use.
+    --
+    -- #VUID-VkAccelerationStructureMotionInfoNV-flags-zerobitmask# @flags@
+    -- /must/ be @0@
+    flags :: AccelerationStructureMotionInfoFlagsNV
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (AccelerationStructureMotionInfoNV)
+#endif
+deriving instance Show AccelerationStructureMotionInfoNV
+
+instance ToCStruct AccelerationStructureMotionInfoNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureMotionInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxInstances)
+    poke ((p `plusPtr` 20 :: Ptr AccelerationStructureMotionInfoFlagsNV)) (flags)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct AccelerationStructureMotionInfoNV where
+  peekCStruct p = do
+    maxInstances <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    flags <- peek @AccelerationStructureMotionInfoFlagsNV ((p `plusPtr` 20 :: Ptr AccelerationStructureMotionInfoFlagsNV))
+    pure $ AccelerationStructureMotionInfoNV
+             maxInstances flags
+
+instance Storable AccelerationStructureMotionInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AccelerationStructureMotionInfoNV where
+  zero = AccelerationStructureMotionInfoNV
+           zero
+           zero
+
+
+-- | VkSRTDataNV - Structure specifying a transform in SRT decomposition
+--
+-- = Description
+--
+-- This transform decomposition consists of three elements. The first is a
+-- matrix S, consisting of a scale, shear, and translation, usually used to
+-- define the pivot point of the following rotation. This matrix is
+-- constructed from the parameters above by:
+--
+-- \[S =
+-- \left(
+--     \begin{matrix}
+--         sx & a  & b  & pvx \\
+--         0  & sy & c  & pvy \\
+--         0  & 0  & sz & pvz
+--     \end{matrix}
+-- \right)\]
+--
+-- The rotation quaternion is defined as:
+--
+-- -   @R@ = [ @qx@, @qy@, @qz@, @qw@ ]
+--
+-- This is a rotation around a conceptual normalized axis [ ax, ay, az ] of
+-- amount @theta@ such that:
+--
+-- -   [ @qx@, @qy@, @qz@ ] = sin(@theta@\/2) × [ @ax@, @ay@, @az@ ]
+--
+-- and
+--
+-- -   @qw@ = cos(@theta@\/2)
+--
+-- Finally, the transform has a translation T constructed from the
+-- parameters above by:
+--
+-- \[T =
+-- \left(
+--     \begin{matrix}
+--         1 & 0 & 0 & tx \\
+--         0 & 1 & 0 & ty \\
+--         0 & 0 & 1 & tz
+--     \end{matrix}
+-- \right)\]
+--
+-- The effective derived transform is then given by
+--
+-- -   @T@ × @R@ × @S@
+--
+-- = See Also
+--
+-- 'AccelerationStructureSRTMotionInstanceNV'
+data SRTDataNV = SRTDataNV
+  { -- | @sx@ is the x component of the scale of the transform
+    sx :: Float
+  , -- | @a@ is one component of the shear for the transform
+    a :: Float
+  , -- | @b@ is one component of the shear for the transform
+    b :: Float
+  , -- | @pvx@ is the x component of the pivot point of the transform
+    pvx :: Float
+  , -- | @sy@ is the y component of the scale of the transform
+    sy :: Float
+  , -- | @c@ is one component of the shear for the transform
+    c :: Float
+  , -- | @pvy@ is the y component of the pivot point of the transform
+    pvy :: Float
+  , -- | @sz@ is the z component of the scale of the transform
+    sz :: Float
+  , -- | @pvz@ is the z component of the pivot point of the transform
+    pvz :: Float
+  , -- | @qx@ is the x component of the rotation quaternion
+    qx :: Float
+  , -- | @qy@ is the y component of the rotation quaternion
+    qy :: Float
+  , -- | @qz@ is the z component of the rotation quaternion
+    qz :: Float
+  , -- | @qw@ is the w component of the rotation quaternion
+    qw :: Float
+  , -- | @tx@ is the x component of the post-rotation translation
+    tx :: Float
+  , -- | @ty@ is the y component of the post-rotation translation
+    ty :: Float
+  , -- | @tz@ is the z component of the post-rotation translation
+    tz :: Float
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SRTDataNV)
+#endif
+deriving instance Show SRTDataNV
+
+instance ToCStruct SRTDataNV where
+  withCStruct x f = allocaBytesAligned 64 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SRTDataNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (sx))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (a))
+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (b))
+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (pvx))
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (sy))
+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (c))
+    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (pvy))
+    poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (sz))
+    poke ((p `plusPtr` 32 :: Ptr CFloat)) (CFloat (pvz))
+    poke ((p `plusPtr` 36 :: Ptr CFloat)) (CFloat (qx))
+    poke ((p `plusPtr` 40 :: Ptr CFloat)) (CFloat (qy))
+    poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (qz))
+    poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (qw))
+    poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (tx))
+    poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (ty))
+    poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (tz))
+    f
+  cStructSize = 64
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 32 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 36 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 40 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (zero))
+    f
+
+instance FromCStruct SRTDataNV where
+  peekCStruct p = do
+    sx <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
+    a <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
+    b <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))
+    pvx <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))
+    sy <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
+    c <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))
+    pvy <- peek @CFloat ((p `plusPtr` 24 :: Ptr CFloat))
+    sz <- peek @CFloat ((p `plusPtr` 28 :: Ptr CFloat))
+    pvz <- peek @CFloat ((p `plusPtr` 32 :: Ptr CFloat))
+    qx <- peek @CFloat ((p `plusPtr` 36 :: Ptr CFloat))
+    qy <- peek @CFloat ((p `plusPtr` 40 :: Ptr CFloat))
+    qz <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))
+    qw <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))
+    tx <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
+    ty <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))
+    tz <- peek @CFloat ((p `plusPtr` 60 :: Ptr CFloat))
+    pure $ SRTDataNV
+             (coerce @CFloat @Float sx) (coerce @CFloat @Float a) (coerce @CFloat @Float b) (coerce @CFloat @Float pvx) (coerce @CFloat @Float sy) (coerce @CFloat @Float c) (coerce @CFloat @Float pvy) (coerce @CFloat @Float sz) (coerce @CFloat @Float pvz) (coerce @CFloat @Float qx) (coerce @CFloat @Float qy) (coerce @CFloat @Float qz) (coerce @CFloat @Float qw) (coerce @CFloat @Float tx) (coerce @CFloat @Float ty) (coerce @CFloat @Float tz)
+
+instance Storable SRTDataNV where
+  sizeOf ~_ = 64
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SRTDataNV where
+  zero = SRTDataNV
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureSRTMotionInstanceNV - Structure specifying a
+-- single acceleration structure SRT motion instance for building into an
+-- acceleration structure geometry
+--
+-- = Description
+--
+-- The C language spec does not define the ordering of bit-fields, but in
+-- practice, this struct produces the correct layout with existing
+-- compilers. The intended bit pattern is for the following:
+--
+-- If a compiler produces code that diverges from that pattern,
+-- applications /must/ employ another method to set values according to the
+-- correct bit pattern.
+--
+-- The transform for a SRT motion instance at a point in time is derived
+-- from component-wise linear interpolation of the two SRT transforms. That
+-- is, for a @time@ in [0,1] the resulting transform is
+--
+-- -   @transformT0@ × (1 - @time@) + @transformT1@ × @time@
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AccelerationStructureMotionInstanceDataNV',
+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagsKHR',
+-- 'SRTDataNV'
+data AccelerationStructureSRTMotionInstanceNV = AccelerationStructureSRTMotionInstanceNV
+  { -- | @transformT0@ is a 'SRTDataNV' structure describing a transformation to
+    -- be applied to the acceleration structure at time 0.
+    transformT0 :: SRTDataNV
+  , -- | @transformT1@ is a 'SRTDataNV' structure describing a transformation to
+    -- be applied to the acceleration structure at time 1.
+    transformT1 :: SRTDataNV
+  , -- | @instanceCustomIndex@ is a 24-bit user-specified index value accessible
+    -- to ray shaders in the @InstanceCustomIndexKHR@ built-in.
+    --
+    -- @instanceCustomIndex@ and @mask@ occupy the same memory as if a single
+    -- @uint32_t@ was specified in their place
+    --
+    -- -   @instanceCustomIndex@ occupies the 24 least significant bits of that
+    --     memory
+    --
+    -- -   @mask@ occupies the 8 most significant bits of that memory
+    instanceCustomIndex :: Word32
+  , -- | @mask@ is an 8-bit visibility mask for the geometry. The instance /may/
+    -- only be hit if @rayMask & instance.mask != 0@
+    mask :: Word32
+  , -- | @instanceShaderBindingTableRecordOffset@ is a 24-bit offset used in
+    -- calculating the hit shader binding table index.
+    --
+    -- @instanceShaderBindingTableRecordOffset@ and @flags@ occupy the same
+    -- memory as if a single @uint32_t@ was specified in their place
+    --
+    -- -   @instanceShaderBindingTableRecordOffset@ occupies the 24 least
+    --     significant bits of that memory
+    --
+    -- -   @flags@ occupies the 8 most significant bits of that memory
+    instanceShaderBindingTableRecordOffset :: Word32
+  , -- | @flags@ is an 8-bit mask of
+    -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagBitsKHR'
+    -- values to apply to this instance.
+    --
+    -- #VUID-VkAccelerationStructureSRTMotionInstanceNV-flags-parameter#
+    -- @flags@ /must/ be a valid combination of
+    -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagBitsKHR'
+    -- values
+    flags :: GeometryInstanceFlagsKHR
+  , -- | @accelerationStructureReference@ is either:
+    --
+    -- -   a device address containing the value obtained from
+    --     'Vulkan.Extensions.VK_KHR_acceleration_structure.getAccelerationStructureDeviceAddressKHR'
+    --     or
+    --     'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
+    --     (used by device operations which reference acceleration structures)
+    --     or,
+    --
+    -- -   a 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object (used
+    --     by host operations which reference acceleration structures).
+    accelerationStructureReference :: Word64
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (AccelerationStructureSRTMotionInstanceNV)
+#endif
+deriving instance Show AccelerationStructureSRTMotionInstanceNV
+
+instance ToCStruct AccelerationStructureSRTMotionInstanceNV where
+  withCStruct x f = allocaBytesAligned 144 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureSRTMotionInstanceNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr SRTDataNV)) (transformT0)
+    poke ((p `plusPtr` 64 :: Ptr SRTDataNV)) (transformT1)
+    poke ((p `plusPtr` 128 :: Ptr Word32)) (((coerce @_ @Word32 (mask)) `shiftL` 24) .|. (instanceCustomIndex))
+    poke ((p `plusPtr` 132 :: Ptr Word32)) (((coerce @_ @Word32 (flags)) `shiftL` 24) .|. (instanceShaderBindingTableRecordOffset))
+    poke ((p `plusPtr` 136 :: Ptr Word64)) (accelerationStructureReference)
+    f
+  cStructSize = 144
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr SRTDataNV)) (zero)
+    poke ((p `plusPtr` 64 :: Ptr SRTDataNV)) (zero)
+    poke ((p `plusPtr` 136 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct AccelerationStructureSRTMotionInstanceNV where
+  peekCStruct p = do
+    transformT0 <- peekCStruct @SRTDataNV ((p `plusPtr` 0 :: Ptr SRTDataNV))
+    transformT1 <- peekCStruct @SRTDataNV ((p `plusPtr` 64 :: Ptr SRTDataNV))
+    instanceCustomIndex <- peek @Word32 ((p `plusPtr` 128 :: Ptr Word32))
+    let instanceCustomIndex' = ((instanceCustomIndex .&. coerce @Word32 0xffffff))
+    mask <- peek @Word32 ((p `plusPtr` 128 :: Ptr Word32))
+    let mask' = ((((mask `shiftR` 24)) .&. coerce @Word32 0xff))
+    instanceShaderBindingTableRecordOffset <- peek @Word32 ((p `plusPtr` 132 :: Ptr Word32))
+    let instanceShaderBindingTableRecordOffset' = ((instanceShaderBindingTableRecordOffset .&. coerce @Word32 0xffffff))
+    flags <- peek @GeometryInstanceFlagsKHR ((p `plusPtr` 132 :: Ptr GeometryInstanceFlagsKHR))
+    let flags' = ((((flags `shiftR` 24)) .&. coerce @Word32 0xff))
+    accelerationStructureReference <- peek @Word64 ((p `plusPtr` 136 :: Ptr Word64))
+    pure $ AccelerationStructureSRTMotionInstanceNV
+             transformT0 transformT1 instanceCustomIndex' mask' instanceShaderBindingTableRecordOffset' flags' accelerationStructureReference
+
+instance Storable AccelerationStructureSRTMotionInstanceNV where
+  sizeOf ~_ = 144
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AccelerationStructureSRTMotionInstanceNV where
+  zero = AccelerationStructureSRTMotionInstanceNV
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureMatrixMotionInstanceNV - Structure specifying a
+-- single acceleration structure matrix motion instance for building into
+-- an acceleration structure geometry
+--
+-- = Description
+--
+-- The C language spec does not define the ordering of bit-fields, but in
+-- practice, this struct produces the correct layout with existing
+-- compilers. The intended bit pattern is for the following:
+--
+-- If a compiler produces code that diverges from that pattern,
+-- applications /must/ employ another method to set values according to the
+-- correct bit pattern.
+--
+-- The transform for a matrix motion instance at a point in time is derived
+-- by component-wise linear interpolation of the two transforms. That is,
+-- for a @time@ in [0,1] the resulting transform is
+--
+-- -   @transformT0@ × (1 - @time@) + @transformT1@ × @time@
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AccelerationStructureMotionInstanceDataNV',
+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagsKHR',
+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.TransformMatrixKHR'
+data AccelerationStructureMatrixMotionInstanceNV = AccelerationStructureMatrixMotionInstanceNV
+  { -- | @transformT0@ is a
+    -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.TransformMatrixKHR'
+    -- structure describing a transformation to be applied to the acceleration
+    -- structure at time 0.
+    transformT0 :: TransformMatrixKHR
+  , -- | @transformT1@ is a
+    -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.TransformMatrixKHR'
+    -- structure describing a transformation to be applied to the acceleration
+    -- structure at time 1.
+    transformT1 :: TransformMatrixKHR
+  , -- | @instanceCustomIndex@ is a 24-bit user-specified index value accessible
+    -- to ray shaders in the @InstanceCustomIndexKHR@ built-in.
+    --
+    -- @instanceCustomIndex@ and @mask@ occupy the same memory as if a single
+    -- @uint32_t@ was specified in their place
+    --
+    -- -   @instanceCustomIndex@ occupies the 24 least significant bits of that
+    --     memory
+    --
+    -- -   @mask@ occupies the 8 most significant bits of that memory
+    instanceCustomIndex :: Word32
+  , -- | @mask@ is an 8-bit visibility mask for the geometry. The instance /may/
+    -- only be hit if @rayMask & instance.mask != 0@
+    mask :: Word32
+  , -- | @instanceShaderBindingTableRecordOffset@ is a 24-bit offset used in
+    -- calculating the hit shader binding table index.
+    --
+    -- @instanceShaderBindingTableRecordOffset@ and @flags@ occupy the same
+    -- memory as if a single @uint32_t@ was specified in their place
+    --
+    -- -   @instanceShaderBindingTableRecordOffset@ occupies the 24 least
+    --     significant bits of that memory
+    --
+    -- -   @flags@ occupies the 8 most significant bits of that memory
+    instanceShaderBindingTableRecordOffset :: Word32
+  , -- | @flags@ is an 8-bit mask of
+    -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagBitsKHR'
+    -- values to apply to this instance.
+    --
+    -- #VUID-VkAccelerationStructureMatrixMotionInstanceNV-flags-parameter#
+    -- @flags@ /must/ be a valid combination of
+    -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagBitsKHR'
+    -- values
+    flags :: GeometryInstanceFlagsKHR
+  , -- | @accelerationStructureReference@ is either:
+    --
+    -- -   a device address containing the value obtained from
+    --     'Vulkan.Extensions.VK_KHR_acceleration_structure.getAccelerationStructureDeviceAddressKHR'
+    --     or
+    --     'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
+    --     (used by device operations which reference acceleration structures)
+    --     or,
+    --
+    -- -   a 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object (used
+    --     by host operations which reference acceleration structures).
+    accelerationStructureReference :: Word64
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (AccelerationStructureMatrixMotionInstanceNV)
+#endif
+deriving instance Show AccelerationStructureMatrixMotionInstanceNV
+
+instance ToCStruct AccelerationStructureMatrixMotionInstanceNV where
+  withCStruct x f = allocaBytesAligned 112 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureMatrixMotionInstanceNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (transformT0)
+    poke ((p `plusPtr` 48 :: Ptr TransformMatrixKHR)) (transformT1)
+    poke ((p `plusPtr` 96 :: Ptr Word32)) (((coerce @_ @Word32 (mask)) `shiftL` 24) .|. (instanceCustomIndex))
+    poke ((p `plusPtr` 100 :: Ptr Word32)) (((coerce @_ @Word32 (flags)) `shiftL` 24) .|. (instanceShaderBindingTableRecordOffset))
+    poke ((p `plusPtr` 104 :: Ptr Word64)) (accelerationStructureReference)
+    f
+  cStructSize = 112
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr TransformMatrixKHR)) (zero)
+    poke ((p `plusPtr` 104 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct AccelerationStructureMatrixMotionInstanceNV where
+  peekCStruct p = do
+    transformT0 <- peekCStruct @TransformMatrixKHR ((p `plusPtr` 0 :: Ptr TransformMatrixKHR))
+    transformT1 <- peekCStruct @TransformMatrixKHR ((p `plusPtr` 48 :: Ptr TransformMatrixKHR))
+    instanceCustomIndex <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32))
+    let instanceCustomIndex' = ((instanceCustomIndex .&. coerce @Word32 0xffffff))
+    mask <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32))
+    let mask' = ((((mask `shiftR` 24)) .&. coerce @Word32 0xff))
+    instanceShaderBindingTableRecordOffset <- peek @Word32 ((p `plusPtr` 100 :: Ptr Word32))
+    let instanceShaderBindingTableRecordOffset' = ((instanceShaderBindingTableRecordOffset .&. coerce @Word32 0xffffff))
+    flags <- peek @GeometryInstanceFlagsKHR ((p `plusPtr` 100 :: Ptr GeometryInstanceFlagsKHR))
+    let flags' = ((((flags `shiftR` 24)) .&. coerce @Word32 0xff))
+    accelerationStructureReference <- peek @Word64 ((p `plusPtr` 104 :: Ptr Word64))
+    pure $ AccelerationStructureMatrixMotionInstanceNV
+             transformT0 transformT1 instanceCustomIndex' mask' instanceShaderBindingTableRecordOffset' flags' accelerationStructureReference
+
+instance Storable AccelerationStructureMatrixMotionInstanceNV where
+  sizeOf ~_ = 112
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AccelerationStructureMatrixMotionInstanceNV where
+  zero = AccelerationStructureMatrixMotionInstanceNV
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureMotionInstanceNV - Structure specifying a single
+-- acceleration structure motion instance for building into an acceleration
+-- structure geometry
+--
+-- = Description
+--
+-- Note
+--
+-- If writing this other than with a standard C compiler, note that the
+-- final structure should be 152 bytes in size.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkAccelerationStructureMotionInstanceNV-type-parameter# @type@
+--     /must/ be a valid 'AccelerationStructureMotionInstanceTypeNV' value
+--
+-- -   #VUID-VkAccelerationStructureMotionInstanceNV-flags-zerobitmask#
+--     @flags@ /must/ be @0@
+--
+-- -   #VUID-VkAccelerationStructureMotionInstanceNV-staticInstance-parameter#
+--     If @type@ is
+--     'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV', the
+--     @staticInstance@ member of @data@ /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureInstanceKHR'
+--     structure
+--
+-- -   #VUID-VkAccelerationStructureMotionInstanceNV-matrixMotionInstance-parameter#
+--     If @type@ is
+--     'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV', the
+--     @matrixMotionInstance@ member of @data@ /must/ be a valid
+--     'AccelerationStructureMatrixMotionInstanceNV' structure
+--
+-- -   #VUID-VkAccelerationStructureMotionInstanceNV-srtMotionInstance-parameter#
+--     If @type@ is
+--     'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV', the
+--     @srtMotionInstance@ member of @data@ /must/ be a valid
+--     'AccelerationStructureSRTMotionInstanceNV' structure
+--
+-- = See Also
+--
+-- 'AccelerationStructureMotionInstanceDataNV',
+-- 'AccelerationStructureMotionInstanceFlagsNV',
+-- 'AccelerationStructureMotionInstanceTypeNV'
+data AccelerationStructureMotionInstanceNV = AccelerationStructureMotionInstanceNV
+  { -- | @type@ is a 'AccelerationStructureMotionInstanceTypeNV' enumerant
+    -- identifying which type of motion instance this is and which type of the
+    -- union is valid.
+    type' :: AccelerationStructureMotionInstanceTypeNV
+  , -- | @flags@ is currently unused, but is required to keep natural alignment
+    -- of @data@.
+    flags :: AccelerationStructureMotionInstanceFlagsNV
+  , -- | @data@ is a 'AccelerationStructureMotionInstanceDataNV' containing
+    -- motion instance data for this instance.
+    data' :: AccelerationStructureMotionInstanceDataNV
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (AccelerationStructureMotionInstanceNV)
+#endif
+deriving instance Show AccelerationStructureMotionInstanceNV
+
+instance ToCStruct AccelerationStructureMotionInstanceNV where
+  withCStruct x f = allocaBytesAligned 152 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureMotionInstanceNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr AccelerationStructureMotionInstanceTypeNV)) (type')
+    lift $ poke ((p `plusPtr` 4 :: Ptr AccelerationStructureMotionInstanceFlagsNV)) (flags)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr AccelerationStructureMotionInstanceDataNV)) (data') . ($ ())
+    lift $ f
+  cStructSize = 152
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr AccelerationStructureMotionInstanceTypeNV)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr AccelerationStructureMotionInstanceDataNV)) (zero) . ($ ())
+    lift $ f
+
+instance Zero AccelerationStructureMotionInstanceNV where
+  zero = AccelerationStructureMotionInstanceNV
+           zero
+           zero
+           zero
+
+
+data AccelerationStructureMotionInstanceDataNV
+  = StaticInstance AccelerationStructureInstanceKHR
+  | MatrixMotionInstance AccelerationStructureMatrixMotionInstanceNV
+  | SrtMotionInstance AccelerationStructureSRTMotionInstanceNV
+  deriving (Show)
+
+instance ToCStruct AccelerationStructureMotionInstanceDataNV where
+  withCStruct x f = allocaBytesAligned 144 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct :: Ptr AccelerationStructureMotionInstanceDataNV -> AccelerationStructureMotionInstanceDataNV -> IO a -> IO a
+  pokeCStruct p = (. const) . runContT .  \case
+    StaticInstance v -> lift $ poke (castPtr @_ @AccelerationStructureInstanceKHR p) (v)
+    MatrixMotionInstance v -> lift $ poke (castPtr @_ @AccelerationStructureMatrixMotionInstanceNV p) (v)
+    SrtMotionInstance v -> lift $ poke (castPtr @_ @AccelerationStructureSRTMotionInstanceNV p) (v)
+  pokeZeroCStruct :: Ptr AccelerationStructureMotionInstanceDataNV -> IO b -> IO b
+  pokeZeroCStruct _ f = f
+  cStructSize = 144
+  cStructAlignment = 8
+
+instance Zero AccelerationStructureMotionInstanceDataNV where
+  zero = SrtMotionInstance zero
+
+
+-- No documentation found for TopLevel "VkAccelerationStructureMotionInfoFlagsNV"
+newtype AccelerationStructureMotionInfoFlagsNV = AccelerationStructureMotionInfoFlagsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
+
+
+
+conNameAccelerationStructureMotionInfoFlagsNV :: String
+conNameAccelerationStructureMotionInfoFlagsNV = "AccelerationStructureMotionInfoFlagsNV"
+
+enumPrefixAccelerationStructureMotionInfoFlagsNV :: String
+enumPrefixAccelerationStructureMotionInfoFlagsNV = ""
+
+showTableAccelerationStructureMotionInfoFlagsNV :: [(AccelerationStructureMotionInfoFlagsNV, String)]
+showTableAccelerationStructureMotionInfoFlagsNV = []
+
+instance Show AccelerationStructureMotionInfoFlagsNV where
+  showsPrec = enumShowsPrec enumPrefixAccelerationStructureMotionInfoFlagsNV
+                            showTableAccelerationStructureMotionInfoFlagsNV
+                            conNameAccelerationStructureMotionInfoFlagsNV
+                            (\(AccelerationStructureMotionInfoFlagsNV x) -> x)
+                            (\x -> showString "0x" . showHex x)
+
+instance Read AccelerationStructureMotionInfoFlagsNV where
+  readPrec = enumReadPrec enumPrefixAccelerationStructureMotionInfoFlagsNV
+                          showTableAccelerationStructureMotionInfoFlagsNV
+                          conNameAccelerationStructureMotionInfoFlagsNV
+                          AccelerationStructureMotionInfoFlagsNV
+
+
+-- No documentation found for TopLevel "VkAccelerationStructureMotionInstanceFlagsNV"
+newtype AccelerationStructureMotionInstanceFlagsNV = AccelerationStructureMotionInstanceFlagsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
+
+
+
+conNameAccelerationStructureMotionInstanceFlagsNV :: String
+conNameAccelerationStructureMotionInstanceFlagsNV = "AccelerationStructureMotionInstanceFlagsNV"
+
+enumPrefixAccelerationStructureMotionInstanceFlagsNV :: String
+enumPrefixAccelerationStructureMotionInstanceFlagsNV = ""
+
+showTableAccelerationStructureMotionInstanceFlagsNV :: [(AccelerationStructureMotionInstanceFlagsNV, String)]
+showTableAccelerationStructureMotionInstanceFlagsNV = []
+
+instance Show AccelerationStructureMotionInstanceFlagsNV where
+  showsPrec = enumShowsPrec enumPrefixAccelerationStructureMotionInstanceFlagsNV
+                            showTableAccelerationStructureMotionInstanceFlagsNV
+                            conNameAccelerationStructureMotionInstanceFlagsNV
+                            (\(AccelerationStructureMotionInstanceFlagsNV x) -> x)
+                            (\x -> showString "0x" . showHex x)
+
+instance Read AccelerationStructureMotionInstanceFlagsNV where
+  readPrec = enumReadPrec enumPrefixAccelerationStructureMotionInstanceFlagsNV
+                          showTableAccelerationStructureMotionInstanceFlagsNV
+                          conNameAccelerationStructureMotionInstanceFlagsNV
+                          AccelerationStructureMotionInstanceFlagsNV
+
+
+-- | VkAccelerationStructureMotionInstanceTypeNV - Enum specifying a type of
+-- acceleration structure motion instance data for building into an
+-- acceleration structure geometry
+--
+-- = See Also
+--
+-- 'AccelerationStructureMotionInstanceNV'
+newtype AccelerationStructureMotionInstanceTypeNV = AccelerationStructureMotionInstanceTypeNV Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV' specifies that
+-- the instance is a static instance with no instance motion.
+pattern ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV        = AccelerationStructureMotionInstanceTypeNV 0
+-- | 'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV' specifies
+-- that the instance is a motion instance with motion specified by
+-- interpolation between two matrices.
+pattern ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV = AccelerationStructureMotionInstanceTypeNV 1
+-- | 'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV' specifies
+-- that the instance is a motion instance with motion specified by
+-- interpolation in the SRT decomposition.
+pattern ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV    = AccelerationStructureMotionInstanceTypeNV 2
+{-# complete ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV,
+             ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV,
+             ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV :: AccelerationStructureMotionInstanceTypeNV #-}
+
+conNameAccelerationStructureMotionInstanceTypeNV :: String
+conNameAccelerationStructureMotionInstanceTypeNV = "AccelerationStructureMotionInstanceTypeNV"
+
+enumPrefixAccelerationStructureMotionInstanceTypeNV :: String
+enumPrefixAccelerationStructureMotionInstanceTypeNV = "ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_"
+
+showTableAccelerationStructureMotionInstanceTypeNV :: [(AccelerationStructureMotionInstanceTypeNV, String)]
+showTableAccelerationStructureMotionInstanceTypeNV =
+  [ (ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV       , "STATIC_NV")
+  , (ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV, "MATRIX_MOTION_NV")
+  , (ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV   , "SRT_MOTION_NV")
+  ]
+
+instance Show AccelerationStructureMotionInstanceTypeNV where
+  showsPrec = enumShowsPrec enumPrefixAccelerationStructureMotionInstanceTypeNV
+                            showTableAccelerationStructureMotionInstanceTypeNV
+                            conNameAccelerationStructureMotionInstanceTypeNV
+                            (\(AccelerationStructureMotionInstanceTypeNV x) -> x)
+                            (showsPrec 11)
+
+instance Read AccelerationStructureMotionInstanceTypeNV where
+  readPrec = enumReadPrec enumPrefixAccelerationStructureMotionInstanceTypeNV
+                          showTableAccelerationStructureMotionInstanceTypeNV
+                          conNameAccelerationStructureMotionInstanceTypeNV
+                          AccelerationStructureMotionInstanceTypeNV
+
+
+type NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION"
+pattern NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION = 1
+
+
+type NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME = "VK_NV_ray_tracing_motion_blur"
+
+-- No documentation found for TopLevel "VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME"
+pattern NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME = "VK_NV_ray_tracing_motion_blur"
+
diff --git a/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs-boot b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs-boot
@@ -0,0 +1,244 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_NV_ray_tracing_motion_blur - device extension
+--
+-- == VK_NV_ray_tracing_motion_blur
+--
+-- [__Name String__]
+--     @VK_NV_ray_tracing_motion_blur@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     328
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_ray_tracing_pipeline@
+--
+-- [__Contact__]
+--
+--     -   Eric Werness
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-06-16
+--
+-- [__Interactions and External Dependencies__]
+--
+--     -   This extension requires
+--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_ray_tracing_motion_blur.html SPV_NV_ray_tracing_motion_blur>
+--
+--     -   This extension provides API support for
+--         <https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_ray_tracing_motion_blur.txt GL_NV_ray_tracing_motion_blur>
+--
+-- [__Contributors__]
+--
+--     -   Eric Werness, NVIDIA
+--
+--     -   Ashwin Lele, NVIDIA
+--
+-- == Description
+--
+-- Ray tracing support in the API provides an efficient mechanism to
+-- intersect rays against static geometry, but rendering algorithms often
+-- want to support motion, which is more efficiently supported with
+-- motion-specific algorithms. This extension adds a set of mechanisms to
+-- support fast tracing of moving geometry:
+--
+-- -   A ray pipeline trace call which takes a time parameter
+--
+-- -   Flags to enable motion support in an acceleration structure
+--
+-- -   Support for time-varying vertex positions in a geometry
+--
+-- -   Motion instances to move existing instances over time
+--
+-- The motion represented here is parameterized across a normalized
+-- timestep between 0.0 and 1.0. A motion trace using OpTraceRaysMotionNV
+-- provides a time within that normalized range to be used when
+-- intersecting that ray with geometry. The geometry can be provided with
+-- motion by a combination of adding a second vertex position for time of
+-- 1.0 using 'AccelerationStructureGeometryMotionTrianglesDataNV' and
+-- providing multiple transforms in the instance using
+-- 'AccelerationStructureMotionInstanceNV'.
+--
+-- == New Structures
+--
+-- -   'AccelerationStructureMatrixMotionInstanceNV'
+--
+-- -   'AccelerationStructureMotionInstanceNV'
+--
+-- -   'AccelerationStructureSRTMotionInstanceNV'
+--
+-- -   'SRTDataNV'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureCreateInfoKHR':
+--
+--     -   'AccelerationStructureMotionInfoNV'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryTrianglesDataKHR':
+--
+--     -   'AccelerationStructureGeometryMotionTrianglesDataNV'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceRayTracingMotionBlurFeaturesNV'
+--
+-- == New Unions
+--
+-- -   'AccelerationStructureMotionInstanceDataNV'
+--
+-- == New Enums
+--
+-- -   'AccelerationStructureMotionInstanceTypeNV'
+--
+-- == New Bitmasks
+--
+-- -   'AccelerationStructureMotionInfoFlagsNV'
+--
+-- -   'AccelerationStructureMotionInstanceFlagsNV'
+--
+-- == New Enum Constants
+--
+-- -   'NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME'
+--
+-- -   'NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureCreateFlagBitsKHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_acceleration_structure.ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV'
+--
+-- -   Extending
+--     'Vulkan.Extensions.VK_KHR_acceleration_structure.BuildAccelerationStructureFlagBitsKHR':
+--
+--     -   'Vulkan.Extensions.VK_KHR_acceleration_structure.BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV'
+--
+-- == Issues
+--
+-- (1) What size is VkAccelerationStructureMotionInstanceNV?
+--
+-- -   Added a note on the structure size and made the stride explicit in
+--     the language.
+--
+-- (2) Allow arrayOfPointers for motion TLAS?
+--
+-- -   Yes, with a packed encoding to minimize the amount of data sent for
+--     metadata.
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-06-16 (Eric Werness, Ashwin Lele)
+--
+--     -   Initial external release
+--
+-- = See Also
+--
+-- 'AccelerationStructureGeometryMotionTrianglesDataNV',
+-- 'AccelerationStructureMatrixMotionInstanceNV',
+-- 'AccelerationStructureMotionInfoFlagsNV',
+-- 'AccelerationStructureMotionInfoNV',
+-- 'AccelerationStructureMotionInstanceDataNV',
+-- 'AccelerationStructureMotionInstanceFlagsNV',
+-- 'AccelerationStructureMotionInstanceNV',
+-- 'AccelerationStructureMotionInstanceTypeNV',
+-- 'AccelerationStructureSRTMotionInstanceNV',
+-- 'PhysicalDeviceRayTracingMotionBlurFeaturesNV', 'SRTDataNV'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing_motion_blur Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_NV_ray_tracing_motion_blur  ( AccelerationStructureGeometryMotionTrianglesDataNV
+                                                        , AccelerationStructureMatrixMotionInstanceNV
+                                                        , AccelerationStructureMotionInfoNV
+                                                        , AccelerationStructureMotionInstanceNV
+                                                        , AccelerationStructureSRTMotionInstanceNV
+                                                        , PhysicalDeviceRayTracingMotionBlurFeaturesNV
+                                                        , SRTDataNV
+                                                        ) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data AccelerationStructureGeometryMotionTrianglesDataNV
+
+instance ToCStruct AccelerationStructureGeometryMotionTrianglesDataNV
+instance Show AccelerationStructureGeometryMotionTrianglesDataNV
+
+
+data AccelerationStructureMatrixMotionInstanceNV
+
+instance ToCStruct AccelerationStructureMatrixMotionInstanceNV
+instance Show AccelerationStructureMatrixMotionInstanceNV
+
+instance FromCStruct AccelerationStructureMatrixMotionInstanceNV
+
+
+data AccelerationStructureMotionInfoNV
+
+instance ToCStruct AccelerationStructureMotionInfoNV
+instance Show AccelerationStructureMotionInfoNV
+
+instance FromCStruct AccelerationStructureMotionInfoNV
+
+
+data AccelerationStructureMotionInstanceNV
+
+instance ToCStruct AccelerationStructureMotionInstanceNV
+instance Show AccelerationStructureMotionInstanceNV
+
+
+data AccelerationStructureSRTMotionInstanceNV
+
+instance ToCStruct AccelerationStructureSRTMotionInstanceNV
+instance Show AccelerationStructureSRTMotionInstanceNV
+
+instance FromCStruct AccelerationStructureSRTMotionInstanceNV
+
+
+data PhysicalDeviceRayTracingMotionBlurFeaturesNV
+
+instance ToCStruct PhysicalDeviceRayTracingMotionBlurFeaturesNV
+instance Show PhysicalDeviceRayTracingMotionBlurFeaturesNV
+
+instance FromCStruct PhysicalDeviceRayTracingMotionBlurFeaturesNV
+
+
+data SRTDataNV
+
+instance ToCStruct SRTDataNV
+instance Show SRTDataNV
+
+instance FromCStruct SRTDataNV
+
diff --git a/src/Vulkan/Version.hs b/src/Vulkan/Version.hs
--- a/src/Vulkan/Version.hs
+++ b/src/Vulkan/Version.hs
@@ -19,11 +19,11 @@
 import Data.Word (Word32)
 
 pattern HEADER_VERSION :: Word32
-pattern HEADER_VERSION = 181
+pattern HEADER_VERSION = 182
 
 
 pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 181
+pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 182
 
 
 pattern MAKE_API_VERSION :: Word32 -> Word32 -> Word32 -> Word32
diff --git a/vulkan.cabal b/vulkan.cabal
--- a/vulkan.cabal
+++ b/vulkan.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           vulkan
-version:        3.10.4
+version:        3.11
 synopsis:       Bindings to the Vulkan graphics API.
 category:       Graphics
 homepage:       https://github.com/expipiplus1/vulkan#readme
@@ -276,6 +276,7 @@
       Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
       Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
       Vulkan.Extensions.VK_EXT_4444_formats
+      Vulkan.Extensions.VK_EXT_acquire_drm_display
       Vulkan.Extensions.VK_EXT_acquire_xlib_display
       Vulkan.Extensions.VK_EXT_astc_decode_mode
       Vulkan.Extensions.VK_EXT_blend_operation_advanced
@@ -319,7 +320,9 @@
       Vulkan.Extensions.VK_EXT_memory_budget
       Vulkan.Extensions.VK_EXT_memory_priority
       Vulkan.Extensions.VK_EXT_metal_surface
+      Vulkan.Extensions.VK_EXT_multi_draw
       Vulkan.Extensions.VK_EXT_pci_bus_info
+      Vulkan.Extensions.VK_EXT_physical_device_drm
       Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control
       Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
       Vulkan.Extensions.VK_EXT_post_depth_coverage
@@ -472,6 +475,7 @@
       Vulkan.Extensions.VK_NV_inherited_viewport_scissor
       Vulkan.Extensions.VK_NV_mesh_shader
       Vulkan.Extensions.VK_NV_ray_tracing
+      Vulkan.Extensions.VK_NV_ray_tracing_motion_blur
       Vulkan.Extensions.VK_NV_representative_fragment_test
       Vulkan.Extensions.VK_NV_sample_mask_override_coverage
       Vulkan.Extensions.VK_NV_scissor_exclusive
