diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,13 @@
 
 ## WIP
 
+## [3.17] - 2022-03-31
+- Bump API version to v1.3.210
+  - A significant breaking change is that
+    `GraphicsPipelineCreateInfo.rasterizationState` is now optional (it's
+    unused when VK_EXT_graphics_pipeline_library is enabled). Hence, this
+    member is wrapped in `Maybe`
+
 ## [3.16.2] - 2022-02-07
 - Zero instance for ()
 
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: vulkan
-version: "3.16.2"
+version: "3.17"
 synopsis: Bindings to the Vulkan graphics API.
 description: Please see [the readme](https://github.com/expipiplus1/vulkan/#readme)
 category: Graphics
diff --git a/src/Vulkan/CStruct/Extends.hs b/src/Vulkan/CStruct/Extends.hs
--- a/src/Vulkan/CStruct/Extends.hs
+++ b/src/Vulkan/CStruct/Extends.hs
@@ -170,9 +170,11 @@
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_inline_uniform_block (DescriptorPoolInlineUniformBlockCreateInfo)
 import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorPoolSize)
 import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetAllocateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping (DescriptorSetBindingReferenceVALVE)
 import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetLayoutBinding)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetLayoutBindingFlagsCreateInfo)
 import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetLayoutCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping (DescriptorSetLayoutHostMappingInfoVALVE)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (DescriptorSetLayoutSupport)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountAllocateInfo)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountLayoutSupport)
@@ -265,6 +267,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (GeometryNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (GeometryTrianglesNV)
 import {-# SOURCE #-} Vulkan.Core10.Pipeline (GraphicsPipelineCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_graphics_pipeline_library (GraphicsPipelineLibraryCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsPipelineShaderGroupsCreateInfoNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsShaderGroupCreateInfoNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_hdr_metadata (HdrMetadataEXT)
@@ -390,6 +393,7 @@
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (PhysicalDeviceDepthStencilResolveProperties)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping (PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDeviceDeviceMemoryReportFeaturesEXT)
@@ -424,6 +428,8 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRateKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRatePropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_global_priority (PhysicalDeviceGlobalPriorityQueryFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_graphics_pipeline_library (PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_graphics_pipeline_library (PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (PhysicalDeviceGroupProperties)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceIDProperties)
@@ -469,6 +475,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id (PhysicalDevicePresentIdFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_wait (PhysicalDevicePresentWaitFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_primitive_topology_list_restart (PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_primitives_generated_query (PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_private_data (PhysicalDevicePrivateDataFeatures)
 import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceProperties2)
@@ -980,6 +987,7 @@
   Extends DeviceCreateInfo PhysicalDeviceExternalMemoryRDMAFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceColorWriteEnableFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceSynchronization2Features = ()
+  Extends DeviceCreateInfo PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceInheritedViewportScissorFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceProvokingVertexFeaturesEXT = ()
@@ -990,6 +998,8 @@
   Extends DeviceCreateInfo PhysicalDeviceImageViewMinLodFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM = ()
   Extends DeviceCreateInfo PhysicalDeviceLinearColorAttachmentFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE = ()
   Extends DeviceQueueCreateInfo DeviceQueueGlobalPriorityCreateInfoKHR = ()
   Extends FenceCreateInfo ExportFenceCreateInfo = ()
   Extends FenceCreateInfo ExportFenceWin32HandleInfoKHR = ()
@@ -1002,11 +1012,13 @@
   Extends GraphicsPipelineCreateInfo PipelineRepresentativeFragmentTestStateCreateInfoNV = ()
   Extends GraphicsPipelineCreateInfo PipelineCreationFeedbackCreateInfo = ()
   Extends GraphicsPipelineCreateInfo PipelineCompilerControlCreateInfoAMD = ()
+  Extends GraphicsPipelineCreateInfo PipelineLibraryCreateInfoKHR = ()
   Extends GraphicsPipelineCreateInfo PipelineFragmentShadingRateStateCreateInfoKHR = ()
   Extends GraphicsPipelineCreateInfo PipelineFragmentShadingRateEnumStateCreateInfoNV = ()
   Extends GraphicsPipelineCreateInfo PipelineRenderingCreateInfo = ()
   Extends GraphicsPipelineCreateInfo AttachmentSampleCountInfoAMD = ()
   Extends GraphicsPipelineCreateInfo MultiviewPerViewAttributesInfoNVX = ()
+  Extends GraphicsPipelineCreateInfo GraphicsPipelineLibraryCreateInfoEXT = ()
   Extends ImageBlit2 CopyCommandTransformInfoQCOM = ()
   Extends ImageCreateInfo DedicatedAllocationImageCreateInfoNV = ()
   Extends ImageCreateInfo ExternalMemoryImageCreateInfoNV = ()
@@ -1151,6 +1163,7 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceExternalMemoryRDMAFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceColorWriteEnableFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceSynchronization2Features = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceInheritedViewportScissorFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceProvokingVertexFeaturesEXT = ()
@@ -1161,6 +1174,8 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceImageViewMinLodFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceLinearColorAttachmentFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE = ()
   Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceExternalImageFormatInfo = ()
   Extends PhysicalDeviceImageFormatInfo2 ImageFormatListCreateInfo = ()
   Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceImageDrmFormatModifierInfoEXT = ()
@@ -1221,6 +1236,7 @@
   Extends PhysicalDeviceProperties2 PhysicalDeviceProvokingVertexPropertiesEXT = ()
   Extends PhysicalDeviceProperties2 PhysicalDeviceShaderIntegerDotProductProperties = ()
   Extends PhysicalDeviceProperties2 PhysicalDeviceDrmPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT = ()
   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveInfoEXT = ()
   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveWin32InfoEXT = ()
   Extends PipelineColorBlendStateCreateInfo PipelineColorBlendAdvancedStateCreateInfoEXT = ()
@@ -1235,6 +1251,8 @@
   Extends PipelineRasterizationStateCreateInfo PipelineRasterizationDepthClipStateCreateInfoEXT = ()
   Extends PipelineRasterizationStateCreateInfo PipelineRasterizationLineStateCreateInfoEXT = ()
   Extends PipelineRasterizationStateCreateInfo PipelineRasterizationProvokingVertexStateCreateInfoEXT = ()
+  Extends PipelineShaderStageCreateInfo (ShaderModuleCreateInfo '[]) = ()
+  Extends PipelineShaderStageCreateInfo DebugUtilsObjectNameInfoEXT = ()
   Extends PipelineShaderStageCreateInfo PipelineShaderStageRequiredSubgroupSizeCreateInfo = ()
   Extends PipelineTessellationStateCreateInfo PipelineTessellationDomainOriginStateCreateInfo = ()
   Extends PipelineVertexInputStateCreateInfo PipelineVertexInputDivisorStateCreateInfoEXT = ()
@@ -1407,6 +1425,7 @@
   -> (forall e . (Extends a e, ToCStruct e, Show e) => e -> b)
   -> IO b
 peekChainHead ty p c = case ty of
+  STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO -> go @(ShaderModuleCreateInfo '[])
   STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR -> go @DisplayPresentInfoKHR
   STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT -> go @DebugReportCallbackCreateInfoEXT
   STRUCTURE_TYPE_VALIDATION_FLAGS_EXT -> go @ValidationFlagsEXT
@@ -1521,6 +1540,7 @@
   STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR -> go @DeviceQueueGlobalPriorityCreateInfoKHR
   STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR -> go @PhysicalDeviceGlobalPriorityQueryFeaturesKHR
   STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR -> go @QueueFamilyGlobalPriorityPropertiesKHR
+  STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT -> go @DebugUtilsObjectNameInfoEXT
   STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT -> go @DebugUtilsMessengerCreateInfoEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT -> go @PhysicalDeviceDeviceMemoryReportFeaturesEXT
   STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT -> go @DeviceDeviceMemoryReportCreateInfoEXT
@@ -1671,6 +1691,7 @@
   STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT -> go @PhysicalDeviceCustomBorderColorFeaturesEXT
   STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT -> go @SamplerBorderColorComponentMappingCreateInfoEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT -> go @PhysicalDeviceBorderColorSwizzleFeaturesEXT
+  STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR -> go @PipelineLibraryCreateInfoKHR
   STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT -> go @PhysicalDeviceExtendedDynamicStateFeaturesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT -> go @PhysicalDeviceExtendedDynamicState2FeaturesEXT
   STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM -> go @RenderPassTransformBeginInfoQCOM
@@ -1708,6 +1729,7 @@
   STRUCTURE_TYPE_MEMORY_BARRIER_2 -> go @MemoryBarrier2
   STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV -> go @QueueFamilyCheckpointProperties2NV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES -> go @PhysicalDeviceSynchronization2Features
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT -> go @PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV -> go @PhysicalDeviceInheritedViewportScissorFeaturesNV
   STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV -> go @CommandBufferInheritanceViewportScissorInfoNV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT -> go @PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
@@ -1738,6 +1760,10 @@
   STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT -> go @ImageViewMinLodCreateInfoEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM -> go @PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM
   STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV -> go @PhysicalDeviceLinearColorAttachmentFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT -> go @PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT -> go @PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+  STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT -> go @GraphicsPipelineLibraryCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE -> go @PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
   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
@@ -1791,6 +1817,7 @@
 pattern a ::& es <- (\a -> (a, getNext a) -> (a, es))
   where a ::& es = setNext a es
 infix 6 ::&
+{-# complete (::&) :: ShaderModuleCreateInfo #-}
 {-# complete (::&) :: DisplayPresentInfoKHR #-}
 {-# complete (::&) :: DebugReportCallbackCreateInfoEXT #-}
 {-# complete (::&) :: ValidationFlagsEXT #-}
@@ -1905,6 +1932,7 @@
 {-# complete (::&) :: DeviceQueueGlobalPriorityCreateInfoKHR #-}
 {-# complete (::&) :: PhysicalDeviceGlobalPriorityQueryFeaturesKHR #-}
 {-# complete (::&) :: QueueFamilyGlobalPriorityPropertiesKHR #-}
+{-# complete (::&) :: DebugUtilsObjectNameInfoEXT #-}
 {-# complete (::&) :: DebugUtilsMessengerCreateInfoEXT #-}
 {-# complete (::&) :: PhysicalDeviceDeviceMemoryReportFeaturesEXT #-}
 {-# complete (::&) :: DeviceDeviceMemoryReportCreateInfoEXT #-}
@@ -2055,6 +2083,7 @@
 {-# complete (::&) :: PhysicalDeviceCustomBorderColorFeaturesEXT #-}
 {-# complete (::&) :: SamplerBorderColorComponentMappingCreateInfoEXT #-}
 {-# complete (::&) :: PhysicalDeviceBorderColorSwizzleFeaturesEXT #-}
+{-# complete (::&) :: PipelineLibraryCreateInfoKHR #-}
 {-# complete (::&) :: PhysicalDeviceExtendedDynamicStateFeaturesEXT #-}
 {-# complete (::&) :: PhysicalDeviceExtendedDynamicState2FeaturesEXT #-}
 {-# complete (::&) :: RenderPassTransformBeginInfoQCOM #-}
@@ -2092,6 +2121,7 @@
 {-# complete (::&) :: MemoryBarrier2 #-}
 {-# complete (::&) :: QueueFamilyCheckpointProperties2NV #-}
 {-# complete (::&) :: PhysicalDeviceSynchronization2Features #-}
+{-# complete (::&) :: PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT #-}
 {-# complete (::&) :: PhysicalDeviceInheritedViewportScissorFeaturesNV #-}
 {-# complete (::&) :: CommandBufferInheritanceViewportScissorInfoNV #-}
 {-# complete (::&) :: PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT #-}
@@ -2122,6 +2152,10 @@
 {-# complete (::&) :: ImageViewMinLodCreateInfoEXT #-}
 {-# complete (::&) :: PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM #-}
 {-# complete (::&) :: PhysicalDeviceLinearColorAttachmentFeaturesNV #-}
+{-# complete (::&) :: PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT #-}
+{-# complete (::&) :: PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT #-}
+{-# complete (::&) :: GraphicsPipelineLibraryCreateInfoEXT #-}
+{-# complete (::&) :: PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE #-}
 
 -- | 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
@@ -424,6 +424,12 @@
 --     specified by this pipeline /must/ match that set in the previous
 --     pipeline
 --
+-- -   #VUID-vkCmdBindPipeline-pipelineBindPoint-06653# If
+--     @pipelineBindPoint@ is
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS',
+--     @pipeline@ /must/ have been created without
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdBindPipeline-commandBuffer-parameter# @commandBuffer@
@@ -1443,6 +1449,12 @@
 --     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE'
 --     flag set
 --
+-- -   #VUID-vkCmdBindDescriptorSets-layout-06564# If @layout@ was not
+--     created with
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT',
+--     each element of @pDescriptorSets@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorSetLayout'
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdBindDescriptorSets-commandBuffer-parameter#
@@ -1458,8 +1470,9 @@
 --
 -- -   #VUID-vkCmdBindDescriptorSets-pDescriptorSets-parameter#
 --     @pDescriptorSets@ /must/ be a valid pointer to an array of
---     @descriptorSetCount@ valid 'Vulkan.Core10.Handles.DescriptorSet'
---     handles
+--     @descriptorSetCount@ valid or
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--     'Vulkan.Core10.Handles.DescriptorSet' handles
 --
 -- -   #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-parameter# If
 --     @dynamicOffsetCount@ is not @0@, @pDynamicOffsets@ /must/ be a valid
@@ -1477,9 +1490,9 @@
 --     @descriptorSetCount@ /must/ be greater than @0@
 --
 -- -   #VUID-vkCmdBindDescriptorSets-commonparent# Each of @commandBuffer@,
---     @layout@, and the elements of @pDescriptorSets@ /must/ have been
---     created, allocated, or retrieved from the same
---     'Vulkan.Core10.Handles.Device'
+--     @layout@, and the elements of @pDescriptorSets@ that are valid
+--     handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
 --
 -- == Host Synchronization
 --
@@ -1891,16 +1904,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDraw-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDraw-None-02697# For each set /n/ that is statically used
@@ -1997,6 +2010,22 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDraw-None-06550# If the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a 'Vulkan.Core10.Handles.Sampler' or
+--     'Vulkan.Core10.Handles.ImageView' object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDraw-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDraw-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
@@ -2100,6 +2129,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDraw-None-06666# If the bound graphics pipeline state was
+--     created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDraw-viewportCount-03417# If the bound graphics pipeline
 --     state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -2359,6 +2396,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDraw-attachmentCount-06667# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDraw-pDepthAttachment-06181# If the current render pass
 --     instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -2509,6 +2558,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdDraw-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDraw-primitivesGeneratedQueryWithNonZeroStreams-06709# If
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdDraw-commandBuffer-02712# If @commandBuffer@ is a
 --     protected command buffer and
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault>
@@ -2794,16 +2861,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndexed-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndexed-None-02697# For each set /n/ that is
@@ -2902,6 +2969,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawIndexed-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawIndexed-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDrawIndexed-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
@@ -3008,6 +3092,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawIndexed-None-06666# If the bound graphics pipeline
+--     state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawIndexed-viewportCount-03417# If the bound graphics
 --     pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -3267,6 +3359,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawIndexed-attachmentCount-06667# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawIndexed-pDepthAttachment-06181# If the current render
 --     pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -3417,6 +3521,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdDrawIndexed-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawIndexed-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdDrawIndexed-commandBuffer-02712# If @commandBuffer@ is a
 --     protected command buffer and
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault>
@@ -3696,16 +3818,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndirect-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndirect-None-02697# For each set /n/ that is
@@ -3804,6 +3926,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawIndirect-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawIndirect-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDrawIndirect-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
@@ -3911,6 +4050,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawIndirect-None-06666# If the bound graphics pipeline
+--     state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawIndirect-viewportCount-03417# If the bound graphics
 --     pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -4170,6 +4317,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawIndirect-attachmentCount-06667# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawIndirect-pDepthAttachment-06181# If the current
 --     render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -4320,6 +4479,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdDrawIndirect-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawIndirect-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdDrawIndirect-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
@@ -4622,16 +4799,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndexedIndirect-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndexedIndirect-None-02697# For each set /n/ that is
@@ -4730,6 +4907,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawIndexedIndirect-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawIndexedIndirect-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDrawIndexedIndirect-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
@@ -4837,6 +5031,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawIndexedIndirect-None-06666# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawIndexedIndirect-viewportCount-03417# If the bound
 --     graphics pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -5096,6 +5298,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawIndexedIndirect-attachmentCount-06667# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06181# If the
 --     current render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -5246,6 +5460,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdDrawIndexedIndirect-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawIndexedIndirect-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdDrawIndexedIndirect-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
@@ -5543,16 +5775,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDispatch-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDispatch-None-02697# For each set /n/ that is statically
@@ -5650,6 +5882,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDispatch-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDispatch-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDispatch-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
@@ -5904,16 +6153,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDispatchIndirect-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDispatchIndirect-None-02697# For each set /n/ that is
@@ -6012,6 +6261,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDispatchIndirect-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDispatchIndirect-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDispatchIndirect-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
@@ -6456,11 +6722,6 @@
 --     of @srcImage@ /must/ contain
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'
 --
--- -   #VUID-vkCmdCopyImage-srcImage-00126# @srcImage@ /must/ have been
---     created with
---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
---     usage flag
---
 -- -   #VUID-vkCmdCopyImage-srcImage-01546# If @srcImage@ is non-sparse
 --     then the image or /disjoint/ plane to be copied /must/ be bound
 --     completely and contiguously to a single
@@ -6482,11 +6743,6 @@
 --     of @dstImage@ /must/ contain
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
 --
--- -   #VUID-vkCmdCopyImage-dstImage-00131# @dstImage@ /must/ have been
---     created with
---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
 -- -   #VUID-vkCmdCopyImage-dstImage-01547# If @dstImage@ is non-sparse
 --     then the image or /disjoint/ plane that is the destination of the
 --     copy /must/ be bound completely and contiguously to a single
@@ -6761,6 +7017,46 @@
 --     @dstOffset.z@) /must/ equal the depth of the specified
 --     @dstSubresource@ of @dstImage@
 --
+-- -   #VUID-vkCmdCopyImage-aspect-06662# If the @aspect@ member of any
+--     element of @pRegions@ includes any flag other than
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--     or @srcImage@ was not created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkImageStencilUsageCreateInfo separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create
+--     @srcImage@
+--
+-- -   #VUID-vkCmdCopyImage-aspect-06663# If the @aspect@ member of any
+--     element of @pRegions@ includes any flag other than
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--     or @dstImage@ was not created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkImageStencilUsageCreateInfo separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create
+--     @dstImage@
+--
+-- -   #VUID-vkCmdCopyImage-aspect-06664# If the @aspect@ member of any
+--     element of @pRegions@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     and @srcImage@ was created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkImageStencilUsageCreateInfo separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
+--     used to create @srcImage@
+--
+-- -   #VUID-vkCmdCopyImage-aspect-06665# If the @aspect@ member of any
+--     element of @pRegions@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     and @dstImage@ was created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkImageStencilUsageCreateInfo separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
+--     used to create @dstImage@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdCopyImage-commandBuffer-parameter# @commandBuffer@ /must/
@@ -6967,9 +7263,9 @@
 -- -   No format conversion is supported between depth\/stencil images. The
 --     formats /must/ match.
 --
--- -   Format conversions on unorm, snorm, unscaled and packed float
---     formats of the copied aspect of the image are performed by first
---     converting the pixels to float values.
+-- -   Format conversions on unorm, snorm, scaled and packed float formats
+--     of the copied aspect of the image are performed by first converting
+--     the pixels to float values.
 --
 -- -   For sRGB source formats, nonlinear RGB values are converted to
 --     linear representation prior to filtering.
@@ -7018,7 +7314,7 @@
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
 --
 -- -   #VUID-vkCmdBlitImage-srcImage-06421# @srcImage@ /must/ not use a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y’CBCR conversion>
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y′CBCR conversion>
 --
 -- -   #VUID-vkCmdBlitImage-srcImage-00219# @srcImage@ /must/ have been
 --     created with
@@ -7046,7 +7342,7 @@
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'
 --
 -- -   #VUID-vkCmdBlitImage-dstImage-06422# @dstImage@ /must/ not use a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y’CBCR conversion>
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y′CBCR conversion>
 --
 -- -   #VUID-vkCmdBlitImage-dstImage-00224# @dstImage@ /must/ have been
 --     created with
@@ -8320,7 +8616,7 @@
 --
 -- -   #VUID-vkCmdClearColorImage-image-01545# @image@ /must/ not use any
 --     of the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y′CBCR conversion>
 --
 -- -   #VUID-vkCmdClearColorImage-image-00003# If @image@ is non-sparse
 --     then it /must/ be bound completely and contiguously to a single
@@ -10443,6 +10739,19 @@
 --     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@
 --     /must/ be supported
 --
+-- -   #VUID-vkCmdBeginQuery-queryType-06687# If the @queryType@ used to
+--     create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   #VUID-vkCmdBeginQuery-queryType-06688# If the @queryType@ used to
+--     create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     then
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitivesGeneratedQuery primitivesGeneratedQuery>
+--     /must/ be enabled
+--
 -- -   #VUID-vkCmdBeginQuery-queryPool-03223# If @queryPool@ was created
 --     with a @queryType@ of
 --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
@@ -11045,8 +11354,8 @@
 -- is being requested.
 --
 -- Results for all requested occlusion queries, pipeline statistics
--- queries, transform feedback queries, and timestamp queries are written
--- as 64-bit unsigned integer values if
+-- queries, transform feedback queries, primitives generated queries, and
+-- timestamp queries are written as 64-bit unsigned integer values if
 -- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set or
 -- 32-bit unsigned integer values otherwise. Performance queries store
 -- results in a tightly packed array whose type is determined by the @unit@
@@ -12596,6 +12905,12 @@
 --     the number of slices of the @extent@ (for 3D) or layers of the
 --     @dstSubresource@ (for non-3D)
 --
+-- -   #VUID-VkImageCopy-extent-06668# @extent.width@ /must/ not be 0
+--
+-- -   #VUID-VkImageCopy-extent-06669# @extent.height@ /must/ not be 0
+--
+-- -   #VUID-VkImageCopy-extent-06670# @extent.depth@ /must/ not be 0
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkImageCopy-srcSubresource-parameter# @srcSubresource@ /must/
@@ -12853,6 +13168,15 @@
 --
 -- -   #VUID-VkBufferImageCopy-aspectMask-00212# The @aspectMask@ member of
 --     @imageSubresource@ /must/ only have a single bit set
+--
+-- -   #VUID-VkBufferImageCopy-imageExtent-06659# @imageExtent.width@
+--     /must/ not be 0
+--
+-- -   #VUID-VkBufferImageCopy-imageExtent-06660# @imageExtent.height@
+--     /must/ not be 0
+--
+-- -   #VUID-VkBufferImageCopy-imageExtent-06661# @imageExtent.depth@
+--     /must/ not be 0
 --
 -- == Valid Usage (Implicit)
 --
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
@@ -109,6 +109,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_control (PhysicalDeviceDepthClipControlFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PhysicalDeviceDepthClipEnableFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping (PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDeviceDeviceMemoryReportFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
@@ -127,6 +128,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PhysicalDeviceFragmentShadingRateEnumsFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRateFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_global_priority (PhysicalDeviceGlobalPriorityQueryFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_graphics_pipeline_library (PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_image_robustness (PhysicalDeviceImageRobustnessFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_view_min_lod (PhysicalDeviceImageViewMinLodFeaturesEXT)
@@ -151,6 +153,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id (PhysicalDevicePresentIdFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_wait (PhysicalDevicePresentWaitFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_primitive_topology_list_restart (PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_primitives_generated_query (PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_private_data (PhysicalDevicePrivateDataFeatures)
 import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceProvokingVertexFeaturesEXT)
@@ -574,6 +577,13 @@
 --     can share the same @queueFamilyIndex@ if one is a protected-capable
 --     queue and one is not a protected-capable queue
 --
+-- -   #VUID-VkDeviceCreateInfo-pQueueCreateInfos-06654# If multiple
+--     elements of @pQueueCreateInfos@ share the same @queueFamilyIndex@,
+--     then all of such elements /must/ have the same global priority
+--     level, which /can/ be specified explicitly by the including a
+--     'Vulkan.Extensions.VK_KHR_global_priority.DeviceQueueGlobalPriorityCreateInfoKHR'
+--     structure in the @pNext@ chain, or by the implicit default value
+--
 -- -   #VUID-VkDeviceCreateInfo-pNext-00373# If the @pNext@ chain includes
 --     a
 --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
@@ -790,6 +800,7 @@
 --     'Vulkan.Extensions.VK_EXT_depth_clip_control.PhysicalDeviceDepthClipControlFeaturesEXT',
 --     'Vulkan.Extensions.VK_EXT_depth_clip_enable.PhysicalDeviceDepthClipEnableFeaturesEXT',
 --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
+--     'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE',
 --     'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
 --     'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT',
 --     'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
@@ -807,6 +818,7 @@
 --     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsFeaturesNV',
 --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRateFeaturesKHR',
 --     'Vulkan.Extensions.VK_KHR_global_priority.PhysicalDeviceGlobalPriorityQueryFeaturesKHR',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT',
 --     'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
 --     'Vulkan.Core13.Promoted_From_VK_EXT_image_robustness.PhysicalDeviceImageRobustnessFeatures',
 --     'Vulkan.Extensions.VK_EXT_image_view_min_lod.PhysicalDeviceImageViewMinLodFeaturesEXT',
@@ -831,6 +843,7 @@
 --     'Vulkan.Extensions.VK_KHR_present_id.PhysicalDevicePresentIdFeaturesKHR',
 --     'Vulkan.Extensions.VK_KHR_present_wait.PhysicalDevicePresentWaitFeaturesKHR',
 --     'Vulkan.Extensions.VK_EXT_primitive_topology_list_restart.PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT',
+--     'Vulkan.Extensions.VK_EXT_primitives_generated_query.PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT',
 --     'Vulkan.Core13.Promoted_From_VK_EXT_private_data.PhysicalDevicePrivateDataFeatures',
 --     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
 --     'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexFeaturesEXT',
@@ -960,6 +973,8 @@
   getNext DeviceCreateInfo{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceLinearColorAttachmentFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM = Just f
     | Just Refl <- eqT @e @PhysicalDeviceImageViewMinLodFeaturesEXT = Just f
@@ -970,6 +985,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceProvokingVertexFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceInheritedViewportScissorFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceSynchronization2Features = Just f
     | Just Refl <- eqT @e @PhysicalDeviceColorWriteEnableFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceExternalMemoryRDMAFeaturesNV = Just f
diff --git a/src/Vulkan/Core10/DeviceInitialization.hs b/src/Vulkan/Core10/DeviceInitialization.hs
--- a/src/Vulkan/Core10/DeviceInitialization.hs
+++ b/src/Vulkan/Core10/DeviceInitialization.hs
@@ -27,7 +27,6 @@
                                            , Instance(..)
                                            , PhysicalDevice(..)
                                            , AllocationCallbacks(..)
-                                           , InstanceCreateFlags(..)
                                            , ImageType(..)
                                            , ImageTiling(..)
                                            , InternalAllocationType(..)
@@ -48,6 +47,8 @@
                                            , FormatFeatureFlags
                                            , SampleCountFlagBits(..)
                                            , SampleCountFlags
+                                           , InstanceCreateFlagBits(..)
+                                           , InstanceCreateFlags
                                            , FN_vkInternalAllocationNotification
                                            , PFN_vkInternalAllocationNotification
                                            , FN_vkInternalFreeNotification
@@ -170,7 +171,7 @@
 import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceMemoryProperties))
 import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceProperties))
 import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyProperties))
-import Vulkan.Core10.Enums.InstanceCreateFlags (InstanceCreateFlags)
+import Vulkan.Core10.Enums.InstanceCreateFlagBits (InstanceCreateFlags)
 import Vulkan.Core10.Handles (Instance_T)
 import Vulkan.Core10.APIConstants (MAX_MEMORY_HEAPS)
 import Vulkan.Core10.APIConstants (MAX_MEMORY_TYPES)
@@ -219,7 +220,8 @@
 import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlagBits(..))
 import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
 import Vulkan.Core10.Handles (Instance(..))
-import Vulkan.Core10.Enums.InstanceCreateFlags (InstanceCreateFlags(..))
+import Vulkan.Core10.Enums.InstanceCreateFlagBits (InstanceCreateFlagBits(..))
+import Vulkan.Core10.Enums.InstanceCreateFlagBits (InstanceCreateFlags)
 import Vulkan.Core10.Enums.InternalAllocationType (InternalAllocationType(..))
 import Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlagBits(..))
 import Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlags)
@@ -624,9 +626,11 @@
 -- | non-@NULL@       |                       |                  |
 -- | instance         |                       |                  |
 -- +------------------+-----------------------+------------------+
+-- | @NULL@           | /global command/2     | fp               |
+-- +------------------+-----------------------+------------------+
 -- | @NULL@           | 'getInstanceProcAddr' | fp5              |
 -- +------------------+-----------------------+------------------+
--- | @NULL@           | /global command/2     | fp               |
+-- | instance         | 'getInstanceProcAddr' | fp               |
 -- +------------------+-----------------------+------------------+
 -- | instance         | core /dispatchable    | fp3              |
 -- |                  | command/              |                  |
@@ -1441,6 +1445,11 @@
 --     @ppEnabledExtensionNames@ /must/ contain
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_debug_utils VK_EXT_debug_utils>
 --
+-- -   #VUID-VkInstanceCreateInfo-flags-06559# If @flags@ has the
+--     'Vulkan.Core10.Enums.InstanceCreateFlagBits.INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR'
+--     bit set, the list of enabled extensions in @ppEnabledExtensionNames@
+--     /must/ contain @VK_KHR_portability_enumeration@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkInstanceCreateInfo-sType-sType# @sType@ /must/ be
@@ -1459,7 +1468,10 @@
 --     structures of type
 --     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT'
 --
--- -   #VUID-VkInstanceCreateInfo-flags-zerobitmask# @flags@ /must/ be @0@
+-- -   #VUID-VkInstanceCreateInfo-flags-parameter# @flags@ /must/ be a
+--     valid combination of
+--     'Vulkan.Core10.Enums.InstanceCreateFlagBits.InstanceCreateFlagBits'
+--     values
 --
 -- -   #VUID-VkInstanceCreateInfo-pApplicationInfo-parameter# If
 --     @pApplicationInfo@ is not @NULL@, @pApplicationInfo@ /must/ be a
@@ -1479,12 +1491,14 @@
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
 -- 'ApplicationInfo',
--- 'Vulkan.Core10.Enums.InstanceCreateFlags.InstanceCreateFlags',
+-- 'Vulkan.Core10.Enums.InstanceCreateFlagBits.InstanceCreateFlags',
 -- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createInstance'
 data InstanceCreateInfo (es :: [Type]) = InstanceCreateInfo
   { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
     next :: Chain es
-  , -- | @flags@ is reserved for future use.
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.InstanceCreateFlagBits.InstanceCreateFlagBits'
+    -- indicating the behavior of the instance.
     flags :: InstanceCreateFlags
   , -- | @pApplicationInfo@ is @NULL@ or a pointer to a 'ApplicationInfo'
     -- structure. If not @NULL@, this information helps implementations
@@ -2267,7 +2281,7 @@
 --         member for which mipmap image support is not required
 --
 --     -   image @format@ is one of the
---         <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>
+--         <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y′CBCR conversion>
 --
 --     -   @flags@ contains
 --         'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
@@ -2286,7 +2300,7 @@
 --         @type@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
 --
 --     -   @format@ is one of the
---         <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>
+--         <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y′CBCR conversion>
 --
 -- -   If @tiling@ is
 --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
diff --git a/src/Vulkan/Core10/Enums.hs b/src/Vulkan/Core10/Enums.hs
--- a/src/Vulkan/Core10/Enums.hs
+++ b/src/Vulkan/Core10/Enums.hs
@@ -43,7 +43,7 @@
                             , module Vulkan.Core10.Enums.ImageViewCreateFlagBits
                             , module Vulkan.Core10.Enums.ImageViewType
                             , module Vulkan.Core10.Enums.IndexType
-                            , module Vulkan.Core10.Enums.InstanceCreateFlags
+                            , module Vulkan.Core10.Enums.InstanceCreateFlagBits
                             , module Vulkan.Core10.Enums.InternalAllocationType
                             , module Vulkan.Core10.Enums.LogicOp
                             , module Vulkan.Core10.Enums.MemoryHeapFlagBits
@@ -59,7 +59,7 @@
                             , module Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits
                             , module Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags
                             , module Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags
-                            , module Vulkan.Core10.Enums.PipelineLayoutCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits
                             , module Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags
                             , module Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags
                             , module Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits
@@ -139,7 +139,7 @@
 import Vulkan.Core10.Enums.ImageViewCreateFlagBits
 import Vulkan.Core10.Enums.ImageViewType
 import Vulkan.Core10.Enums.IndexType
-import Vulkan.Core10.Enums.InstanceCreateFlags
+import Vulkan.Core10.Enums.InstanceCreateFlagBits
 import Vulkan.Core10.Enums.InternalAllocationType
 import Vulkan.Core10.Enums.LogicOp
 import Vulkan.Core10.Enums.MemoryHeapFlagBits
@@ -155,7 +155,7 @@
 import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits
 import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags
 import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags
-import Vulkan.Core10.Enums.PipelineLayoutCreateFlags
+import Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits
 import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags
 import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags
 import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits
diff --git a/src/Vulkan/Core10/Enums/InstanceCreateFlagBits.hs b/src/Vulkan/Core10/Enums/InstanceCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/InstanceCreateFlagBits.hs
@@ -0,0 +1,58 @@
+{-# language CPP #-}
+-- No documentation found for Chapter "InstanceCreateFlagBits"
+module Vulkan.Core10.Enums.InstanceCreateFlagBits  ( InstanceCreateFlags
+                                                   , InstanceCreateFlagBits( INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR
+                                                                           , ..
+                                                                           )
+                                                   ) where
+
+import Vulkan.Internal.Utils (enumReadPrec)
+import Vulkan.Internal.Utils (enumShowsPrec)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Vulkan.Zero (Zero)
+import Data.Bits (Bits)
+import Data.Bits (FiniteBits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import GHC.Show (Show(showsPrec))
+import Vulkan.Core10.FundamentalTypes (Flags)
+type InstanceCreateFlags = InstanceCreateFlagBits
+
+-- | VkInstanceCreateFlagBits - Bitmask specifying behavior of the instance
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'InstanceCreateFlags'
+newtype InstanceCreateFlagBits = InstanceCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
+
+-- | 'INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR' specifies that the
+-- instance will enumerate available Vulkan Portability-compliant physical
+-- devices and groups in addition to the Vulkan physical devices and groups
+-- that are enumerated by default.
+pattern INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR = InstanceCreateFlagBits 0x00000001
+
+conNameInstanceCreateFlagBits :: String
+conNameInstanceCreateFlagBits = "InstanceCreateFlagBits"
+
+enumPrefixInstanceCreateFlagBits :: String
+enumPrefixInstanceCreateFlagBits = "INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR"
+
+showTableInstanceCreateFlagBits :: [(InstanceCreateFlagBits, String)]
+showTableInstanceCreateFlagBits = [(INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR, "")]
+
+instance Show InstanceCreateFlagBits where
+  showsPrec = enumShowsPrec enumPrefixInstanceCreateFlagBits
+                            showTableInstanceCreateFlagBits
+                            conNameInstanceCreateFlagBits
+                            (\(InstanceCreateFlagBits x) -> x)
+                            (\x -> showString "0x" . showHex x)
+
+instance Read InstanceCreateFlagBits where
+  readPrec = enumReadPrec enumPrefixInstanceCreateFlagBits
+                          showTableInstanceCreateFlagBits
+                          conNameInstanceCreateFlagBits
+                          InstanceCreateFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/InstanceCreateFlags.hs b/src/Vulkan/Core10/Enums/InstanceCreateFlags.hs
deleted file mode 100644
--- a/src/Vulkan/Core10/Enums/InstanceCreateFlags.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# language CPP #-}
--- No documentation found for Chapter "InstanceCreateFlags"
-module Vulkan.Core10.Enums.InstanceCreateFlags  (InstanceCreateFlags(..)) where
-
-import Vulkan.Internal.Utils (enumReadPrec)
-import Vulkan.Internal.Utils (enumShowsPrec)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Vulkan.Zero (Zero)
-import Data.Bits (Bits)
-import Data.Bits (FiniteBits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import GHC.Show (Show(showsPrec))
-import Vulkan.Core10.FundamentalTypes (Flags)
--- | VkInstanceCreateFlags - Reserved for future use
---
--- = Description
---
--- 'InstanceCreateFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo'
-newtype InstanceCreateFlags = InstanceCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
-
-
-
-conNameInstanceCreateFlags :: String
-conNameInstanceCreateFlags = "InstanceCreateFlags"
-
-enumPrefixInstanceCreateFlags :: String
-enumPrefixInstanceCreateFlags = ""
-
-showTableInstanceCreateFlags :: [(InstanceCreateFlags, String)]
-showTableInstanceCreateFlags = []
-
-instance Show InstanceCreateFlags where
-  showsPrec = enumShowsPrec enumPrefixInstanceCreateFlags
-                            showTableInstanceCreateFlags
-                            conNameInstanceCreateFlags
-                            (\(InstanceCreateFlags x) -> x)
-                            (\x -> showString "0x" . showHex x)
-
-instance Read InstanceCreateFlags where
-  readPrec = enumReadPrec enumPrefixInstanceCreateFlags
-                          showTableInstanceCreateFlags
-                          conNameInstanceCreateFlags
-                          InstanceCreateFlags
-
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
@@ -5,6 +5,8 @@
                                                                            , PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT
                                                                            , PIPELINE_CREATE_DERIVATIVE_BIT
                                                                            , PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
+                                                                           , PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT
+                                                                           , PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
                                                                            , PIPELINE_CREATE_LIBRARY_BIT_KHR
                                                                            , PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
                                                                            , PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
@@ -86,7 +88,10 @@
 --     'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutableInternalRepresentationsKHR'.
 --     Enabling this flag /must/ not affect the final compiled pipeline but
 --     /may/ disable pipeline caching or otherwise affect pipeline creation
---     time.
+--     time. When capturing IR from pipelines created with pipeline
+--     libraries, there is no guarantee that IR from libraries /can/ be
+--     retrieved from the linked pipeline. Applications /should/ retrieve
+--     IR from each library, and any linked pipelines, separately.
 --
 -- -   'PIPELINE_CREATE_LIBRARY_BIT_KHR' specifies that the pipeline
 --     /cannot/ be used directly, and instead defines a /pipeline library/
@@ -160,12 +165,43 @@
 --     specifies that the pipeline will be used with a fragment density map
 --     attachment.
 --
+-- -   'PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT' specifies that
+--     pipeline libraries being linked into this library /should/ have link
+--     time optimizations applied. If this bit is omitted, implementations
+--     /should/ instead perform linking as rapidly as possible.
+--
+-- -   'PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT'
+--     specifies that pipeline libraries should retain any information
+--     necessary to later perform an optimal link with
+--     'PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT'.
+--
 -- 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
 -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>
 -- for more information.
 --
+-- When an implementation is looking up a pipeline in a
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-cache pipeline cache>,
+-- if that pipeline is being created using linked libraries,
+-- implementations /should/ always return an equivalent pipeline created
+-- with 'PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT' if available,
+-- whether or not that bit was specified.
+--
+-- Note
+--
+-- Using 'PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT' (or not) when
+-- linking pipeline libraries is intended as a performance tradeoff between
+-- host and device. If the bit is omitted, linking should be faster and
+-- produce a pipeline more rapidly, but performance of the pipeline on the
+-- target device may be reduced. If the bit is included, linking may be
+-- slower but should produce a pipeline with device performance comparable
+-- to a monolithically created pipeline. Using both options can allow
+-- latency-sensitive applications to generate a suboptimal but usable
+-- pipeline quickly, and then perform an optimal link in the background,
+-- substituting the result for the suboptimally linked pipeline as soon as
+-- it is available.
+--
 -- = See Also
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
@@ -181,6 +217,10 @@
 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_LINK_TIME_OPTIMIZATION_BIT_EXT"
+pattern PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT              = PipelineCreateFlagBits 0x00000400
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT"
+pattern PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT  = PipelineCreateFlagBits 0x00800000
 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_LIBRARY_BIT_KHR"
 pattern PIPELINE_CREATE_LIBRARY_BIT_KHR                             = PipelineCreateFlagBits 0x00000800
 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV"
@@ -226,15 +266,17 @@
 
 showTablePipelineCreateFlagBits :: [(PipelineCreateFlagBits, String)]
 showTablePipelineCreateFlagBits =
-  [ (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_LIBRARY_BIT_KHR                         , "LIBRARY_BIT_KHR")
-  , (PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV                , "INDIRECT_BINDABLE_BIT_NV")
-  , (PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, "CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR")
-  , (PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR              , "CAPTURE_STATISTICS_BIT_KHR")
-  , (PIPELINE_CREATE_DEFER_COMPILE_BIT_NV                    , "DEFER_COMPILE_BIT_NV")
+  [ (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_LINK_TIME_OPTIMIZATION_BIT_EXT            , "LINK_TIME_OPTIMIZATION_BIT_EXT")
+  , (PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT, "RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT")
+  , (PIPELINE_CREATE_LIBRARY_BIT_KHR                           , "LIBRARY_BIT_KHR")
+  , (PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV                  , "INDIRECT_BINDABLE_BIT_NV")
+  , (PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR  , "CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR")
+  , (PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR                , "CAPTURE_STATISTICS_BIT_KHR")
+  , (PIPELINE_CREATE_DEFER_COMPILE_BIT_NV                      , "DEFER_COMPILE_BIT_NV")
   , ( PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
     , "RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR"
     )
diff --git a/src/Vulkan/Core10/Enums/PipelineLayoutCreateFlagBits.hs b/src/Vulkan/Core10/Enums/PipelineLayoutCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineLayoutCreateFlagBits.hs
@@ -0,0 +1,64 @@
+{-# language CPP #-}
+-- No documentation found for Chapter "PipelineLayoutCreateFlagBits"
+module Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits  ( PipelineLayoutCreateFlags
+                                                         , PipelineLayoutCreateFlagBits( PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT
+                                                                                       , ..
+                                                                                       )
+                                                         ) where
+
+import Vulkan.Internal.Utils (enumReadPrec)
+import Vulkan.Internal.Utils (enumShowsPrec)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Vulkan.Zero (Zero)
+import Data.Bits (Bits)
+import Data.Bits (FiniteBits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import GHC.Show (Show(showsPrec))
+import Vulkan.Core10.FundamentalTypes (Flags)
+type PipelineLayoutCreateFlags = PipelineLayoutCreateFlagBits
+
+-- | VkPipelineLayoutCreateFlagBits - Pipeline layout creation flag bits
+--
+-- = Description
+--
+-- -   VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT specifies that
+--     implementations /must/ ensure that the properties and\/or absence of
+--     a particular descriptor set do not influence any other properties of
+--     the pipeline layout. This allows pipelines libraries linked without
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT'
+--     to be created with a subset of the total descriptor sets.
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_graphics_pipeline_library VK_EXT_graphics_pipeline_library>,
+-- 'PipelineLayoutCreateFlags'
+newtype PipelineLayoutCreateFlagBits = PipelineLayoutCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
+
+-- No documentation found for Nested "VkPipelineLayoutCreateFlagBits" "VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT"
+pattern PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT = PipelineLayoutCreateFlagBits 0x00000002
+
+conNamePipelineLayoutCreateFlagBits :: String
+conNamePipelineLayoutCreateFlagBits = "PipelineLayoutCreateFlagBits"
+
+enumPrefixPipelineLayoutCreateFlagBits :: String
+enumPrefixPipelineLayoutCreateFlagBits = "PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT"
+
+showTablePipelineLayoutCreateFlagBits :: [(PipelineLayoutCreateFlagBits, String)]
+showTablePipelineLayoutCreateFlagBits = [(PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, "")]
+
+instance Show PipelineLayoutCreateFlagBits where
+  showsPrec = enumShowsPrec enumPrefixPipelineLayoutCreateFlagBits
+                            showTablePipelineLayoutCreateFlagBits
+                            conNamePipelineLayoutCreateFlagBits
+                            (\(PipelineLayoutCreateFlagBits x) -> x)
+                            (\x -> showString "0x" . showHex x)
+
+instance Read PipelineLayoutCreateFlagBits where
+  readPrec = enumReadPrec enumPrefixPipelineLayoutCreateFlagBits
+                          showTablePipelineLayoutCreateFlagBits
+                          conNamePipelineLayoutCreateFlagBits
+                          PipelineLayoutCreateFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/PipelineLayoutCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineLayoutCreateFlags.hs
deleted file mode 100644
--- a/src/Vulkan/Core10/Enums/PipelineLayoutCreateFlags.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# language CPP #-}
--- No documentation found for Chapter "PipelineLayoutCreateFlags"
-module Vulkan.Core10.Enums.PipelineLayoutCreateFlags  (PipelineLayoutCreateFlags(..)) where
-
-import Vulkan.Internal.Utils (enumReadPrec)
-import Vulkan.Internal.Utils (enumShowsPrec)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Vulkan.Zero (Zero)
-import Data.Bits (Bits)
-import Data.Bits (FiniteBits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import GHC.Show (Show(showsPrec))
-import Vulkan.Core10.FundamentalTypes (Flags)
--- | VkPipelineLayoutCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineLayoutCreateFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'
-newtype PipelineLayoutCreateFlags = PipelineLayoutCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
-
-
-
-conNamePipelineLayoutCreateFlags :: String
-conNamePipelineLayoutCreateFlags = "PipelineLayoutCreateFlags"
-
-enumPrefixPipelineLayoutCreateFlags :: String
-enumPrefixPipelineLayoutCreateFlags = ""
-
-showTablePipelineLayoutCreateFlags :: [(PipelineLayoutCreateFlags, String)]
-showTablePipelineLayoutCreateFlags = []
-
-instance Show PipelineLayoutCreateFlags where
-  showsPrec = enumShowsPrec enumPrefixPipelineLayoutCreateFlags
-                            showTablePipelineLayoutCreateFlags
-                            conNamePipelineLayoutCreateFlags
-                            (\(PipelineLayoutCreateFlags x) -> x)
-                            (\x -> showString "0x" . showHex x)
-
-instance Read PipelineLayoutCreateFlags where
-  readPrec = enumReadPrec enumPrefixPipelineLayoutCreateFlags
-                          showTablePipelineLayoutCreateFlags
-                          conNamePipelineLayoutCreateFlags
-                          PipelineLayoutCreateFlags
-
diff --git a/src/Vulkan/Core10/Enums/QueryType.hs b/src/Vulkan/Core10/Enums/QueryType.hs
--- a/src/Vulkan/Core10/Enums/QueryType.hs
+++ b/src/Vulkan/Core10/Enums/QueryType.hs
@@ -3,6 +3,7 @@
 module Vulkan.Core10.Enums.QueryType  (QueryType( QUERY_TYPE_OCCLUSION
                                                 , QUERY_TYPE_PIPELINE_STATISTICS
                                                 , QUERY_TYPE_TIMESTAMP
+                                                , QUERY_TYPE_PRIMITIVES_GENERATED_EXT
                                                 , QUERY_TYPE_PERFORMANCE_QUERY_INTEL
                                                 , QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
                                                 , QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
@@ -42,6 +43,9 @@
 -- | 'QUERY_TYPE_TIMESTAMP' specifies a
 -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#queries-timestamps timestamp query>.
 pattern QUERY_TYPE_TIMESTAMP                     = QueryType 2
+-- | 'QUERY_TYPE_PRIMITIVES_GENERATED_EXT' specifies a
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#queries-primitives-generated primitives generated query>.
+pattern QUERY_TYPE_PRIMITIVES_GENERATED_EXT      = QueryType 1000382000
 -- | 'QUERY_TYPE_PERFORMANCE_QUERY_INTEL' specifies a
 -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#queries-performance-intel Intel performance query>.
 pattern QUERY_TYPE_PERFORMANCE_QUERY_INTEL       = QueryType 1000210000
@@ -69,6 +73,7 @@
 {-# complete QUERY_TYPE_OCCLUSION,
              QUERY_TYPE_PIPELINE_STATISTICS,
              QUERY_TYPE_TIMESTAMP,
+             QUERY_TYPE_PRIMITIVES_GENERATED_EXT,
              QUERY_TYPE_PERFORMANCE_QUERY_INTEL,
              QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV,
              QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR,
@@ -87,6 +92,7 @@
   [ (QUERY_TYPE_OCCLUSION                    , "OCCLUSION")
   , (QUERY_TYPE_PIPELINE_STATISTICS          , "PIPELINE_STATISTICS")
   , (QUERY_TYPE_TIMESTAMP                    , "TIMESTAMP")
+  , (QUERY_TYPE_PRIMITIVES_GENERATED_EXT     , "PRIMITIVES_GENERATED_EXT")
   , (QUERY_TYPE_PERFORMANCE_QUERY_INTEL      , "PERFORMANCE_QUERY_INTEL")
   , (QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV, "ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV")
   , (QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, "ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_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
@@ -53,6 +53,9 @@
                                                         , STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT
                                                         , STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT
@@ -60,6 +63,7 @@
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT
                                                         , STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT
                                                         , STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT
                                                         , STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX
@@ -110,6 +114,9 @@
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR
+                                                        , STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT
                                                         , STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV
                                                         , STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV
                                                         , STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV
@@ -684,8 +691,10 @@
 -- 'Vulkan.Core10.DescriptorSet.DescriptorPoolCreateInfo',
 -- 'Vulkan.Core13.Promoted_From_VK_EXT_inline_uniform_block.DescriptorPoolInlineUniformBlockCreateInfo',
 -- 'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo',
+-- 'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.DescriptorSetBindingReferenceVALVE',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetLayoutBindingFlagsCreateInfo',
 -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo',
+-- 'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.DescriptorSetLayoutHostMappingInfoVALVE',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.DescriptorSetLayoutSupport',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountAllocateInfo',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountLayoutSupport',
@@ -759,6 +768,7 @@
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryNV',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
 -- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
 -- 'Vulkan.Extensions.VK_EXT_hdr_metadata.HdrMetadataEXT',
@@ -864,6 +874,7 @@
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
+-- 'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsPropertiesNV',
 -- 'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT',
@@ -897,6 +908,8 @@
 -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRateKHR',
 -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRatePropertiesKHR',
 -- 'Vulkan.Extensions.VK_KHR_global_priority.PhysicalDeviceGlobalPriorityQueryFeaturesKHR',
+-- 'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
@@ -940,6 +953,7 @@
 -- 'Vulkan.Extensions.VK_KHR_present_id.PhysicalDevicePresentIdFeaturesKHR',
 -- 'Vulkan.Extensions.VK_KHR_present_wait.PhysicalDevicePresentWaitFeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_primitive_topology_list_restart.PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_primitives_generated_query.PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT',
 -- 'Vulkan.Core13.Promoted_From_VK_EXT_private_data.PhysicalDevicePrivateDataFeatures',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
@@ -1151,22 +1165,22 @@
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoBindMemoryKHR VkVideoBindMemoryKHR>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoCapabilitiesKHR VkVideoCapabilitiesKHR>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoCodingControlInfoKHR VkVideoCodingControlInfoKHR>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeCapabilitiesKHR VkVideoDecodeCapabilitiesKHR>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264CapabilitiesEXT VkVideoDecodeH264CapabilitiesEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264DpbSlotInfoEXT VkVideoDecodeH264DpbSlotInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264MvcEXT VkVideoDecodeH264MvcEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264PictureInfoEXT VkVideoDecodeH264PictureInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264ProfileEXT VkVideoDecodeH264ProfileEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264SessionCreateInfoEXT VkVideoDecodeH264SessionCreateInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264SessionParametersAddInfoEXT VkVideoDecodeH264SessionParametersAddInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264SessionParametersCreateInfoEXT VkVideoDecodeH264SessionParametersCreateInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265CapabilitiesEXT VkVideoDecodeH265CapabilitiesEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265DpbSlotInfoEXT VkVideoDecodeH265DpbSlotInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265PictureInfoEXT VkVideoDecodeH265PictureInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265ProfileEXT VkVideoDecodeH265ProfileEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265SessionCreateInfoEXT VkVideoDecodeH265SessionCreateInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265SessionParametersAddInfoEXT VkVideoDecodeH265SessionParametersAddInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265SessionParametersCreateInfoEXT VkVideoDecodeH265SessionParametersCreateInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeInfoKHR VkVideoDecodeInfoKHR>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeCapabilitiesKHR VkVideoEncodeCapabilitiesKHR>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264CapabilitiesEXT VkVideoEncodeH264CapabilitiesEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264DpbSlotInfoEXT VkVideoEncodeH264DpbSlotInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264EmitPictureParametersEXT VkVideoEncodeH264EmitPictureParametersEXT>,
@@ -1174,7 +1188,7 @@
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264ProfileEXT VkVideoEncodeH264ProfileEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264RateControlInfoEXT VkVideoEncodeH264RateControlInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264RateControlLayerInfoEXT VkVideoEncodeH264RateControlLayerInfoEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264SessionCreateInfoEXT VkVideoEncodeH264SessionCreateInfoEXT>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264ReferenceListsEXT VkVideoEncodeH264ReferenceListsEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264SessionParametersAddInfoEXT VkVideoEncodeH264SessionParametersAddInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264SessionParametersCreateInfoEXT VkVideoEncodeH264SessionParametersCreateInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264VclFrameInfoEXT VkVideoEncodeH264VclFrameInfoEXT>,
@@ -1186,7 +1200,6 @@
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265RateControlInfoEXT VkVideoEncodeH265RateControlInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265RateControlLayerInfoEXT VkVideoEncodeH265RateControlLayerInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265ReferenceListsEXT VkVideoEncodeH265ReferenceListsEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265SessionCreateInfoEXT VkVideoEncodeH265SessionCreateInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265SessionParametersAddInfoEXT VkVideoEncodeH265SessionParametersAddInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265SessionParametersCreateInfoEXT VkVideoEncodeH265SessionParametersCreateInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265VclFrameInfoEXT VkVideoEncodeH265VclFrameInfoEXT>,
@@ -1323,6 +1336,12 @@
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = StructureType 1000425001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM = StructureType 1000425000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE = StructureType 1000420002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE    = StructureType 1000420001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE = StructureType 1000420000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT = StructureType 1000412000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT"
@@ -1337,6 +1356,8 @@
 pattern STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT        = StructureType 1000391001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT = StructureType 1000391000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT = StructureType 1000382000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT"
 pattern STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT      = StructureType 1000381001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT"
@@ -1437,6 +1458,12 @@
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = StructureType 1000326000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR = StructureType 1000323000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT = StructureType 1000320002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT = StructureType 1000320001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT = StructureType 1000320000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV"
 pattern STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV                      = StructureType 1000314009
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV"
@@ -2408,6 +2435,9 @@
              STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM,
+             STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE,
+             STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT,
              STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT,
@@ -2415,6 +2445,7 @@
              STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT,
              STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT,
              STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT,
              STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX,
@@ -2465,6 +2496,9 @@
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR,
+             STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT,
              STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV,
              STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV,
              STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV,
@@ -2994,6 +3028,11 @@
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM
     , "PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM"
     )
+  , (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE, "DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE")
+  , (STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE       , "DESCRIPTOR_SET_BINDING_REFERENCE_VALVE")
+  , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE
+    , "PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE"
+    )
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT
     , "PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT"
     )
@@ -3007,6 +3046,9 @@
   , (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT        , "PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT")
   , (STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT             , "IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT")
   , (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT, "PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT")
+  , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT
+    , "PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT"
+    )
   , (STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT           , "PIPELINE_COLOR_WRITE_CREATE_INFO_EXT")
   , (STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT, "PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT")
   , (STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX                 , "SCREEN_SURFACE_CREATE_INFO_QNX")
@@ -3092,6 +3134,13 @@
     )
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR
     , "PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR"
+    )
+  , (STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT, "GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT")
+  , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT
+    , "PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT"
+    )
+  , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT
+    , "PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT"
     )
   , (STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV                    , "CHECKPOINT_DATA_2_NV")
   , (STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV , "QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV")
diff --git a/src/Vulkan/Core10/ExtensionDiscovery.hs b/src/Vulkan/Core10/ExtensionDiscovery.hs
--- a/src/Vulkan/Core10/ExtensionDiscovery.hs
+++ b/src/Vulkan/Core10/ExtensionDiscovery.hs
@@ -263,14 +263,8 @@
 -- = See Also
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264CapabilitiesEXT VkVideoDecodeH264CapabilitiesEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264SessionCreateInfoEXT VkVideoDecodeH264SessionCreateInfoEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265CapabilitiesEXT VkVideoDecodeH265CapabilitiesEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265SessionCreateInfoEXT VkVideoDecodeH265SessionCreateInfoEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264CapabilitiesEXT VkVideoEncodeH264CapabilitiesEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264SessionCreateInfoEXT VkVideoEncodeH264SessionCreateInfoEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265CapabilitiesEXT VkVideoEncodeH265CapabilitiesEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265SessionCreateInfoEXT VkVideoEncodeH265SessionCreateInfoEXT>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoCapabilitiesKHR VkVideoCapabilitiesKHR>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoSessionCreateInfoKHR VkVideoSessionCreateInfoKHR>,
 -- 'enumerateDeviceExtensionProperties',
 -- 'enumerateInstanceExtensionProperties'
 data ExtensionProperties = ExtensionProperties
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,9 +201,7 @@
 -- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoCapabilitiesKHR VkVideoCapabilitiesKHR>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeInfoKHR VkVideoDecodeInfoKHR>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264CapabilitiesEXT VkVideoEncodeH264CapabilitiesEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264SessionCreateInfoEXT VkVideoEncodeH264SessionCreateInfoEXT>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265CapabilitiesEXT VkVideoEncodeH265CapabilitiesEXT>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeCapabilitiesKHR VkVideoEncodeCapabilitiesKHR>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeInfoKHR VkVideoEncodeInfoKHR>,
 -- <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>,
@@ -444,6 +442,7 @@
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
+-- 'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT',
 -- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
@@ -466,6 +465,8 @@
 -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRateFeaturesKHR',
 -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRatePropertiesKHR',
 -- 'Vulkan.Extensions.VK_KHR_global_priority.PhysicalDeviceGlobalPriorityQueryFeaturesKHR',
+-- 'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
@@ -495,6 +496,7 @@
 -- 'Vulkan.Extensions.VK_KHR_present_id.PhysicalDevicePresentIdFeaturesKHR',
 -- 'Vulkan.Extensions.VK_KHR_present_wait.PhysicalDevicePresentWaitFeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_primitive_topology_list_restart.PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_primitives_generated_query.PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT',
 -- 'Vulkan.Core13.Promoted_From_VK_EXT_private_data.PhysicalDevicePrivateDataFeatures',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
@@ -584,6 +586,7 @@
 -- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
 -- 'Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD',
 -- 'Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.TextureLODGatherFormatPropertiesAMD',
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264CapabilitiesEXT VkVideoEncodeH264CapabilitiesEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264EmitPictureParametersEXT VkVideoEncodeH264EmitPictureParametersEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264RateControlLayerInfoEXT VkVideoEncodeH264RateControlLayerInfoEXT>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265EmitPictureParametersEXT VkVideoEncodeH265EmitPictureParametersEXT>,
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
@@ -343,6 +343,8 @@
 -- 'Vulkan.Extensions.VK_EXT_calibrated_timestamps.getCalibratedTimestampsEXT',
 -- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationMaxConcurrencyKHR',
 -- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationResultKHR',
+-- 'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.getDescriptorSetHostMappingVALVE',
+-- 'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.getDescriptorSetLayoutHostMappingInfoVALVE',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.getDescriptorSetLayoutSupport',
 -- 'Vulkan.Extensions.VK_KHR_maintenance3.getDescriptorSetLayoutSupportKHR',
 -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.getDeviceAccelerationStructureCompatibilityKHR',
@@ -1035,6 +1037,7 @@
 -- 'Vulkan.Core10.DescriptorSet.allocateDescriptorSets',
 -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
 -- 'Vulkan.Core10.DescriptorSet.freeDescriptorSets',
+-- 'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.getDescriptorSetHostMappingVALVE',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplate',
 -- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplateKHR'
 newtype DescriptorSet = DescriptorSet Word64
@@ -1052,6 +1055,7 @@
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
 -- 'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo',
+-- 'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.DescriptorSetBindingReferenceVALVE',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
 -- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo',
 -- 'Vulkan.Core10.DescriptorSet.createDescriptorSetLayout',
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
@@ -470,7 +470,7 @@
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
 --
 -- Images created with one of the
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y′CBCR conversion>,
 -- have further restrictions on their limits and capabilities compared to
 -- images created with other formats. Creation of images with a format
 -- requiring
@@ -1098,23 +1098,23 @@
 --
 -- -   #VUID-VkImageCreateInfo-format-06410# If the image @format@ is one
 --     of the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>,
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y′CBCR conversion>,
 --     @mipLevels@ /must/ be 1
 --
 -- -   #VUID-VkImageCreateInfo-format-06411# If the image @format@ is one
 --     of the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>,
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y′CBCR conversion>,
 --     @samples@ /must/ be
 --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
 --
 -- -   #VUID-VkImageCreateInfo-format-06412# If the image @format@ is one
 --     of the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>,
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y′CBCR conversion>,
 --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
 --
 -- -   #VUID-VkImageCreateInfo-format-06413# If the image @format@ is one
 --     of the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>,
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y′CBCR conversion>,
 --     and the @ycbcrImageArrays@ feature is not enabled, @arrayLayers@
 --     /must/ be 1
 --
diff --git a/src/Vulkan/Core10/ImageView.hs b/src/Vulkan/Core10/ImageView.hs
--- a/src/Vulkan/Core10/ImageView.hs
+++ b/src/Vulkan/Core10/ImageView.hs
@@ -593,7 +593,7 @@
 -- storage image descriptors, input attachment descriptors, framebuffer
 -- attachments, and any 'Vulkan.Core10.Handles.ImageView' used with a
 -- combined image sampler that enables
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y’CBCR conversion>.
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
 --
 -- If the image view is to be used with a sampler which supports
 -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
@@ -916,10 +916,9 @@
 --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
 --     @format@ /must/ be identical to the @format@ used to create @image@
 --
--- -   #VUID-VkImageViewCreateInfo-format-06415# If the image @format@ is
---     one of the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>,
---     then the @pNext@ chain /must/ include a
+-- -   #VUID-VkImageViewCreateInfo-format-06415# If the image view
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#image-views-requiring-sampler-ycbcr-conversion requires a sampler Y′CBCR conversion>,
+--     the @pNext@ chain must include a
 --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
 --     structure with a conversion value other than
 --     'Vulkan.Core10.APIConstants.NULL_HANDLE'
@@ -939,6 +938,14 @@
 --     'Vulkan.Core10.APIConstants.NULL_HANDLE', all members of
 --     @components@ /must/ have the
 --     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#resources-image-views-identity-mappings identity swizzle>
+--
+-- -   #VUID-VkImageViewCreateInfo-pNext-06658# If the @pNext@ chain
+--     includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--     structure with a @conversion@ value other than
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @format@ /must/ be the
+--     same used in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'::@format@
 --
 -- -   #VUID-VkImageViewCreateInfo-image-01020# If @image@ is non-sparse
 --     then it /must/ be bound completely and contiguously to a single
diff --git a/src/Vulkan/Core10/Memory.hs b/src/Vulkan/Core10/Memory.hs
--- a/src/Vulkan/Core10/Memory.hs
+++ b/src/Vulkan/Core10/Memory.hs
@@ -912,6 +912,10 @@
 --
 -- == Valid Usage
 --
+-- -   #VUID-VkMemoryAllocateInfo-None-06657# The parameters /must/ not
+--     define more than one
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#memory-import-operation import operation>
+--
 -- -   #VUID-VkMemoryAllocateInfo-buffer-06380# If the parameters define an
 --     import operation from an
 --     'Vulkan.Extensions.Handles.BufferCollectionFUCHSIA', and
@@ -1151,8 +1155,9 @@
 --     the Android hardware buffer’s
 --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AHardwareBuffer'::@usage@
 --     /must/ include at least one of
---     @AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER@ or
---     @AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE@
+--     @AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER@,
+--     @AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE@ or
+--     @AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER@
 --
 -- -   #VUID-VkMemoryAllocateInfo-pNext-02387# If the parameters define an
 --     import operation, the external handle is an Android hardware buffer,
diff --git a/src/Vulkan/Core10/Pass.hs b/src/Vulkan/Core10/Pass.hs
--- a/src/Vulkan/Core10/Pass.hs
+++ b/src/Vulkan/Core10/Pass.hs
@@ -577,10 +577,11 @@
 -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'
 -- pipeline stage.
 --
--- If an attachment is not used by any subpass, then @loadOp@, @storeOp@,
--- @stencilStoreOp@, and @stencilLoadOp@ are ignored, and the attachment’s
--- memory contents will not be modified by execution of a render pass
--- instance.
+-- If an attachment is not used by any subpass, @loadOp@, @storeOp@,
+-- @stencilStoreOp@, and @stencilLoadOp@ will be ignored for that
+-- attachment, and no load or store ops will be performed. However, any
+-- transition specified by @initialLayout@ and @finalLayout@ will still be
+-- executed.
 --
 -- The load and store operations apply on the first and last use of each
 -- view in the render pass, respectively. If a view index of an attachment
@@ -673,11 +674,26 @@
 --
 -- == Valid Usage
 --
+-- -   #VUID-VkAttachmentDescription-format-06698# @format@ /must/ not be
+--     VK_FORMAT_UNDEFINED
+--
 -- -   #VUID-VkAttachmentDescription-finalLayout-00843# @finalLayout@
 --     /must/ not be
 --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
 --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
 --
+-- -   #VUID-VkAttachmentDescription-format-06699# If @format@ includes a
+--     color or depth aspect and @loadOp@ is
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_LOAD', then
+--     @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'
+--
+-- -   #VUID-VkAttachmentDescription-format-06700# If @format@ includes a
+--     stencil aspect and @stencilLoadOp@ is
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_LOAD', then
+--     @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'
+--
 -- -   #VUID-VkAttachmentDescription-format-03280# If @format@ is a color
 --     format, @initialLayout@ /must/ not be
 --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL'
@@ -2126,38 +2142,35 @@
 --
 -- == Valid Usage
 --
--- -   #VUID-VkFramebufferCreateInfo-attachmentCount-00876# If @renderpass@
---     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @attachmentCount@
---     /must/ be equal to the attachment count specified in @renderPass@
+-- -   #VUID-VkFramebufferCreateInfo-attachmentCount-00876#
+--     @attachmentCount@ /must/ be equal to the attachment count specified
+--     in @renderPass@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-02778# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @flags@ does not include
---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+-- -   #VUID-VkFramebufferCreateInfo-flags-02778# If @flags@ does not
+--     include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT'
 --     and @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
 --     pointer to an array of @attachmentCount@ valid
 --     'Vulkan.Core10.Handles.ImageView' handles
 --
--- -   #VUID-VkFramebufferCreateInfo-pAttachments-00877# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
---     include
+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00877# If @flags@ does
+--     not include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ that is used as a color attachment or
 --     resolve attachment by @renderPass@ /must/ have been created with a
 --     @usage@ value including
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
 --
--- -   #VUID-VkFramebufferCreateInfo-pAttachments-02633# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
---     include
+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02633# If @flags@ does
+--     not include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ that is used as a depth\/stencil
 --     attachment by @renderPass@ /must/ have been created with a @usage@
 --     value including
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
 --
--- -   #VUID-VkFramebufferCreateInfo-pAttachments-02634# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
---     include
+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02634# If @flags@ does
+--     not include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ that is used as a depth\/stencil
 --     resolve attachment by @renderPass@ /must/ have been created with a
@@ -2165,24 +2178,22 @@
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
 --
 -- -   #VUID-VkFramebufferCreateInfo-pAttachments-00879# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @flags@ does not include
+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @flags@ does not
+--     include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ that is used as an input attachment
 --     by @renderPass@ /must/ have been created with a @usage@ value
 --     including
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
 --
--- -   #VUID-VkFramebufferCreateInfo-pAttachments-02552# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', each element of
+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02552# Each element of
 --     @pAttachments@ that is used as a fragment density map attachment by
 --     @renderPass@ /must/ not have been created with a @flags@ value
 --     including
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
 --
--- -   #VUID-VkFramebufferCreateInfo-renderPass-02553# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @renderPass@ has a
---     fragment density map attachment, and
+-- -   #VUID-VkFramebufferCreateInfo-renderPass-02553# If @renderPass@ has
+--     a fragment density map attachment and
 --     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-fragmentDensityMapNonSubsampledImages non-subsample image feature>
 --     is not enabled, each element of @pAttachments@ /must/ have been
 --     created with a @flags@ value including
@@ -2196,25 +2207,22 @@
 --     created with a @flags@ value including
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM'.
 --
--- -   #VUID-VkFramebufferCreateInfo-pAttachments-00880# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
---     include
+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00880# If @flags@ does
+--     not include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ /must/ have been created with a
 --     'Vulkan.Core10.Enums.Format.Format' value that matches the
 --     'Vulkan.Core10.Enums.Format.Format' specified by the corresponding
 --     'AttachmentDescription' in @renderPass@
 --
--- -   #VUID-VkFramebufferCreateInfo-pAttachments-00881# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
---     include
+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00881# If @flags@ does
+--     not include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ /must/ have been created with a
 --     @samples@ value that matches the @samples@ value specified by the
 --     corresponding 'AttachmentDescription' in @renderPass@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04533# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
+-- -   #VUID-VkFramebufferCreateInfo-flags-04533# If @flags@ does not
 --     include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ that is used as an input, color,
@@ -2222,8 +2230,7 @@
 --     been created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@width@
 --     greater than or equal to @width@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04534# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
+-- -   #VUID-VkFramebufferCreateInfo-flags-04534# If @flags@ does not
 --     include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ that is used as an input, color,
@@ -2231,8 +2238,7 @@
 --     been created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@height@
 --     greater than or equal to @height@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04535# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
+-- -   #VUID-VkFramebufferCreateInfo-flags-04535# If @flags@ does not
 --     include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ that is used as an input, color,
@@ -2241,46 +2247,40 @@
 --     'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@subresourceRange.layerCount@
 --     greater than or equal to @layers@
 --
--- -   #VUID-VkFramebufferCreateInfo-renderPass-04536# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderPass@ was
+-- -   #VUID-VkFramebufferCreateInfo-renderPass-04536# If @renderPass@ was
 --     specified with non-zero view masks, each element of @pAttachments@
 --     that is used as an input, color, resolve, or depth\/stencil
 --     attachment by @renderPass@ /must/ have a @layerCount@ greater than
 --     the index of the most significant bit set in any of those view masks
 --
--- -   #VUID-VkFramebufferCreateInfo-renderPass-02746# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderPass@ was
+-- -   #VUID-VkFramebufferCreateInfo-renderPass-02746# If @renderPass@ was
 --     specified with non-zero view masks, each element of @pAttachments@
 --     that is referenced by @fragmentDensityMapAttachment@ /must/ have a
 --     @layerCount@ equal to @1@ or greater than the index of the most
 --     significant bit set in any of those view masks
 --
--- -   #VUID-VkFramebufferCreateInfo-renderPass-02747# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderPass@ was
+-- -   #VUID-VkFramebufferCreateInfo-renderPass-02747# If @renderPass@ was
 --     not specified with non-zero view masks, each element of
 --     @pAttachments@ that is referenced by @fragmentDensityMapAttachment@
 --     /must/ have a @layerCount@ equal to @1@
 --
--- -   #VUID-VkFramebufferCreateInfo-pAttachments-02555# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
---     include
+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02555# If @flags@ does
+--     not include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     an element of @pAttachments@ that is referenced by
 --     @fragmentDensityMapAttachment@ /must/ have a width at least as large
 --     as
 --     \(\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil\)
 --
--- -   #VUID-VkFramebufferCreateInfo-pAttachments-02556# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
---     include
+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02556# If @flags@ does
+--     not include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     an element of @pAttachments@ that is referenced by
 --     @fragmentDensityMapAttachment@ /must/ have a height at least as
 --     large as
 --     \(\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil\)
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04537# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
+-- -   #VUID-VkFramebufferCreateInfo-flags-04537# If @flags@ does not
 --     include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     and @renderPass@ was specified with non-zero view masks, each
@@ -2290,8 +2290,7 @@
 --     greater than the index of the most significant bit set in any of
 --     those view masks
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04538# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
+-- -   #VUID-VkFramebufferCreateInfo-flags-04538# If @flags@ does not
 --     include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     and @renderPass@ was not specified with non-zero view masks, each
@@ -2300,8 +2299,7 @@
 --     by @renderPass@ /must/ have a @layerCount@ that is either @1@, or
 --     greater than @layers@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04539# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
+-- -   #VUID-VkFramebufferCreateInfo-flags-04539# If @flags@ does not
 --     include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     an element of @pAttachments@ that is used as a
@@ -2312,8 +2310,7 @@
 --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR'
 --     which references that attachment
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04540# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
+-- -   #VUID-VkFramebufferCreateInfo-flags-04540# If @flags@ does not
 --     include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     an element of @pAttachments@ that is used as a
@@ -2357,8 +2354,7 @@
 --     than or equal to
 --     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxFramebufferLayers maxFramebufferLayers>
 --
--- -   #VUID-VkFramebufferCreateInfo-renderPass-02531# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderPass@ was
+-- -   #VUID-VkFramebufferCreateInfo-renderPass-02531# If @renderPass@ was
 --     specified with non-zero view masks, @layers@ /must/ be @1@
 --
 -- -   #VUID-VkFramebufferCreateInfo-pAttachments-00891# If @flags@ does
@@ -2385,8 +2381,7 @@
 --     structure in the @pNext@ chain /must/ be equal to either zero or
 --     @attachmentCount@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04541# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-04541# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @width@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2395,8 +2390,7 @@
 --     resolve or depth\/stencil attachment in @renderPass@ /must/ be
 --     greater than or equal to @width@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04542# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-04542# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @height@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2405,8 +2399,7 @@
 --     resolve or depth\/stencil attachment in @renderPass@ /must/ be
 --     greater than or equal to @height@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-03196# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-03196# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @width@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2416,8 +2409,7 @@
 --     in @renderPass@ /must/ be greater than or equal to
 --     \(\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil\)
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-03197# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-03197# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @height@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2427,8 +2419,7 @@
 --     in @renderPass@ /must/ be greater than or equal to
 --     \(\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil\)
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04543# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-04543# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @width@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2441,8 +2432,7 @@
 --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR'
 --     which references that attachment
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04544# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-04544# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @height@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2455,8 +2445,7 @@
 --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR'
 --     which references that attachment
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04545# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-04545# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @layerCount@ member of any element of the
 --     @pAttachmentImageInfos@ member of a
@@ -2465,9 +2454,8 @@
 --     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment>
 --     /must/ be either @1@, or greater than or equal to @layers@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04587# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @flags@ includes
---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+-- -   #VUID-VkFramebufferCreateInfo-flags-04587# If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT'
 --     and @renderPass@ was specified with non-zero view masks, each
 --     element of @pAttachments@ that is used as a
 --     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment>
@@ -2475,9 +2463,8 @@
 --     greater than the index of the most significant bit set in any of
 --     those view masks
 --
--- -   #VUID-VkFramebufferCreateInfo-renderPass-03198# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', multiview is enabled
---     for @renderPass@, and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-renderPass-03198# If multiview is
+--     enabled for @renderPass@ and @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @layerCount@ member of any element of the
 --     @pAttachmentImageInfos@ member of a
@@ -2487,9 +2474,8 @@
 --     greater than the maximum bit index set in the view mask in the
 --     subpasses in which it is used in @renderPass@
 --
--- -   #VUID-VkFramebufferCreateInfo-renderPass-04546# If @renderpass@ is
---     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', multiview is not
---     enabled for @renderPass@, and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-renderPass-04546# If multiview is not
+--     enabled for @renderPass@ and @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @layerCount@ member of any element of the
 --     @pAttachmentImageInfos@ member of a
@@ -2498,8 +2484,7 @@
 --     resolve, or depth\/stencil attachment in @renderPass@ /must/ be
 --     greater than or equal to @layers@
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-03201# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-03201# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @usage@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2509,8 +2494,7 @@
 --     /must/ include
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-03202# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-03202# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @usage@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2519,8 +2503,7 @@
 --     used as a depth\/stencil attachment by @renderPass@ /must/ include
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-03203# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-03203# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @usage@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2530,8 +2513,7 @@
 --     include
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-03204# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-03204# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @usage@ member of any element of the @pAttachmentImageInfos@
 --     member of a
@@ -2540,8 +2522,7 @@
 --     used as an input attachment by @renderPass@ /must/ include
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-03205# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-03205# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     at least one element of the @pViewFormats@ member of any element of
 --     the @pAttachmentImageInfos@ member of a
@@ -2557,8 +2538,7 @@
 --     'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@viewType@ not equal
 --     to 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D'
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04548# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not
+-- -   #VUID-VkFramebufferCreateInfo-flags-04548# If @flags@ does not
 --     include
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of @pAttachments@ that is used as a fragment shading
@@ -2566,8 +2546,7 @@
 --     @usage@ value including
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'
 --
--- -   #VUID-VkFramebufferCreateInfo-flags-04549# If @renderpass@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes
+-- -   #VUID-VkFramebufferCreateInfo-flags-04549# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @usage@ member of any element of the @pAttachmentImageInfos@
 --     member of a
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
@@ -25,5031 +25,5892 @@
                                , PipelineDepthStencilStateCreateInfo(..)
                                , GraphicsPipelineCreateInfo(..)
                                , Pipeline(..)
-                               , PipelineLayoutCreateFlags(..)
-                               , PipelineDynamicStateCreateFlags(..)
-                               , PipelineMultisampleStateCreateFlags(..)
-                               , PipelineRasterizationStateCreateFlags(..)
-                               , PipelineViewportStateCreateFlags(..)
-                               , PipelineTessellationStateCreateFlags(..)
-                               , PipelineInputAssemblyStateCreateFlags(..)
-                               , PipelineVertexInputStateCreateFlags(..)
-                               , PrimitiveTopology(..)
-                               , CompareOp(..)
-                               , PolygonMode(..)
-                               , FrontFace(..)
-                               , BlendFactor(..)
-                               , BlendOp(..)
-                               , StencilOp(..)
-                               , LogicOp(..)
-                               , VertexInputRate(..)
-                               , DynamicState(..)
-                               , CullModeFlagBits(..)
-                               , CullModeFlags
-                               , ShaderStageFlagBits(..)
-                               , ShaderStageFlags
-                               , PipelineCreateFlagBits(..)
-                               , PipelineCreateFlags
-                               , PipelineShaderStageCreateFlagBits(..)
-                               , PipelineShaderStageCreateFlags
-                               , ColorComponentFlagBits(..)
-                               , ColorComponentFlags
-                               , PipelineColorBlendStateCreateFlagBits(..)
-                               , PipelineColorBlendStateCreateFlags
-                               , PipelineDepthStencilStateCreateFlagBits(..)
-                               , PipelineDepthStencilStateCreateFlags
-                               , SampleMask
-                               ) where
-
-import Vulkan.CStruct.Utils (FixedArray)
-import Vulkan.Internal.Utils (traceAroundEvent)
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Foldable (traverse_)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytes)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import GHC.Ptr (nullFunPtr)
-import Foreign.Ptr (nullPtr)
-import qualified Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCString)
-import Data.ByteString (useAsCString)
-import Data.Coerce (coerce)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import qualified Data.Vector (null)
-import Vulkan.CStruct (FromCStruct)
-import Vulkan.CStruct (FromCStruct(..))
-import Vulkan.CStruct (ToCStruct)
-import Vulkan.CStruct (ToCStruct(..))
-import Vulkan.Zero (Zero(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(..))
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(..))
-import Foreign.C.Types (CSize(CSize))
-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.Word (Word64)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Vulkan.CStruct.Utils (advancePtrBytes)
-import Vulkan.Core10.FundamentalTypes (bool32ToBool)
-import Vulkan.Core10.FundamentalTypes (boolToBool32)
-import Vulkan.CStruct.Extends (forgetExtensions)
-import Vulkan.CStruct.Utils (lowerArrayPtr)
-import Vulkan.CStruct.Extends (peekSomeCStruct)
-import Vulkan.CStruct.Extends (pokeSomeCStruct)
-import Vulkan.CStruct.Extends (withSomeCStruct)
-import Vulkan.NamedType ((:::))
-import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (AttachmentSampleCountInfoAMD)
-import Vulkan.Core10.Enums.BlendFactor (BlendFactor)
-import Vulkan.Core10.Enums.BlendOp (BlendOp)
-import Vulkan.Core10.FundamentalTypes (Bool32)
-import Vulkan.CStruct.Extends (Chain)
-import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlags)
-import Vulkan.Core10.Enums.CompareOp (CompareOp)
-import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlags)
-import Vulkan.Core10.Handles (Device)
-import Vulkan.Core10.Handles (Device(..))
-import Vulkan.Core10.Handles (Device(Device))
-import Vulkan.Dynamic (DeviceCmds(pVkCreateComputePipelines))
-import Vulkan.Dynamic (DeviceCmds(pVkCreateGraphicsPipelines))
-import Vulkan.Dynamic (DeviceCmds(pVkDestroyPipeline))
-import Vulkan.Core10.Handles (Device_T)
-import Vulkan.Core10.Enums.DynamicState (DynamicState)
-import Vulkan.CStruct.Extends (Extends)
-import Vulkan.CStruct.Extends (Extendss)
-import Vulkan.CStruct.Extends (Extensible(..))
-import Vulkan.Core10.Enums.Format (Format)
-import Vulkan.Core10.Enums.FrontFace (FrontFace)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsPipelineShaderGroupsCreateInfoNV)
-import Vulkan.Core10.Enums.LogicOp (LogicOp)
-import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (MultiviewPerViewAttributesInfoNVX)
-import Vulkan.CStruct.Extends (PeekChain)
-import Vulkan.CStruct.Extends (PeekChain(..))
-import Vulkan.Core10.Handles (Pipeline)
-import Vulkan.Core10.Handles (Pipeline(..))
-import Vulkan.Core10.Handles (PipelineCache)
-import Vulkan.Core10.Handles (PipelineCache(..))
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PipelineColorBlendAdvancedStateCreateInfoEXT)
-import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits (PipelineColorBlendStateCreateFlags)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_color_write_enable (PipelineColorWriteCreateInfoEXT)
-import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_pipeline_compiler_control (PipelineCompilerControlCreateInfoAMD)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_framebuffer_mixed_samples (PipelineCoverageModulationStateCreateInfoNV)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (PipelineCoverageReductionStateCreateInfoNV)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_coverage_to_color (PipelineCoverageToColorStateCreateInfoNV)
-import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
-import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfo)
-import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits (PipelineDepthStencilStateCreateFlags)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PipelineDiscardRectangleStateCreateInfoEXT)
-import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags (PipelineDynamicStateCreateFlags)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PipelineFragmentShadingRateEnumStateCreateInfoNV)
-import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PipelineFragmentShadingRateStateCreateInfoKHR)
-import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags)
-import Vulkan.Core10.Handles (PipelineLayout)
-import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conservative_rasterization (PipelineRasterizationConservativeStateCreateInfoEXT)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PipelineRasterizationDepthClipStateCreateInfoEXT)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PipelineRasterizationLineStateCreateInfoEXT)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PipelineRasterizationProvokingVertexStateCreateInfoEXT)
-import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags)
-import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)
-import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering (PipelineRenderingCreateInfo)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT)
-import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)
-import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control (PipelineShaderStageRequiredSubgroupSizeCreateInfo)
-import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)
-import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PipelineVertexInputDivisorStateCreateInfoEXT)
-import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportCoarseSampleOrderStateCreateInfoNV)
-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_control (PipelineViewportDepthClipControlCreateInfoEXT)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PipelineViewportExclusiveScissorStateCreateInfoNV)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportShadingRateImageStateCreateInfoNV)
-import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_viewport_swizzle (PipelineViewportSwizzleStateCreateInfoNV)
-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_clip_space_w_scaling (PipelineViewportWScalingStateCreateInfoNV)
-import Vulkan.CStruct.Extends (PokeChain)
-import Vulkan.CStruct.Extends (PokeChain(..))
-import Vulkan.Core10.Enums.PolygonMode (PolygonMode)
-import Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology)
-import Vulkan.Core10.FundamentalTypes (Rect2D)
-import Vulkan.Core10.Handles (RenderPass)
-import Vulkan.Core10.Enums.Result (Result)
-import Vulkan.Core10.Enums.Result (Result(..))
-import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(SampleCountFlagBits))
-import Vulkan.Core10.FundamentalTypes (SampleMask)
-import Vulkan.Core10.Handles (ShaderModule)
-import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)
-import Vulkan.CStruct.Extends (SomeStruct)
-import Vulkan.CStruct.Extends (SomeStruct(..))
-import Vulkan.Core10.Enums.StencilOp (StencilOp)
-import Vulkan.Core10.Enums.StructureType (StructureType)
-import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_subpass_shading (SubpassShadingPipelineCreateInfoHUAWEI)
-import Vulkan.Core10.Enums.VertexInputRate (VertexInputRate)
-import Vulkan.Exception (VulkanException(..))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO))
-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO))
-import Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Vulkan.Core10.Enums.BlendFactor (BlendFactor(..))
-import Vulkan.Core10.Enums.BlendOp (BlendOp(..))
-import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlagBits(..))
-import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlags)
-import Vulkan.Core10.Enums.CompareOp (CompareOp(..))
-import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlagBits(..))
-import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlags)
-import Vulkan.Core10.Enums.DynamicState (DynamicState(..))
-import Vulkan.Core10.Enums.FrontFace (FrontFace(..))
-import Vulkan.Core10.Enums.LogicOp (LogicOp(..))
-import Vulkan.Core10.Handles (Pipeline(..))
-import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits (PipelineColorBlendStateCreateFlagBits(..))
-import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits (PipelineColorBlendStateCreateFlags)
-import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(..))
-import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
-import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits (PipelineDepthStencilStateCreateFlagBits(..))
-import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits (PipelineDepthStencilStateCreateFlags)
-import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags (PipelineDynamicStateCreateFlags(..))
-import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags(..))
-import Vulkan.Core10.Enums.PipelineLayoutCreateFlags (PipelineLayoutCreateFlags(..))
-import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags(..))
-import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags(..))
-import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlagBits(..))
-import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)
-import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags(..))
-import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags(..))
-import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags(..))
-import Vulkan.Core10.Enums.PolygonMode (PolygonMode(..))
-import Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology(..))
-import Vulkan.Core10.FundamentalTypes (SampleMask)
-import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(..))
-import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Vulkan.Core10.Enums.StencilOp (StencilOp(..))
-import Vulkan.Core10.Enums.VertexInputRate (VertexInputRate(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateGraphicsPipelines
-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct GraphicsPipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct GraphicsPipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
-
--- | vkCreateGraphicsPipelines - Create graphics pipelines
---
--- = Description
---
--- The 'GraphicsPipelineCreateInfo' structure includes an array of
--- 'PipelineShaderStageCreateInfo' structures for each of the desired
--- active shader stages, as well as creation information for all relevant
--- fixed-function stages, and a pipeline layout.
---
--- == Valid Usage
---
--- -   #VUID-vkCreateGraphicsPipelines-flags-00720# If the @flags@ member
---     of any element of @pCreateInfos@ contains the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and the @basePipelineIndex@ member of that same element is not
---     @-1@, @basePipelineIndex@ /must/ be less than the index into
---     @pCreateInfos@ that corresponds to that element
---
--- -   #VUID-vkCreateGraphicsPipelines-flags-00721# If the @flags@ member
---     of any element of @pCreateInfos@ contains the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, the base pipeline /must/ have been created with the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
---     flag set
---
--- -   #VUID-vkCreateGraphicsPipelines-pipelineCache-02876# If
---     @pipelineCache@ was created with
---     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',
---     host access to @pipelineCache@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
---
--- Note
---
--- An implicit cache may be provided by the implementation or a layer. For
--- this reason, it is still valid to set
--- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'
--- on @flags@ for any element of @pCreateInfos@ while passing
--- 'Vulkan.Core10.APIConstants.NULL_HANDLE' for @pipelineCache@.
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-vkCreateGraphicsPipelines-device-parameter# @device@ /must/ be
---     a valid 'Vulkan.Core10.Handles.Device' handle
---
--- -   #VUID-vkCreateGraphicsPipelines-pipelineCache-parameter# If
---     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @pipelineCache@ /must/ be a valid
---     'Vulkan.Core10.Handles.PipelineCache' handle
---
--- -   #VUID-vkCreateGraphicsPipelines-pCreateInfos-parameter#
---     @pCreateInfos@ /must/ be a valid pointer to an array of
---     @createInfoCount@ valid 'GraphicsPipelineCreateInfo' structures
---
--- -   #VUID-vkCreateGraphicsPipelines-pAllocator-parameter# If
---     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
---     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   #VUID-vkCreateGraphicsPipelines-pPipelines-parameter# @pPipelines@
---     /must/ be a valid pointer to an array of @createInfoCount@
---     'Vulkan.Core10.Handles.Pipeline' handles
---
--- -   #VUID-vkCreateGraphicsPipelines-createInfoCount-arraylength#
---     @createInfoCount@ /must/ be greater than @0@
---
--- -   #VUID-vkCreateGraphicsPipelines-pipelineCache-parent# If
---     @pipelineCache@ is a valid handle, it /must/ have been created,
---     allocated, or retrieved from @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PIPELINE_COMPILE_REQUIRED_EXT'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Vulkan.Core10.Handles.Device', 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'
-createGraphicsPipelines :: forall io
-                         . (MonadIO io)
-                        => -- | @device@ is the logical device that creates the graphics pipelines.
-                           Device
-                        -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
-                           -- indicating that pipeline caching is disabled; or the handle of a valid
-                           -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-cache pipeline cache>
-                           -- object, in which case use of that cache is enabled for the duration of
-                           -- the command.
-                           PipelineCache
-                        -> -- | @pCreateInfos@ is a pointer to an array of 'GraphicsPipelineCreateInfo'
-                           -- structures.
-                           ("createInfos" ::: Vector (SomeStruct GraphicsPipelineCreateInfo))
-                        -> -- | @pAllocator@ controls host memory allocation as described in the
-                           -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
-                           -- chapter.
-                           ("allocator" ::: Maybe AllocationCallbacks)
-                        -> io (Result, ("pipelines" ::: Vector Pipeline))
-createGraphicsPipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do
-  let vkCreateGraphicsPipelinesPtr = pVkCreateGraphicsPipelines (case device of Device{deviceCmds} -> deviceCmds)
-  lift $ unless (vkCreateGraphicsPipelinesPtr /= nullFunPtr) $
-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateGraphicsPipelines is null" Nothing Nothing
-  let vkCreateGraphicsPipelines' = mkVkCreateGraphicsPipelines vkCreateGraphicsPipelinesPtr
-  pPCreateInfos <- ContT $ allocaBytes @(GraphicsPipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 144)
-  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (144 * (i)) :: Ptr (GraphicsPipelineCreateInfo _))) (e) . ($ ())) (createInfos)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
-  r <- lift $ traceAroundEvent "vkCreateGraphicsPipelines" (vkCreateGraphicsPipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines))
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
-  pure $ (r, pPipelines)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createGraphicsPipelines' and 'destroyPipeline'
---
--- To ensure that 'destroyPipeline' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the last argument.
--- To just extract the pair pass '(,)' as the last argument.
---
-withGraphicsPipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct GraphicsPipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r
-withGraphicsPipelines device pipelineCache pCreateInfos pAllocator b =
-  b (createGraphicsPipelines device pipelineCache pCreateInfos pAllocator)
-    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateComputePipelines
-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ComputePipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ComputePipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
-
--- | vkCreateComputePipelines - Creates a new compute pipeline object
---
--- == Valid Usage
---
--- -   #VUID-vkCreateComputePipelines-flags-00695# If the @flags@ member of
---     any element of @pCreateInfos@ contains the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and the @basePipelineIndex@ member of that same element is not
---     @-1@, @basePipelineIndex@ /must/ be less than the index into
---     @pCreateInfos@ that corresponds to that element
---
--- -   #VUID-vkCreateComputePipelines-flags-00696# If the @flags@ member of
---     any element of @pCreateInfos@ contains the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, the base pipeline /must/ have been created with the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
---     flag set
---
--- -   #VUID-vkCreateComputePipelines-pipelineCache-02873# If
---     @pipelineCache@ was created with
---     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',
---     host access to @pipelineCache@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-vkCreateComputePipelines-device-parameter# @device@ /must/ be
---     a valid 'Vulkan.Core10.Handles.Device' handle
---
--- -   #VUID-vkCreateComputePipelines-pipelineCache-parameter# If
---     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @pipelineCache@ /must/ be a valid
---     'Vulkan.Core10.Handles.PipelineCache' handle
---
--- -   #VUID-vkCreateComputePipelines-pCreateInfos-parameter#
---     @pCreateInfos@ /must/ be a valid pointer to an array of
---     @createInfoCount@ valid 'ComputePipelineCreateInfo' structures
---
--- -   #VUID-vkCreateComputePipelines-pAllocator-parameter# If @pAllocator@
---     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid
---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
---
--- -   #VUID-vkCreateComputePipelines-pPipelines-parameter# @pPipelines@
---     /must/ be a valid pointer to an array of @createInfoCount@
---     'Vulkan.Core10.Handles.Pipeline' handles
---
--- -   #VUID-vkCreateComputePipelines-createInfoCount-arraylength#
---     @createInfoCount@ /must/ be greater than @0@
---
--- -   #VUID-vkCreateComputePipelines-pipelineCache-parent# If
---     @pipelineCache@ is a valid handle, it /must/ have been created,
---     allocated, or retrieved from @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PIPELINE_COMPILE_REQUIRED_EXT'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'ComputePipelineCreateInfo', 'Vulkan.Core10.Handles.Device',
--- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'
-createComputePipelines :: forall io
-                        . (MonadIO io)
-                       => -- | @device@ is the logical device that creates the compute pipelines.
-                          Device
-                       -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
-                          -- indicating that pipeline caching is disabled; or the handle of a valid
-                          -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-cache pipeline cache>
-                          -- object, in which case use of that cache is enabled for the duration of
-                          -- the command.
-                          PipelineCache
-                       -> -- | @pCreateInfos@ is a pointer to an array of 'ComputePipelineCreateInfo'
-                          -- structures.
-                          ("createInfos" ::: Vector (SomeStruct ComputePipelineCreateInfo))
-                       -> -- | @pAllocator@ controls host memory allocation as described in the
-                          -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
-                          -- chapter.
-                          ("allocator" ::: Maybe AllocationCallbacks)
-                       -> io (Result, ("pipelines" ::: Vector Pipeline))
-createComputePipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do
-  let vkCreateComputePipelinesPtr = pVkCreateComputePipelines (case device of Device{deviceCmds} -> deviceCmds)
-  lift $ unless (vkCreateComputePipelinesPtr /= nullFunPtr) $
-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateComputePipelines is null" Nothing Nothing
-  let vkCreateComputePipelines' = mkVkCreateComputePipelines vkCreateComputePipelinesPtr
-  pPCreateInfos <- ContT $ allocaBytes @(ComputePipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 96)
-  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (96 * (i)) :: Ptr (ComputePipelineCreateInfo _))) (e) . ($ ())) (createInfos)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
-  r <- lift $ traceAroundEvent "vkCreateComputePipelines" (vkCreateComputePipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines))
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
-  pure $ (r, pPipelines)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createComputePipelines' and 'destroyPipeline'
---
--- To ensure that 'destroyPipeline' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the last argument.
--- To just extract the pair pass '(,)' as the last argument.
---
-withComputePipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct ComputePipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r
-withComputePipelines device pipelineCache pCreateInfos pAllocator b =
-  b (createComputePipelines device pipelineCache pCreateInfos pAllocator)
-    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyPipeline
-  :: FunPtr (Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyPipeline - Destroy a pipeline object
---
--- == Valid Usage
---
--- -   #VUID-vkDestroyPipeline-pipeline-00765# All submitted commands that
---     refer to @pipeline@ /must/ have completed execution
---
--- -   #VUID-vkDestroyPipeline-pipeline-00766# If
---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
---     provided when @pipeline@ was created, a compatible set of callbacks
---     /must/ be provided here
---
--- -   #VUID-vkDestroyPipeline-pipeline-00767# If no
---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
---     provided when @pipeline@ was created, @pAllocator@ /must/ be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-vkDestroyPipeline-device-parameter# @device@ /must/ be a valid
---     'Vulkan.Core10.Handles.Device' handle
---
--- -   #VUID-vkDestroyPipeline-pipeline-parameter# If @pipeline@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @pipeline@ /must/ be a
---     valid 'Vulkan.Core10.Handles.Pipeline' handle
---
--- -   #VUID-vkDestroyPipeline-pAllocator-parameter# If @pAllocator@ is not
---     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid
---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
---
--- -   #VUID-vkDestroyPipeline-pipeline-parent# If @pipeline@ is a valid
---     handle, it /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Host Synchronization
---
--- -   Host access to @pipeline@ /must/ be externally synchronized
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'
-destroyPipeline :: forall io
-                 . (MonadIO io)
-                => -- | @device@ is the logical device that destroys the pipeline.
-                   Device
-                -> -- | @pipeline@ is the handle of the pipeline to destroy.
-                   Pipeline
-                -> -- | @pAllocator@ controls host memory allocation as described in the
-                   -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
-                   -- chapter.
-                   ("allocator" ::: Maybe AllocationCallbacks)
-                -> io ()
-destroyPipeline device pipeline allocator = liftIO . evalContT $ do
-  let vkDestroyPipelinePtr = pVkDestroyPipeline (case device of Device{deviceCmds} -> deviceCmds)
-  lift $ unless (vkDestroyPipelinePtr /= nullFunPtr) $
-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyPipeline is null" Nothing Nothing
-  let vkDestroyPipeline' = mkVkDestroyPipeline vkDestroyPipelinePtr
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ traceAroundEvent "vkDestroyPipeline" (vkDestroyPipeline' (deviceHandle (device)) (pipeline) pAllocator)
-  pure $ ()
-
-
--- | VkViewport - Structure specifying a viewport
---
--- = Description
---
--- Note
---
--- Despite their names, @minDepth@ /can/ be less than, equal to, or greater
--- than @maxDepth@.
---
--- The framebuffer depth coordinate @z@f /may/ be represented using either
--- a fixed-point or floating-point representation. However, a
--- floating-point representation /must/ be used if the depth\/stencil
--- attachment has a floating-point depth component. If an m-bit fixed-point
--- representation is used, we assume that it represents each value
--- \(\frac{k}{2^m - 1}\), where k ∈ { 0, 1, …​, 2m-1 }, as k (e.g. 1.0 is
--- represented in binary as a string of all ones).
---
--- The viewport parameters shown in the above equations are found from
--- these values as
---
--- -   ox = @x@ + @width@ \/ 2
---
--- -   oy = @y@ + @height@ \/ 2
---
--- -   oz = @minDepth@
---
--- -   px = @width@
---
--- -   py = @height@
---
--- -   pz = @maxDepth@ - @minDepth@.
---
--- If a render pass transform is enabled, the values (px,py) and (ox, oy)
--- defining the viewport are transformed as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>
--- before participating in the viewport transform.
---
--- The application /can/ specify a negative term for @height@, which has
--- the effect of negating the y coordinate in clip space before performing
--- the transform. When using a negative @height@, the application /should/
--- also adjust the @y@ value to point to the lower left corner of the
--- viewport instead of the upper left corner. Using the negative @height@
--- allows the application to avoid having to negate the y component of the
--- @Position@ output from the last
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>.
---
--- The width and height of the
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxViewportDimensions implementation-dependent maximum viewport dimensions>
--- /must/ be greater than or equal to the width and height of the largest
--- image which /can/ be created and attached to a framebuffer.
---
--- The floating-point viewport bounds are represented with an
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-viewportSubPixelBits implementation-dependent precision>.
---
--- == Valid Usage
---
--- -   #VUID-VkViewport-width-01770# @width@ /must/ be greater than @0.0@
---
--- -   #VUID-VkViewport-width-01771# @width@ /must/ be less than or equal
---     to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[0]
---
--- -   #VUID-VkViewport-height-01773# The absolute value of @height@ /must/
---     be less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[1]
---
--- -   #VUID-VkViewport-x-01774# @x@ /must/ be greater than or equal to
---     @viewportBoundsRange@[0]
---
--- -   #VUID-VkViewport-x-01232# (@x@ + @width@) /must/ be less than or
---     equal to @viewportBoundsRange@[1]
---
--- -   #VUID-VkViewport-y-01775# @y@ /must/ be greater than or equal to
---     @viewportBoundsRange@[0]
---
--- -   #VUID-VkViewport-y-01776# @y@ /must/ be less than or equal to
---     @viewportBoundsRange@[1]
---
--- -   #VUID-VkViewport-y-01777# (@y@ + @height@) /must/ be greater than or
---     equal to @viewportBoundsRange@[0]
---
--- -   #VUID-VkViewport-y-01233# (@y@ + @height@) /must/ be less than or
---     equal to @viewportBoundsRange@[1]
---
--- -   #VUID-VkViewport-minDepth-01234# Unless
---     @VK_EXT_depth_range_unrestricted@ extension is enabled @minDepth@
---     /must/ be between @0.0@ and @1.0@, inclusive
---
--- -   #VUID-VkViewport-maxDepth-01235# Unless
---     @VK_EXT_depth_range_unrestricted@ extension is enabled @maxDepth@
---     /must/ be between @0.0@ and @1.0@, inclusive
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV',
--- 'PipelineViewportStateCreateInfo',
--- 'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport',
--- 'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount',
--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
-data Viewport = Viewport
-  { -- | @x@ and @y@ are the viewport’s upper left corner (x,y).
-    x :: Float
-  , -- No documentation found for Nested "VkViewport" "y"
-    y :: Float
-  , -- | @width@ and @height@ are the viewport’s width and height, respectively.
-    width :: Float
-  , -- No documentation found for Nested "VkViewport" "height"
-    height :: Float
-  , -- | @minDepth@ and @maxDepth@ are the depth range for the viewport.
-    minDepth :: Float
-  , -- No documentation found for Nested "VkViewport" "maxDepth"
-    maxDepth :: Float
-  }
-  deriving (Typeable, Eq)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (Viewport)
-#endif
-deriving instance Show Viewport
-
-instance ToCStruct Viewport where
-  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Viewport{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))
-    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (width))
-    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (height))
-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (minDepth))
-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxDepth))
-    f
-  cStructSize = 24
-  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))
-    f
-
-instance FromCStruct Viewport where
-  peekCStruct p = do
-    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
-    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
-    width <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))
-    height <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))
-    minDepth <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
-    maxDepth <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))
-    pure $ Viewport
-             (coerce @CFloat @Float x) (coerce @CFloat @Float y) (coerce @CFloat @Float width) (coerce @CFloat @Float height) (coerce @CFloat @Float minDepth) (coerce @CFloat @Float maxDepth)
-
-instance Storable Viewport where
-  sizeOf ~_ = 24
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero Viewport where
-  zero = Viewport
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkSpecializationMapEntry - Structure specifying a specialization map
--- entry
---
--- = Description
---
--- If a @constantID@ value is not a specialization constant ID used in the
--- shader, that map entry does not affect the behavior of the pipeline.
---
--- == Valid Usage
---
--- -   #VUID-VkSpecializationMapEntry-constantID-00776# For a @constantID@
---     specialization constant declared in a shader, @size@ /must/ match
---     the byte size of the @constantID@. If the specialization constant is
---     of type @boolean@, @size@ /must/ be the byte size of
---     'Vulkan.Core10.FundamentalTypes.Bool32'
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'SpecializationInfo'
-data SpecializationMapEntry = SpecializationMapEntry
-  { -- | @constantID@ is the ID of the specialization constant in SPIR-V.
-    constantID :: Word32
-  , -- | @offset@ is the byte offset of the specialization constant value within
-    -- the supplied data buffer.
-    offset :: Word32
-  , -- | @size@ is the byte size of the specialization constant value within the
-    -- supplied data buffer.
-    size :: Word64
-  }
-  deriving (Typeable, Eq)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (SpecializationMapEntry)
-#endif
-deriving instance Show SpecializationMapEntry
-
-instance ToCStruct SpecializationMapEntry where
-  withCStruct x f = allocaBytes 16 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SpecializationMapEntry{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (constantID)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (offset)
-    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (size))
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (zero))
-    f
-
-instance FromCStruct SpecializationMapEntry where
-  peekCStruct p = do
-    constantID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    offset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    size <- peek @CSize ((p `plusPtr` 8 :: Ptr CSize))
-    pure $ SpecializationMapEntry
-             constantID offset (coerce @CSize @Word64 size)
-
-instance Storable SpecializationMapEntry where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SpecializationMapEntry where
-  zero = SpecializationMapEntry
-           zero
-           zero
-           zero
-
-
--- | VkSpecializationInfo - Structure specifying specialization information
---
--- == Valid Usage
---
--- -   #VUID-VkSpecializationInfo-offset-00773# The @offset@ member of each
---     element of @pMapEntries@ /must/ be less than @dataSize@
---
--- -   #VUID-VkSpecializationInfo-pMapEntries-00774# The @size@ member of
---     each element of @pMapEntries@ /must/ be less than or equal to
---     @dataSize@ minus @offset@
---
--- -   #VUID-VkSpecializationInfo-constantID-04911# The @constantID@ value
---     of each element of @pMapEntries@ /must/ be unique within
---     @pMapEntries@
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkSpecializationInfo-pMapEntries-parameter# If @mapEntryCount@
---     is not @0@, @pMapEntries@ /must/ be a valid pointer to an array of
---     @mapEntryCount@ valid 'SpecializationMapEntry' structures
---
--- -   #VUID-VkSpecializationInfo-pData-parameter# If @dataSize@ is not
---     @0@, @pData@ /must/ be a valid pointer to an array of @dataSize@
---     bytes
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'PipelineShaderStageCreateInfo', 'SpecializationMapEntry'
-data SpecializationInfo = SpecializationInfo
-  { -- | @pMapEntries@ is a pointer to an array of 'SpecializationMapEntry'
-    -- structures which map constant IDs to offsets in @pData@.
-    mapEntries :: Vector SpecializationMapEntry
-  , -- | @dataSize@ is the byte size of the @pData@ buffer.
-    dataSize :: Word64
-  , -- | @pData@ contains the actual constant values to specialize with.
-    data' :: Ptr ()
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (SpecializationInfo)
-#endif
-deriving instance Show SpecializationInfo
-
-instance ToCStruct SpecializationInfo where
-  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SpecializationInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (mapEntries)) :: Word32))
-    pPMapEntries' <- ContT $ allocaBytes @SpecializationMapEntry ((Data.Vector.length (mapEntries)) * 16)
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e)) (mapEntries)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')
-    lift $ poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (dataSize))
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (data')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct SpecializationInfo where
-  peekCStruct p = do
-    mapEntryCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    pMapEntries <- peek @(Ptr SpecializationMapEntry) ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry)))
-    pMapEntries' <- generateM (fromIntegral mapEntryCount) (\i -> peekCStruct @SpecializationMapEntry ((pMapEntries `advancePtrBytes` (16 * (i)) :: Ptr SpecializationMapEntry)))
-    dataSize <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))
-    pData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
-    pure $ SpecializationInfo
-             pMapEntries' (coerce @CSize @Word64 dataSize) pData
-
-instance Zero SpecializationInfo where
-  zero = SpecializationInfo
-           mempty
-           zero
-           zero
-
-
--- | VkPipelineShaderStageCreateInfo - Structure specifying parameters of a
--- newly created pipeline shader stage
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00704# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @stage@ /must/ not be
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00705# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @stage@ /must/ not be
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'
---     or
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02091# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-meshShader mesh shader>
---     feature is not enabled, @stage@ /must/ not be
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02092# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-taskShader task shader>
---     feature is not enabled, @stage@ /must/ not be
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00706# @stage@ /must/
---     not be
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL_GRAPHICS',
---     or 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL'
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-pName-00707# @pName@ /must/ be
---     the name of an @OpEntryPoint@ in @module@ with an execution model
---     that matches @stage@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708# If the
---     identified entry point includes any variable in its interface that
---     is declared with the @ClipDistance@ @BuiltIn@ decoration, that
---     variable /must/ not have an array size greater than
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxClipDistances@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709# If the
---     identified entry point includes any variable in its interface that
---     is declared with the @CullDistance@ @BuiltIn@ decoration, that
---     variable /must/ not have an array size greater than
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCullDistances@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710#
---     If the identified entry point includes any variables in its
---     interface that are declared with the @ClipDistance@ or
---     @CullDistance@ @BuiltIn@ decoration, those variables /must/ not have
---     array sizes which sum to more than
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCombinedClipAndCullDistances@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711# If
---     the identified entry point includes any variable in its interface
---     that is declared with the
---     'Vulkan.Core10.FundamentalTypes.SampleMask' @BuiltIn@ decoration,
---     that variable /must/ not have an array size greater than
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSampleMaskWords@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00712# If @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
---     the identified entry point /must/ not include any input variable in
---     its interface that is decorated with @CullDistance@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00713# If @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'
---     or
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
---     and the identified entry point has an @OpExecutionMode@ instruction
---     specifying a patch size with @OutputVertices@, the patch size /must/
---     be greater than @0@ and less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00714# If @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',
---     the identified entry point /must/ have an @OpExecutionMode@
---     instruction specifying a maximum output vertex count that is greater
---     than @0@ and less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryOutputVertices@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00715# If @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',
---     the identified entry point /must/ have an @OpExecutionMode@
---     instruction specifying an invocation count that is greater than @0@
---     and less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryShaderInvocations@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02596# If @stage@ is a
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>,
---     and the identified entry point writes to @Layer@ for any primitive,
---     it /must/ write the same value to @Layer@ for all vertices of a
---     given primitive
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02597# If @stage@ is a
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>,
---     and the identified entry point writes to @ViewportIndex@ for any
---     primitive, it /must/ write the same value to @ViewportIndex@ for all
---     vertices of a given primitive
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00718# If @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
---     the identified entry point /must/ not include any output variables
---     in its interface decorated with @CullDistance@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00719# If @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
---     and the identified entry point writes to @FragDepth@ in any
---     execution path, it /must/ write to @FragDepth@ in all execution
---     paths
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-01511# If @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
---     and the identified entry point writes to @FragStencilRefEXT@ in any
---     execution path, it /must/ write to @FragStencilRefEXT@ in all
---     execution paths
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02093# If @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',
---     the identified entry point /must/ have an @OpExecutionMode@
---     instruction specifying a maximum output vertex count,
---     @OutputVertices@, that is greater than @0@ and less than or equal to
---     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputVertices@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02094# If @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',
---     the identified entry point /must/ have an @OpExecutionMode@
---     instruction specifying a maximum output primitive count,
---     @OutputPrimitivesNV@, that is greater than @0@ and less than or
---     equal to
---     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputPrimitives@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02784# If @flags@ has
---     the
---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT'
---     flag set, the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>
---     feature /must/ be enabled
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02785# If @flags@ has
---     the
---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT'
---     flag set, the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-computeFullSubgroups computeFullSubgroups>
---     feature /must/ be enabled
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02754# If a
---     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
---     structure is included in the @pNext@ chain, @flags@ /must/ not have
---     the
---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT'
---     flag set
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02755# If a
---     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
---     structure is included in the @pNext@ chain, the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>
---     feature /must/ be enabled, and @stage@ /must/ be a valid bit
---     specified in
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-requiredSubgroupSizeStages requiredSubgroupSizeStages>
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02756# If a
---     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
---     structure is included in the @pNext@ chain and @stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT',
---     the local workgroup size of the shader /must/ be less than or equal
---     to the product of
---     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'::@requiredSubgroupSize@
---     and
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxComputeWorkgroupSubgroups maxComputeWorkgroupSubgroups>
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02757# If a
---     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
---     structure is included in the @pNext@ chain, and @flags@ has the
---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT'
---     flag set, the local workgroup size in the X dimension of the
---     pipeline /must/ be a multiple of
---     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'::@requiredSubgroupSize@
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02758# If @flags@ has
---     both the
---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT'
---     and
---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT'
---     flags set, the local workgroup size in the X dimension of the
---     pipeline /must/ be a multiple of
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxSubgroupSize maxSubgroupSize>
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02759# If @flags@ has
---     the
---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT'
---     flag set and @flags@ does not have the
---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT'
---     flag set and no
---     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
---     structure is included in the @pNext@ chain, the local workgroup size
---     in the X dimension of the pipeline /must/ be a multiple of
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-module-04145# The SPIR-V code
---     that was used to create @module@ /must/ be valid as described by the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#spirv-spec Khronos SPIR-V Specification>
---     after applying the specializations provided in
---     @pSpecializationInfo@, if any, and then converting all
---     specialization constants into fixed constants
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-sType-sType# @sType@ /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO'
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-pNext# @pNext@ /must/ be
---     @NULL@ or a pointer to a valid instance of
---     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-sType-unique# The @sType@
---     value of each struct in the @pNext@ chain /must/ be unique
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-flags-parameter# @flags@
---     /must/ be a valid combination of
---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'
---     values
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-stage-parameter# @stage@
---     /must/ be a valid
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-module-parameter# @module@
---     /must/ be a valid 'Vulkan.Core10.Handles.ShaderModule' handle
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-pName-parameter# @pName@
---     /must/ be a null-terminated UTF-8 string
---
--- -   #VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-parameter#
---     If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/
---     be a valid pointer to a valid 'SpecializationInfo' structure
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'ComputePipelineCreateInfo', 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
--- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlags',
--- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
--- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
--- 'Vulkan.Core10.Handles.ShaderModule',
--- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits',
--- 'SpecializationInfo', 'Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineShaderStageCreateInfo (es :: [Type]) = PipelineShaderStageCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'
-    -- specifying how the pipeline shader stage will be generated.
-    flags :: PipelineShaderStageCreateFlags
-  , -- | @stage@ is a
-    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value
-    -- specifying a single pipeline stage.
-    stage :: ShaderStageFlagBits
-  , -- | @module@ is a 'Vulkan.Core10.Handles.ShaderModule' object containing the
-    -- shader for this stage.
-    module' :: ShaderModule
-  , -- | @pName@ is a pointer to a null-terminated UTF-8 string specifying the
-    -- entry point name of the shader for this stage.
-    name :: ByteString
-  , -- | @pSpecializationInfo@ is a pointer to a 'SpecializationInfo' structure,
-    -- as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-specialization-constants Specialization Constants>,
-    -- or @NULL@.
-    specializationInfo :: Maybe SpecializationInfo
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineShaderStageCreateInfo (es :: [Type]))
-#endif
-deriving instance Show (Chain es) => Show (PipelineShaderStageCreateInfo es)
-
-instance Extensible PipelineShaderStageCreateInfo where
-  extensibleTypeName = "PipelineShaderStageCreateInfo"
-  setNext PipelineShaderStageCreateInfo{..} next' = PipelineShaderStageCreateInfo{next = next', ..}
-  getNext PipelineShaderStageCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineShaderStageCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineShaderStageRequiredSubgroupSizeCreateInfo = Just f
-    | otherwise = Nothing
-
-instance (Extendss PipelineShaderStageCreateInfo es, PokeChain es) => ToCStruct (PipelineShaderStageCreateInfo es) where
-  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineShaderStageCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (stage)
-    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (module')
-    pName'' <- ContT $ useAsCString (name)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''
-    pSpecializationInfo'' <- case (specializationInfo) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo))) pSpecializationInfo''
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (zero)
-    pName'' <- ContT $ useAsCString (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''
-    lift $ f
-
-instance (Extendss PipelineShaderStageCreateInfo es, PeekChain es) => FromCStruct (PipelineShaderStageCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineShaderStageCreateFlags ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags))
-    stage <- peek @ShaderStageFlagBits ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits))
-    module' <- peek @ShaderModule ((p `plusPtr` 24 :: Ptr ShaderModule))
-    pName <- packCString =<< peek ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
-    pSpecializationInfo <- peek @(Ptr SpecializationInfo) ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo)))
-    pSpecializationInfo' <- maybePeek (\j -> peekCStruct @SpecializationInfo (j)) pSpecializationInfo
-    pure $ PipelineShaderStageCreateInfo
-             next flags stage module' pName pSpecializationInfo'
-
-instance es ~ '[] => Zero (PipelineShaderStageCreateInfo es) where
-  zero = PipelineShaderStageCreateInfo
-           ()
-           zero
-           zero
-           zero
-           mempty
-           Nothing
-
-
--- | VkComputePipelineCreateInfo - Structure specifying parameters of a newly
--- created compute pipeline
---
--- = Description
---
--- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
--- described in more detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
---
--- == Valid Usage
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-00697# If @flags@ contains
---     the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be
---     a valid handle to a compute 'Vulkan.Core10.Handles.Pipeline'
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-00698# If @flags@ contains
---     the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is
---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
---     be a valid index into the calling command’s @pCreateInfos@ parameter
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-00699# If @flags@ contains
---     the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/
---     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-00700# If @flags@ contains
---     the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
---     be -1
---
--- -   #VUID-VkComputePipelineCreateInfo-stage-00701# The @stage@ member of
---     @stage@ /must/ be
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
---
--- -   #VUID-VkComputePipelineCreateInfo-stage-00702# The shader code for
---     the entry point identified by @stage@ and the rest of the state
---     identified by this structure /must/ adhere to the pipeline linking
---     rules described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces Shader Interfaces>
---     chapter
---
--- -   #VUID-VkComputePipelineCreateInfo-layout-00703# @layout@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
---     with the layout of the compute shader specified in @stage@
---
--- -   #VUID-VkComputePipelineCreateInfo-layout-01687# The number of
---     resources in @layout@ accessible to the compute shader stage /must/
---     be less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-03364# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-03365# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-03366# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-03367# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-03368# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-03369# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-03370# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-03576# @flags@ /must/ not
---     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'
---
--- -   #VUID-VkComputePipelineCreateInfo-pipelineCreationCacheControl-02875#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
---     feature is not enabled, @flags@ /must/ not include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'
---     or
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT'
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkComputePipelineCreateInfo-sType-sType# @sType@ /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO'
---
--- -   #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.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo',
---     or
---     'Vulkan.Extensions.VK_HUAWEI_subpass_shading.SubpassShadingPipelineCreateInfoHUAWEI'
---
--- -   #VUID-VkComputePipelineCreateInfo-sType-unique# The @sType@ value of
---     each struct in the @pNext@ chain /must/ be unique
---
--- -   #VUID-VkComputePipelineCreateInfo-flags-parameter# @flags@ /must/ be
---     a valid combination of
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
---     values
---
--- -   #VUID-VkComputePipelineCreateInfo-stage-parameter# @stage@ /must/ be
---     a valid 'PipelineShaderStageCreateInfo' structure
---
--- -   #VUID-VkComputePipelineCreateInfo-layout-parameter# @layout@ /must/
---     be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   #VUID-VkComputePipelineCreateInfo-commonparent# Both of
---     @basePipelineHandle@, and @layout@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.Handles.Pipeline',
--- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
--- 'Vulkan.Core10.Handles.PipelineLayout', 'PipelineShaderStageCreateInfo',
--- 'Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createComputePipelines'
-data ComputePipelineCreateInfo (es :: [Type]) = ComputePipelineCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
-    -- specifying how the pipeline will be generated.
-    flags :: PipelineCreateFlags
-  , -- | @stage@ is a 'PipelineShaderStageCreateInfo' structure describing the
-    -- compute shader.
-    stage :: SomeStruct PipelineShaderStageCreateInfo
-  , -- | @layout@ is the description of binding locations used by both the
-    -- pipeline and descriptor sets used with the pipeline.
-    layout :: PipelineLayout
-  , -- | @basePipelineHandle@ is a pipeline to derive from
-    basePipelineHandle :: Pipeline
-  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
-    -- as a pipeline to derive from
-    basePipelineIndex :: Int32
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (ComputePipelineCreateInfo (es :: [Type]))
-#endif
-deriving instance Show (Chain es) => Show (ComputePipelineCreateInfo es)
-
-instance Extensible ComputePipelineCreateInfo where
-  extensibleTypeName = "ComputePipelineCreateInfo"
-  setNext ComputePipelineCreateInfo{..} next' = ComputePipelineCreateInfo{next = next', ..}
-  getNext ComputePipelineCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ComputePipelineCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f
-    | Just Refl <- eqT @e @SubpassShadingPipelineCreateInfoHUAWEI = Just f
-    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfo = Just f
-    | otherwise = Nothing
-
-instance (Extendss ComputePipelineCreateInfo es, PokeChain es) => ToCStruct (ComputePipelineCreateInfo es) where
-  withCStruct x f = allocaBytes 96 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ComputePipelineCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
-    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) (stage) . ($ ())
-    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (layout)
-    lift $ poke ((p `plusPtr` 80 :: Ptr Pipeline)) (basePipelineHandle)
-    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (basePipelineIndex)
-    lift $ f
-  cStructSize = 96
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) ((SomeStruct zero)) . ($ ())
-    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (zero)
-    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (zero)
-    lift $ f
-
-instance (Extendss ComputePipelineCreateInfo es, PeekChain es) => FromCStruct (ComputePipelineCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
-    stage <- peekSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _))))
-    layout <- peek @PipelineLayout ((p `plusPtr` 72 :: Ptr PipelineLayout))
-    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 80 :: Ptr Pipeline))
-    basePipelineIndex <- peek @Int32 ((p `plusPtr` 88 :: Ptr Int32))
-    pure $ ComputePipelineCreateInfo
-             next flags stage layout basePipelineHandle basePipelineIndex
-
-instance es ~ '[] => Zero (ComputePipelineCreateInfo es) where
-  zero = ComputePipelineCreateInfo
-           ()
-           zero
-           (SomeStruct zero)
-           zero
-           zero
-           zero
-
-
--- | VkVertexInputBindingDescription - Structure specifying vertex input
--- binding description
---
--- == Valid Usage
---
--- -   #VUID-VkVertexInputBindingDescription-binding-00618# @binding@
---     /must/ be less than
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
---
--- -   #VUID-VkVertexInputBindingDescription-stride-00619# @stride@ /must/
---     be less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindingStride@
---
--- -   #VUID-VkVertexInputBindingDescription-stride-04456# If the
---     @VK_KHR_portability_subset@ extension is enabled, @stride@ /must/ be
---     a multiple of, and at least as large as,
---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetPropertiesKHR'::@minVertexInputBindingStrideAlignment@
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkVertexInputBindingDescription-inputRate-parameter#
---     @inputRate@ /must/ be a valid
---     'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate' value
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'PipelineVertexInputStateCreateInfo',
--- 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'
-data VertexInputBindingDescription = VertexInputBindingDescription
-  { -- | @binding@ is the binding number that this structure describes.
-    binding :: Word32
-  , -- | @stride@ is the byte stride between consecutive elements within the
-    -- buffer.
-    stride :: Word32
-  , -- | @inputRate@ is a 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'
-    -- value specifying whether vertex attribute addressing is a function of
-    -- the vertex index or of the instance index.
-    inputRate :: VertexInputRate
-  }
-  deriving (Typeable, Eq)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (VertexInputBindingDescription)
-#endif
-deriving instance Show VertexInputBindingDescription
-
-instance ToCStruct VertexInputBindingDescription where
-  withCStruct x f = allocaBytes 12 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p VertexInputBindingDescription{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (stride)
-    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (inputRate)
-    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 VertexInputRate)) (zero)
-    f
-
-instance FromCStruct VertexInputBindingDescription where
-  peekCStruct p = do
-    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    stride <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    inputRate <- peek @VertexInputRate ((p `plusPtr` 8 :: Ptr VertexInputRate))
-    pure $ VertexInputBindingDescription
-             binding stride inputRate
-
-instance Storable VertexInputBindingDescription where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero VertexInputBindingDescription where
-  zero = VertexInputBindingDescription
-           zero
-           zero
-           zero
-
-
--- | VkVertexInputAttributeDescription - Structure specifying vertex input
--- attribute description
---
--- == Valid Usage
---
--- -   #VUID-VkVertexInputAttributeDescription-location-00620# @location@
---     /must/ be less than
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
---
--- -   #VUID-VkVertexInputAttributeDescription-binding-00621# @binding@
---     /must/ be less than
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
---
--- -   #VUID-VkVertexInputAttributeDescription-offset-00622# @offset@
---     /must/ be less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributeOffset@
---
--- -   #VUID-VkVertexInputAttributeDescription-format-00623# @format@
---     /must/ be allowed as a vertex buffer format, as specified by the
---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_VERTEX_BUFFER_BIT'
---     flag in
---     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
---     returned by
---     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
---
--- -   #VUID-VkVertexInputAttributeDescription-vertexAttributeAccessBeyondStride-04457#
---     If the @VK_KHR_portability_subset@ extension is enabled, and
---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@vertexAttributeAccessBeyondStride@
---     is 'Vulkan.Core10.FundamentalTypes.FALSE', the sum of @offset@ plus
---     the size of the vertex attribute data described by @format@ /must/
---     not be greater than @stride@ in the 'VertexInputBindingDescription'
---     referenced in @binding@
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkVertexInputAttributeDescription-format-parameter# @format@
---     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.Enums.Format.Format',
--- 'PipelineVertexInputStateCreateInfo'
-data VertexInputAttributeDescription = VertexInputAttributeDescription
-  { -- | @location@ is the shader input location number for this attribute.
-    location :: Word32
-  , -- | @binding@ is the binding number which this attribute takes its data
-    -- from.
-    binding :: Word32
-  , -- | @format@ is the size and type of the vertex attribute data.
-    format :: Format
-  , -- | @offset@ is a byte offset of this attribute relative to the start of an
-    -- element in the vertex input binding.
-    offset :: Word32
-  }
-  deriving (Typeable, Eq)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (VertexInputAttributeDescription)
-#endif
-deriving instance Show VertexInputAttributeDescription
-
-instance ToCStruct VertexInputAttributeDescription where
-  withCStruct x f = allocaBytes 16 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p VertexInputAttributeDescription{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (location)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (binding)
-    poke ((p `plusPtr` 8 :: Ptr Format)) (format)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (offset)
-    f
-  cStructSize = 16
-  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 Format)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct VertexInputAttributeDescription where
-  peekCStruct p = do
-    location <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    binding <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    format <- peek @Format ((p `plusPtr` 8 :: Ptr Format))
-    offset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    pure $ VertexInputAttributeDescription
-             location binding format offset
-
-instance Storable VertexInputAttributeDescription where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero VertexInputAttributeDescription where
-  zero = VertexInputAttributeDescription
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineVertexInputStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline vertex input state
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-vertexBindingDescriptionCount-00613#
---     @vertexBindingDescriptionCount@ /must/ be less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-vertexAttributeDescriptionCount-00614#
---     @vertexAttributeDescriptionCount@ /must/ be less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-binding-00615# For every
---     @binding@ specified by each element of
---     @pVertexAttributeDescriptions@, a 'VertexInputBindingDescription'
---     /must/ exist in @pVertexBindingDescriptions@ with the same value of
---     @binding@
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-00616#
---     All elements of @pVertexBindingDescriptions@ /must/ describe
---     distinct binding numbers
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617#
---     All elements of @pVertexAttributeDescriptions@ /must/ describe
---     distinct attribute locations
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-sType-sType# @sType@
---     /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO'
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-pNext-pNext# @pNext@
---     /must/ be @NULL@ or a pointer to a valid instance of
---     'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PipelineVertexInputDivisorStateCreateInfoEXT'
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-sType-unique# The @sType@
---     value of each struct in the @pNext@ chain /must/ be unique
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-flags-zerobitmask#
---     @flags@ /must/ be @0@
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-parameter#
---     If @vertexBindingDescriptionCount@ is not @0@,
---     @pVertexBindingDescriptions@ /must/ be a valid pointer to an array
---     of @vertexBindingDescriptionCount@ valid
---     'VertexInputBindingDescription' structures
---
--- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-parameter#
---     If @vertexAttributeDescriptionCount@ is not @0@,
---     @pVertexAttributeDescriptions@ /must/ be a valid pointer to an array
---     of @vertexAttributeDescriptionCount@ valid
---     'VertexInputAttributeDescription' structures
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
--- 'Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags.PipelineVertexInputStateCreateFlags',
--- 'Vulkan.Core10.Enums.StructureType.StructureType',
--- 'VertexInputAttributeDescription', 'VertexInputBindingDescription'
-data PipelineVertexInputStateCreateInfo (es :: [Type]) = PipelineVertexInputStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineVertexInputStateCreateFlags
-  , -- | @pVertexBindingDescriptions@ is a pointer to an array of
-    -- 'VertexInputBindingDescription' structures.
-    vertexBindingDescriptions :: Vector VertexInputBindingDescription
-  , -- | @pVertexAttributeDescriptions@ is a pointer to an array of
-    -- 'VertexInputAttributeDescription' structures.
-    vertexAttributeDescriptions :: Vector VertexInputAttributeDescription
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineVertexInputStateCreateInfo (es :: [Type]))
-#endif
-deriving instance Show (Chain es) => Show (PipelineVertexInputStateCreateInfo es)
-
-instance Extensible PipelineVertexInputStateCreateInfo where
-  extensibleTypeName = "PipelineVertexInputStateCreateInfo"
-  setNext PipelineVertexInputStateCreateInfo{..} next' = PipelineVertexInputStateCreateInfo{next = next', ..}
-  getNext PipelineVertexInputStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineVertexInputStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineVertexInputDivisorStateCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance (Extendss PipelineVertexInputStateCreateInfo es, PokeChain es) => ToCStruct (PipelineVertexInputStateCreateInfo es) where
-  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineVertexInputStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexBindingDescriptions)) :: Word32))
-    pPVertexBindingDescriptions' <- ContT $ allocaBytes @VertexInputBindingDescription ((Data.Vector.length (vertexBindingDescriptions)) * 12)
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e)) (vertexBindingDescriptions)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexAttributeDescriptions)) :: Word32))
-    pPVertexAttributeDescriptions' <- ContT $ allocaBytes @VertexInputAttributeDescription ((Data.Vector.length (vertexAttributeDescriptions)) * 16)
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e)) (vertexAttributeDescriptions)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ f
-
-instance (Extendss PipelineVertexInputStateCreateInfo es, PeekChain es) => FromCStruct (PipelineVertexInputStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineVertexInputStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags))
-    vertexBindingDescriptionCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pVertexBindingDescriptions <- peek @(Ptr VertexInputBindingDescription) ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription)))
-    pVertexBindingDescriptions' <- generateM (fromIntegral vertexBindingDescriptionCount) (\i -> peekCStruct @VertexInputBindingDescription ((pVertexBindingDescriptions `advancePtrBytes` (12 * (i)) :: Ptr VertexInputBindingDescription)))
-    vertexAttributeDescriptionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pVertexAttributeDescriptions <- peek @(Ptr VertexInputAttributeDescription) ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription)))
-    pVertexAttributeDescriptions' <- generateM (fromIntegral vertexAttributeDescriptionCount) (\i -> peekCStruct @VertexInputAttributeDescription ((pVertexAttributeDescriptions `advancePtrBytes` (16 * (i)) :: Ptr VertexInputAttributeDescription)))
-    pure $ PipelineVertexInputStateCreateInfo
-             next flags pVertexBindingDescriptions' pVertexAttributeDescriptions'
-
-instance es ~ '[] => Zero (PipelineVertexInputStateCreateInfo es) where
-  zero = PipelineVertexInputStateCreateInfo
-           ()
-           zero
-           mempty
-           mempty
-
-
--- | VkPipelineInputAssemblyStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline input assembly state
---
--- = Description
---
--- Restarting the assembly of primitives discards the most recent index
--- values if those elements formed an incomplete primitive, and restarts
--- the primitive assembly using the subsequent indices, but only assembling
--- the immediately following element through the end of the originally
--- specified elements. The primitive restart index value comparison is
--- performed before adding the @vertexOffset@ value to the index value.
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06252# If
---     @topology@ is
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_POINT_LIST',
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST',
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST',
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY'
---     or
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY',
---     and @primitiveRestartEnable@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE', the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveTopologyListRestart primitiveTopologyListRestart>
---     feature /must/ be enabled
---
--- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06253# If
---     @topology@ is
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',
---     and @primitiveRestartEnable@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE', the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveTopologyPatchListRestart primitiveTopologyPatchListRestart>
---     feature /must/ be enabled
---
--- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @topology@ /must/ not be any of
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY',
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'
---     or
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY'
---
--- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00430# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @topology@ /must/ not be
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'
---
--- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-triangleFans-04452# If
---     the @VK_KHR_portability_subset@ extension is enabled, and
---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@triangleFans@
---     is 'Vulkan.Core10.FundamentalTypes.FALSE', @topology@ /must/ not be
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_FAN'
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-sType-sType# @sType@
---     /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO'
---
--- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-pNext-pNext# @pNext@
---     /must/ be @NULL@
---
--- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-flags-zerobitmask#
---     @flags@ /must/ be @0@
---
--- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-parameter#
---     @topology@ /must/ be a valid
---     'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' value
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags.PipelineInputAssemblyStateCreateFlags',
--- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology',
--- 'Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineInputAssemblyStateCreateInfo = PipelineInputAssemblyStateCreateInfo
-  { -- | @flags@ is reserved for future use.
-    flags :: PipelineInputAssemblyStateCreateFlags
-  , -- | @topology@ is a
-    -- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' defining the
-    -- primitive topology, as described below.
-    topology :: PrimitiveTopology
-  , -- | @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',
-    -- '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
-    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', 0xFF when @indexType@
-    -- is equal to 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', or
-    -- 0xFFFF when @indexType@ is equal to
-    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16'. Primitive restart is
-    -- not allowed for “list” topologies, unless one of the features
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveTopologyPatchListRestart primitiveTopologyPatchListRestart>
-    -- (for
-    -- 'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST')
-    -- or
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveTopologyListRestart primitiveTopologyListRestart>
-    -- (for all other list topologies) is enabled.
-    primitiveRestartEnable :: Bool
-  }
-  deriving (Typeable, Eq)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineInputAssemblyStateCreateInfo)
-#endif
-deriving instance Show PipelineInputAssemblyStateCreateInfo
-
-instance ToCStruct PipelineInputAssemblyStateCreateInfo where
-  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineInputAssemblyStateCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (topology)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (primitiveRestartEnable))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineInputAssemblyStateCreateInfo where
-  peekCStruct p = do
-    flags <- peek @PipelineInputAssemblyStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags))
-    topology <- peek @PrimitiveTopology ((p `plusPtr` 20 :: Ptr PrimitiveTopology))
-    primitiveRestartEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PipelineInputAssemblyStateCreateInfo
-             flags topology (bool32ToBool primitiveRestartEnable)
-
-instance Storable PipelineInputAssemblyStateCreateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineInputAssemblyStateCreateInfo where
-  zero = PipelineInputAssemblyStateCreateInfo
-           zero
-           zero
-           zero
-
-
--- | VkPipelineTessellationStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline tessellation state
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineTessellationStateCreateInfo-patchControlPoints-01214#
---     @patchControlPoints@ /must/ be greater than zero and less than or
---     equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineTessellationStateCreateInfo-sType-sType# @sType@
---     /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO'
---
--- -   #VUID-VkPipelineTessellationStateCreateInfo-pNext-pNext# @pNext@
---     /must/ be @NULL@ or a pointer to a valid instance of
---     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PipelineTessellationDomainOriginStateCreateInfo'
---
--- -   #VUID-VkPipelineTessellationStateCreateInfo-sType-unique# The
---     @sType@ value of each struct in the @pNext@ chain /must/ be unique
---
--- -   #VUID-VkPipelineTessellationStateCreateInfo-flags-zerobitmask#
---     @flags@ /must/ be @0@
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
--- 'Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags.PipelineTessellationStateCreateFlags',
--- 'Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineTessellationStateCreateInfo (es :: [Type]) = PipelineTessellationStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineTessellationStateCreateFlags
-  , -- | @patchControlPoints@ is the number of control points per patch.
-    patchControlPoints :: Word32
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineTessellationStateCreateInfo (es :: [Type]))
-#endif
-deriving instance Show (Chain es) => Show (PipelineTessellationStateCreateInfo es)
-
-instance Extensible PipelineTessellationStateCreateInfo where
-  extensibleTypeName = "PipelineTessellationStateCreateInfo"
-  setNext PipelineTessellationStateCreateInfo{..} next' = PipelineTessellationStateCreateInfo{next = next', ..}
-  getNext PipelineTessellationStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineTessellationStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineTessellationDomainOriginStateCreateInfo = Just f
-    | otherwise = Nothing
-
-instance (Extendss PipelineTessellationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineTessellationStateCreateInfo es) where
-  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineTessellationStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (patchControlPoints)
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance (Extendss PipelineTessellationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineTessellationStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineTessellationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags))
-    patchControlPoints <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ PipelineTessellationStateCreateInfo
-             next flags patchControlPoints
-
-instance es ~ '[] => Zero (PipelineTessellationStateCreateInfo es) where
-  zero = PipelineTessellationStateCreateInfo
-           ()
-           zero
-           zero
-
-
--- | VkPipelineViewportStateCreateInfo - Structure specifying parameters of a
--- newly created pipeline viewport state
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-viewportCount-01216# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @viewportCount@ /must/ not be greater than
---     @1@
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @scissorCount@ /must/ not be greater than
---     @1@
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-viewportCount-01218#
---     @viewportCount@ /must/ be less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-01219#
---     @scissorCount@ /must/ be less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-x-02821# The @x@ and @y@
---     members of @offset@ member of any element of @pScissors@ /must/ be
---     greater than or equal to @0@
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-offset-02822# Evaluation of
---     (@offset.x@ + @extent.width@) /must/ not cause a signed integer
---     addition overflow for any element of @pScissors@
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-offset-02823# Evaluation of
---     (@offset.y@ + @extent.height@) /must/ not cause a signed integer
---     addition overflow for any element of @pScissors@
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-04134# If the
---     graphics pipeline is being created without
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
---     set then @scissorCount@ and @viewportCount@ /must/ be identical
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-viewportCount-04135# If the
---     graphics pipeline is being created with
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
---     set then @viewportCount@ /must/ be @0@, otherwise it /must/ be
---     greater than @0@
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-04136# If the
---     graphics pipeline is being created with
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
---     set then @scissorCount@ /must/ be @0@, otherwise it /must/ be
---     greater than @0@
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-viewportWScalingEnable-01726#
---     If the @viewportWScalingEnable@ member of a
---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---     structure included in the @pNext@ chain is
---     'Vulkan.Core10.FundamentalTypes.TRUE', the @viewportCount@ member of
---     the
---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---     structure /must/ be greater than or equal to
---     'PipelineViewportStateCreateInfo'::@viewportCount@
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-sType-sType# @sType@ /must/
---     be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO'
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-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_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV',
---     'Vulkan.Extensions.VK_EXT_depth_clip_control.PipelineViewportDepthClipControlCreateInfoEXT',
---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',
---     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',
---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV',
---     or
---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-sType-unique# The @sType@
---     value of each struct in the @pNext@ chain /must/ be unique
---
--- -   #VUID-VkPipelineViewportStateCreateInfo-flags-zerobitmask# @flags@
---     /must/ be @0@
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Core10.Enums.PipelineViewportStateCreateFlags.PipelineViewportStateCreateFlags',
--- 'Vulkan.Core10.FundamentalTypes.Rect2D',
--- 'Vulkan.Core10.Enums.StructureType.StructureType', 'Viewport'
-data PipelineViewportStateCreateInfo (es :: [Type]) = PipelineViewportStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineViewportStateCreateFlags
-  , -- | @viewportCount@ is the number of viewports used by the pipeline.
-    viewportCount :: Word32
-  , -- | @pViewports@ is a pointer to an array of 'Viewport' structures, defining
-    -- the viewport transforms. If the viewport state is dynamic, this member
-    -- is ignored.
-    viewports :: Vector Viewport
-  , -- | @scissorCount@ is the number of
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-scissor scissors>
-    -- and /must/ match the number of viewports.
-    scissorCount :: Word32
-  , -- | @pScissors@ is a pointer to an array of
-    -- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures defining the
-    -- rectangular bounds of the scissor for the corresponding viewport. If the
-    -- scissor state is dynamic, this member is ignored.
-    scissors :: Vector Rect2D
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineViewportStateCreateInfo (es :: [Type]))
-#endif
-deriving instance Show (Chain es) => Show (PipelineViewportStateCreateInfo es)
-
-instance Extensible PipelineViewportStateCreateInfo where
-  extensibleTypeName = "PipelineViewportStateCreateInfo"
-  setNext PipelineViewportStateCreateInfo{..} next' = PipelineViewportStateCreateInfo{next = next', ..}
-  getNext PipelineViewportStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineViewportStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineViewportDepthClipControlCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineViewportCoarseSampleOrderStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineViewportShadingRateImageStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineViewportExclusiveScissorStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineViewportSwizzleStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineViewportWScalingStateCreateInfoNV = Just f
-    | otherwise = Nothing
-
-instance (Extendss PipelineViewportStateCreateInfo es, PokeChain es) => ToCStruct (PipelineViewportStateCreateInfo es) where
-  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineViewportStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags)) (flags)
-    let pViewportsLength = Data.Vector.length $ (viewports)
-    viewportCount'' <- lift $ if (viewportCount) == 0
-      then pure $ fromIntegral pViewportsLength
-      else do
-        unless (fromIntegral pViewportsLength == (viewportCount) || pViewportsLength == 0) $
-          throwIO $ IOError Nothing InvalidArgument "" "pViewports must be empty or have 'viewportCount' elements" Nothing Nothing
-        pure (viewportCount)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (viewportCount'')
-    pViewports'' <- if Data.Vector.null (viewports)
-      then pure nullPtr
-      else do
-        pPViewports <- ContT $ allocaBytes @Viewport (((Data.Vector.length (viewports))) * 24)
-        lift $ Data.Vector.imapM_ (\i e -> poke (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e)) ((viewports))
-        pure $ pPViewports
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Viewport))) pViewports''
-    let pScissorsLength = Data.Vector.length $ (scissors)
-    scissorCount'' <- lift $ if (scissorCount) == 0
-      then pure $ fromIntegral pScissorsLength
-      else do
-        unless (fromIntegral pScissorsLength == (scissorCount) || pScissorsLength == 0) $
-          throwIO $ IOError Nothing InvalidArgument "" "pScissors must be empty or have 'scissorCount' elements" Nothing Nothing
-        pure (scissorCount)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (scissorCount'')
-    pScissors'' <- if Data.Vector.null (scissors)
-      then pure nullPtr
-      else do
-        pPScissors <- ContT $ allocaBytes @Rect2D (((Data.Vector.length (scissors))) * 16)
-        lift $ Data.Vector.imapM_ (\i e -> poke (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e)) ((scissors))
-        pure $ pPScissors
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) pScissors''
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ f
-
-instance (Extendss PipelineViewportStateCreateInfo es, PeekChain es) => FromCStruct (PipelineViewportStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineViewportStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags))
-    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pViewports <- peek @(Ptr Viewport) ((p `plusPtr` 24 :: Ptr (Ptr Viewport)))
-    let pViewportsLength = if pViewports == nullPtr then 0 else (fromIntegral viewportCount)
-    pViewports' <- generateM pViewportsLength (\i -> peekCStruct @Viewport ((pViewports `advancePtrBytes` (24 * (i)) :: Ptr Viewport)))
-    scissorCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pScissors <- peek @(Ptr Rect2D) ((p `plusPtr` 40 :: Ptr (Ptr Rect2D)))
-    let pScissorsLength = if pScissors == nullPtr then 0 else (fromIntegral scissorCount)
-    pScissors' <- generateM pScissorsLength (\i -> peekCStruct @Rect2D ((pScissors `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
-    pure $ PipelineViewportStateCreateInfo
-             next flags viewportCount pViewports' scissorCount pScissors'
-
-instance es ~ '[] => Zero (PipelineViewportStateCreateInfo es) where
-  zero = PipelineViewportStateCreateInfo
-           ()
-           zero
-           zero
-           mempty
-           zero
-           mempty
-
-
--- | VkPipelineRasterizationStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline rasterization state
---
--- = Description
---
--- The application /can/ also add a
--- 'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD'
--- structure to the @pNext@ chain of a
--- 'PipelineRasterizationStateCreateInfo' structure. This structure enables
--- selecting the rasterization order to use when rendering with the
--- corresponding graphics pipeline as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-order Rasterization Order>.
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-depthClamp depth clamping>
---     feature is not enabled, @depthClampEnable@ /must/ be
---     'Vulkan.Core10.FundamentalTypes.FALSE'
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507# If
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-fillModeNonSolid non-solid fill modes>
---     feature is not enabled, @polygonMode@ /must/ be
---     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL' or
---     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01414# If
---     the @VK_NV_fill_rectangle@ extension is not enabled, @polygonMode@
---     /must/ not be
---     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-pointPolygons-04458# If
---     the @VK_KHR_portability_subset@ extension is enabled, and
---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@pointPolygons@
---     is 'Vulkan.Core10.FundamentalTypes.FALSE', and
---     @rasterizerDiscardEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE',
---     @polygonMode@ /must/ not be
---     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_POINT'
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-sType-sType# @sType@
---     /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO'
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-pNext-pNext# Each
---     @pNext@ member of any structure (including this one) in the @pNext@
---     chain /must/ be either @NULL@ or a pointer to a valid instance of
---     'Vulkan.Extensions.VK_EXT_conservative_rasterization.PipelineRasterizationConservativeStateCreateInfoEXT',
---     'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',
---     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',
---     'Vulkan.Extensions.VK_EXT_provoking_vertex.PipelineRasterizationProvokingVertexStateCreateInfoEXT',
---     'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD',
---     or
---     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-sType-unique# The
---     @sType@ value of each struct in the @pNext@ chain /must/ be unique
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-flags-zerobitmask#
---     @flags@ /must/ be @0@
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-parameter#
---     @polygonMode@ /must/ be a valid
---     'Vulkan.Core10.Enums.PolygonMode.PolygonMode' value
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-cullMode-parameter#
---     @cullMode@ /must/ be a valid combination of
---     'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits' values
---
--- -   #VUID-VkPipelineRasterizationStateCreateInfo-frontFace-parameter#
---     @frontFace@ /must/ be a valid
---     'Vulkan.Core10.Enums.FrontFace.FrontFace' value
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.FundamentalTypes.Bool32',
--- 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlags',
--- 'Vulkan.Core10.Enums.FrontFace.FrontFace', 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags.PipelineRasterizationStateCreateFlags',
--- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode',
--- 'Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineRasterizationStateCreateInfo (es :: [Type]) = PipelineRasterizationStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineRasterizationStateCreateFlags
-  , -- | @depthClampEnable@ controls whether to clamp the fragment’s depth values
-    -- as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-depth Depth Test>.
-    -- If the pipeline is not created with
-    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'
-    -- present then enabling depth clamp will also disable clipping primitives
-    -- to the z planes of the frustrum as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>.
-    -- Otherwise depth clipping is controlled by the state set in
-    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'.
-    depthClampEnable :: Bool
-  , -- | @rasterizerDiscardEnable@ controls whether primitives are discarded
-    -- immediately before the rasterization stage.
-    rasterizerDiscardEnable :: Bool
-  , -- | @polygonMode@ is the triangle rendering mode. See
-    -- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode'.
-    polygonMode :: PolygonMode
-  , -- | @cullMode@ is the triangle facing direction used for primitive culling.
-    -- See 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits'.
-    cullMode :: CullModeFlags
-  , -- | @frontFace@ is a 'Vulkan.Core10.Enums.FrontFace.FrontFace' value
-    -- specifying the front-facing triangle orientation to be used for culling.
-    frontFace :: FrontFace
-  , -- | @depthBiasEnable@ controls whether to bias fragment depth values.
-    depthBiasEnable :: Bool
-  , -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant
-    -- depth value added to each fragment.
-    depthBiasConstantFactor :: Float
-  , -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.
-    depthBiasClamp :: Float
-  , -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope
-    -- in depth bias calculations.
-    depthBiasSlopeFactor :: Float
-  , -- | @lineWidth@ is the width of rasterized line segments.
-    lineWidth :: Float
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineRasterizationStateCreateInfo (es :: [Type]))
-#endif
-deriving instance Show (Chain es) => Show (PipelineRasterizationStateCreateInfo es)
-
-instance Extensible PipelineRasterizationStateCreateInfo where
-  extensibleTypeName = "PipelineRasterizationStateCreateInfo"
-  setNext PipelineRasterizationStateCreateInfo{..} next' = PipelineRasterizationStateCreateInfo{next = next', ..}
-  getNext PipelineRasterizationStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineRasterizationStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineRasterizationProvokingVertexStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRasterizationLineStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRasterizationDepthClipStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRasterizationStateStreamCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRasterizationConservativeStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRasterizationStateRasterizationOrderAMD = Just f
-    | otherwise = Nothing
-
-instance (Extendss PipelineRasterizationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineRasterizationStateCreateInfo es) where
-  withCStruct x f = allocaBytes 64 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineRasterizationStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthClampEnable))
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rasterizerDiscardEnable))
-    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (polygonMode)
-    lift $ poke ((p `plusPtr` 32 :: Ptr CullModeFlags)) (cullMode)
-    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (frontFace)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (depthBiasEnable))
-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (depthBiasConstantFactor))
-    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (depthBiasClamp))
-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (depthBiasSlopeFactor))
-    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (lineWidth))
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))
-    lift $ f
-
-instance (Extendss PipelineRasterizationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineRasterizationStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineRasterizationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags))
-    depthClampEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    rasterizerDiscardEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    polygonMode <- peek @PolygonMode ((p `plusPtr` 28 :: Ptr PolygonMode))
-    cullMode <- peek @CullModeFlags ((p `plusPtr` 32 :: Ptr CullModeFlags))
-    frontFace <- peek @FrontFace ((p `plusPtr` 36 :: Ptr FrontFace))
-    depthBiasEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    depthBiasConstantFactor <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))
-    depthBiasClamp <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))
-    depthBiasSlopeFactor <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
-    lineWidth <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))
-    pure $ PipelineRasterizationStateCreateInfo
-             next flags (bool32ToBool depthClampEnable) (bool32ToBool rasterizerDiscardEnable) polygonMode cullMode frontFace (bool32ToBool depthBiasEnable) (coerce @CFloat @Float depthBiasConstantFactor) (coerce @CFloat @Float depthBiasClamp) (coerce @CFloat @Float depthBiasSlopeFactor) (coerce @CFloat @Float lineWidth)
-
-instance es ~ '[] => Zero (PipelineRasterizationStateCreateInfo es) where
-  zero = PipelineRasterizationStateCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineMultisampleStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline multisample state
---
--- = Description
---
--- Each bit in the sample mask is associated with a unique
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask sample index>
--- as defined for the
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask coverage mask>.
--- Each bit b for mask word w in the sample mask corresponds to sample
--- index i, where i = 32 × w + b. @pSampleMask@ has a length equal to ⌈
--- @rasterizationSamples@ \/ 32 ⌉ words.
---
--- If @pSampleMask@ is @NULL@, it is treated as if the mask has all bits
--- set to @1@.
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-sampleRateShading sample rate shading>
---     feature is not enabled, @sampleShadingEnable@ /must/ be
---     'Vulkan.Core10.FundamentalTypes.FALSE'
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-alphaToOne alpha to one>
---     feature is not enabled, @alphaToOneEnable@ /must/ be
---     'Vulkan.Core10.FundamentalTypes.FALSE'
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786#
---     @minSampleShading@ /must/ be in the range [0,1]
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415#
---     If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
---     if the subpass has any color attachments and @rasterizationSamples@
---     is greater than the number of color samples, then
---     @sampleShadingEnable@ /must/ be
---     'Vulkan.Core10.FundamentalTypes.FALSE'
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-sType-sType# @sType@
---     /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO'
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-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_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',
---     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV',
---     'Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',
---     or
---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-sType-unique# The @sType@
---     value of each struct in the @pNext@ chain /must/ be unique
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-flags-zerobitmask#
---     @flags@ /must/ be @0@
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-parameter#
---     @rasterizationSamples@ /must/ be a valid
---     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
---
--- -   #VUID-VkPipelineMultisampleStateCreateInfo-pSampleMask-parameter# If
---     @pSampleMask@ is not @NULL@, @pSampleMask@ /must/ be a valid pointer
---     to an array of
---     \(\lceil{\mathit{rasterizationSamples} \over 32}\rceil\)
---     'Vulkan.Core10.FundamentalTypes.SampleMask' values
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags.PipelineMultisampleStateCreateFlags',
--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
--- 'Vulkan.Core10.FundamentalTypes.SampleMask',
--- 'Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineMultisampleStateCreateInfo (es :: [Type]) = PipelineMultisampleStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineMultisampleStateCreateFlags
-  , -- | @rasterizationSamples@ is a
-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
-    -- specifying the number of samples used in rasterization.
-    rasterizationSamples :: SampleCountFlagBits
-  , -- | @sampleShadingEnable@ /can/ be used to enable
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>.
-    sampleShadingEnable :: Bool
-  , -- | @minSampleShading@ specifies a minimum fraction of sample shading if
-    -- @sampleShadingEnable@ is set to 'Vulkan.Core10.FundamentalTypes.TRUE'.
-    minSampleShading :: Float
-  , -- | @pSampleMask@ is a pointer to an array of
-    -- 'Vulkan.Core10.FundamentalTypes.SampleMask' values used in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-samplemask sample mask test>.
-    sampleMask :: Vector SampleMask
-  , -- | @alphaToCoverageEnable@ controls whether a temporary coverage value is
-    -- generated based on the alpha component of the fragment’s first color
-    -- output as specified in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-covg Multisample Coverage>
-    -- section.
-    alphaToCoverageEnable :: Bool
-  , -- | @alphaToOneEnable@ controls whether the alpha component of the
-    -- fragment’s first color output is replaced with one as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-covg Multisample Coverage>.
-    alphaToOneEnable :: Bool
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineMultisampleStateCreateInfo (es :: [Type]))
-#endif
-deriving instance Show (Chain es) => Show (PipelineMultisampleStateCreateInfo es)
-
-instance Extensible PipelineMultisampleStateCreateInfo where
-  extensibleTypeName = "PipelineMultisampleStateCreateInfo"
-  setNext PipelineMultisampleStateCreateInfo{..} next' = PipelineMultisampleStateCreateInfo{next = next', ..}
-  getNext PipelineMultisampleStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineMultisampleStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineCoverageReductionStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineCoverageModulationStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineSampleLocationsStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineCoverageToColorStateCreateInfoNV = Just f
-    | otherwise = Nothing
-
-instance (Extendss PipelineMultisampleStateCreateInfo es, PokeChain es) => ToCStruct (PipelineMultisampleStateCreateInfo es) where
-  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineMultisampleStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (rasterizationSamples)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleShadingEnable))
-    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (minSampleShading))
-    pSampleMask'' <- case Data.Vector.length (sampleMask) of
-      0      -> pure nullPtr
-      vecLen -> do
-        let requiredLen = case (rasterizationSamples) of
-              SampleCountFlagBits n -> (n + 31) `quot` 32
-        lift $ unless (requiredLen == fromIntegral vecLen) $
-          throwIO $ IOError Nothing InvalidArgument "" "sampleMask must be either empty or contain enough bits to cover all the sample specified by 'rasterizationSamples'" Nothing Nothing
-        do
-          pPSampleMask' <- ContT $ allocaBytes @SampleMask ((Data.Vector.length ((sampleMask))) * 4)
-          lift $ Data.Vector.imapM_ (\i e -> poke (pPSampleMask' `plusPtr` (4 * (i)) :: Ptr SampleMask) (e)) ((sampleMask))
-          pure $ pPSampleMask'
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleMask))) pSampleMask''
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (alphaToCoverageEnable))
-    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (alphaToOneEnable))
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance (Extendss PipelineMultisampleStateCreateInfo es, PeekChain es) => FromCStruct (PipelineMultisampleStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineMultisampleStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags))
-    rasterizationSamples <- peek @SampleCountFlagBits ((p `plusPtr` 20 :: Ptr SampleCountFlagBits))
-    sampleShadingEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    minSampleShading <- peek @CFloat ((p `plusPtr` 28 :: Ptr CFloat))
-    pSampleMask <- peek @(Ptr SampleMask) ((p `plusPtr` 32 :: Ptr (Ptr SampleMask)))
-    pSampleMask' <- if pSampleMask == nullPtr
-      then pure mempty
-      else generateM (case rasterizationSamples of
-        SampleCountFlagBits n -> (fromIntegral n + 31) `quot` 32) (\i -> peek @SampleMask (((pSampleMask) `advancePtrBytes` (4 * (i)) :: Ptr SampleMask)))
-    alphaToCoverageEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    alphaToOneEnable <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    pure $ PipelineMultisampleStateCreateInfo
-             next flags rasterizationSamples (bool32ToBool sampleShadingEnable) (coerce @CFloat @Float minSampleShading) pSampleMask' (bool32ToBool alphaToCoverageEnable) (bool32ToBool alphaToOneEnable)
-
-instance es ~ '[] => Zero (PipelineMultisampleStateCreateInfo es) where
-  zero = PipelineMultisampleStateCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           mempty
-           zero
-           zero
-
-
--- | VkPipelineColorBlendAttachmentState - Structure specifying a pipeline
--- color blend attachment state
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
---     feature is not enabled, @srcColorBlendFactor@ /must/ not be
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-00609#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
---     feature is not enabled, @dstColorBlendFactor@ /must/ not be
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-00610#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
---     feature is not enabled, @srcAlphaBlendFactor@ /must/ not be
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-00611#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
---     feature is not enabled, @dstAlphaBlendFactor@ /must/ not be
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01406# If
---     either of @colorBlendOp@ or @alphaBlendOp@ is an
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
---     then @colorBlendOp@ /must/ equal @alphaBlendOp@
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01407#
---     If
---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
---     is 'Vulkan.Core10.FundamentalTypes.FALSE' and @colorBlendOp@ is an
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
---     then @colorBlendOp@ /must/ be the same for all attachments
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01408#
---     If
---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
---     is 'Vulkan.Core10.FundamentalTypes.FALSE' and @alphaBlendOp@ is an
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
---     then @alphaBlendOp@ /must/ be the same for all attachments
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-advancedBlendAllOperations-01409#
---     If
---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendAllOperations@
---     is 'Vulkan.Core10.FundamentalTypes.FALSE', then @colorBlendOp@
---     /must/ not be 'Vulkan.Core10.Enums.BlendOp.BLEND_OP_ZERO_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OVER_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OVER_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_IN_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_IN_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OUT_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OUT_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_ATOP_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_ATOP_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_XOR_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_RGB_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARDODGE_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARBURN_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_VIVIDLIGHT_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARLIGHT_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PINLIGHT_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_HARDMIX_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_ALPHA_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_DARKER_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_CLAMPED_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_CONTRAST_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_OVG_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_RED_EXT',
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_GREEN_EXT', or
---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_BLUE_EXT'
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01410# If
---     @colorBlendOp@ or @alphaBlendOp@ is an
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
---     then @colorAttachmentCount@ of the subpass this pipeline is compiled
---     against /must/ be less than or equal to
---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendMaxColorAttachments@
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04454#
---     If the @VK_KHR_portability_subset@ extension is enabled, and
---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@
---     is 'Vulkan.Core10.FundamentalTypes.FALSE', @srcColorBlendFactor@
---     /must/ not be
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04455#
---     If the @VK_KHR_portability_subset@ extension is enabled, and
---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@
---     is 'Vulkan.Core10.FundamentalTypes.FALSE', @dstColorBlendFactor@
---     /must/ not be
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or
---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-parameter#
---     @srcColorBlendFactor@ /must/ be a valid
---     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-parameter#
---     @dstColorBlendFactor@ /must/ be a valid
---     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-parameter#
---     @colorBlendOp@ /must/ be a valid
---     'Vulkan.Core10.Enums.BlendOp.BlendOp' value
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-parameter#
---     @srcAlphaBlendFactor@ /must/ be a valid
---     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-parameter#
---     @dstAlphaBlendFactor@ /must/ be a valid
---     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-alphaBlendOp-parameter#
---     @alphaBlendOp@ /must/ be a valid
---     'Vulkan.Core10.Enums.BlendOp.BlendOp' value
---
--- -   #VUID-VkPipelineColorBlendAttachmentState-colorWriteMask-parameter#
---     @colorWriteMask@ /must/ be a valid combination of
---     'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'
---     values
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.Enums.BlendFactor.BlendFactor',
--- 'Vulkan.Core10.Enums.BlendOp.BlendOp',
--- 'Vulkan.Core10.FundamentalTypes.Bool32',
--- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags',
--- 'PipelineColorBlendStateCreateInfo'
-data PipelineColorBlendAttachmentState = PipelineColorBlendAttachmentState
-  { -- | @blendEnable@ controls whether blending is enabled for the corresponding
-    -- color attachment. If blending is not enabled, the source fragment’s
-    -- color for that attachment is passed through unmodified.
-    blendEnable :: Bool
-  , -- | @srcColorBlendFactor@ selects which blend factor is used to determine
-    -- the source factors (Sr,Sg,Sb).
-    srcColorBlendFactor :: BlendFactor
-  , -- | @dstColorBlendFactor@ selects which blend factor is used to determine
-    -- the destination factors (Dr,Dg,Db).
-    dstColorBlendFactor :: BlendFactor
-  , -- | @colorBlendOp@ selects which blend operation is used to calculate the
-    -- RGB values to write to the color attachment.
-    colorBlendOp :: BlendOp
-  , -- | @srcAlphaBlendFactor@ selects which blend factor is used to determine
-    -- the source factor Sa.
-    srcAlphaBlendFactor :: BlendFactor
-  , -- | @dstAlphaBlendFactor@ selects which blend factor is used to determine
-    -- the destination factor Da.
-    dstAlphaBlendFactor :: BlendFactor
-  , -- | @alphaBlendOp@ selects which blend operation is use to calculate the
-    -- alpha values to write to the color attachment.
-    alphaBlendOp :: BlendOp
-  , -- | @colorWriteMask@ is a bitmask of
-    -- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'
-    -- specifying which of the R, G, B, and\/or A components are enabled for
-    -- writing, as described for the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-color-write-mask Color Write Mask>.
-    colorWriteMask :: ColorComponentFlags
-  }
-  deriving (Typeable, Eq)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineColorBlendAttachmentState)
-#endif
-deriving instance Show PipelineColorBlendAttachmentState
-
-instance ToCStruct PipelineColorBlendAttachmentState where
-  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineColorBlendAttachmentState{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (blendEnable))
-    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (srcColorBlendFactor)
-    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (dstColorBlendFactor)
-    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (colorBlendOp)
-    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (srcAlphaBlendFactor)
-    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (dstAlphaBlendFactor)
-    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (alphaBlendOp)
-    poke ((p `plusPtr` 28 :: Ptr ColorComponentFlags)) (colorWriteMask)
-    f
-  cStructSize = 32
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (zero)
-    f
-
-instance FromCStruct PipelineColorBlendAttachmentState where
-  peekCStruct p = do
-    blendEnable <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))
-    srcColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 4 :: Ptr BlendFactor))
-    dstColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 8 :: Ptr BlendFactor))
-    colorBlendOp <- peek @BlendOp ((p `plusPtr` 12 :: Ptr BlendOp))
-    srcAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 16 :: Ptr BlendFactor))
-    dstAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 20 :: Ptr BlendFactor))
-    alphaBlendOp <- peek @BlendOp ((p `plusPtr` 24 :: Ptr BlendOp))
-    colorWriteMask <- peek @ColorComponentFlags ((p `plusPtr` 28 :: Ptr ColorComponentFlags))
-    pure $ PipelineColorBlendAttachmentState
-             (bool32ToBool blendEnable) srcColorBlendFactor dstColorBlendFactor colorBlendOp srcAlphaBlendFactor dstAlphaBlendFactor alphaBlendOp colorWriteMask
-
-instance Storable PipelineColorBlendAttachmentState where
-  sizeOf ~_ = 32
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineColorBlendAttachmentState where
-  zero = PipelineColorBlendAttachmentState
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineColorBlendStateCreateInfo - Structure specifying parameters of
--- a newly created pipeline color blend state
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-independentBlend independent blending>
---     feature is not enabled, all elements of @pAttachments@ /must/ be
---     identical
---
--- -   #VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606# If
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-logicOp logic operations>
---     feature is not enabled, @logicOpEnable@ /must/ be
---     'Vulkan.Core10.FundamentalTypes.FALSE'
---
--- -   #VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00607# If
---     @logicOpEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', @logicOp@
---     /must/ be a valid 'Vulkan.Core10.Enums.LogicOp.LogicOp' value
---
--- -   #VUID-VkPipelineColorBlendStateCreateInfo-rasterizationOrderColorAttachmentAccess-06465#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-rasterizationOrderColorAttachmentAccess rasterizationOrderColorAttachmentAccess>
---     feature is not enabled, @flags@ /must/ not include
---     'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM'
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineColorBlendStateCreateInfo-sType-sType# @sType@
---     /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO'
---
--- -   #VUID-VkPipelineColorBlendStateCreateInfo-pNext-pNext# Each @pNext@
---     member of any structure (including this one) in the @pNext@ chain
---     /must/ be either @NULL@ or a pointer to a valid instance of
---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT'
---     or
---     'Vulkan.Extensions.VK_EXT_color_write_enable.PipelineColorWriteCreateInfoEXT'
---
--- -   #VUID-VkPipelineColorBlendStateCreateInfo-sType-unique# The @sType@
---     value of each struct in the @pNext@ chain /must/ be unique
---
--- -   #VUID-VkPipelineColorBlendStateCreateInfo-flags-parameter# @flags@
---     /must/ be a valid combination of
---     'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PipelineColorBlendStateCreateFlagBits'
---     values
---
--- -   #VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-parameter# If
---     @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
---     pointer to an array of @attachmentCount@ valid
---     'PipelineColorBlendAttachmentState' structures
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Core10.Enums.LogicOp.LogicOp',
--- 'PipelineColorBlendAttachmentState',
--- 'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PipelineColorBlendStateCreateFlags',
--- 'Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineColorBlendStateCreateInfo (es :: [Type]) = PipelineColorBlendStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PipelineColorBlendStateCreateFlagBits'
-    -- specifying additional color blending information.
-    flags :: PipelineColorBlendStateCreateFlags
-  , -- | @logicOpEnable@ controls whether to apply
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-logicop Logical Operations>.
-    logicOpEnable :: Bool
-  , -- | @logicOp@ selects which logical operation to apply.
-    logicOp :: LogicOp
-  , -- | @pAttachments@ is a pointer to an array of
-    -- 'PipelineColorBlendAttachmentState' structures defining blend state for
-    -- each color attachment.
-    attachments :: Vector PipelineColorBlendAttachmentState
-  , -- | @blendConstants@ is a pointer to an array of four values used as the R,
-    -- G, B, and A components of the blend constant that are used in blending,
-    -- depending on the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.
-    blendConstants :: (Float, Float, Float, Float)
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineColorBlendStateCreateInfo (es :: [Type]))
-#endif
-deriving instance Show (Chain es) => Show (PipelineColorBlendStateCreateInfo es)
-
-instance Extensible PipelineColorBlendStateCreateInfo where
-  extensibleTypeName = "PipelineColorBlendStateCreateInfo"
-  setNext PipelineColorBlendStateCreateInfo{..} next' = PipelineColorBlendStateCreateInfo{next = next', ..}
-  getNext PipelineColorBlendStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineColorBlendStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineColorWriteCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineColorBlendAdvancedStateCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance (Extendss PipelineColorBlendStateCreateInfo es, PokeChain es) => ToCStruct (PipelineColorBlendStateCreateInfo es) where
-  withCStruct x f = allocaBytes 56 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineColorBlendStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (logicOpEnable))
-    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (logicOp)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
-    pPAttachments' <- ContT $ allocaBytes @PipelineColorBlendAttachmentState ((Data.Vector.length (attachments)) * 32)
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e)) (attachments)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')
-    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
-    lift $ case (blendConstants) of
-      (e0, e1, e2, e3) -> do
-        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
-        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
-        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (zero)
-    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
-    lift $ case ((zero, zero, zero, zero)) of
-      (e0, e1, e2, e3) -> do
-        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
-        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
-        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-    lift $ f
-
-instance (Extendss PipelineColorBlendStateCreateInfo es, PeekChain es) => FromCStruct (PipelineColorBlendStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineColorBlendStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags))
-    logicOpEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    logicOp <- peek @LogicOp ((p `plusPtr` 24 :: Ptr LogicOp))
-    attachmentCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pAttachments <- peek @(Ptr PipelineColorBlendAttachmentState) ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState)))
-    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekCStruct @PipelineColorBlendAttachmentState ((pAttachments `advancePtrBytes` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState)))
-    let pblendConstants = lowerArrayPtr @CFloat ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
-    blendConstants0 <- peek @CFloat ((pblendConstants `advancePtrBytes` 0 :: Ptr CFloat))
-    blendConstants1 <- peek @CFloat ((pblendConstants `advancePtrBytes` 4 :: Ptr CFloat))
-    blendConstants2 <- peek @CFloat ((pblendConstants `advancePtrBytes` 8 :: Ptr CFloat))
-    blendConstants3 <- peek @CFloat ((pblendConstants `advancePtrBytes` 12 :: Ptr CFloat))
-    pure $ PipelineColorBlendStateCreateInfo
-             next flags (bool32ToBool logicOpEnable) logicOp pAttachments' (((coerce @CFloat @Float blendConstants0), (coerce @CFloat @Float blendConstants1), (coerce @CFloat @Float blendConstants2), (coerce @CFloat @Float blendConstants3)))
-
-instance es ~ '[] => Zero (PipelineColorBlendStateCreateInfo es) where
-  zero = PipelineColorBlendStateCreateInfo
-           ()
-           zero
-           zero
-           zero
-           mempty
-           (zero, zero, zero, zero)
-
-
--- | VkPipelineDynamicStateCreateInfo - Structure specifying parameters of a
--- newly created pipeline dynamic state
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442# Each
---     element of @pDynamicStates@ /must/ be unique
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineDynamicStateCreateInfo-sType-sType# @sType@ /must/
---     be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO'
---
--- -   #VUID-VkPipelineDynamicStateCreateInfo-pNext-pNext# @pNext@ /must/
---     be @NULL@
---
--- -   #VUID-VkPipelineDynamicStateCreateInfo-flags-zerobitmask# @flags@
---     /must/ be @0@
---
--- -   #VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-parameter# If
---     @dynamicStateCount@ is not @0@, @pDynamicStates@ /must/ be a valid
---     pointer to an array of @dynamicStateCount@ valid
---     'Vulkan.Core10.Enums.DynamicState.DynamicState' values
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.Enums.DynamicState.DynamicState',
--- 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags.PipelineDynamicStateCreateFlags',
--- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
--- 'Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineDynamicStateCreateInfo = PipelineDynamicStateCreateInfo
-  { -- | @flags@ is reserved for future use.
-    flags :: PipelineDynamicStateCreateFlags
-  , -- | @pDynamicStates@ is a pointer to an array of
-    -- 'Vulkan.Core10.Enums.DynamicState.DynamicState' values specifying which
-    -- pieces of pipeline state will use the values from dynamic state commands
-    -- rather than from pipeline state creation information.
-    dynamicStates :: Vector DynamicState
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineDynamicStateCreateInfo)
-#endif
-deriving instance Show PipelineDynamicStateCreateInfo
-
-instance ToCStruct PipelineDynamicStateCreateInfo where
-  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineDynamicStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dynamicStates)) :: Word32))
-    pPDynamicStates' <- ContT $ allocaBytes @DynamicState ((Data.Vector.length (dynamicStates)) * 4)
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (dynamicStates)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct PipelineDynamicStateCreateInfo where
-  peekCStruct p = do
-    flags <- peek @PipelineDynamicStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags))
-    dynamicStateCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pDynamicStates <- peek @(Ptr DynamicState) ((p `plusPtr` 24 :: Ptr (Ptr DynamicState)))
-    pDynamicStates' <- generateM (fromIntegral dynamicStateCount) (\i -> peek @DynamicState ((pDynamicStates `advancePtrBytes` (4 * (i)) :: Ptr DynamicState)))
-    pure $ PipelineDynamicStateCreateInfo
-             flags pDynamicStates'
-
-instance Zero PipelineDynamicStateCreateInfo where
-  zero = PipelineDynamicStateCreateInfo
-           zero
-           mempty
-
-
--- | VkStencilOpState - Structure specifying stencil operation state
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.Enums.CompareOp.CompareOp',
--- 'PipelineDepthStencilStateCreateInfo',
--- 'Vulkan.Core10.Enums.StencilOp.StencilOp'
-data StencilOpState = StencilOpState
-  { -- | @failOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value specifying
-    -- the action performed on samples that fail the stencil test.
-    --
-    -- #VUID-VkStencilOpState-failOp-parameter# @failOp@ /must/ be a valid
-    -- 'Vulkan.Core10.Enums.StencilOp.StencilOp' value
-    failOp :: StencilOp
-  , -- | @passOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value specifying
-    -- the action performed on samples that pass both the depth and stencil
-    -- tests.
-    --
-    -- #VUID-VkStencilOpState-passOp-parameter# @passOp@ /must/ be a valid
-    -- 'Vulkan.Core10.Enums.StencilOp.StencilOp' value
-    passOp :: StencilOp
-  , -- | @depthFailOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value
-    -- specifying the action performed on samples that pass the stencil test
-    -- and fail the depth test.
-    --
-    -- #VUID-VkStencilOpState-depthFailOp-parameter# @depthFailOp@ /must/ be a
-    -- valid 'Vulkan.Core10.Enums.StencilOp.StencilOp' value
-    depthFailOp :: StencilOp
-  , -- | @compareOp@ is a 'Vulkan.Core10.Enums.CompareOp.CompareOp' value
-    -- specifying the comparison operator used in the stencil test.
-    --
-    -- #VUID-VkStencilOpState-compareOp-parameter# @compareOp@ /must/ be a
-    -- valid 'Vulkan.Core10.Enums.CompareOp.CompareOp' value
-    compareOp :: CompareOp
-  , -- | @compareMask@ selects the bits of the unsigned integer stencil values
-    -- participating in the stencil test.
-    compareMask :: Word32
-  , -- | @writeMask@ selects the bits of the unsigned integer stencil values
-    -- updated by the stencil test in the stencil framebuffer attachment.
-    writeMask :: Word32
-  , -- | @reference@ is an integer reference value that is used in the unsigned
-    -- stencil comparison.
-    reference :: Word32
-  }
-  deriving (Typeable, Eq)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (StencilOpState)
-#endif
-deriving instance Show StencilOpState
-
-instance ToCStruct StencilOpState where
-  withCStruct x f = allocaBytes 28 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p StencilOpState{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (failOp)
-    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (passOp)
-    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (depthFailOp)
-    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (compareOp)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (compareMask)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (writeMask)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (reference)
-    f
-  cStructSize = 28
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct StencilOpState where
-  peekCStruct p = do
-    failOp <- peek @StencilOp ((p `plusPtr` 0 :: Ptr StencilOp))
-    passOp <- peek @StencilOp ((p `plusPtr` 4 :: Ptr StencilOp))
-    depthFailOp <- peek @StencilOp ((p `plusPtr` 8 :: Ptr StencilOp))
-    compareOp <- peek @CompareOp ((p `plusPtr` 12 :: Ptr CompareOp))
-    compareMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    writeMask <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    reference <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ StencilOpState
-             failOp passOp depthFailOp compareOp compareMask writeMask reference
-
-instance Storable StencilOpState where
-  sizeOf ~_ = 28
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero StencilOpState where
-  zero = StencilOpState
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineDepthStencilStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline depth stencil state
---
--- == Valid Usage
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-depthBounds depth bounds testing>
---     feature is not enabled, @depthBoundsTestEnable@ /must/ be
---     'Vulkan.Core10.FundamentalTypes.FALSE'
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-separateStencilMaskRef-04453#
---     If the @VK_KHR_portability_subset@ extension is enabled, and
---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@separateStencilMaskRef@
---     is 'Vulkan.Core10.FundamentalTypes.FALSE', and the value of
---     'PipelineDepthStencilStateCreateInfo'::@stencilTestEnable@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE', and the value of
---     'PipelineRasterizationStateCreateInfo'::@cullMode@ is
---     'Vulkan.Core10.Enums.CullModeFlagBits.CULL_MODE_NONE', the value of
---     @reference@ in each of the 'StencilOpState' structs in @front@ and
---     @back@ /must/ be the same
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-rasterizationOrderDepthAttachmentAccess-06463#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-rasterizationOrderDepthAttachmentAccess rasterizationOrderDepthAttachmentAccess>
---     feature is not enabled, @flags@ /must/ not include
---     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM'
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-rasterizationOrderStencilAttachmentAccess-06464#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-rasterizationOrderStencilAttachmentAccess rasterizationOrderStencilAttachmentAccess>
---     feature is not enabled, @flags@ /must/ not include
---     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM'
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-sType-sType# @sType@
---     /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO'
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-pNext-pNext# @pNext@
---     /must/ be @NULL@
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-flags-parameter# @flags@
---     /must/ be a valid combination of
---     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PipelineDepthStencilStateCreateFlagBits'
---     values
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-depthCompareOp-parameter#
---     @depthCompareOp@ /must/ be a valid
---     'Vulkan.Core10.Enums.CompareOp.CompareOp' value
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-front-parameter# @front@
---     /must/ be a valid 'StencilOpState' structure
---
--- -   #VUID-VkPipelineDepthStencilStateCreateInfo-back-parameter# @back@
---     /must/ be a valid 'StencilOpState' structure
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.FundamentalTypes.Bool32',
--- 'Vulkan.Core10.Enums.CompareOp.CompareOp', 'GraphicsPipelineCreateInfo',
--- 'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PipelineDepthStencilStateCreateFlags',
--- 'StencilOpState', 'Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineDepthStencilStateCreateInfo = PipelineDepthStencilStateCreateInfo
-  { -- | @flags@ is a bitmask of
-    -- 'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PipelineDepthStencilStateCreateFlagBits'
-    -- specifying additional depth\/stencil state information.
-    flags :: PipelineDepthStencilStateCreateFlags
-  , -- | @depthTestEnable@ controls whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-depth depth testing>
-    -- is enabled.
-    depthTestEnable :: Bool
-  , -- | @depthWriteEnable@ controls whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-depth-write depth writes>
-    -- are enabled when @depthTestEnable@ is
-    -- 'Vulkan.Core10.FundamentalTypes.TRUE'. Depth writes are always disabled
-    -- when @depthTestEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE'.
-    depthWriteEnable :: Bool
-  , -- | @depthCompareOp@ is the comparison operator used in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-depth depth test>.
-    depthCompareOp :: CompareOp
-  , -- | @depthBoundsTestEnable@ controls whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-dbt depth bounds testing>
-    -- is enabled.
-    depthBoundsTestEnable :: Bool
-  , -- | @stencilTestEnable@ controls whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-stencil stencil testing>
-    -- is enabled.
-    stencilTestEnable :: Bool
-  , -- | @front@ and @back@ control the parameters of the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-stencil stencil test>.
-    front :: StencilOpState
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "back"
-    back :: StencilOpState
-  , -- | @minDepthBounds@ is the minimum depth bound used in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-dbt depth bounds test>.
-    minDepthBounds :: Float
-  , -- | @maxDepthBounds@ is the maximum depth bound used in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-dbt depth bounds test>.
-    maxDepthBounds :: Float
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (PipelineDepthStencilStateCreateInfo)
-#endif
-deriving instance Show PipelineDepthStencilStateCreateInfo
-
-instance ToCStruct PipelineDepthStencilStateCreateInfo where
-  withCStruct x f = allocaBytes 104 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineDepthStencilStateCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthTestEnable))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (depthWriteEnable))
-    poke ((p `plusPtr` 28 :: Ptr CompareOp)) (depthCompareOp)
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (depthBoundsTestEnable))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (stencilTestEnable))
-    poke ((p `plusPtr` 40 :: Ptr StencilOpState)) (front)
-    poke ((p `plusPtr` 68 :: Ptr StencilOpState)) (back)
-    poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (minDepthBounds))
-    poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (maxDepthBounds))
-    f
-  cStructSize = 104
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr CompareOp)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 40 :: Ptr StencilOpState)) (zero)
-    poke ((p `plusPtr` 68 :: Ptr StencilOpState)) (zero)
-    poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (zero))
-    f
-
-instance FromCStruct PipelineDepthStencilStateCreateInfo where
-  peekCStruct p = do
-    flags <- peek @PipelineDepthStencilStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags))
-    depthTestEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    depthWriteEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    depthCompareOp <- peek @CompareOp ((p `plusPtr` 28 :: Ptr CompareOp))
-    depthBoundsTestEnable <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    stencilTestEnable <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    front <- peekCStruct @StencilOpState ((p `plusPtr` 40 :: Ptr StencilOpState))
-    back <- peekCStruct @StencilOpState ((p `plusPtr` 68 :: Ptr StencilOpState))
-    minDepthBounds <- peek @CFloat ((p `plusPtr` 96 :: Ptr CFloat))
-    maxDepthBounds <- peek @CFloat ((p `plusPtr` 100 :: Ptr CFloat))
-    pure $ PipelineDepthStencilStateCreateInfo
-             flags (bool32ToBool depthTestEnable) (bool32ToBool depthWriteEnable) depthCompareOp (bool32ToBool depthBoundsTestEnable) (bool32ToBool stencilTestEnable) front back (coerce @CFloat @Float minDepthBounds) (coerce @CFloat @Float maxDepthBounds)
-
-instance Storable PipelineDepthStencilStateCreateInfo where
-  sizeOf ~_ = 104
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineDepthStencilStateCreateInfo where
-  zero = PipelineDepthStencilStateCreateInfo
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkGraphicsPipelineCreateInfo - Structure specifying parameters of a
--- newly created graphics pipeline
---
--- = Description
---
--- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
--- described in more detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
---
--- If any shader stage fails to compile, the compile log will be reported
--- back to the application, and
--- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV' will be generated.
---
--- The state required for a graphics pipeline is divided into
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-vertex-input vertex input state>,
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output state>.
---
--- Vertex input state is defined by:
---
--- -   'PipelineVertexInputStateCreateInfo'
---
--- -   'PipelineInputAssemblyStateCreateInfo'
---
--- Pre-rasterization shader state is defined by:
---
--- -   'PipelineShaderStageCreateInfo' entries for:
---
---     -   Vertex shaders
---
---     -   Tessellation control shaders
---
---     -   Tessellation evaluation shaders
---
---     -   Geometry shaders
---
---     -   Task shaders
---
---     -   Mesh shaders
---
--- -   Within the 'Vulkan.Core10.Handles.PipelineLayout', all bindings that
---     affect the specified shader stages
---
--- -   'PipelineViewportStateCreateInfo'
---
--- -   'PipelineRasterizationStateCreateInfo'
---
--- -   'PipelineTessellationStateCreateInfo' if tessellation stages are
---     included.
---
--- -   'Vulkan.Core10.Handles.RenderPass' and @subpass@ parameter
---
--- -   'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'
---
--- -   'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'
---
--- -   'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'
---
--- Fragment shader state is defined by:
---
--- -   A 'PipelineShaderStageCreateInfo' entry for the fragment shader
---
--- -   Within the 'Vulkan.Core10.Handles.PipelineLayout', all bindings that
---     affect the fragment shader
---
--- -   'PipelineMultisampleStateCreateInfo'
---
--- -   'PipelineDepthStencilStateCreateInfo'
---
--- -   'Vulkan.Core10.Handles.RenderPass' and @subpass@ parameter
---
--- -   'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'
---
--- -   'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'
---
--- Fragment output state is defined by:
---
--- -   'PipelineColorBlendStateCreateInfo'
---
--- -   The @alphaToCoverageEnable@ and @alphaToOneEnable@ members of
---     'PipelineMultisampleStateCreateInfo'.
---
--- -   'Vulkan.Core10.Handles.RenderPass' and @subpass@ parameter
---
--- A complete graphics pipeline always includes
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
--- with other subsets included depending on that state. If the
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
--- includes a vertex shader, then
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-vertex-input vertex input state>
--- is included in a complete graphics pipeline. If the value of
--- 'PipelineRasterizationStateCreateInfo'::@rasterizerDiscardEnable@ in the
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
--- is 'Vulkan.Core10.FundamentalTypes.FALSE' or the
--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE'
--- dynamic state is enabled
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
--- is included in a complete graphics pipeline.
---
--- Pipelines /must/ be created with a complete set of pipeline state.
---
--- == Valid Usage
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00722# If @flags@ contains
---     the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be
---     a valid handle to a graphics 'Vulkan.Core10.Handles.Pipeline'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00723# If @flags@ contains
---     the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is
---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
---     be a valid index into the calling command’s @pCreateInfos@ parameter
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00724# If @flags@ contains
---     the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/
---     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00725# If @flags@ contains
---     the
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is not
---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
---     be -1
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-stage-00726# The @stage@ member
---     of each element of @pStages@ /must/ be unique
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02095# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     the geometric shader stages provided in @pStages@ /must/ be either
---     from the mesh shading pipeline (@stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'
---     or
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV')
---     or from the primitive shading pipeline (@stage@ is
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
---     or
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT')
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-stage-02096# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     the @stage@ member of one element of @pStages@ /must/ be either
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT' or
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-stage-00728# The @stage@ member
---     of each element of @pStages@ /must/ not be
---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00729# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes a tessellation control shader stage, it
---     /must/ include a tessellation evaluation shader stage
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00730# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes a tessellation evaluation shader stage, it
---     /must/ include a tessellation control shader stage
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00731# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes a tessellation control shader stage and a
---     tessellation evaluation shader stage, @pTessellationState@ /must/ be
---     a valid pointer to a valid 'PipelineTessellationStateCreateInfo'
---     structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00732# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes tessellation shader stages, the shader code
---     of at least one stage /must/ contain an @OpExecutionMode@
---     instruction specifying the type of subdivision in the pipeline
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00733# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes tessellation shader stages, and the shader
---     code of both stages contain an @OpExecutionMode@ instruction
---     specifying the type of subdivision in the pipeline, they /must/ both
---     specify the same subdivision mode
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00734# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes tessellation shader stages, the shader code
---     of at least one stage /must/ contain an @OpExecutionMode@
---     instruction specifying the output patch size in the pipeline
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00735# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes tessellation shader stages, and the shader
---     code of both contain an @OpExecutionMode@ instruction specifying the
---     out patch size in the pipeline, they /must/ both specify the same
---     patch size
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00736# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes tessellation shader stages, the @topology@
---     member of @pInputAssembly@ /must/ be
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-topology-00737# If the pipeline
---     is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and the @topology@ member of @pInputAssembly@ is
---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',
---     @pStages@ /must/ include tessellation shader stages
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00738# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes a geometry shader stage, and does not include
---     any tessellation shader stages, its shader code /must/ contain an
---     @OpExecutionMode@ instruction specifying an input primitive type
---     that is
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#shaders-geometry-execution compatible>
---     with the primitive topology specified in @pInputAssembly@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00739# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @pStages@ includes a geometry shader stage, and also includes
---     tessellation shader stages, its shader code /must/ contain an
---     @OpExecutionMode@ instruction specifying an input primitive type
---     that is
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#shaders-geometry-execution compatible>
---     with the primitive topology that is output by the tessellation
---     stages
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00740# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     it includes both a fragment shader and a geometry shader, and the
---     fragment shader code reads from an input variable that is decorated
---     with @PrimitiveId@, then the geometry shader code /must/ write to a
---     matching output variable, decorated with @PrimitiveId@, in all
---     execution paths
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-PrimitiveId-06264# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     it includes a mesh shader and the fragment shader code reads from an
---     input variable that is decorated with @PrimitiveId@, then the mesh
---     shader code /must/ write to a matching output variable, decorated
---     with @PrimitiveId@, in all execution paths
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06038# If @renderPass@
---     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     the fragment shader /must/ not read from any input attachment that
---     is defined as 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' in
---     @subpass@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00742# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and multiple pre-rasterization shader stages are included in
---     @pStages@, the shader code for the entry points identified by those
---     @pStages@ and the rest of the state identified by this structure
---     /must/ adhere to the pipeline linking rules described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces Shader Interfaces>
---     chapter
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-None-04889# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     the fragment shader and last
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>
---     and any relevant state /must/ adhere to the pipeline linking rules
---     described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces Shader Interfaces>
---     chapter
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06039# If @renderPass@
---     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and @subpass@ uses a depth\/stencil attachment in @renderPass@ with
---     a read-only layout for the depth aspect in the
---     'Vulkan.Core10.Pass.AttachmentReference' defined by @subpass@, the
---     @depthWriteEnable@ member of @pDepthStencilState@ /must/ be
---     'Vulkan.Core10.FundamentalTypes.FALSE'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06040# If @renderPass@
---     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and @subpass@ uses a depth\/stencil attachment in @renderPass@ with
---     a read-only layout for the stencil aspect in the
---     'Vulkan.Core10.Pass.AttachmentReference' defined by @subpass@, the
---     @failOp@, @passOp@ and @depthFailOp@ members of each of the @front@
---     and @back@ members of @pDepthStencilState@ /must/ be
---     'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06041# If @renderPass@
---     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
---     then for each color attachment in the subpass, if the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential format features>
---     of the format of the corresponding attachment description 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-VkGraphicsPipelineCreateInfo-renderPass-06042# If @renderPass@
---     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
---     and the subpass uses color attachments, the @attachmentCount@ member
---     of @pColorBlendState@ /must/ be equal to the @colorAttachmentCount@
---     used to create @subpass@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04130# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' or
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT',
---     the @pViewports@ member of @pViewportState@ /must/ be a valid
---     pointer to an array of @pViewportState->viewportCount@ valid
---     'Viewport' structures
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04131# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' or
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT',
---     the @pScissors@ member of @pViewportState@ /must/ be a valid pointer
---     to an array of @pViewportState->scissorCount@
---     'Vulkan.Core10.FundamentalTypes.Rect2D' structures
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and the wide lines feature is not enabled, and no element of the
---     @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH', the
---     @lineWidth@ member of @pRasterizationState@ /must/ be @1.0@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750# If
---     the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
---     'Vulkan.Core10.FundamentalTypes.FALSE', @pViewportState@ /must/ be a
---     valid pointer to a valid 'PipelineViewportStateCreateInfo' structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pViewportState-04892# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and the graphics pipeline state was created with the
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE'
---     dynamic state enabled, @pViewportState@ /must/ be a valid pointer to
---     a valid 'PipelineViewportStateCreateInfo' structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751# If
---     the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     @pMultisampleState@ /must/ be a valid pointer to a valid
---     'PipelineMultisampleStateCreateInfo' structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06043# If @renderPass@
---     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and @subpass@ uses a depth\/stencil attachment, @pDepthStencilState@
---     /must/ be a valid pointer to a valid
---     'PipelineDepthStencilStateCreateInfo' structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06044# If @renderPass@
---     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
---     and @subpass@ uses color attachments, @pColorBlendState@ /must/ be a
---     valid pointer to a valid 'PipelineColorBlendStateCreateInfo'
---     structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     the depth bias clamping feature is not enabled, no element of the
---     @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS', and the
---     @depthBiasEnable@ member of @pRasterizationState@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE', the @depthBiasClamp@ member
---     of @pRasterizationState@ /must/ be @0.0@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-02510# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and the @VK_EXT_depth_range_unrestricted@ extension is not enabled
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS', and
---     the @depthBoundsTestEnable@ member of @pDepthStencilState@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE', the @minDepthBounds@ and
---     @maxDepthBounds@ members of @pDepthStencilState@ /must/ be between
---     @0.0@ and @1.0@, inclusive
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01521# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
---     and the @sampleLocationsEnable@ member of a
---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pMultisampleState@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE',
---     @sampleLocationsInfo.sampleLocationGridSize.width@ /must/ evenly
---     divide
---     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.width@
---     as returned by
---     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
---     with a @samples@ parameter equaling @rasterizationSamples@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01522# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
---     and the @sampleLocationsEnable@ member of a
---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pMultisampleState@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE',
---     @sampleLocationsInfo.sampleLocationGridSize.height@ /must/ evenly
---     divide
---     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.height@
---     as returned by
---     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
---     with a @samples@ parameter equaling @rasterizationSamples@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01523# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
---     and the @sampleLocationsEnable@ member of a
---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pMultisampleState@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE',
---     @sampleLocationsInfo.sampleLocationsPerPixel@ /must/ equal
---     @rasterizationSamples@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524# If
---     the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and the @sampleLocationsEnable@ member of a
---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pMultisampleState@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE', the fragment shader code
---     /must/ not statically use the extended instruction
---     @InterpolateAtSample@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-layout-00756# @layout@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
---     with all shaders specified in @pStages@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-00757# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and neither the @VK_AMD_mixed_attachment_samples@ nor the
---     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if
---     @subpass@ uses color and\/or depth\/stencil attachments, then the
---     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the
---     same as the sample count for those subpass attachments
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01505# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and the @VK_AMD_mixed_attachment_samples@ extension is enabled, and
---     if @subpass@ uses color and\/or depth\/stencil attachments, then the
---     @rasterizationSamples@ member of @pMultisampleState@ /must/ equal
---     the maximum of the sample counts of those subpass attachments
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01411# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
---     if @subpass@ has a depth\/stencil attachment and depth test, stencil
---     test, or depth bounds test are enabled, then the
---     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the
---     same as the sample count of the depth\/stencil attachment
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01412# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
---     if @subpass@ has any color attachments, then the
---     @rasterizationSamples@ member of @pMultisampleState@ /must/ be
---     greater than or equal to the sample count for those subpass
---     attachments
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-coverageReductionMode-02722# If
---     the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and the @VK_NV_coverage_reduction_mode@ extension is enabled, the
---     coverage reduction mode specified by
---     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV'::@coverageReductionMode@,
---     the @rasterizationSamples@ member of @pMultisampleState@ and the
---     sample counts for the color and depth\/stencil attachments (if the
---     subpass has them) /must/ be a valid combination returned by
---     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-00758# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and @subpass@ does not use any color and\/or depth\/stencil
---     attachments, then the @rasterizationSamples@ member of
---     @pMultisampleState@ /must/ follow the rules for a
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#renderpass-noattachments zero-attachment subpass>
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06046# If @renderPass@
---     is a valid renderPass, @subpass@ /must/ be a valid subpass within
---     @renderPass@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06047# If @renderPass@
---     is a valid renderPass, the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and the @renderPass@ has multiview enabled and @subpass@ has more
---     than one bit set in the view mask and @multiviewTessellationShader@
---     is not enabled, then @pStages@ /must/ not include tessellation
---     shaders
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06048# If @renderPass@
---     is a valid renderPass, the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and the @renderPass@ has multiview enabled and @subpass@ has more
---     than one bit set in the view mask and @multiviewGeometryShader@ is
---     not enabled, then @pStages@ /must/ not include a geometry shader
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06049# If @renderPass@
---     is a valid renderPass, the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and the @renderPass@ has multiview enabled and @subpass@ has more
---     than one bit set in the view mask, shaders in the pipeline /must/
---     not write to the @Layer@ built-in output
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06050# If @renderPass@
---     is a valid renderPass and the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and the @renderPass@ has multiview enabled, then all shaders /must/
---     not include variables decorated with the @Layer@ built-in decoration
---     in their interfaces
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00764# @flags@ /must/ not
---     contain the
---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.PIPELINE_CREATE_DISPATCH_BASE'
---     flag
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-01565# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and an input attachment was referenced by an @aspectMask@ at
---     @renderPass@ creation time, the fragment shader /must/ only read
---     from the aspects that were specified for that input attachment
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-layout-01688# The number of
---     resources in @layout@ accessible to each shader stage that is used
---     by the pipeline /must/ be less than or equal to
---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV',
---     and the @viewportWScalingEnable@ member of a
---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---     structure, included in the @pNext@ chain of @pViewportState@, is
---     'Vulkan.Core10.FundamentalTypes.TRUE', the @pViewportWScalings@
---     member of the
---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---     /must/ be a pointer to an array of
---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@
---     valid
---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.ViewportWScalingNV'
---     structures
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04056# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV',
---     and if @pViewportState->pNext@ chain includes a
---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'
---     structure, and if its @exclusiveScissorCount@ member is not @0@,
---     then its @pExclusiveScissors@ member /must/ be a valid pointer to an
---     array of @exclusiveScissorCount@
---     'Vulkan.Core10.FundamentalTypes.Rect2D' structures
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04057# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV',
---     and if @pViewportState->pNext@ chain includes a
---     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'
---     structure, then its @pShadingRatePalettes@ member /must/ be a valid
---     pointer to an array of @viewportCount@ valid
---     'Vulkan.Extensions.VK_NV_shading_rate_image.ShadingRatePaletteNV'
---     structures
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04058# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DISCARD_RECTANGLE_EXT',
---     and if @pNext@ chain includes a
---     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'
---     structure, and if its @discardRectangleCount@ member is not @0@,
---     then its @pDiscardRectangles@ member /must/ be a valid pointer to an
---     array of @discardRectangleCount@
---     'Vulkan.Core10.FundamentalTypes.Rect2D' structures
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02098# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-vertex-input vertex input state>,
---     @pInputAssemblyState@ /must/ be a valid pointer to a valid
---     'PipelineInputAssemblyStateCreateInfo' structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02317# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     the @Xfb@ execution mode /can/ be specified by no more than one
---     shader stage in @pStages@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02318# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and any shader stage in @pStages@ specifies @Xfb@ execution mode it
---     /must/ be the last
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02319# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and a
---     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@
---     value other than zero is specified, all variables in the output
---     interface of the entry point being compiled decorated with
---     @Position@, @PointSize@, @ClipDistance@, or @CullDistance@ /must/ be
---     decorated with identical @Stream@ values that match the
---     @rasterizationStream@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02320# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and
---     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@
---     is zero, or not specified, all variables in the output interface of
---     the entry point being compiled decorated with @Position@,
---     @PointSize@, @ClipDistance@, or @CullDistance@ /must/ be decorated
---     with a @Stream@ value of zero, or /must/ not specify the @Stream@
---     decoration
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-geometryStreams-02321# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and the last
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>
---     is a geometry shader, and that geometry shader uses the
---     @GeometryStreams@ capability, then
---     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT'::@geometryStreams@
---     feature /must/ be enabled
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-None-02322# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and there are any mesh shader stages in the pipeline there /must/
---     not be any shader stage in the pipeline with a @Xfb@ execution mode
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766# If
---     the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and at least one of
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     the @lineRasterizationMode@ member of a
---     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pRasterizationState@ is
---     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_BRESENHAM_EXT'
---     or
---     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT',
---     then the @alphaToCoverageEnable@, @alphaToOneEnable@, and
---     @sampleShadingEnable@ members of @pMultisampleState@ /must/ all be
---     'Vulkan.Core10.FundamentalTypes.FALSE'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-stippledLineEnable-02767# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     the @stippledLineEnable@ member of
---     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
---     is 'Vulkan.Core10.FundamentalTypes.TRUE', and no element of the
---     @pDynamicStates@ member of @pDynamicState@ is
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_EXT',
---     then the @lineStippleFactor@ member of
---     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
---     /must/ be in the range [1,256]
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03371# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03372# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03373# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03374# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03375# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03376# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03377# @flags@ /must/ not
---     include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
---
--- -   #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.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature is not enabled, there /must/ be no element of the
---     @pDynamicStates@ member of @pDynamicState@ set to
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_CULL_MODE',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRONT_FACE',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_TEST_ENABLE',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_WRITE_ENABLE',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_COMPARE_OP',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_TEST_ENABLE',
---     or 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_OP'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03379# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
---     is included in the @pDynamicStates@ array then @viewportCount@
---     /must/ be zero
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03380# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
---     is included in the @pDynamicStates@ array then @scissorCount@ /must/
---     be zero
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
---     is included in the @pDynamicStates@ array then
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' /must/ not
---     be present
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
---     is included in the @pDynamicStates@ array then
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' /must/ not
---     be present
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04868# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState2 extendedDynamicState2>
---     feature is not enabled, there /must/ be no element of the
---     @pDynamicStates@ member of @pDynamicState@ set to
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE',
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE',
---     or
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04869# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState2LogicOp extendedDynamicState2LogicOp>
---     feature is not enabled, there /must/ be no element of the
---     @pDynamicStates@ member of @pDynamicState@ set to
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04870# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState2PatchControlPoints extendedDynamicState2PatchControlPoints>
---     feature is not enabled, there /must/ be no element of the
---     @pDynamicStates@ member of @pDynamicState@ set to
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-02877# If @flags@ includes
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',
---     then the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
---     feature /must/ be enabled
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-02966# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and @flags@ includes
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',
---     then all stages /must/ not specify @Xfb@ execution mode
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pipelineCreationCacheControl-02878#
---     If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
---     feature is not enabled, @flags@ /must/ not include
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'
---     or
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04494# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@,
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.width@
---     /must/ be greater than or equal to @1@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04495# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@,
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.height@
---     /must/ be greater than or equal to @1@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04496# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@,
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.width@
---     /must/ be a power-of-two value
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04497# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@,
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.height@
---     /must/ be a power-of-two value
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04498# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@,
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.width@
---     /must/ be less than or equal to @4@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04499# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@,
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.height@
---     /must/ be less than or equal to @4@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04500# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate feature>
---     is not enabled,
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.width@
---     and
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.height@
---     /must/ both be equal to @1@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04501# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate feature>
---     is not enabled,
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[0]
---     /must/ be
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04502# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate feature>
---     is not enabled,
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[1]
---     /must/ be
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04503#
---     If the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
---     limit is not supported,
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
---     is not included in @pDynamicState->pDynamicStates@, and
---     'PipelineViewportStateCreateInfo'::@viewportCount@ is greater than
---     @1@, entry points specified in @pStages@ /must/ not write to the
---     @PrimitiveShadingRateKHR@ built-in
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04504#
---     If the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
---     limit is not supported, and entry points specified in @pStages@
---     write to the @ViewportIndex@ built-in, they /must/ not also write to
---     the @PrimitiveShadingRateKHR@ built-in
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04505#
---     If the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
---     limit is not supported, and entry points specified in @pStages@
---     write to the @ViewportMaskNV@ built-in, they /must/ not also write
---     to the @PrimitiveShadingRateKHR@ built-in
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04506#
---     If the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentShadingRateNonTrivialCombinerOps>
---     limit is not supported, and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@, elements of
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@
---     /must/ be
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
---     or
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04569# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-fragmentShadingRateEnums fragmentShadingRateEnums feature>
---     is not enabled,
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRateType@
---     /must/ be equal to
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04570# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate feature>
---     is not enabled,
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRate@
---     /must/ be equal to
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04571# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate feature>
---     is not enabled,
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@[0]
---     /must/ be
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04572# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate feature>
---     is not enabled,
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@[1]
---     /must/ be
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04573#
---     If the pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentShadingRateNonTrivialCombinerOps>
---     limit is not supported and
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
---     is not included in @pDynamicState->pDynamicStates@, elements of
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@
---     /must/ be
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
---     or
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-None-04574# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-supersampleFragmentShadingRates supersampleFragmentShadingRates feature>
---     is not enabled,
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRate@
---     /must/ not be equal to
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV',
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV',
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV',
---     or
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-None-04575# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-noInvocationFragmentShadingRates noInvocationFragmentShadingRates feature>
---     is not enabled,
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRate@
---     /must/ not be equal to
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03578# All
---     elements of the @pDynamicStates@ member of @pDynamicState@ /must/
---     not be
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04807# If the
---     pipeline is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-vertexInputDynamicState vertexInputDynamicState>
---     feature is not enabled, there /must/ be no element of the
---     @pDynamicStates@ member of @pDynamicState@ set to
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-None-04893# The pipeline /must/
---     be created with a
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-complete complete set of state>
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04800# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-colorWriteEnable colorWriteEnable>
---     feature is not enabled, there /must/ be no element of the
---     @pDynamicStates@ member of @pDynamicState@ set to
---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizationSamples-04899# If
---     the pipeline is being created with fragment shader state, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_QCOM_render_pass_shader_resolve VK_QCOM_render_pass_shader_resolve>
---     extension is enabled, and if subpass has any input attachments, and
---     if the subpass description contains
---     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM',
---     then the sample count of the input attachments /must/ equal
---     @rasterizationSamples@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-sampleShadingEnable-04900# If the
---     pipeline is being created with fragment shader state, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_QCOM_render_pass_shader_resolve VK_QCOM_render_pass_shader_resolve>
---     extension is enabled, and if the subpass description contains
---     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM',
---     then @sampleShadingEnable@ /must/ be false
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-04901# If @flags@ includes
---     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
---     then the subpass /must/ be the last subpass in a subpass dependency
---     chain
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-04902# If @flags@ includes
---     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
---     and if @pResolveAttachments@ is not @NULL@, then each resolve
---     attachment /must/ be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06052# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dynamicRendering dynamicRendering>
---     feature is not enabled, @renderPass@ /must/ not be
---     'Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06053# If @renderPass@
---     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
---     created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
---     and either of
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::depthAttachmentFormat
---     or
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::stencilAttachmentFormat
---     are not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED',
---     @pDepthStencilState@ /must/ be a valid pointer to a valid
---     'PipelineDepthStencilStateCreateInfo' structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06054# If @renderPass@
---     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
---     created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
---     and
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::colorAttachmentCount
---     is not equal to @0@, @pColorBlendState@ /must/ be a valid pointer to
---     a valid 'PipelineColorBlendStateCreateInfo' structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06055# If @renderPass@
---     is 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
---     @pColorBlendState->attachmentCount@ /must/ be equal to
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::colorAttachmentCount
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06056# If @renderPass@
---     is 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     the fragment shader /must/ not read from any input attachment
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06057# If @renderPass@
---     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
---     created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     the @viewMask@ member of a
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
---     structure included in the @pNext@ chain is not @0@, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiview-tess multiviewTessellationShader>
---     feature is not enabled, then @pStages@ /must/ not include
---     tessellation shaders
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06058# If @renderPass@
---     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
---     created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     the @viewMask@ member of a
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
---     structure included in the @pNext@ chain is not @0@, and the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiview-gs multiviewGeometryShader>
---     feature is not enabled, then @pStages@ /must/ not include a geometry
---     shader
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06059# If @renderPass@
---     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
---     created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
---     and the @viewMask@ member of a
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
---     structure included in the @pNext@ chain is not @0@, shaders in
---     @pStages@ /must/ not include variables decorated with the @Layer@
---     built-in decoration in their interfaces
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06060# If the pipeline
---     is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
---     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @pColorBlendState->attachmentCount@ /must/ be equal to the
---     @colorAttachmentCount@ member of the
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
---     structure included in the @pNext@ chain
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06061# If the pipeline
---     is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
---     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
---     fragment shaders in @pStages@ /must/ not include the
---     @InputAttachment@ capability
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06062# If the pipeline
---     is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
---     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', for
---     each color attachment format defined by the
---     @pColorAttachmentFormats@ member of
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo',
---     if its
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential 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-VkGraphicsPipelineCreateInfo-renderPass-06063# If the pipeline
---     is being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
---     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', if the
---     @pNext@ chain includes
---     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
---     or
---     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV',
---     the @colorAttachmentCount@ member of that structure /must/ be equal
---     to the value of
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@colorAttachmentCount@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-06466# If @pStages@
---     includes a fragment shader stage, and the fragment shader code
---     enables
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#shaders-fragment-earlytest early fragment tests>,
---     the @flags@ member of 'PipelineDepthStencilStateCreateInfo' /must/
---     not include
---     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM'
---     or
---     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06482# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
---     and the @flags@ member of 'PipelineColorBlendStateCreateInfo'
---     includes
---     'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM',
---     @renderpass@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06483# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
---     and the @flags@ member of 'PipelineDepthStencilStateCreateInfo'
---     includes
---     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM'
---     or
---     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM',
---     @renderpass@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06484# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
---     and the @flags@ member of 'PipelineColorBlendStateCreateInfo'
---     includes
---     'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM'
---     @subpass@ /must/ have been created with
---     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06485# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
---     and the @flags@ member of 'PipelineDepthStencilStateCreateInfo'
---     includes
---     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM',
---     @subpass@ /must/ have been created with
---     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06486# If the pipeline is
---     being created with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
---     and the @flags@ member of 'PipelineDepthStencilStateCreateInfo'
---     includes
---     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM',
---     @subpass@ /must/ have been created with
---     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM'
---
--- == Valid Usage (Implicit)
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-sType-sType# @sType@ /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-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_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD',
---     'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
---     'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX',
---     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD',
---     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo',
---     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',
---     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV',
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR',
---     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo',
---     or
---     'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV'
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-sType-unique# The @sType@ value
---     of each struct in the @pNext@ chain /must/ be unique
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-flags-parameter# @flags@ /must/
---     be a valid combination of
---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
---     values
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-parameter# @pStages@
---     /must/ be a valid pointer to an array of @stageCount@ valid
---     'PipelineShaderStageCreateInfo' structures
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-parameter#
---     @pRasterizationState@ /must/ be a valid pointer to a valid
---     'PipelineRasterizationStateCreateInfo' structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-parameter# If
---     @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid
---     pointer to a valid 'PipelineDynamicStateCreateInfo' structure
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-layout-parameter# @layout@ /must/
---     be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-parameter# If
---     @renderPass@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'
---     handle
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-stageCount-arraylength#
---     @stageCount@ /must/ be greater than @0@
---
--- -   #VUID-VkGraphicsPipelineCreateInfo-commonparent# Each of
---     @basePipelineHandle@, @layout@, and @renderPass@ that are valid
---     handles of non-ignored parameters /must/ have been created,
---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
--- 'Vulkan.Core10.Handles.Pipeline', 'PipelineColorBlendStateCreateInfo',
--- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
--- 'PipelineDepthStencilStateCreateInfo', 'PipelineDynamicStateCreateInfo',
--- 'PipelineInputAssemblyStateCreateInfo',
--- 'Vulkan.Core10.Handles.PipelineLayout',
--- 'PipelineMultisampleStateCreateInfo',
--- 'PipelineRasterizationStateCreateInfo', 'PipelineShaderStageCreateInfo',
--- 'PipelineTessellationStateCreateInfo',
--- 'PipelineVertexInputStateCreateInfo', 'PipelineViewportStateCreateInfo',
--- 'Vulkan.Core10.Handles.RenderPass',
--- 'Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createGraphicsPipelines'
-data GraphicsPipelineCreateInfo (es :: [Type]) = GraphicsPipelineCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
-    -- specifying how the pipeline will be generated.
-    flags :: PipelineCreateFlags
-  , -- | @pStages@ is a pointer to an array of @stageCount@
-    -- 'PipelineShaderStageCreateInfo' structures describing the set of the
-    -- shader stages to be included in the graphics pipeline.
-    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
-  , -- | @pVertexInputState@ is a pointer to a
-    -- 'PipelineVertexInputStateCreateInfo' structure. It is ignored if the
-    -- pipeline includes a mesh shader stage. It is ignored if the pipeline is
-    -- created with the
-    -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
-    -- dynamic state set.
-    vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
-  , -- | @pInputAssemblyState@ is a pointer to a
-    -- 'PipelineInputAssemblyStateCreateInfo' structure which determines input
-    -- assembly behavior, as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#drawing Drawing Commands>.
-    -- It is ignored if the pipeline includes a mesh shader stage.
-    inputAssemblyState :: Maybe PipelineInputAssemblyStateCreateInfo
-  , -- | @pTessellationState@ is a pointer to a
-    -- 'PipelineTessellationStateCreateInfo' structure, and is ignored if the
-    -- pipeline does not include a tessellation control shader stage and
-    -- tessellation evaluation shader stage.
-    tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)
-  , -- | @pViewportState@ is a pointer to a 'PipelineViewportStateCreateInfo'
-    -- structure, and is ignored if the pipeline has rasterization disabled.
-    viewportState :: Maybe (SomeStruct PipelineViewportStateCreateInfo)
-  , -- | @pRasterizationState@ is a pointer to a
-    -- 'PipelineRasterizationStateCreateInfo' structure.
-    rasterizationState :: SomeStruct PipelineRasterizationStateCreateInfo
-  , -- | @pMultisampleState@ is a pointer to a
-    -- 'PipelineMultisampleStateCreateInfo' structure, and is ignored if the
-    -- pipeline has rasterization disabled.
-    multisampleState :: Maybe (SomeStruct PipelineMultisampleStateCreateInfo)
-  , -- | @pDepthStencilState@ is a pointer to a
-    -- 'PipelineDepthStencilStateCreateInfo' structure, and is ignored if the
-    -- pipeline has rasterization disabled or if no depth\/stencil attachment
-    -- is used.
-    depthStencilState :: Maybe PipelineDepthStencilStateCreateInfo
-  , -- | @pColorBlendState@ is a pointer to a 'PipelineColorBlendStateCreateInfo'
-    -- structure, and is ignored if the pipeline has rasterization disabled or
-    -- if no color attachments are used.
-    colorBlendState :: Maybe (SomeStruct PipelineColorBlendStateCreateInfo)
-  , -- | @pDynamicState@ is a pointer to a 'PipelineDynamicStateCreateInfo'
-    -- structure, and is used to indicate which properties of the pipeline
-    -- state object are dynamic and /can/ be changed independently of the
-    -- pipeline state. This /can/ be @NULL@, which means no state in the
-    -- pipeline is considered dynamic.
-    dynamicState :: Maybe PipelineDynamicStateCreateInfo
-  , -- | @layout@ is the description of binding locations used by both the
-    -- pipeline and descriptor sets used with the pipeline.
-    layout :: PipelineLayout
-  , -- | @renderPass@ is a handle to a render pass object describing the
-    -- environment in which the pipeline will be used. The pipeline /must/ only
-    -- be used with a render pass instance compatible with the one provided.
-    -- See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility>
-    -- for more information.
-    renderPass :: RenderPass
-  , -- | @subpass@ is the index of the subpass in the render pass where this
-    -- pipeline will be used.
-    subpass :: Word32
-  , -- | @basePipelineHandle@ is a pipeline to derive from.
-    basePipelineHandle :: Pipeline
-  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
-    -- as a pipeline to derive from.
-    basePipelineIndex :: Int32
-  }
-  deriving (Typeable)
-#if defined(GENERIC_INSTANCES)
-deriving instance Generic (GraphicsPipelineCreateInfo (es :: [Type]))
-#endif
-deriving instance Show (Chain es) => Show (GraphicsPipelineCreateInfo es)
-
-instance Extensible GraphicsPipelineCreateInfo where
-  extensibleTypeName = "GraphicsPipelineCreateInfo"
-  setNext GraphicsPipelineCreateInfo{..} next' = GraphicsPipelineCreateInfo{next = next', ..}
-  getNext GraphicsPipelineCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends GraphicsPipelineCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @MultiviewPerViewAttributesInfoNVX = Just f
-    | Just Refl <- eqT @e @AttachmentSampleCountInfoAMD = Just f
-    | Just Refl <- eqT @e @PipelineRenderingCreateInfo = Just f
-    | Just Refl <- eqT @e @PipelineFragmentShadingRateEnumStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineFragmentShadingRateStateCreateInfoKHR = Just f
-    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f
-    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfo = Just f
-    | Just Refl <- eqT @e @PipelineRepresentativeFragmentTestStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineDiscardRectangleStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @GraphicsPipelineShaderGroupsCreateInfoNV = Just f
-    | otherwise = Nothing
-
-instance (Extendss GraphicsPipelineCreateInfo es, PokeChain es) => ToCStruct (GraphicsPipelineCreateInfo es) where
-  withCStruct x f = allocaBytes 144 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GraphicsPipelineCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))
-    pPStages' <- ContT $ allocaBytes @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48)
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
-    pVertexInputState'' <- case (vertexInputState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineVertexInputStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineVertexInputStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _)))) pVertexInputState''
-    pInputAssemblyState'' <- case (inputAssemblyState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr PipelineInputAssemblyStateCreateInfo))) pInputAssemblyState''
-    pTessellationState'' <- case (tessellationState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineTessellationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineTessellationStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _)))) pTessellationState''
-    pViewportState'' <- case (viewportState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineViewportStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineViewportStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (PipelineViewportStateCreateInfo _)))) pViewportState''
-    pRasterizationState'' <- ContT @_ @_ @(Ptr (PipelineRasterizationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineRasterizationStateCreateInfo (rasterizationState) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _)))) pRasterizationState''
-    pMultisampleState'' <- case (multisampleState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineMultisampleStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineMultisampleStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr (PipelineMultisampleStateCreateInfo _)))) pMultisampleState''
-    pDepthStencilState'' <- case (depthStencilState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr PipelineDepthStencilStateCreateInfo))) pDepthStencilState''
-    pColorBlendState'' <- case (colorBlendState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineColorBlendStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineColorBlendStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr (PipelineColorBlendStateCreateInfo _)))) pColorBlendState''
-    pDynamicState'' <- case (dynamicState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 96 :: Ptr (Ptr PipelineDynamicStateCreateInfo))) pDynamicState''
-    lift $ poke ((p `plusPtr` 104 :: Ptr PipelineLayout)) (layout)
-    lift $ poke ((p `plusPtr` 112 :: Ptr RenderPass)) (renderPass)
-    lift $ poke ((p `plusPtr` 120 :: Ptr Word32)) (subpass)
-    lift $ poke ((p `plusPtr` 128 :: Ptr Pipeline)) (basePipelineHandle)
-    lift $ poke ((p `plusPtr` 136 :: Ptr Int32)) (basePipelineIndex)
-    lift $ f
-  cStructSize = 144
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pRasterizationState'' <- ContT @_ @_ @(Ptr (PipelineRasterizationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineRasterizationStateCreateInfo ((SomeStruct zero)) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _)))) pRasterizationState''
-    lift $ poke ((p `plusPtr` 104 :: Ptr PipelineLayout)) (zero)
-    lift $ poke ((p `plusPtr` 120 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 136 :: Ptr Int32)) (zero)
-    lift $ f
-
-instance (Extendss GraphicsPipelineCreateInfo es, PeekChain es) => FromCStruct (GraphicsPipelineCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
-    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _))))
-    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
-    pVertexInputState <- peek @(Ptr (PipelineVertexInputStateCreateInfo _)) ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _))))
-    pVertexInputState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pVertexInputState
-    pInputAssemblyState <- peek @(Ptr PipelineInputAssemblyStateCreateInfo) ((p `plusPtr` 40 :: Ptr (Ptr PipelineInputAssemblyStateCreateInfo)))
-    pInputAssemblyState' <- maybePeek (\j -> peekCStruct @PipelineInputAssemblyStateCreateInfo (j)) pInputAssemblyState
-    pTessellationState <- peek @(Ptr (PipelineTessellationStateCreateInfo _)) ((p `plusPtr` 48 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _))))
-    pTessellationState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pTessellationState
-    pViewportState <- peek @(Ptr (PipelineViewportStateCreateInfo _)) ((p `plusPtr` 56 :: Ptr (Ptr (PipelineViewportStateCreateInfo _))))
-    pViewportState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pViewportState
-    pRasterizationState <- peekSomeCStruct . forgetExtensions =<< peek ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _))))
-    pMultisampleState <- peek @(Ptr (PipelineMultisampleStateCreateInfo _)) ((p `plusPtr` 72 :: Ptr (Ptr (PipelineMultisampleStateCreateInfo _))))
-    pMultisampleState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pMultisampleState
-    pDepthStencilState <- peek @(Ptr PipelineDepthStencilStateCreateInfo) ((p `plusPtr` 80 :: Ptr (Ptr PipelineDepthStencilStateCreateInfo)))
-    pDepthStencilState' <- maybePeek (\j -> peekCStruct @PipelineDepthStencilStateCreateInfo (j)) pDepthStencilState
-    pColorBlendState <- peek @(Ptr (PipelineColorBlendStateCreateInfo _)) ((p `plusPtr` 88 :: Ptr (Ptr (PipelineColorBlendStateCreateInfo _))))
-    pColorBlendState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pColorBlendState
-    pDynamicState <- peek @(Ptr PipelineDynamicStateCreateInfo) ((p `plusPtr` 96 :: Ptr (Ptr PipelineDynamicStateCreateInfo)))
-    pDynamicState' <- maybePeek (\j -> peekCStruct @PipelineDynamicStateCreateInfo (j)) pDynamicState
-    layout <- peek @PipelineLayout ((p `plusPtr` 104 :: Ptr PipelineLayout))
-    renderPass <- peek @RenderPass ((p `plusPtr` 112 :: Ptr RenderPass))
-    subpass <- peek @Word32 ((p `plusPtr` 120 :: Ptr Word32))
-    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 128 :: Ptr Pipeline))
-    basePipelineIndex <- peek @Int32 ((p `plusPtr` 136 :: Ptr Int32))
-    pure $ GraphicsPipelineCreateInfo
-             next flags pStages' pVertexInputState' pInputAssemblyState' pTessellationState' pViewportState' pRasterizationState pMultisampleState' pDepthStencilState' pColorBlendState' pDynamicState' layout renderPass subpass basePipelineHandle basePipelineIndex
-
-instance es ~ '[] => Zero (GraphicsPipelineCreateInfo es) where
-  zero = GraphicsPipelineCreateInfo
-           ()
-           zero
-           mempty
-           Nothing
-           Nothing
-           Nothing
-           Nothing
-           (SomeStruct zero)
+                               , PipelineDynamicStateCreateFlags(..)
+                               , PipelineMultisampleStateCreateFlags(..)
+                               , PipelineRasterizationStateCreateFlags(..)
+                               , PipelineViewportStateCreateFlags(..)
+                               , PipelineTessellationStateCreateFlags(..)
+                               , PipelineInputAssemblyStateCreateFlags(..)
+                               , PipelineVertexInputStateCreateFlags(..)
+                               , PrimitiveTopology(..)
+                               , CompareOp(..)
+                               , PolygonMode(..)
+                               , FrontFace(..)
+                               , BlendFactor(..)
+                               , BlendOp(..)
+                               , StencilOp(..)
+                               , LogicOp(..)
+                               , VertexInputRate(..)
+                               , DynamicState(..)
+                               , CullModeFlagBits(..)
+                               , CullModeFlags
+                               , ShaderStageFlagBits(..)
+                               , ShaderStageFlags
+                               , PipelineCreateFlagBits(..)
+                               , PipelineCreateFlags
+                               , PipelineShaderStageCreateFlagBits(..)
+                               , PipelineShaderStageCreateFlags
+                               , ColorComponentFlagBits(..)
+                               , ColorComponentFlags
+                               , PipelineLayoutCreateFlagBits(..)
+                               , PipelineLayoutCreateFlags
+                               , PipelineColorBlendStateCreateFlagBits(..)
+                               , PipelineColorBlendStateCreateFlags
+                               , PipelineDepthStencilStateCreateFlagBits(..)
+                               , PipelineDepthStencilStateCreateFlags
+                               , SampleMask
+                               ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Vulkan.Internal.Utils (traceAroundEvent)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Foldable (traverse_)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytes)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import qualified Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCString)
+import Data.ByteString (useAsCString)
+import Data.Coerce (coerce)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(..))
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(..))
+import Foreign.C.Types (CSize(CSize))
+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.Word (Word64)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Extends (peekSomeCStruct)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.CStruct.Extends (withSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (AttachmentSampleCountInfoAMD)
+import Vulkan.Core10.Enums.BlendFactor (BlendFactor)
+import Vulkan.Core10.Enums.BlendOp (BlendOp)
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlags)
+import Vulkan.Core10.Enums.CompareOp (CompareOp)
+import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectNameInfoEXT)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.Handles (Device(Device))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateComputePipelines))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateGraphicsPipelines))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyPipeline))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.Enums.DynamicState (DynamicState)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.Core10.Enums.FrontFace (FrontFace)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_graphics_pipeline_library (GraphicsPipelineLibraryCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsPipelineShaderGroupsCreateInfoNV)
+import Vulkan.Core10.Enums.LogicOp (LogicOp)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (MultiviewPerViewAttributesInfoNVX)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (Pipeline)
+import Vulkan.Core10.Handles (Pipeline(..))
+import Vulkan.Core10.Handles (PipelineCache)
+import Vulkan.Core10.Handles (PipelineCache(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PipelineColorBlendAdvancedStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits (PipelineColorBlendStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_color_write_enable (PipelineColorWriteCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_pipeline_compiler_control (PipelineCompilerControlCreateInfoAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_framebuffer_mixed_samples (PipelineCoverageModulationStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (PipelineCoverageReductionStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_coverage_to_color (PipelineCoverageToColorStateCreateInfoNV)
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
+import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfo)
+import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits (PipelineDepthStencilStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PipelineDiscardRectangleStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags (PipelineDynamicStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PipelineFragmentShadingRateEnumStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PipelineFragmentShadingRateStateCreateInfoKHR)
+import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags)
+import Vulkan.Core10.Handles (PipelineLayout)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR)
+import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conservative_rasterization (PipelineRasterizationConservativeStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PipelineRasterizationDepthClipStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PipelineRasterizationLineStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PipelineRasterizationProvokingVertexStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering (PipelineRenderingCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)
+import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control (PipelineShaderStageRequiredSubgroupSizeCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)
+import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PipelineVertexInputDivisorStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportCoarseSampleOrderStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_control (PipelineViewportDepthClipControlCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PipelineViewportExclusiveScissorStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportShadingRateImageStateCreateInfoNV)
+import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_viewport_swizzle (PipelineViewportSwizzleStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_clip_space_w_scaling (PipelineViewportWScalingStateCreateInfoNV)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.PolygonMode (PolygonMode)
+import Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology)
+import Vulkan.Core10.FundamentalTypes (Rect2D)
+import Vulkan.Core10.Handles (RenderPass)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(SampleCountFlagBits))
+import Vulkan.Core10.FundamentalTypes (SampleMask)
+import Vulkan.Core10.Handles (ShaderModule)
+import {-# SOURCE #-} Vulkan.Core10.Shader (ShaderModuleCreateInfo)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.CStruct.Extends (SomeStruct(..))
+import Vulkan.Core10.Enums.StencilOp (StencilOp)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_subpass_shading (SubpassShadingPipelineCreateInfoHUAWEI)
+import Vulkan.Core10.Enums.VertexInputRate (VertexInputRate)
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Core10.Enums.BlendFactor (BlendFactor(..))
+import Vulkan.Core10.Enums.BlendOp (BlendOp(..))
+import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlagBits(..))
+import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlags)
+import Vulkan.Core10.Enums.CompareOp (CompareOp(..))
+import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlagBits(..))
+import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlags)
+import Vulkan.Core10.Enums.DynamicState (DynamicState(..))
+import Vulkan.Core10.Enums.FrontFace (FrontFace(..))
+import Vulkan.Core10.Enums.LogicOp (LogicOp(..))
+import Vulkan.Core10.Handles (Pipeline(..))
+import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits (PipelineColorBlendStateCreateFlagBits(..))
+import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits (PipelineColorBlendStateCreateFlags)
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(..))
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
+import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits (PipelineDepthStencilStateCreateFlagBits(..))
+import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits (PipelineDepthStencilStateCreateFlags)
+import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags (PipelineDynamicStateCreateFlags(..))
+import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags(..))
+import Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits (PipelineLayoutCreateFlagBits(..))
+import Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits (PipelineLayoutCreateFlags)
+import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags(..))
+import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags(..))
+import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlagBits(..))
+import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)
+import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags(..))
+import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags(..))
+import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags(..))
+import Vulkan.Core10.Enums.PolygonMode (PolygonMode(..))
+import Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology(..))
+import Vulkan.Core10.FundamentalTypes (SampleMask)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.StencilOp (StencilOp(..))
+import Vulkan.Core10.Enums.VertexInputRate (VertexInputRate(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateGraphicsPipelines
+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct GraphicsPipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct GraphicsPipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
+
+-- | vkCreateGraphicsPipelines - Create graphics pipelines
+--
+-- = Description
+--
+-- The 'GraphicsPipelineCreateInfo' structure includes an array of
+-- 'PipelineShaderStageCreateInfo' structures for each of the desired
+-- active shader stages, as well as creation information for all relevant
+-- fixed-function stages, and a pipeline layout.
+--
+-- == Valid Usage
+--
+-- -   #VUID-vkCreateGraphicsPipelines-flags-00720# If the @flags@ member
+--     of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and the @basePipelineIndex@ member of that same element is not
+--     @-1@, @basePipelineIndex@ /must/ be less than the index into
+--     @pCreateInfos@ that corresponds to that element
+--
+-- -   #VUID-vkCreateGraphicsPipelines-flags-00721# If the @flags@ member
+--     of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, the base pipeline /must/ have been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
+--     flag set
+--
+-- -   #VUID-vkCreateGraphicsPipelines-pipelineCache-02876# If
+--     @pipelineCache@ was created with
+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',
+--     host access to @pipelineCache@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
+--
+-- Note
+--
+-- An implicit cache may be provided by the implementation or a layer. For
+-- this reason, it is still valid to set
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'
+-- on @flags@ for any element of @pCreateInfos@ while passing
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' for @pipelineCache@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-vkCreateGraphicsPipelines-device-parameter# @device@ /must/ be
+--     a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   #VUID-vkCreateGraphicsPipelines-pipelineCache-parameter# If
+--     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pipelineCache@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineCache' handle
+--
+-- -   #VUID-vkCreateGraphicsPipelines-pCreateInfos-parameter#
+--     @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ valid 'GraphicsPipelineCreateInfo' structures
+--
+-- -   #VUID-vkCreateGraphicsPipelines-pAllocator-parameter# If
+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
+--     structure
+--
+-- -   #VUID-vkCreateGraphicsPipelines-pPipelines-parameter# @pPipelines@
+--     /must/ be a valid pointer to an array of @createInfoCount@
+--     'Vulkan.Core10.Handles.Pipeline' handles
+--
+-- -   #VUID-vkCreateGraphicsPipelines-createInfoCount-arraylength#
+--     @createInfoCount@ /must/ be greater than @0@
+--
+-- -   #VUID-vkCreateGraphicsPipelines-pipelineCache-parent# If
+--     @pipelineCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PIPELINE_COMPILE_REQUIRED_EXT'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'
+createGraphicsPipelines :: forall io
+                         . (MonadIO io)
+                        => -- | @device@ is the logical device that creates the graphics pipelines.
+                           Device
+                        -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+                           -- indicating that pipeline caching is disabled; or the handle of a valid
+                           -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-cache pipeline cache>
+                           -- object, in which case use of that cache is enabled for the duration of
+                           -- the command.
+                           PipelineCache
+                        -> -- | @pCreateInfos@ is a pointer to an array of 'GraphicsPipelineCreateInfo'
+                           -- structures.
+                           ("createInfos" ::: Vector (SomeStruct GraphicsPipelineCreateInfo))
+                        -> -- | @pAllocator@ controls host memory allocation as described in the
+                           -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+                           -- chapter.
+                           ("allocator" ::: Maybe AllocationCallbacks)
+                        -> io (Result, ("pipelines" ::: Vector Pipeline))
+createGraphicsPipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do
+  let vkCreateGraphicsPipelinesPtr = pVkCreateGraphicsPipelines (case device of Device{deviceCmds} -> deviceCmds)
+  lift $ unless (vkCreateGraphicsPipelinesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateGraphicsPipelines is null" Nothing Nothing
+  let vkCreateGraphicsPipelines' = mkVkCreateGraphicsPipelines vkCreateGraphicsPipelinesPtr
+  pPCreateInfos <- ContT $ allocaBytes @(GraphicsPipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 144)
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (144 * (i)) :: Ptr (GraphicsPipelineCreateInfo _))) (e) . ($ ())) (createInfos)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
+  r <- lift $ traceAroundEvent "vkCreateGraphicsPipelines" (vkCreateGraphicsPipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines))
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
+  pure $ (r, pPipelines)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createGraphicsPipelines' and 'destroyPipeline'
+--
+-- To ensure that 'destroyPipeline' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the last argument.
+-- To just extract the pair pass '(,)' as the last argument.
+--
+withGraphicsPipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct GraphicsPipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r
+withGraphicsPipelines device pipelineCache pCreateInfos pAllocator b =
+  b (createGraphicsPipelines device pipelineCache pCreateInfos pAllocator)
+    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateComputePipelines
+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ComputePipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ComputePipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
+
+-- | vkCreateComputePipelines - Creates a new compute pipeline object
+--
+-- == Valid Usage
+--
+-- -   #VUID-vkCreateComputePipelines-flags-00695# If the @flags@ member of
+--     any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and the @basePipelineIndex@ member of that same element is not
+--     @-1@, @basePipelineIndex@ /must/ be less than the index into
+--     @pCreateInfos@ that corresponds to that element
+--
+-- -   #VUID-vkCreateComputePipelines-flags-00696# If the @flags@ member of
+--     any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, the base pipeline /must/ have been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
+--     flag set
+--
+-- -   #VUID-vkCreateComputePipelines-pipelineCache-02873# If
+--     @pipelineCache@ was created with
+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',
+--     host access to @pipelineCache@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-vkCreateComputePipelines-device-parameter# @device@ /must/ be
+--     a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   #VUID-vkCreateComputePipelines-pipelineCache-parameter# If
+--     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pipelineCache@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineCache' handle
+--
+-- -   #VUID-vkCreateComputePipelines-pCreateInfos-parameter#
+--     @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ valid 'ComputePipelineCreateInfo' structures
+--
+-- -   #VUID-vkCreateComputePipelines-pAllocator-parameter# If @pAllocator@
+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   #VUID-vkCreateComputePipelines-pPipelines-parameter# @pPipelines@
+--     /must/ be a valid pointer to an array of @createInfoCount@
+--     'Vulkan.Core10.Handles.Pipeline' handles
+--
+-- -   #VUID-vkCreateComputePipelines-createInfoCount-arraylength#
+--     @createInfoCount@ /must/ be greater than @0@
+--
+-- -   #VUID-vkCreateComputePipelines-pipelineCache-parent# If
+--     @pipelineCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PIPELINE_COMPILE_REQUIRED_EXT'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'ComputePipelineCreateInfo', 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'
+createComputePipelines :: forall io
+                        . (MonadIO io)
+                       => -- | @device@ is the logical device that creates the compute pipelines.
+                          Device
+                       -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+                          -- indicating that pipeline caching is disabled; or the handle of a valid
+                          -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-cache pipeline cache>
+                          -- object, in which case use of that cache is enabled for the duration of
+                          -- the command.
+                          PipelineCache
+                       -> -- | @pCreateInfos@ is a pointer to an array of 'ComputePipelineCreateInfo'
+                          -- structures.
+                          ("createInfos" ::: Vector (SomeStruct ComputePipelineCreateInfo))
+                       -> -- | @pAllocator@ controls host memory allocation as described in the
+                          -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+                          -- chapter.
+                          ("allocator" ::: Maybe AllocationCallbacks)
+                       -> io (Result, ("pipelines" ::: Vector Pipeline))
+createComputePipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do
+  let vkCreateComputePipelinesPtr = pVkCreateComputePipelines (case device of Device{deviceCmds} -> deviceCmds)
+  lift $ unless (vkCreateComputePipelinesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateComputePipelines is null" Nothing Nothing
+  let vkCreateComputePipelines' = mkVkCreateComputePipelines vkCreateComputePipelinesPtr
+  pPCreateInfos <- ContT $ allocaBytes @(ComputePipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 96)
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (96 * (i)) :: Ptr (ComputePipelineCreateInfo _))) (e) . ($ ())) (createInfos)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
+  r <- lift $ traceAroundEvent "vkCreateComputePipelines" (vkCreateComputePipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines))
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
+  pure $ (r, pPipelines)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createComputePipelines' and 'destroyPipeline'
+--
+-- To ensure that 'destroyPipeline' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the last argument.
+-- To just extract the pair pass '(,)' as the last argument.
+--
+withComputePipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct ComputePipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r
+withComputePipelines device pipelineCache pCreateInfos pAllocator b =
+  b (createComputePipelines device pipelineCache pCreateInfos pAllocator)
+    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyPipeline
+  :: FunPtr (Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyPipeline - Destroy a pipeline object
+--
+-- == Valid Usage
+--
+-- -   #VUID-vkDestroyPipeline-pipeline-00765# All submitted commands that
+--     refer to @pipeline@ /must/ have completed execution
+--
+-- -   #VUID-vkDestroyPipeline-pipeline-00766# If
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @pipeline@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   #VUID-vkDestroyPipeline-pipeline-00767# If no
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @pipeline@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-vkDestroyPipeline-device-parameter# @device@ /must/ be a valid
+--     'Vulkan.Core10.Handles.Device' handle
+--
+-- -   #VUID-vkDestroyPipeline-pipeline-parameter# If @pipeline@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @pipeline@ /must/ be a
+--     valid 'Vulkan.Core10.Handles.Pipeline' handle
+--
+-- -   #VUID-vkDestroyPipeline-pAllocator-parameter# If @pAllocator@ is not
+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   #VUID-vkDestroyPipeline-pipeline-parent# If @pipeline@ is a valid
+--     handle, it /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pipeline@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'
+destroyPipeline :: forall io
+                 . (MonadIO io)
+                => -- | @device@ is the logical device that destroys the pipeline.
+                   Device
+                -> -- | @pipeline@ is the handle of the pipeline to destroy.
+                   Pipeline
+                -> -- | @pAllocator@ controls host memory allocation as described in the
+                   -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+                   -- chapter.
+                   ("allocator" ::: Maybe AllocationCallbacks)
+                -> io ()
+destroyPipeline device pipeline allocator = liftIO . evalContT $ do
+  let vkDestroyPipelinePtr = pVkDestroyPipeline (case device of Device{deviceCmds} -> deviceCmds)
+  lift $ unless (vkDestroyPipelinePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyPipeline is null" Nothing Nothing
+  let vkDestroyPipeline' = mkVkDestroyPipeline vkDestroyPipelinePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ traceAroundEvent "vkDestroyPipeline" (vkDestroyPipeline' (deviceHandle (device)) (pipeline) pAllocator)
+  pure $ ()
+
+
+-- | VkViewport - Structure specifying a viewport
+--
+-- = Description
+--
+-- Note
+--
+-- Despite their names, @minDepth@ /can/ be less than, equal to, or greater
+-- than @maxDepth@.
+--
+-- The framebuffer depth coordinate @z@f /may/ be represented using either
+-- a fixed-point or floating-point representation. However, a
+-- floating-point representation /must/ be used if the depth\/stencil
+-- attachment has a floating-point depth component. If an m-bit fixed-point
+-- representation is used, we assume that it represents each value
+-- \(\frac{k}{2^m - 1}\), where k ∈ { 0, 1, …​, 2m-1 }, as k (e.g. 1.0 is
+-- represented in binary as a string of all ones).
+--
+-- The viewport parameters shown in the above equations are found from
+-- these values as
+--
+-- -   ox = @x@ + @width@ \/ 2
+--
+-- -   oy = @y@ + @height@ \/ 2
+--
+-- -   oz = @minDepth@
+--
+-- -   px = @width@
+--
+-- -   py = @height@
+--
+-- -   pz = @maxDepth@ - @minDepth@.
+--
+-- If a render pass transform is enabled, the values (px,py) and (ox, oy)
+-- defining the viewport are transformed as described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>
+-- before participating in the viewport transform.
+--
+-- The application /can/ specify a negative term for @height@, which has
+-- the effect of negating the y coordinate in clip space before performing
+-- the transform. When using a negative @height@, the application /should/
+-- also adjust the @y@ value to point to the lower left corner of the
+-- viewport instead of the upper left corner. Using the negative @height@
+-- allows the application to avoid having to negate the y component of the
+-- @Position@ output from the last
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>.
+--
+-- The width and height of the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxViewportDimensions implementation-dependent maximum viewport dimensions>
+-- /must/ be greater than or equal to the width and height of the largest
+-- image which /can/ be created and attached to a framebuffer.
+--
+-- The floating-point viewport bounds are represented with an
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-viewportSubPixelBits implementation-dependent precision>.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkViewport-width-01770# @width@ /must/ be greater than @0.0@
+--
+-- -   #VUID-VkViewport-width-01771# @width@ /must/ be less than or equal
+--     to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[0]
+--
+-- -   #VUID-VkViewport-height-01773# The absolute value of @height@ /must/
+--     be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[1]
+--
+-- -   #VUID-VkViewport-x-01774# @x@ /must/ be greater than or equal to
+--     @viewportBoundsRange@[0]
+--
+-- -   #VUID-VkViewport-x-01232# (@x@ + @width@) /must/ be less than or
+--     equal to @viewportBoundsRange@[1]
+--
+-- -   #VUID-VkViewport-y-01775# @y@ /must/ be greater than or equal to
+--     @viewportBoundsRange@[0]
+--
+-- -   #VUID-VkViewport-y-01776# @y@ /must/ be less than or equal to
+--     @viewportBoundsRange@[1]
+--
+-- -   #VUID-VkViewport-y-01777# (@y@ + @height@) /must/ be greater than or
+--     equal to @viewportBoundsRange@[0]
+--
+-- -   #VUID-VkViewport-y-01233# (@y@ + @height@) /must/ be less than or
+--     equal to @viewportBoundsRange@[1]
+--
+-- -   #VUID-VkViewport-minDepth-01234# Unless
+--     @VK_EXT_depth_range_unrestricted@ extension is enabled @minDepth@
+--     /must/ be between @0.0@ and @1.0@, inclusive
+--
+-- -   #VUID-VkViewport-maxDepth-01235# Unless
+--     @VK_EXT_depth_range_unrestricted@ extension is enabled @maxDepth@
+--     /must/ be between @0.0@ and @1.0@, inclusive
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV',
+-- 'PipelineViewportStateCreateInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport',
+-- 'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount',
+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
+data Viewport = Viewport
+  { -- | @x@ and @y@ are the viewport’s upper left corner (x,y).
+    x :: Float
+  , -- No documentation found for Nested "VkViewport" "y"
+    y :: Float
+  , -- | @width@ and @height@ are the viewport’s width and height, respectively.
+    width :: Float
+  , -- No documentation found for Nested "VkViewport" "height"
+    height :: Float
+  , -- | @minDepth@ and @maxDepth@ are the depth range for the viewport.
+    minDepth :: Float
+  , -- No documentation found for Nested "VkViewport" "maxDepth"
+    maxDepth :: Float
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (Viewport)
+#endif
+deriving instance Show Viewport
+
+instance ToCStruct Viewport where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Viewport{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))
+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (width))
+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (height))
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (minDepth))
+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxDepth))
+    f
+  cStructSize = 24
+  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))
+    f
+
+instance FromCStruct Viewport where
+  peekCStruct p = do
+    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
+    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
+    width <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))
+    height <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))
+    minDepth <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
+    maxDepth <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))
+    pure $ Viewport
+             (coerce @CFloat @Float x) (coerce @CFloat @Float y) (coerce @CFloat @Float width) (coerce @CFloat @Float height) (coerce @CFloat @Float minDepth) (coerce @CFloat @Float maxDepth)
+
+instance Storable Viewport where
+  sizeOf ~_ = 24
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero Viewport where
+  zero = Viewport
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkSpecializationMapEntry - Structure specifying a specialization map
+-- entry
+--
+-- = Description
+--
+-- If a @constantID@ value is not a specialization constant ID used in the
+-- shader, that map entry does not affect the behavior of the pipeline.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkSpecializationMapEntry-constantID-00776# For a @constantID@
+--     specialization constant declared in a shader, @size@ /must/ match
+--     the byte size of the @constantID@. If the specialization constant is
+--     of type @boolean@, @size@ /must/ be the byte size of
+--     'Vulkan.Core10.FundamentalTypes.Bool32'
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'SpecializationInfo'
+data SpecializationMapEntry = SpecializationMapEntry
+  { -- | @constantID@ is the ID of the specialization constant in SPIR-V.
+    constantID :: Word32
+  , -- | @offset@ is the byte offset of the specialization constant value within
+    -- the supplied data buffer.
+    offset :: Word32
+  , -- | @size@ is the byte size of the specialization constant value within the
+    -- supplied data buffer.
+    size :: Word64
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SpecializationMapEntry)
+#endif
+deriving instance Show SpecializationMapEntry
+
+instance ToCStruct SpecializationMapEntry where
+  withCStruct x f = allocaBytes 16 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SpecializationMapEntry{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (constantID)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (offset)
+    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (size))
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (zero))
+    f
+
+instance FromCStruct SpecializationMapEntry where
+  peekCStruct p = do
+    constantID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    offset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    size <- peek @CSize ((p `plusPtr` 8 :: Ptr CSize))
+    pure $ SpecializationMapEntry
+             constantID offset (coerce @CSize @Word64 size)
+
+instance Storable SpecializationMapEntry where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SpecializationMapEntry where
+  zero = SpecializationMapEntry
+           zero
+           zero
+           zero
+
+
+-- | VkSpecializationInfo - Structure specifying specialization information
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkSpecializationInfo-offset-00773# The @offset@ member of each
+--     element of @pMapEntries@ /must/ be less than @dataSize@
+--
+-- -   #VUID-VkSpecializationInfo-pMapEntries-00774# The @size@ member of
+--     each element of @pMapEntries@ /must/ be less than or equal to
+--     @dataSize@ minus @offset@
+--
+-- -   #VUID-VkSpecializationInfo-constantID-04911# The @constantID@ value
+--     of each element of @pMapEntries@ /must/ be unique within
+--     @pMapEntries@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkSpecializationInfo-pMapEntries-parameter# If @mapEntryCount@
+--     is not @0@, @pMapEntries@ /must/ be a valid pointer to an array of
+--     @mapEntryCount@ valid 'SpecializationMapEntry' structures
+--
+-- -   #VUID-VkSpecializationInfo-pData-parameter# If @dataSize@ is not
+--     @0@, @pData@ /must/ be a valid pointer to an array of @dataSize@
+--     bytes
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'PipelineShaderStageCreateInfo', 'SpecializationMapEntry'
+data SpecializationInfo = SpecializationInfo
+  { -- | @pMapEntries@ is a pointer to an array of 'SpecializationMapEntry'
+    -- structures which map constant IDs to offsets in @pData@.
+    mapEntries :: Vector SpecializationMapEntry
+  , -- | @dataSize@ is the byte size of the @pData@ buffer.
+    dataSize :: Word64
+  , -- | @pData@ contains the actual constant values to specialize with.
+    data' :: Ptr ()
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (SpecializationInfo)
+#endif
+deriving instance Show SpecializationInfo
+
+instance ToCStruct SpecializationInfo where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SpecializationInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (mapEntries)) :: Word32))
+    pPMapEntries' <- ContT $ allocaBytes @SpecializationMapEntry ((Data.Vector.length (mapEntries)) * 16)
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e)) (mapEntries)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')
+    lift $ poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (dataSize))
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (data')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct SpecializationInfo where
+  peekCStruct p = do
+    mapEntryCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    pMapEntries <- peek @(Ptr SpecializationMapEntry) ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry)))
+    pMapEntries' <- generateM (fromIntegral mapEntryCount) (\i -> peekCStruct @SpecializationMapEntry ((pMapEntries `advancePtrBytes` (16 * (i)) :: Ptr SpecializationMapEntry)))
+    dataSize <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))
+    pData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
+    pure $ SpecializationInfo
+             pMapEntries' (coerce @CSize @Word64 dataSize) pData
+
+instance Zero SpecializationInfo where
+  zero = SpecializationInfo
+           mempty
+           zero
+           zero
+
+
+-- | VkPipelineShaderStageCreateInfo - Structure specifying parameters of a
+-- newly created pipeline shader stage
+--
+-- = Description
+--
+-- If the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-graphicsPipelineLibrary graphicsPipelineLibrary>
+-- feature is enabled and an instance of
+-- 'Vulkan.Core10.Shader.ShaderModuleCreateInfo' is included in the @pNext@
+-- chain, @module@ /can/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE'. If
+-- @module@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the shader
+-- code used by the pipeline is defined by @module@. If @module@ is
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the shader code is defined by
+-- the chained 'Vulkan.Core10.Shader.ShaderModuleCreateInfo'.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00704# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @stage@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00705# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @stage@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02091# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-meshShader mesh shader>
+--     feature is not enabled, @stage@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02092# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-taskShader task shader>
+--     feature is not enabled, @stage@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00706# @stage@ /must/
+--     not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL_GRAPHICS',
+--     or 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL'
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-pName-00707# @pName@ /must/ be
+--     the name of an @OpEntryPoint@ in @module@ with an execution model
+--     that matches @stage@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708# If the
+--     identified entry point includes any variable in its interface that
+--     is declared with the @ClipDistance@ @BuiltIn@ decoration, that
+--     variable /must/ not have an array size greater than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxClipDistances@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709# If the
+--     identified entry point includes any variable in its interface that
+--     is declared with the @CullDistance@ @BuiltIn@ decoration, that
+--     variable /must/ not have an array size greater than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCullDistances@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710#
+--     If the identified entry point includes any variables in its
+--     interface that are declared with the @ClipDistance@ or
+--     @CullDistance@ @BuiltIn@ decoration, those variables /must/ not have
+--     array sizes which sum to more than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCombinedClipAndCullDistances@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711# If
+--     the identified entry point includes any variable in its interface
+--     that is declared with the
+--     'Vulkan.Core10.FundamentalTypes.SampleMask' @BuiltIn@ decoration,
+--     that variable /must/ not have an array size greater than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSampleMaskWords@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00712# If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
+--     the identified entry point /must/ not include any input variable in
+--     its interface that is decorated with @CullDistance@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00713# If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
+--     and the identified entry point has an @OpExecutionMode@ instruction
+--     specifying a patch size with @OutputVertices@, the patch size /must/
+--     be greater than @0@ and less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00714# If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',
+--     the identified entry point /must/ have an @OpExecutionMode@
+--     instruction specifying a maximum output vertex count that is greater
+--     than @0@ and less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryOutputVertices@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00715# If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',
+--     the identified entry point /must/ have an @OpExecutionMode@
+--     instruction specifying an invocation count that is greater than @0@
+--     and less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryShaderInvocations@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02596# If @stage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>,
+--     and the identified entry point writes to @Layer@ for any primitive,
+--     it /must/ write the same value to @Layer@ for all vertices of a
+--     given primitive
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02597# If @stage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>,
+--     and the identified entry point writes to @ViewportIndex@ for any
+--     primitive, it /must/ write the same value to @ViewportIndex@ for all
+--     vertices of a given primitive
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00718# If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
+--     the identified entry point /must/ not include any output variables
+--     in its interface decorated with @CullDistance@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-06685# If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
+--     and the identified entry point writes to @FragDepth@ in any
+--     execution path, all execution paths that are not exclusive to helper
+--     invocations /must/ either discard the fragment, or write or
+--     initialize the value of @FragDepth@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-06686# If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
+--     and the identified entry point writes to @FragStencilRefEXT@ in any
+--     execution path, all execution paths that are not exclusive to helper
+--     invocations /must/ either discard the fragment, or write or
+--     initialize the value of @FragStencilRefEXT@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02093# If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',
+--     the identified entry point /must/ have an @OpExecutionMode@
+--     instruction specifying a maximum output vertex count,
+--     @OutputVertices@, that is greater than @0@ and less than or equal to
+--     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputVertices@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02094# If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',
+--     the identified entry point /must/ have an @OpExecutionMode@
+--     instruction specifying a maximum output primitive count,
+--     @OutputPrimitivesNV@, that is greater than @0@ and less than or
+--     equal to
+--     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputPrimitives@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02784# If @flags@ has
+--     the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT'
+--     flag set, the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>
+--     feature /must/ be enabled
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02785# If @flags@ has
+--     the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT'
+--     flag set, the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-computeFullSubgroups computeFullSubgroups>
+--     feature /must/ be enabled
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02754# If a
+--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
+--     structure is included in the @pNext@ chain, @flags@ /must/ not have
+--     the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT'
+--     flag set
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02755# If a
+--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
+--     structure is included in the @pNext@ chain, the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>
+--     feature /must/ be enabled, and @stage@ /must/ be a valid bit
+--     specified in
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-requiredSubgroupSizeStages requiredSubgroupSizeStages>
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02756# If a
+--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
+--     structure is included in the @pNext@ chain and @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT',
+--     the local workgroup size of the shader /must/ be less than or equal
+--     to the product of
+--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'::@requiredSubgroupSize@
+--     and
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxComputeWorkgroupSubgroups maxComputeWorkgroupSubgroups>
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02757# If a
+--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
+--     structure is included in the @pNext@ chain, and @flags@ has the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT'
+--     flag set, the local workgroup size in the X dimension of the
+--     pipeline /must/ be a multiple of
+--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'::@requiredSubgroupSize@
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02758# If @flags@ has
+--     both the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT'
+--     and
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT'
+--     flags set, the local workgroup size in the X dimension of the
+--     pipeline /must/ be a multiple of
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxSubgroupSize maxSubgroupSize>
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02759# If @flags@ has
+--     the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT'
+--     flag set and @flags@ does not have the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT'
+--     flag set and no
+--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo'
+--     structure is included in the @pNext@ chain, the local workgroup size
+--     in the X dimension of the pipeline /must/ be a multiple of
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-module-04145# The SPIR-V code
+--     that was used to create @module@ /must/ be valid as described by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#spirv-spec Khronos SPIR-V Specification>
+--     after applying the specializations provided in
+--     @pSpecializationInfo@, if any, and then converting all
+--     specialization constants into fixed constants
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-sType-sType# @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-pNext# Each @pNext@
+--     member of any structure (including this one) in the @pNext@ chain
+--     /must/ be either @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT',
+--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfo',
+--     or 'Vulkan.Core10.Shader.ShaderModuleCreateInfo'
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-sType-unique# The @sType@
+--     value of each struct in the @pNext@ chain /must/ be unique
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-parameter# @flags@
+--     /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'
+--     values
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-parameter# @stage@
+--     /must/ be a valid
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-module-parameter# If @module@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @module@ /must/ be
+--     a valid 'Vulkan.Core10.Handles.ShaderModule' handle
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-pName-parameter# @pName@
+--     /must/ be a null-terminated UTF-8 string
+--
+-- -   #VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-parameter#
+--     If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/
+--     be a valid pointer to a valid 'SpecializationInfo' structure
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'ComputePipelineCreateInfo', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
+-- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlags',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
+-- 'Vulkan.Core10.Handles.ShaderModule',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits',
+-- 'SpecializationInfo', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineShaderStageCreateInfo (es :: [Type]) = PipelineShaderStageCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'
+    -- specifying how the pipeline shader stage will be generated.
+    flags :: PipelineShaderStageCreateFlags
+  , -- | @stage@ is a
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value
+    -- specifying a single pipeline stage.
+    stage :: ShaderStageFlagBits
+  , -- | @module@ is a 'Vulkan.Core10.Handles.ShaderModule' object containing the
+    -- shader for this stage.
+    module' :: ShaderModule
+  , -- | @pName@ is a pointer to a null-terminated UTF-8 string specifying the
+    -- entry point name of the shader for this stage.
+    name :: ByteString
+  , -- | @pSpecializationInfo@ is a pointer to a 'SpecializationInfo' structure,
+    -- as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-specialization-constants Specialization Constants>,
+    -- or @NULL@.
+    specializationInfo :: Maybe SpecializationInfo
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineShaderStageCreateInfo (es :: [Type]))
+#endif
+deriving instance Show (Chain es) => Show (PipelineShaderStageCreateInfo es)
+
+instance Extensible PipelineShaderStageCreateInfo where
+  extensibleTypeName = "PipelineShaderStageCreateInfo"
+  setNext PipelineShaderStageCreateInfo{..} next' = PipelineShaderStageCreateInfo{next = next', ..}
+  getNext PipelineShaderStageCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineShaderStageCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineShaderStageRequiredSubgroupSizeCreateInfo = Just f
+    | Just Refl <- eqT @e @DebugUtilsObjectNameInfoEXT = Just f
+    | Just Refl <- eqT @e @(ShaderModuleCreateInfo '[]) = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineShaderStageCreateInfo es, PokeChain es) => ToCStruct (PipelineShaderStageCreateInfo es) where
+  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineShaderStageCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (stage)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (module')
+    pName'' <- ContT $ useAsCString (name)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''
+    pSpecializationInfo'' <- case (specializationInfo) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo))) pSpecializationInfo''
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (zero)
+    pName'' <- ContT $ useAsCString (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''
+    lift $ f
+
+instance (Extendss PipelineShaderStageCreateInfo es, PeekChain es) => FromCStruct (PipelineShaderStageCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineShaderStageCreateFlags ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags))
+    stage <- peek @ShaderStageFlagBits ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits))
+    module' <- peek @ShaderModule ((p `plusPtr` 24 :: Ptr ShaderModule))
+    pName <- packCString =<< peek ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
+    pSpecializationInfo <- peek @(Ptr SpecializationInfo) ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo)))
+    pSpecializationInfo' <- maybePeek (\j -> peekCStruct @SpecializationInfo (j)) pSpecializationInfo
+    pure $ PipelineShaderStageCreateInfo
+             next flags stage module' pName pSpecializationInfo'
+
+instance es ~ '[] => Zero (PipelineShaderStageCreateInfo es) where
+  zero = PipelineShaderStageCreateInfo
+           ()
+           zero
+           zero
+           zero
+           mempty
+           Nothing
+
+
+-- | VkComputePipelineCreateInfo - Structure specifying parameters of a newly
+-- created compute pipeline
+--
+-- = Description
+--
+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
+-- described in more detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-00697# If @flags@ contains
+--     the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be
+--     a valid handle to a compute 'Vulkan.Core10.Handles.Pipeline'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-00698# If @flags@ contains
+--     the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be a valid index into the calling command’s @pCreateInfos@ parameter
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-00699# If @flags@ contains
+--     the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/
+--     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-00700# If @flags@ contains
+--     the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be -1
+--
+-- -   #VUID-VkComputePipelineCreateInfo-stage-00701# The @stage@ member of
+--     @stage@ /must/ be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-stage-00702# The shader code for
+--     the entry point identified by @stage@ and the rest of the state
+--     identified by this structure /must/ adhere to the pipeline linking
+--     rules described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces Shader Interfaces>
+--     chapter
+--
+-- -   #VUID-VkComputePipelineCreateInfo-layout-00703# @layout@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
+--     with the layout of the compute shader specified in @stage@
+--
+-- -   #VUID-VkComputePipelineCreateInfo-layout-01687# The number of
+--     resources in @layout@ accessible to the compute shader stage /must/
+--     be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-03364# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-03365# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-03366# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-03367# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-03368# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-03369# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-03370# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-03576# @flags@ /must/ not
+--     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'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-pipelineCreationCacheControl-02875#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-pipelineStageCreationFeedbackCount-06566#
+--     If
+--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo'::@pipelineStageCreationFeedbackCount@
+--     is not @0@, it /must/ be @1@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkComputePipelineCreateInfo-sType-sType# @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO'
+--
+-- -   #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.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo',
+--     or
+--     'Vulkan.Extensions.VK_HUAWEI_subpass_shading.SubpassShadingPipelineCreateInfoHUAWEI'
+--
+-- -   #VUID-VkComputePipelineCreateInfo-sType-unique# The @sType@ value of
+--     each struct in the @pNext@ chain /must/ be unique
+--
+-- -   #VUID-VkComputePipelineCreateInfo-flags-parameter# @flags@ /must/ be
+--     a valid combination of
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+--     values
+--
+-- -   #VUID-VkComputePipelineCreateInfo-stage-parameter# @stage@ /must/ be
+--     a valid 'PipelineShaderStageCreateInfo' structure
+--
+-- -   #VUID-VkComputePipelineCreateInfo-layout-parameter# @layout@ /must/
+--     be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle
+--
+-- -   #VUID-VkComputePipelineCreateInfo-commonparent# Both of
+--     @basePipelineHandle@, and @layout@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
+-- 'Vulkan.Core10.Handles.PipelineLayout', 'PipelineShaderStageCreateInfo',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createComputePipelines'
+data ComputePipelineCreateInfo (es :: [Type]) = ComputePipelineCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+    -- specifying how the pipeline will be generated.
+    flags :: PipelineCreateFlags
+  , -- | @stage@ is a 'PipelineShaderStageCreateInfo' structure describing the
+    -- compute shader.
+    stage :: SomeStruct PipelineShaderStageCreateInfo
+  , -- | @layout@ is the description of binding locations used by both the
+    -- pipeline and descriptor sets used with the pipeline.
+    layout :: PipelineLayout
+  , -- | @basePipelineHandle@ is a pipeline to derive from
+    basePipelineHandle :: Pipeline
+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
+    -- as a pipeline to derive from
+    basePipelineIndex :: Int32
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (ComputePipelineCreateInfo (es :: [Type]))
+#endif
+deriving instance Show (Chain es) => Show (ComputePipelineCreateInfo es)
+
+instance Extensible ComputePipelineCreateInfo where
+  extensibleTypeName = "ComputePipelineCreateInfo"
+  setNext ComputePipelineCreateInfo{..} next' = ComputePipelineCreateInfo{next = next', ..}
+  getNext ComputePipelineCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ComputePipelineCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f
+    | Just Refl <- eqT @e @SubpassShadingPipelineCreateInfoHUAWEI = Just f
+    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss ComputePipelineCreateInfo es, PokeChain es) => ToCStruct (ComputePipelineCreateInfo es) where
+  withCStruct x f = allocaBytes 96 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ComputePipelineCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
+    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) (stage) . ($ ())
+    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (layout)
+    lift $ poke ((p `plusPtr` 80 :: Ptr Pipeline)) (basePipelineHandle)
+    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (basePipelineIndex)
+    lift $ f
+  cStructSize = 96
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) ((SomeStruct zero)) . ($ ())
+    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (zero)
+    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (zero)
+    lift $ f
+
+instance (Extendss ComputePipelineCreateInfo es, PeekChain es) => FromCStruct (ComputePipelineCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
+    stage <- peekSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _))))
+    layout <- peek @PipelineLayout ((p `plusPtr` 72 :: Ptr PipelineLayout))
+    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 80 :: Ptr Pipeline))
+    basePipelineIndex <- peek @Int32 ((p `plusPtr` 88 :: Ptr Int32))
+    pure $ ComputePipelineCreateInfo
+             next flags stage layout basePipelineHandle basePipelineIndex
+
+instance es ~ '[] => Zero (ComputePipelineCreateInfo es) where
+  zero = ComputePipelineCreateInfo
+           ()
+           zero
+           (SomeStruct zero)
+           zero
+           zero
+           zero
+
+
+-- | VkVertexInputBindingDescription - Structure specifying vertex input
+-- binding description
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkVertexInputBindingDescription-binding-00618# @binding@
+--     /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+--
+-- -   #VUID-VkVertexInputBindingDescription-stride-00619# @stride@ /must/
+--     be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindingStride@
+--
+-- -   #VUID-VkVertexInputBindingDescription-stride-04456# If the
+--     @VK_KHR_portability_subset@ extension is enabled, @stride@ /must/ be
+--     a multiple of, and at least as large as,
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetPropertiesKHR'::@minVertexInputBindingStrideAlignment@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkVertexInputBindingDescription-inputRate-parameter#
+--     @inputRate@ /must/ be a valid
+--     'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate' value
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'PipelineVertexInputStateCreateInfo',
+-- 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'
+data VertexInputBindingDescription = VertexInputBindingDescription
+  { -- | @binding@ is the binding number that this structure describes.
+    binding :: Word32
+  , -- | @stride@ is the byte stride between consecutive elements within the
+    -- buffer.
+    stride :: Word32
+  , -- | @inputRate@ is a 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'
+    -- value specifying whether vertex attribute addressing is a function of
+    -- the vertex index or of the instance index.
+    inputRate :: VertexInputRate
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (VertexInputBindingDescription)
+#endif
+deriving instance Show VertexInputBindingDescription
+
+instance ToCStruct VertexInputBindingDescription where
+  withCStruct x f = allocaBytes 12 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p VertexInputBindingDescription{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (stride)
+    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (inputRate)
+    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 VertexInputRate)) (zero)
+    f
+
+instance FromCStruct VertexInputBindingDescription where
+  peekCStruct p = do
+    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    stride <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    inputRate <- peek @VertexInputRate ((p `plusPtr` 8 :: Ptr VertexInputRate))
+    pure $ VertexInputBindingDescription
+             binding stride inputRate
+
+instance Storable VertexInputBindingDescription where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero VertexInputBindingDescription where
+  zero = VertexInputBindingDescription
+           zero
+           zero
+           zero
+
+
+-- | VkVertexInputAttributeDescription - Structure specifying vertex input
+-- attribute description
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkVertexInputAttributeDescription-location-00620# @location@
+--     /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
+--
+-- -   #VUID-VkVertexInputAttributeDescription-binding-00621# @binding@
+--     /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+--
+-- -   #VUID-VkVertexInputAttributeDescription-offset-00622# @offset@
+--     /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributeOffset@
+--
+-- -   #VUID-VkVertexInputAttributeDescription-format-00623# @format@
+--     /must/ be allowed as a vertex buffer format, as specified by the
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_VERTEX_BUFFER_BIT'
+--     flag in
+--     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
+--     returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
+--
+-- -   #VUID-VkVertexInputAttributeDescription-vertexAttributeAccessBeyondStride-04457#
+--     If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@vertexAttributeAccessBeyondStride@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', the sum of @offset@ plus
+--     the size of the vertex attribute data described by @format@ /must/
+--     not be greater than @stride@ in the 'VertexInputBindingDescription'
+--     referenced in @binding@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkVertexInputAttributeDescription-format-parameter# @format@
+--     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'PipelineVertexInputStateCreateInfo'
+data VertexInputAttributeDescription = VertexInputAttributeDescription
+  { -- | @location@ is the shader input location number for this attribute.
+    location :: Word32
+  , -- | @binding@ is the binding number which this attribute takes its data
+    -- from.
+    binding :: Word32
+  , -- | @format@ is the size and type of the vertex attribute data.
+    format :: Format
+  , -- | @offset@ is a byte offset of this attribute relative to the start of an
+    -- element in the vertex input binding.
+    offset :: Word32
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (VertexInputAttributeDescription)
+#endif
+deriving instance Show VertexInputAttributeDescription
+
+instance ToCStruct VertexInputAttributeDescription where
+  withCStruct x f = allocaBytes 16 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p VertexInputAttributeDescription{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (location)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (binding)
+    poke ((p `plusPtr` 8 :: Ptr Format)) (format)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (offset)
+    f
+  cStructSize = 16
+  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 Format)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct VertexInputAttributeDescription where
+  peekCStruct p = do
+    location <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    binding <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    format <- peek @Format ((p `plusPtr` 8 :: Ptr Format))
+    offset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    pure $ VertexInputAttributeDescription
+             location binding format offset
+
+instance Storable VertexInputAttributeDescription where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero VertexInputAttributeDescription where
+  zero = VertexInputAttributeDescription
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineVertexInputStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline vertex input state
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-vertexBindingDescriptionCount-00613#
+--     @vertexBindingDescriptionCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-vertexAttributeDescriptionCount-00614#
+--     @vertexAttributeDescriptionCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-binding-00615# For every
+--     @binding@ specified by each element of
+--     @pVertexAttributeDescriptions@, a 'VertexInputBindingDescription'
+--     /must/ exist in @pVertexBindingDescriptions@ with the same value of
+--     @binding@
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-00616#
+--     All elements of @pVertexBindingDescriptions@ /must/ describe
+--     distinct binding numbers
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617#
+--     All elements of @pVertexAttributeDescriptions@ /must/ describe
+--     distinct attribute locations
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pNext-pNext# @pNext@
+--     /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PipelineVertexInputDivisorStateCreateInfoEXT'
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-sType-unique# The @sType@
+--     value of each struct in the @pNext@ chain /must/ be unique
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-flags-zerobitmask#
+--     @flags@ /must/ be @0@
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-parameter#
+--     If @vertexBindingDescriptionCount@ is not @0@,
+--     @pVertexBindingDescriptions@ /must/ be a valid pointer to an array
+--     of @vertexBindingDescriptionCount@ valid
+--     'VertexInputBindingDescription' structures
+--
+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-parameter#
+--     If @vertexAttributeDescriptionCount@ is not @0@,
+--     @pVertexAttributeDescriptions@ /must/ be a valid pointer to an array
+--     of @vertexAttributeDescriptionCount@ valid
+--     'VertexInputAttributeDescription' structures
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
+-- 'Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags.PipelineVertexInputStateCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'VertexInputAttributeDescription', 'VertexInputBindingDescription'
+data PipelineVertexInputStateCreateInfo (es :: [Type]) = PipelineVertexInputStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineVertexInputStateCreateFlags
+  , -- | @pVertexBindingDescriptions@ is a pointer to an array of
+    -- 'VertexInputBindingDescription' structures.
+    vertexBindingDescriptions :: Vector VertexInputBindingDescription
+  , -- | @pVertexAttributeDescriptions@ is a pointer to an array of
+    -- 'VertexInputAttributeDescription' structures.
+    vertexAttributeDescriptions :: Vector VertexInputAttributeDescription
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineVertexInputStateCreateInfo (es :: [Type]))
+#endif
+deriving instance Show (Chain es) => Show (PipelineVertexInputStateCreateInfo es)
+
+instance Extensible PipelineVertexInputStateCreateInfo where
+  extensibleTypeName = "PipelineVertexInputStateCreateInfo"
+  setNext PipelineVertexInputStateCreateInfo{..} next' = PipelineVertexInputStateCreateInfo{next = next', ..}
+  getNext PipelineVertexInputStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineVertexInputStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineVertexInputDivisorStateCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineVertexInputStateCreateInfo es, PokeChain es) => ToCStruct (PipelineVertexInputStateCreateInfo es) where
+  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineVertexInputStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexBindingDescriptions)) :: Word32))
+    pPVertexBindingDescriptions' <- ContT $ allocaBytes @VertexInputBindingDescription ((Data.Vector.length (vertexBindingDescriptions)) * 12)
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e)) (vertexBindingDescriptions)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexAttributeDescriptions)) :: Word32))
+    pPVertexAttributeDescriptions' <- ContT $ allocaBytes @VertexInputAttributeDescription ((Data.Vector.length (vertexAttributeDescriptions)) * 16)
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e)) (vertexAttributeDescriptions)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ f
+
+instance (Extendss PipelineVertexInputStateCreateInfo es, PeekChain es) => FromCStruct (PipelineVertexInputStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineVertexInputStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags))
+    vertexBindingDescriptionCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pVertexBindingDescriptions <- peek @(Ptr VertexInputBindingDescription) ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription)))
+    pVertexBindingDescriptions' <- generateM (fromIntegral vertexBindingDescriptionCount) (\i -> peekCStruct @VertexInputBindingDescription ((pVertexBindingDescriptions `advancePtrBytes` (12 * (i)) :: Ptr VertexInputBindingDescription)))
+    vertexAttributeDescriptionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pVertexAttributeDescriptions <- peek @(Ptr VertexInputAttributeDescription) ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription)))
+    pVertexAttributeDescriptions' <- generateM (fromIntegral vertexAttributeDescriptionCount) (\i -> peekCStruct @VertexInputAttributeDescription ((pVertexAttributeDescriptions `advancePtrBytes` (16 * (i)) :: Ptr VertexInputAttributeDescription)))
+    pure $ PipelineVertexInputStateCreateInfo
+             next flags pVertexBindingDescriptions' pVertexAttributeDescriptions'
+
+instance es ~ '[] => Zero (PipelineVertexInputStateCreateInfo es) where
+  zero = PipelineVertexInputStateCreateInfo
+           ()
+           zero
+           mempty
+           mempty
+
+
+-- | VkPipelineInputAssemblyStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline input assembly state
+--
+-- = Description
+--
+-- Restarting the assembly of primitives discards the most recent index
+-- values if those elements formed an incomplete primitive, and restarts
+-- the primitive assembly using the subsequent indices, but only assembling
+-- the immediately following element through the end of the originally
+-- specified elements. The primitive restart index value comparison is
+-- performed before adding the @vertexOffset@ value to the index value.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06252# If
+--     @topology@ is
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_POINT_LIST',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY'
+--     or
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY',
+--     and @primitiveRestartEnable@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveTopologyListRestart primitiveTopologyListRestart>
+--     feature /must/ be enabled
+--
+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06253# If
+--     @topology@ is
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',
+--     and @primitiveRestartEnable@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveTopologyPatchListRestart primitiveTopologyPatchListRestart>
+--     feature /must/ be enabled
+--
+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @topology@ /must/ not be any of
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'
+--     or
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY'
+--
+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00430# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @topology@ /must/ not be
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'
+--
+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-triangleFans-04452# If
+--     the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@triangleFans@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @topology@ /must/ not be
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_FAN'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-pNext-pNext# @pNext@
+--     /must/ be @NULL@
+--
+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-flags-zerobitmask#
+--     @flags@ /must/ be @0@
+--
+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-parameter#
+--     @topology@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' value
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags.PipelineInputAssemblyStateCreateFlags',
+-- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineInputAssemblyStateCreateInfo = PipelineInputAssemblyStateCreateInfo
+  { -- | @flags@ is reserved for future use.
+    flags :: PipelineInputAssemblyStateCreateFlags
+  , -- | @topology@ is a
+    -- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' defining the
+    -- primitive topology, as described below.
+    topology :: PrimitiveTopology
+  , -- | @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',
+    -- '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
+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', 0xFF when @indexType@
+    -- is equal to 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', or
+    -- 0xFFFF when @indexType@ is equal to
+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16'. Primitive restart is
+    -- not allowed for “list” topologies, unless one of the features
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveTopologyPatchListRestart primitiveTopologyPatchListRestart>
+    -- (for
+    -- 'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST')
+    -- or
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveTopologyListRestart primitiveTopologyListRestart>
+    -- (for all other list topologies) is enabled.
+    primitiveRestartEnable :: Bool
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineInputAssemblyStateCreateInfo)
+#endif
+deriving instance Show PipelineInputAssemblyStateCreateInfo
+
+instance ToCStruct PipelineInputAssemblyStateCreateInfo where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineInputAssemblyStateCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (topology)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (primitiveRestartEnable))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineInputAssemblyStateCreateInfo where
+  peekCStruct p = do
+    flags <- peek @PipelineInputAssemblyStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags))
+    topology <- peek @PrimitiveTopology ((p `plusPtr` 20 :: Ptr PrimitiveTopology))
+    primitiveRestartEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PipelineInputAssemblyStateCreateInfo
+             flags topology (bool32ToBool primitiveRestartEnable)
+
+instance Storable PipelineInputAssemblyStateCreateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineInputAssemblyStateCreateInfo where
+  zero = PipelineInputAssemblyStateCreateInfo
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineTessellationStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline tessellation state
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineTessellationStateCreateInfo-patchControlPoints-01214#
+--     @patchControlPoints@ /must/ be greater than zero and less than or
+--     equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineTessellationStateCreateInfo-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineTessellationStateCreateInfo-pNext-pNext# @pNext@
+--     /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PipelineTessellationDomainOriginStateCreateInfo'
+--
+-- -   #VUID-VkPipelineTessellationStateCreateInfo-sType-unique# The
+--     @sType@ value of each struct in the @pNext@ chain /must/ be unique
+--
+-- -   #VUID-VkPipelineTessellationStateCreateInfo-flags-zerobitmask#
+--     @flags@ /must/ be @0@
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
+-- 'Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags.PipelineTessellationStateCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineTessellationStateCreateInfo (es :: [Type]) = PipelineTessellationStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineTessellationStateCreateFlags
+  , -- | @patchControlPoints@ is the number of control points per patch.
+    patchControlPoints :: Word32
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineTessellationStateCreateInfo (es :: [Type]))
+#endif
+deriving instance Show (Chain es) => Show (PipelineTessellationStateCreateInfo es)
+
+instance Extensible PipelineTessellationStateCreateInfo where
+  extensibleTypeName = "PipelineTessellationStateCreateInfo"
+  setNext PipelineTessellationStateCreateInfo{..} next' = PipelineTessellationStateCreateInfo{next = next', ..}
+  getNext PipelineTessellationStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineTessellationStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineTessellationDomainOriginStateCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineTessellationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineTessellationStateCreateInfo es) where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineTessellationStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (patchControlPoints)
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance (Extendss PipelineTessellationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineTessellationStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineTessellationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags))
+    patchControlPoints <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ PipelineTessellationStateCreateInfo
+             next flags patchControlPoints
+
+instance es ~ '[] => Zero (PipelineTessellationStateCreateInfo es) where
+  zero = PipelineTessellationStateCreateInfo
+           ()
+           zero
+           zero
+
+
+-- | VkPipelineViewportStateCreateInfo - Structure specifying parameters of a
+-- newly created pipeline viewport state
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-viewportCount-01216# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @viewportCount@ /must/ not be greater than
+--     @1@
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @scissorCount@ /must/ not be greater than
+--     @1@
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-viewportCount-01218#
+--     @viewportCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-01219#
+--     @scissorCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-x-02821# The @x@ and @y@
+--     members of @offset@ member of any element of @pScissors@ /must/ be
+--     greater than or equal to @0@
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-offset-02822# Evaluation of
+--     (@offset.x@ + @extent.width@) /must/ not cause a signed integer
+--     addition overflow for any element of @pScissors@
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-offset-02823# Evaluation of
+--     (@offset.y@ + @extent.height@) /must/ not cause a signed integer
+--     addition overflow for any element of @pScissors@
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-04134# If the
+--     graphics pipeline is being created without
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
+--     set then @scissorCount@ and @viewportCount@ /must/ be identical
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-viewportCount-04135# If the
+--     graphics pipeline is being created with
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
+--     set then @viewportCount@ /must/ be @0@, otherwise it /must/ be
+--     greater than @0@
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-04136# If the
+--     graphics pipeline is being created with
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
+--     set then @scissorCount@ /must/ be @0@, otherwise it /must/ be
+--     greater than @0@
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-viewportWScalingEnable-01726#
+--     If the @viewportWScalingEnable@ member of a
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--     structure included in the @pNext@ chain is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @viewportCount@ member of
+--     the
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--     structure /must/ be greater than or equal to
+--     'PipelineViewportStateCreateInfo'::@viewportCount@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-sType-sType# @sType@ /must/
+--     be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-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_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_EXT_depth_clip_control.PipelineViewportDepthClipControlCreateInfoEXT',
+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV',
+--     or
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-sType-unique# The @sType@
+--     value of each struct in the @pNext@ chain /must/ be unique
+--
+-- -   #VUID-VkPipelineViewportStateCreateInfo-flags-zerobitmask# @flags@
+--     /must/ be @0@
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineViewportStateCreateFlags.PipelineViewportStateCreateFlags',
+-- 'Vulkan.Core10.FundamentalTypes.Rect2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'Viewport'
+data PipelineViewportStateCreateInfo (es :: [Type]) = PipelineViewportStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineViewportStateCreateFlags
+  , -- | @viewportCount@ is the number of viewports used by the pipeline.
+    viewportCount :: Word32
+  , -- | @pViewports@ is a pointer to an array of 'Viewport' structures, defining
+    -- the viewport transforms. If the viewport state is dynamic, this member
+    -- is ignored.
+    viewports :: Vector Viewport
+  , -- | @scissorCount@ is the number of
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-scissor scissors>
+    -- and /must/ match the number of viewports.
+    scissorCount :: Word32
+  , -- | @pScissors@ is a pointer to an array of
+    -- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures defining the
+    -- rectangular bounds of the scissor for the corresponding viewport. If the
+    -- scissor state is dynamic, this member is ignored.
+    scissors :: Vector Rect2D
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineViewportStateCreateInfo (es :: [Type]))
+#endif
+deriving instance Show (Chain es) => Show (PipelineViewportStateCreateInfo es)
+
+instance Extensible PipelineViewportStateCreateInfo where
+  extensibleTypeName = "PipelineViewportStateCreateInfo"
+  setNext PipelineViewportStateCreateInfo{..} next' = PipelineViewportStateCreateInfo{next = next', ..}
+  getNext PipelineViewportStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineViewportStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineViewportDepthClipControlCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineViewportCoarseSampleOrderStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineViewportShadingRateImageStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineViewportExclusiveScissorStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineViewportSwizzleStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineViewportWScalingStateCreateInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineViewportStateCreateInfo es, PokeChain es) => ToCStruct (PipelineViewportStateCreateInfo es) where
+  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineViewportStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags)) (flags)
+    let pViewportsLength = Data.Vector.length $ (viewports)
+    viewportCount'' <- lift $ if (viewportCount) == 0
+      then pure $ fromIntegral pViewportsLength
+      else do
+        unless (fromIntegral pViewportsLength == (viewportCount) || pViewportsLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pViewports must be empty or have 'viewportCount' elements" Nothing Nothing
+        pure (viewportCount)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (viewportCount'')
+    pViewports'' <- if Data.Vector.null (viewports)
+      then pure nullPtr
+      else do
+        pPViewports <- ContT $ allocaBytes @Viewport (((Data.Vector.length (viewports))) * 24)
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e)) ((viewports))
+        pure $ pPViewports
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Viewport))) pViewports''
+    let pScissorsLength = Data.Vector.length $ (scissors)
+    scissorCount'' <- lift $ if (scissorCount) == 0
+      then pure $ fromIntegral pScissorsLength
+      else do
+        unless (fromIntegral pScissorsLength == (scissorCount) || pScissorsLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pScissors must be empty or have 'scissorCount' elements" Nothing Nothing
+        pure (scissorCount)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (scissorCount'')
+    pScissors'' <- if Data.Vector.null (scissors)
+      then pure nullPtr
+      else do
+        pPScissors <- ContT $ allocaBytes @Rect2D (((Data.Vector.length (scissors))) * 16)
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e)) ((scissors))
+        pure $ pPScissors
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) pScissors''
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ f
+
+instance (Extendss PipelineViewportStateCreateInfo es, PeekChain es) => FromCStruct (PipelineViewportStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineViewportStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags))
+    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pViewports <- peek @(Ptr Viewport) ((p `plusPtr` 24 :: Ptr (Ptr Viewport)))
+    let pViewportsLength = if pViewports == nullPtr then 0 else (fromIntegral viewportCount)
+    pViewports' <- generateM pViewportsLength (\i -> peekCStruct @Viewport ((pViewports `advancePtrBytes` (24 * (i)) :: Ptr Viewport)))
+    scissorCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pScissors <- peek @(Ptr Rect2D) ((p `plusPtr` 40 :: Ptr (Ptr Rect2D)))
+    let pScissorsLength = if pScissors == nullPtr then 0 else (fromIntegral scissorCount)
+    pScissors' <- generateM pScissorsLength (\i -> peekCStruct @Rect2D ((pScissors `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
+    pure $ PipelineViewportStateCreateInfo
+             next flags viewportCount pViewports' scissorCount pScissors'
+
+instance es ~ '[] => Zero (PipelineViewportStateCreateInfo es) where
+  zero = PipelineViewportStateCreateInfo
+           ()
+           zero
+           zero
+           mempty
+           zero
+           mempty
+
+
+-- | VkPipelineRasterizationStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline rasterization state
+--
+-- = Description
+--
+-- The application /can/ also add a
+-- 'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD'
+-- structure to the @pNext@ chain of a
+-- 'PipelineRasterizationStateCreateInfo' structure. This structure enables
+-- selecting the rasterization order to use when rendering with the
+-- corresponding graphics pipeline as described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-order Rasterization Order>.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-depthClamp depth clamping>
+--     feature is not enabled, @depthClampEnable@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507# If
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-fillModeNonSolid non-solid fill modes>
+--     feature is not enabled, @polygonMode@ /must/ be
+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL' or
+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01414# If
+--     the @VK_NV_fill_rectangle@ extension is not enabled, @polygonMode@
+--     /must/ not be
+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-pointPolygons-04458# If
+--     the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@pointPolygons@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', and
+--     @rasterizerDiscardEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE',
+--     @polygonMode@ /must/ not be
+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_POINT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-pNext-pNext# Each
+--     @pNext@ member of any structure (including this one) in the @pNext@
+--     chain /must/ be either @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_conservative_rasterization.PipelineRasterizationConservativeStateCreateInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_provoking_vertex.PipelineRasterizationProvokingVertexStateCreateInfoEXT',
+--     'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD',
+--     or
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-sType-unique# The
+--     @sType@ value of each struct in the @pNext@ chain /must/ be unique
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-flags-zerobitmask#
+--     @flags@ /must/ be @0@
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-parameter#
+--     @polygonMode@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PolygonMode.PolygonMode' value
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-cullMode-parameter#
+--     @cullMode@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits' values
+--
+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-frontFace-parameter#
+--     @frontFace@ /must/ be a valid
+--     'Vulkan.Core10.Enums.FrontFace.FrontFace' value
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlags',
+-- 'Vulkan.Core10.Enums.FrontFace.FrontFace', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags.PipelineRasterizationStateCreateFlags',
+-- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineRasterizationStateCreateInfo (es :: [Type]) = PipelineRasterizationStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineRasterizationStateCreateFlags
+  , -- | @depthClampEnable@ controls whether to clamp the fragment’s depth values
+    -- as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-depth Depth Test>.
+    -- If the pipeline is not created with
+    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'
+    -- present then enabling depth clamp will also disable clipping primitives
+    -- to the z planes of the frustrum as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>.
+    -- Otherwise depth clipping is controlled by the state set in
+    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'.
+    depthClampEnable :: Bool
+  , -- | @rasterizerDiscardEnable@ controls whether primitives are discarded
+    -- immediately before the rasterization stage.
+    rasterizerDiscardEnable :: Bool
+  , -- | @polygonMode@ is the triangle rendering mode. See
+    -- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode'.
+    polygonMode :: PolygonMode
+  , -- | @cullMode@ is the triangle facing direction used for primitive culling.
+    -- See 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits'.
+    cullMode :: CullModeFlags
+  , -- | @frontFace@ is a 'Vulkan.Core10.Enums.FrontFace.FrontFace' value
+    -- specifying the front-facing triangle orientation to be used for culling.
+    frontFace :: FrontFace
+  , -- | @depthBiasEnable@ controls whether to bias fragment depth values.
+    depthBiasEnable :: Bool
+  , -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant
+    -- depth value added to each fragment.
+    depthBiasConstantFactor :: Float
+  , -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.
+    depthBiasClamp :: Float
+  , -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope
+    -- in depth bias calculations.
+    depthBiasSlopeFactor :: Float
+  , -- | @lineWidth@ is the width of rasterized line segments.
+    lineWidth :: Float
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineRasterizationStateCreateInfo (es :: [Type]))
+#endif
+deriving instance Show (Chain es) => Show (PipelineRasterizationStateCreateInfo es)
+
+instance Extensible PipelineRasterizationStateCreateInfo where
+  extensibleTypeName = "PipelineRasterizationStateCreateInfo"
+  setNext PipelineRasterizationStateCreateInfo{..} next' = PipelineRasterizationStateCreateInfo{next = next', ..}
+  getNext PipelineRasterizationStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineRasterizationStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineRasterizationProvokingVertexStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRasterizationLineStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRasterizationDepthClipStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRasterizationStateStreamCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRasterizationConservativeStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRasterizationStateRasterizationOrderAMD = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineRasterizationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineRasterizationStateCreateInfo es) where
+  withCStruct x f = allocaBytes 64 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineRasterizationStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthClampEnable))
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rasterizerDiscardEnable))
+    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (polygonMode)
+    lift $ poke ((p `plusPtr` 32 :: Ptr CullModeFlags)) (cullMode)
+    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (frontFace)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (depthBiasEnable))
+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (depthBiasConstantFactor))
+    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (depthBiasClamp))
+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (depthBiasSlopeFactor))
+    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (lineWidth))
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))
+    lift $ f
+
+instance (Extendss PipelineRasterizationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineRasterizationStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineRasterizationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags))
+    depthClampEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    rasterizerDiscardEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    polygonMode <- peek @PolygonMode ((p `plusPtr` 28 :: Ptr PolygonMode))
+    cullMode <- peek @CullModeFlags ((p `plusPtr` 32 :: Ptr CullModeFlags))
+    frontFace <- peek @FrontFace ((p `plusPtr` 36 :: Ptr FrontFace))
+    depthBiasEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    depthBiasConstantFactor <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))
+    depthBiasClamp <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))
+    depthBiasSlopeFactor <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
+    lineWidth <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))
+    pure $ PipelineRasterizationStateCreateInfo
+             next flags (bool32ToBool depthClampEnable) (bool32ToBool rasterizerDiscardEnable) polygonMode cullMode frontFace (bool32ToBool depthBiasEnable) (coerce @CFloat @Float depthBiasConstantFactor) (coerce @CFloat @Float depthBiasClamp) (coerce @CFloat @Float depthBiasSlopeFactor) (coerce @CFloat @Float lineWidth)
+
+instance es ~ '[] => Zero (PipelineRasterizationStateCreateInfo es) where
+  zero = PipelineRasterizationStateCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineMultisampleStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline multisample state
+--
+-- = Description
+--
+-- Each bit in the sample mask is associated with a unique
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask sample index>
+-- as defined for the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask coverage mask>.
+-- Each bit b for mask word w in the sample mask corresponds to sample
+-- index i, where i = 32 × w + b. @pSampleMask@ has a length equal to ⌈
+-- @rasterizationSamples@ \/ 32 ⌉ words.
+--
+-- If @pSampleMask@ is @NULL@, it is treated as if the mask has all bits
+-- set to @1@.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-sampleRateShading sample rate shading>
+--     feature is not enabled, @sampleShadingEnable@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-alphaToOne alpha to one>
+--     feature is not enabled, @alphaToOneEnable@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786#
+--     @minSampleShading@ /must/ be in the range [0,1]
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415#
+--     If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
+--     if the subpass has any color attachments and @rasterizationSamples@
+--     is greater than the number of color samples, then
+--     @sampleShadingEnable@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-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_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',
+--     or
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-sType-unique# The @sType@
+--     value of each struct in the @pNext@ chain /must/ be unique
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-flags-zerobitmask#
+--     @flags@ /must/ be @0@
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-parameter#
+--     @rasterizationSamples@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+--
+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-pSampleMask-parameter# If
+--     @pSampleMask@ is not @NULL@, @pSampleMask@ /must/ be a valid pointer
+--     to an array of
+--     \(\lceil{\mathit{rasterizationSamples} \over 32}\rceil\)
+--     'Vulkan.Core10.FundamentalTypes.SampleMask' values
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags.PipelineMultisampleStateCreateFlags',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
+-- 'Vulkan.Core10.FundamentalTypes.SampleMask',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineMultisampleStateCreateInfo (es :: [Type]) = PipelineMultisampleStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineMultisampleStateCreateFlags
+  , -- | @rasterizationSamples@ is a
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+    -- specifying the number of samples used in rasterization.
+    rasterizationSamples :: SampleCountFlagBits
+  , -- | @sampleShadingEnable@ /can/ be used to enable
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>.
+    sampleShadingEnable :: Bool
+  , -- | @minSampleShading@ specifies a minimum fraction of sample shading if
+    -- @sampleShadingEnable@ is set to 'Vulkan.Core10.FundamentalTypes.TRUE'.
+    minSampleShading :: Float
+  , -- | @pSampleMask@ is a pointer to an array of
+    -- 'Vulkan.Core10.FundamentalTypes.SampleMask' values used in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-samplemask sample mask test>.
+    sampleMask :: Vector SampleMask
+  , -- | @alphaToCoverageEnable@ controls whether a temporary coverage value is
+    -- generated based on the alpha component of the fragment’s first color
+    -- output as specified in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-covg Multisample Coverage>
+    -- section.
+    alphaToCoverageEnable :: Bool
+  , -- | @alphaToOneEnable@ controls whether the alpha component of the
+    -- fragment’s first color output is replaced with one as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-covg Multisample Coverage>.
+    alphaToOneEnable :: Bool
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineMultisampleStateCreateInfo (es :: [Type]))
+#endif
+deriving instance Show (Chain es) => Show (PipelineMultisampleStateCreateInfo es)
+
+instance Extensible PipelineMultisampleStateCreateInfo where
+  extensibleTypeName = "PipelineMultisampleStateCreateInfo"
+  setNext PipelineMultisampleStateCreateInfo{..} next' = PipelineMultisampleStateCreateInfo{next = next', ..}
+  getNext PipelineMultisampleStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineMultisampleStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineCoverageReductionStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineCoverageModulationStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineSampleLocationsStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineCoverageToColorStateCreateInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineMultisampleStateCreateInfo es, PokeChain es) => ToCStruct (PipelineMultisampleStateCreateInfo es) where
+  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineMultisampleStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (rasterizationSamples)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleShadingEnable))
+    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (minSampleShading))
+    pSampleMask'' <- case Data.Vector.length (sampleMask) of
+      0      -> pure nullPtr
+      vecLen -> do
+        let requiredLen = case (rasterizationSamples) of
+              SampleCountFlagBits n -> (n + 31) `quot` 32
+        lift $ unless (requiredLen == fromIntegral vecLen) $
+          throwIO $ IOError Nothing InvalidArgument "" "sampleMask must be either empty or contain enough bits to cover all the sample specified by 'rasterizationSamples'" Nothing Nothing
+        do
+          pPSampleMask' <- ContT $ allocaBytes @SampleMask ((Data.Vector.length ((sampleMask))) * 4)
+          lift $ Data.Vector.imapM_ (\i e -> poke (pPSampleMask' `plusPtr` (4 * (i)) :: Ptr SampleMask) (e)) ((sampleMask))
+          pure $ pPSampleMask'
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleMask))) pSampleMask''
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (alphaToCoverageEnable))
+    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (alphaToOneEnable))
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance (Extendss PipelineMultisampleStateCreateInfo es, PeekChain es) => FromCStruct (PipelineMultisampleStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineMultisampleStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags))
+    rasterizationSamples <- peek @SampleCountFlagBits ((p `plusPtr` 20 :: Ptr SampleCountFlagBits))
+    sampleShadingEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    minSampleShading <- peek @CFloat ((p `plusPtr` 28 :: Ptr CFloat))
+    pSampleMask <- peek @(Ptr SampleMask) ((p `plusPtr` 32 :: Ptr (Ptr SampleMask)))
+    pSampleMask' <- if pSampleMask == nullPtr
+      then pure mempty
+      else generateM (case rasterizationSamples of
+        SampleCountFlagBits n -> (fromIntegral n + 31) `quot` 32) (\i -> peek @SampleMask (((pSampleMask) `advancePtrBytes` (4 * (i)) :: Ptr SampleMask)))
+    alphaToCoverageEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    alphaToOneEnable <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    pure $ PipelineMultisampleStateCreateInfo
+             next flags rasterizationSamples (bool32ToBool sampleShadingEnable) (coerce @CFloat @Float minSampleShading) pSampleMask' (bool32ToBool alphaToCoverageEnable) (bool32ToBool alphaToOneEnable)
+
+instance es ~ '[] => Zero (PipelineMultisampleStateCreateInfo es) where
+  zero = PipelineMultisampleStateCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           mempty
+           zero
+           zero
+
+
+-- | VkPipelineColorBlendAttachmentState - Structure specifying a pipeline
+-- color blend attachment state
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
+--     feature is not enabled, @srcColorBlendFactor@ /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-00609#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
+--     feature is not enabled, @dstColorBlendFactor@ /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-00610#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
+--     feature is not enabled, @srcAlphaBlendFactor@ /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-00611#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
+--     feature is not enabled, @dstAlphaBlendFactor@ /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01406# If
+--     either of @colorBlendOp@ or @alphaBlendOp@ is an
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
+--     then @colorBlendOp@ /must/ equal @alphaBlendOp@
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01407#
+--     If
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE' and @colorBlendOp@ is an
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
+--     then @colorBlendOp@ /must/ be the same for all attachments
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01408#
+--     If
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE' and @alphaBlendOp@ is an
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
+--     then @alphaBlendOp@ /must/ be the same for all attachments
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-advancedBlendAllOperations-01409#
+--     If
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendAllOperations@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', then @colorBlendOp@
+--     /must/ not be 'Vulkan.Core10.Enums.BlendOp.BLEND_OP_ZERO_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OVER_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OVER_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_IN_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_IN_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OUT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OUT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_ATOP_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_ATOP_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_XOR_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_RGB_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARDODGE_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARBURN_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_VIVIDLIGHT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARLIGHT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PINLIGHT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_HARDMIX_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_ALPHA_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_DARKER_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_CLAMPED_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_CONTRAST_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_OVG_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_RED_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_GREEN_EXT', or
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_BLUE_EXT'
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01410# If
+--     @colorBlendOp@ or @alphaBlendOp@ is an
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
+--     then @colorAttachmentCount@ of the subpass this pipeline is compiled
+--     against /must/ be less than or equal to
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendMaxColorAttachments@
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04454#
+--     If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @srcColorBlendFactor@
+--     /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04455#
+--     If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @dstColorBlendFactor@
+--     /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-parameter#
+--     @srcColorBlendFactor@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-parameter#
+--     @dstColorBlendFactor@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-parameter#
+--     @colorBlendOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendOp.BlendOp' value
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-parameter#
+--     @srcAlphaBlendFactor@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-parameter#
+--     @dstAlphaBlendFactor@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-alphaBlendOp-parameter#
+--     @alphaBlendOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendOp.BlendOp' value
+--
+-- -   #VUID-VkPipelineColorBlendAttachmentState-colorWriteMask-parameter#
+--     @colorWriteMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'
+--     values
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.Enums.BlendFactor.BlendFactor',
+-- 'Vulkan.Core10.Enums.BlendOp.BlendOp',
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags',
+-- 'PipelineColorBlendStateCreateInfo'
+data PipelineColorBlendAttachmentState = PipelineColorBlendAttachmentState
+  { -- | @blendEnable@ controls whether blending is enabled for the corresponding
+    -- color attachment. If blending is not enabled, the source fragment’s
+    -- color for that attachment is passed through unmodified.
+    blendEnable :: Bool
+  , -- | @srcColorBlendFactor@ selects which blend factor is used to determine
+    -- the source factors (Sr,Sg,Sb).
+    srcColorBlendFactor :: BlendFactor
+  , -- | @dstColorBlendFactor@ selects which blend factor is used to determine
+    -- the destination factors (Dr,Dg,Db).
+    dstColorBlendFactor :: BlendFactor
+  , -- | @colorBlendOp@ selects which blend operation is used to calculate the
+    -- RGB values to write to the color attachment.
+    colorBlendOp :: BlendOp
+  , -- | @srcAlphaBlendFactor@ selects which blend factor is used to determine
+    -- the source factor Sa.
+    srcAlphaBlendFactor :: BlendFactor
+  , -- | @dstAlphaBlendFactor@ selects which blend factor is used to determine
+    -- the destination factor Da.
+    dstAlphaBlendFactor :: BlendFactor
+  , -- | @alphaBlendOp@ selects which blend operation is use to calculate the
+    -- alpha values to write to the color attachment.
+    alphaBlendOp :: BlendOp
+  , -- | @colorWriteMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'
+    -- specifying which of the R, G, B, and\/or A components are enabled for
+    -- writing, as described for the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-color-write-mask Color Write Mask>.
+    colorWriteMask :: ColorComponentFlags
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineColorBlendAttachmentState)
+#endif
+deriving instance Show PipelineColorBlendAttachmentState
+
+instance ToCStruct PipelineColorBlendAttachmentState where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineColorBlendAttachmentState{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (blendEnable))
+    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (srcColorBlendFactor)
+    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (dstColorBlendFactor)
+    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (colorBlendOp)
+    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (srcAlphaBlendFactor)
+    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (dstAlphaBlendFactor)
+    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (alphaBlendOp)
+    poke ((p `plusPtr` 28 :: Ptr ColorComponentFlags)) (colorWriteMask)
+    f
+  cStructSize = 32
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (zero)
+    f
+
+instance FromCStruct PipelineColorBlendAttachmentState where
+  peekCStruct p = do
+    blendEnable <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))
+    srcColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 4 :: Ptr BlendFactor))
+    dstColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 8 :: Ptr BlendFactor))
+    colorBlendOp <- peek @BlendOp ((p `plusPtr` 12 :: Ptr BlendOp))
+    srcAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 16 :: Ptr BlendFactor))
+    dstAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 20 :: Ptr BlendFactor))
+    alphaBlendOp <- peek @BlendOp ((p `plusPtr` 24 :: Ptr BlendOp))
+    colorWriteMask <- peek @ColorComponentFlags ((p `plusPtr` 28 :: Ptr ColorComponentFlags))
+    pure $ PipelineColorBlendAttachmentState
+             (bool32ToBool blendEnable) srcColorBlendFactor dstColorBlendFactor colorBlendOp srcAlphaBlendFactor dstAlphaBlendFactor alphaBlendOp colorWriteMask
+
+instance Storable PipelineColorBlendAttachmentState where
+  sizeOf ~_ = 32
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineColorBlendAttachmentState where
+  zero = PipelineColorBlendAttachmentState
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineColorBlendStateCreateInfo - Structure specifying parameters of
+-- a newly created pipeline color blend state
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-independentBlend independent blending>
+--     feature is not enabled, all elements of @pAttachments@ /must/ be
+--     identical
+--
+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606# If
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-logicOp logic operations>
+--     feature is not enabled, @logicOpEnable@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00607# If
+--     @logicOpEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', @logicOp@
+--     /must/ be a valid 'Vulkan.Core10.Enums.LogicOp.LogicOp' value
+--
+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-rasterizationOrderColorAttachmentAccess-06465#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-rasterizationOrderColorAttachmentAccess rasterizationOrderColorAttachmentAccess>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-pNext-pNext# Each @pNext@
+--     member of any structure (including this one) in the @pNext@ chain
+--     /must/ be either @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.PipelineColorWriteCreateInfoEXT'
+--
+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-sType-unique# The @sType@
+--     value of each struct in the @pNext@ chain /must/ be unique
+--
+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-flags-parameter# @flags@
+--     /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PipelineColorBlendStateCreateFlagBits'
+--     values
+--
+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-parameter# If
+--     @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid
+--     'PipelineColorBlendAttachmentState' structures
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.LogicOp.LogicOp',
+-- 'PipelineColorBlendAttachmentState',
+-- 'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PipelineColorBlendStateCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineColorBlendStateCreateInfo (es :: [Type]) = PipelineColorBlendStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PipelineColorBlendStateCreateFlagBits'
+    -- specifying additional color blending information.
+    flags :: PipelineColorBlendStateCreateFlags
+  , -- | @logicOpEnable@ controls whether to apply
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-logicop Logical Operations>.
+    logicOpEnable :: Bool
+  , -- | @logicOp@ selects which logical operation to apply.
+    logicOp :: LogicOp
+  , -- | @pAttachments@ is a pointer to an array of
+    -- 'PipelineColorBlendAttachmentState' structures defining blend state for
+    -- each color attachment.
+    attachments :: Vector PipelineColorBlendAttachmentState
+  , -- | @blendConstants@ is a pointer to an array of four values used as the R,
+    -- G, B, and A components of the blend constant that are used in blending,
+    -- depending on the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.
+    blendConstants :: (Float, Float, Float, Float)
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineColorBlendStateCreateInfo (es :: [Type]))
+#endif
+deriving instance Show (Chain es) => Show (PipelineColorBlendStateCreateInfo es)
+
+instance Extensible PipelineColorBlendStateCreateInfo where
+  extensibleTypeName = "PipelineColorBlendStateCreateInfo"
+  setNext PipelineColorBlendStateCreateInfo{..} next' = PipelineColorBlendStateCreateInfo{next = next', ..}
+  getNext PipelineColorBlendStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineColorBlendStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineColorWriteCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineColorBlendAdvancedStateCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineColorBlendStateCreateInfo es, PokeChain es) => ToCStruct (PipelineColorBlendStateCreateInfo es) where
+  withCStruct x f = allocaBytes 56 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineColorBlendStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (logicOpEnable))
+    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (logicOp)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
+    pPAttachments' <- ContT $ allocaBytes @PipelineColorBlendAttachmentState ((Data.Vector.length (attachments)) * 32)
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e)) (attachments)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')
+    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
+    lift $ case (blendConstants) of
+      (e0, e1, e2, e3) -> do
+        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
+        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (zero)
+    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
+    lift $ case ((zero, zero, zero, zero)) of
+      (e0, e1, e2, e3) -> do
+        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
+        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+    lift $ f
+
+instance (Extendss PipelineColorBlendStateCreateInfo es, PeekChain es) => FromCStruct (PipelineColorBlendStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineColorBlendStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags))
+    logicOpEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    logicOp <- peek @LogicOp ((p `plusPtr` 24 :: Ptr LogicOp))
+    attachmentCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pAttachments <- peek @(Ptr PipelineColorBlendAttachmentState) ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState)))
+    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekCStruct @PipelineColorBlendAttachmentState ((pAttachments `advancePtrBytes` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState)))
+    let pblendConstants = lowerArrayPtr @CFloat ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
+    blendConstants0 <- peek @CFloat ((pblendConstants `advancePtrBytes` 0 :: Ptr CFloat))
+    blendConstants1 <- peek @CFloat ((pblendConstants `advancePtrBytes` 4 :: Ptr CFloat))
+    blendConstants2 <- peek @CFloat ((pblendConstants `advancePtrBytes` 8 :: Ptr CFloat))
+    blendConstants3 <- peek @CFloat ((pblendConstants `advancePtrBytes` 12 :: Ptr CFloat))
+    pure $ PipelineColorBlendStateCreateInfo
+             next flags (bool32ToBool logicOpEnable) logicOp pAttachments' (((coerce @CFloat @Float blendConstants0), (coerce @CFloat @Float blendConstants1), (coerce @CFloat @Float blendConstants2), (coerce @CFloat @Float blendConstants3)))
+
+instance es ~ '[] => Zero (PipelineColorBlendStateCreateInfo es) where
+  zero = PipelineColorBlendStateCreateInfo
+           ()
+           zero
+           zero
+           zero
+           mempty
+           (zero, zero, zero, zero)
+
+
+-- | VkPipelineDynamicStateCreateInfo - Structure specifying parameters of a
+-- newly created pipeline dynamic state
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442# Each
+--     element of @pDynamicStates@ /must/ be unique
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineDynamicStateCreateInfo-sType-sType# @sType@ /must/
+--     be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineDynamicStateCreateInfo-pNext-pNext# @pNext@ /must/
+--     be @NULL@
+--
+-- -   #VUID-VkPipelineDynamicStateCreateInfo-flags-zerobitmask# @flags@
+--     /must/ be @0@
+--
+-- -   #VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-parameter# If
+--     @dynamicStateCount@ is not @0@, @pDynamicStates@ /must/ be a valid
+--     pointer to an array of @dynamicStateCount@ valid
+--     'Vulkan.Core10.Enums.DynamicState.DynamicState' values
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.Enums.DynamicState.DynamicState',
+-- 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags.PipelineDynamicStateCreateFlags',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineDynamicStateCreateInfo = PipelineDynamicStateCreateInfo
+  { -- | @flags@ is reserved for future use.
+    flags :: PipelineDynamicStateCreateFlags
+  , -- | @pDynamicStates@ is a pointer to an array of
+    -- 'Vulkan.Core10.Enums.DynamicState.DynamicState' values specifying which
+    -- pieces of pipeline state will use the values from dynamic state commands
+    -- rather than from pipeline state creation information.
+    dynamicStates :: Vector DynamicState
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineDynamicStateCreateInfo)
+#endif
+deriving instance Show PipelineDynamicStateCreateInfo
+
+instance ToCStruct PipelineDynamicStateCreateInfo where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineDynamicStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dynamicStates)) :: Word32))
+    pPDynamicStates' <- ContT $ allocaBytes @DynamicState ((Data.Vector.length (dynamicStates)) * 4)
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (dynamicStates)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct PipelineDynamicStateCreateInfo where
+  peekCStruct p = do
+    flags <- peek @PipelineDynamicStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags))
+    dynamicStateCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pDynamicStates <- peek @(Ptr DynamicState) ((p `plusPtr` 24 :: Ptr (Ptr DynamicState)))
+    pDynamicStates' <- generateM (fromIntegral dynamicStateCount) (\i -> peek @DynamicState ((pDynamicStates `advancePtrBytes` (4 * (i)) :: Ptr DynamicState)))
+    pure $ PipelineDynamicStateCreateInfo
+             flags pDynamicStates'
+
+instance Zero PipelineDynamicStateCreateInfo where
+  zero = PipelineDynamicStateCreateInfo
+           zero
+           mempty
+
+
+-- | VkStencilOpState - Structure specifying stencil operation state
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.Enums.CompareOp.CompareOp',
+-- 'PipelineDepthStencilStateCreateInfo',
+-- 'Vulkan.Core10.Enums.StencilOp.StencilOp'
+data StencilOpState = StencilOpState
+  { -- | @failOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value specifying
+    -- the action performed on samples that fail the stencil test.
+    --
+    -- #VUID-VkStencilOpState-failOp-parameter# @failOp@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.StencilOp.StencilOp' value
+    failOp :: StencilOp
+  , -- | @passOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value specifying
+    -- the action performed on samples that pass both the depth and stencil
+    -- tests.
+    --
+    -- #VUID-VkStencilOpState-passOp-parameter# @passOp@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.StencilOp.StencilOp' value
+    passOp :: StencilOp
+  , -- | @depthFailOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value
+    -- specifying the action performed on samples that pass the stencil test
+    -- and fail the depth test.
+    --
+    -- #VUID-VkStencilOpState-depthFailOp-parameter# @depthFailOp@ /must/ be a
+    -- valid 'Vulkan.Core10.Enums.StencilOp.StencilOp' value
+    depthFailOp :: StencilOp
+  , -- | @compareOp@ is a 'Vulkan.Core10.Enums.CompareOp.CompareOp' value
+    -- specifying the comparison operator used in the stencil test.
+    --
+    -- #VUID-VkStencilOpState-compareOp-parameter# @compareOp@ /must/ be a
+    -- valid 'Vulkan.Core10.Enums.CompareOp.CompareOp' value
+    compareOp :: CompareOp
+  , -- | @compareMask@ selects the bits of the unsigned integer stencil values
+    -- participating in the stencil test.
+    compareMask :: Word32
+  , -- | @writeMask@ selects the bits of the unsigned integer stencil values
+    -- updated by the stencil test in the stencil framebuffer attachment.
+    writeMask :: Word32
+  , -- | @reference@ is an integer reference value that is used in the unsigned
+    -- stencil comparison.
+    reference :: Word32
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (StencilOpState)
+#endif
+deriving instance Show StencilOpState
+
+instance ToCStruct StencilOpState where
+  withCStruct x f = allocaBytes 28 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p StencilOpState{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (failOp)
+    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (passOp)
+    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (depthFailOp)
+    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (compareOp)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (compareMask)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (writeMask)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (reference)
+    f
+  cStructSize = 28
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct StencilOpState where
+  peekCStruct p = do
+    failOp <- peek @StencilOp ((p `plusPtr` 0 :: Ptr StencilOp))
+    passOp <- peek @StencilOp ((p `plusPtr` 4 :: Ptr StencilOp))
+    depthFailOp <- peek @StencilOp ((p `plusPtr` 8 :: Ptr StencilOp))
+    compareOp <- peek @CompareOp ((p `plusPtr` 12 :: Ptr CompareOp))
+    compareMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    writeMask <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    reference <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ StencilOpState
+             failOp passOp depthFailOp compareOp compareMask writeMask reference
+
+instance Storable StencilOpState where
+  sizeOf ~_ = 28
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero StencilOpState where
+  zero = StencilOpState
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineDepthStencilStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline depth stencil state
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-depthBounds depth bounds testing>
+--     feature is not enabled, @depthBoundsTestEnable@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-separateStencilMaskRef-04453#
+--     If the @VK_KHR_portability_subset@ extension is enabled, and
+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@separateStencilMaskRef@
+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', and the value of
+--     'PipelineDepthStencilStateCreateInfo'::@stencilTestEnable@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', and the value of
+--     'PipelineRasterizationStateCreateInfo'::@cullMode@ is
+--     'Vulkan.Core10.Enums.CullModeFlagBits.CULL_MODE_NONE', the value of
+--     @reference@ in each of the 'StencilOpState' structs in @front@ and
+--     @back@ /must/ be the same
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-rasterizationOrderDepthAttachmentAccess-06463#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-rasterizationOrderDepthAttachmentAccess rasterizationOrderDepthAttachmentAccess>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM'
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-rasterizationOrderStencilAttachmentAccess-06464#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-rasterizationOrderStencilAttachmentAccess rasterizationOrderStencilAttachmentAccess>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO'
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-pNext-pNext# @pNext@
+--     /must/ be @NULL@
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-flags-parameter# @flags@
+--     /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PipelineDepthStencilStateCreateFlagBits'
+--     values
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-depthCompareOp-parameter#
+--     @depthCompareOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.CompareOp.CompareOp' value
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-front-parameter# @front@
+--     /must/ be a valid 'StencilOpState' structure
+--
+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-back-parameter# @back@
+--     /must/ be a valid 'StencilOpState' structure
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.CompareOp.CompareOp', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PipelineDepthStencilStateCreateFlags',
+-- 'StencilOpState', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineDepthStencilStateCreateInfo = PipelineDepthStencilStateCreateInfo
+  { -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PipelineDepthStencilStateCreateFlagBits'
+    -- specifying additional depth\/stencil state information.
+    flags :: PipelineDepthStencilStateCreateFlags
+  , -- | @depthTestEnable@ controls whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-depth depth testing>
+    -- is enabled.
+    depthTestEnable :: Bool
+  , -- | @depthWriteEnable@ controls whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-depth-write depth writes>
+    -- are enabled when @depthTestEnable@ is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE'. Depth writes are always disabled
+    -- when @depthTestEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE'.
+    depthWriteEnable :: Bool
+  , -- | @depthCompareOp@ is the comparison operator used in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-depth depth test>.
+    depthCompareOp :: CompareOp
+  , -- | @depthBoundsTestEnable@ controls whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-dbt depth bounds testing>
+    -- is enabled.
+    depthBoundsTestEnable :: Bool
+  , -- | @stencilTestEnable@ controls whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-stencil stencil testing>
+    -- is enabled.
+    stencilTestEnable :: Bool
+  , -- | @front@ and @back@ control the parameters of the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-stencil stencil test>.
+    front :: StencilOpState
+  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "back"
+    back :: StencilOpState
+  , -- | @minDepthBounds@ is the minimum depth bound used in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-dbt depth bounds test>.
+    minDepthBounds :: Float
+  , -- | @maxDepthBounds@ is the maximum depth bound used in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-dbt depth bounds test>.
+    maxDepthBounds :: Float
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineDepthStencilStateCreateInfo)
+#endif
+deriving instance Show PipelineDepthStencilStateCreateInfo
+
+instance ToCStruct PipelineDepthStencilStateCreateInfo where
+  withCStruct x f = allocaBytes 104 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineDepthStencilStateCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthTestEnable))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (depthWriteEnable))
+    poke ((p `plusPtr` 28 :: Ptr CompareOp)) (depthCompareOp)
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (depthBoundsTestEnable))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (stencilTestEnable))
+    poke ((p `plusPtr` 40 :: Ptr StencilOpState)) (front)
+    poke ((p `plusPtr` 68 :: Ptr StencilOpState)) (back)
+    poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (minDepthBounds))
+    poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (maxDepthBounds))
+    f
+  cStructSize = 104
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr CompareOp)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr StencilOpState)) (zero)
+    poke ((p `plusPtr` 68 :: Ptr StencilOpState)) (zero)
+    poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (zero))
+    f
+
+instance FromCStruct PipelineDepthStencilStateCreateInfo where
+  peekCStruct p = do
+    flags <- peek @PipelineDepthStencilStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags))
+    depthTestEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    depthWriteEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    depthCompareOp <- peek @CompareOp ((p `plusPtr` 28 :: Ptr CompareOp))
+    depthBoundsTestEnable <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    stencilTestEnable <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    front <- peekCStruct @StencilOpState ((p `plusPtr` 40 :: Ptr StencilOpState))
+    back <- peekCStruct @StencilOpState ((p `plusPtr` 68 :: Ptr StencilOpState))
+    minDepthBounds <- peek @CFloat ((p `plusPtr` 96 :: Ptr CFloat))
+    maxDepthBounds <- peek @CFloat ((p `plusPtr` 100 :: Ptr CFloat))
+    pure $ PipelineDepthStencilStateCreateInfo
+             flags (bool32ToBool depthTestEnable) (bool32ToBool depthWriteEnable) depthCompareOp (bool32ToBool depthBoundsTestEnable) (bool32ToBool stencilTestEnable) front back (coerce @CFloat @Float minDepthBounds) (coerce @CFloat @Float maxDepthBounds)
+
+instance Storable PipelineDepthStencilStateCreateInfo where
+  sizeOf ~_ = 104
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineDepthStencilStateCreateInfo where
+  zero = PipelineDepthStencilStateCreateInfo
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkGraphicsPipelineCreateInfo - Structure specifying parameters of a
+-- newly created graphics pipeline
+--
+-- = Description
+--
+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
+-- described in more detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
+--
+-- If any shader stage fails to compile, the compile log will be reported
+-- back to the application, and
+-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV' will be generated.
+--
+-- The state required for a graphics pipeline is divided into
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-vertex-input vertex input state>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output state>.
+--
+-- Vertex input state is defined by:
+--
+-- -   'PipelineVertexInputStateCreateInfo'
+--
+-- -   'PipelineInputAssemblyStateCreateInfo'
+--
+-- Pre-rasterization shader state is defined by:
+--
+-- -   'PipelineShaderStageCreateInfo' entries for:
+--
+--     -   Vertex shaders
+--
+--     -   Tessellation control shaders
+--
+--     -   Tessellation evaluation shaders
+--
+--     -   Geometry shaders
+--
+--     -   Task shaders
+--
+--     -   Mesh shaders
+--
+-- -   Within the 'Vulkan.Core10.Handles.PipelineLayout', all descriptor
+--     sets with pre-rasterization shader bindings if
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--     was specified.
+--
+--     -   If
+--         'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--         was not specified, the full pipeline layout must be specified.
+--
+-- -   'PipelineViewportStateCreateInfo'
+--
+-- -   'PipelineRasterizationStateCreateInfo'
+--
+-- -   'PipelineTessellationStateCreateInfo'
+--
+-- -   'Vulkan.Core10.Handles.RenderPass' and @subpass@ parameter
+--
+-- -   The @viewMask@ parameter of
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
+--     (formats are ignored)
+--
+-- -   'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'
+--
+-- -   'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'
+--
+-- Fragment shader state is defined by:
+--
+-- -   A 'PipelineShaderStageCreateInfo' entry for the fragment shader
+--
+-- -   Within the 'Vulkan.Core10.Handles.PipelineLayout', all descriptor
+--     sets with fragment shader bindings if
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--     was specified.
+--
+--     -   If
+--         'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--         was not specified, the full pipeline layout must be specified.
+--
+-- -   'PipelineMultisampleStateCreateInfo' if
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-sampleshading sample shading>
+--     is enabled or @renderpass@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   'PipelineDepthStencilStateCreateInfo'
+--
+-- -   'Vulkan.Core10.Handles.RenderPass' and @subpass@ parameter
+--
+-- -   The @viewMask@ parameter of
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
+--     (formats are ignored)
+--
+-- -   'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'
+--
+-- -   'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'
+--
+-- -   'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV'
+--
+-- -   Inclusion\/omission of the
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'
+--     flag
+--
+-- -   Inclusion\/omission of the
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'
+--     flag
+--
+-- Fragment output state is defined by:
+--
+-- -   'PipelineColorBlendStateCreateInfo'
+--
+-- -   'Vulkan.Core10.Handles.RenderPass' and @subpass@ parameter
+--
+-- -   'PipelineMultisampleStateCreateInfo'
+--
+-- -   'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
+--
+-- -   'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
+--
+-- -   'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'
+--
+-- A complete graphics pipeline always includes
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+-- with other subsets included depending on that state. If the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+-- includes a vertex shader, then
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-vertex-input vertex input state>
+-- is included in a complete graphics pipeline. If the value of
+-- 'PipelineRasterizationStateCreateInfo'::@rasterizerDiscardEnable@ in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+-- is 'Vulkan.Core10.FundamentalTypes.FALSE' or the
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE'
+-- dynamic state is enabled
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+-- is included in a complete graphics pipeline.
+--
+-- If different subsets are linked together with pipeline layouts created
+-- with
+-- 'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT',
+-- the final effective pipeline layout is effectively the union of the
+-- linked pipeline layouts. When binding descriptor sets for this pipeline,
+-- the pipeline layout used /must/ be compatible with this union. This
+-- pipeline layout /can/ be overridden when linking with
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT';
+-- by providing a 'Vulkan.Core10.Handles.PipelineLayout' that is compatible
+-- with this union other than
+-- 'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'.
+--
+-- == Valid Usage
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00722# If @flags@ contains
+--     the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be
+--     a valid handle to a graphics 'Vulkan.Core10.Handles.Pipeline'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00723# If @flags@ contains
+--     the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be a valid index into the calling command’s @pCreateInfos@ parameter
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00724# If @flags@ contains
+--     the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/
+--     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00725# If @flags@ contains
+--     the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be -1
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-stage-00726# The @stage@ member
+--     of each element of @pStages@ /must/ be unique
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02095# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     the geometric shader stages provided in @pStages@ /must/ be either
+--     from the mesh shading pipeline (@stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'
+--     or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV')
+--     or from the primitive shading pipeline (@stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT')
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-stage-02096# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     the @stage@ member of one element of @pStages@ /must/ be either
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT' or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-stage-00728# The @stage@ member
+--     of each element of @pStages@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00729# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes a tessellation control shader stage, it
+--     /must/ include a tessellation evaluation shader stage
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00730# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes a tessellation evaluation shader stage, it
+--     /must/ include a tessellation control shader stage
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00731# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes a tessellation control shader stage and a
+--     tessellation evaluation shader stage, @pTessellationState@ /must/ be
+--     a valid pointer to a valid 'PipelineTessellationStateCreateInfo'
+--     structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00732# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes tessellation shader stages, the shader code
+--     of at least one stage /must/ contain an @OpExecutionMode@
+--     instruction specifying the type of subdivision in the pipeline
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00733# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes tessellation shader stages, and the shader
+--     code of both stages contain an @OpExecutionMode@ instruction
+--     specifying the type of subdivision in the pipeline, they /must/ both
+--     specify the same subdivision mode
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00734# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes tessellation shader stages, the shader code
+--     of at least one stage /must/ contain an @OpExecutionMode@
+--     instruction specifying the output patch size in the pipeline
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00735# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes tessellation shader stages, and the shader
+--     code of both contain an @OpExecutionMode@ instruction specifying the
+--     out patch size in the pipeline, they /must/ both specify the same
+--     patch size
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00736# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes tessellation shader stages, the @topology@
+--     member of @pInputAssembly@ /must/ be
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-topology-00737# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and the @topology@ member of @pInputAssembly@ is
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',
+--     @pStages@ /must/ include tessellation shader stages
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00738# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes a geometry shader stage, and does not include
+--     any tessellation shader stages, its shader code /must/ contain an
+--     @OpExecutionMode@ instruction specifying an input primitive type
+--     that is
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#shaders-geometry-execution compatible>
+--     with the primitive topology specified in @pInputAssembly@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00739# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @pStages@ includes a geometry shader stage, and also includes
+--     tessellation shader stages, its shader code /must/ contain an
+--     @OpExecutionMode@ instruction specifying an input primitive type
+--     that is
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#shaders-geometry-execution compatible>
+--     with the primitive topology that is output by the tessellation
+--     stages
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00740# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     it includes both a fragment shader and a geometry shader, and the
+--     fragment shader code reads from an input variable that is decorated
+--     with @PrimitiveId@, then the geometry shader code /must/ write to a
+--     matching output variable, decorated with @PrimitiveId@, in all
+--     execution paths
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-PrimitiveId-06264# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     it includes a mesh shader and the fragment shader code reads from an
+--     input variable that is decorated with @PrimitiveId@, then the mesh
+--     shader code /must/ write to a matching output variable, decorated
+--     with @PrimitiveId@, in all execution paths
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06038# If @renderPass@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     the fragment shader /must/ not read from any input attachment that
+--     is defined as 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' in
+--     @subpass@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00742# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and multiple pre-rasterization shader stages are included in
+--     @pStages@, the shader code for the entry points identified by those
+--     @pStages@ and the rest of the state identified by this structure
+--     /must/ adhere to the pipeline linking rules described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces Shader Interfaces>
+--     chapter
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-None-04889# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     the fragment shader and last
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>
+--     and any relevant state /must/ adhere to the pipeline linking rules
+--     described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces Shader Interfaces>
+--     chapter
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06039# If @renderPass@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and @subpass@ uses a depth\/stencil attachment in @renderPass@ with
+--     a read-only layout for the depth aspect in the
+--     'Vulkan.Core10.Pass.AttachmentReference' defined by @subpass@, the
+--     @depthWriteEnable@ member of @pDepthStencilState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06040# If @renderPass@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and @subpass@ uses a depth\/stencil attachment in @renderPass@ with
+--     a read-only layout for the stencil aspect in the
+--     'Vulkan.Core10.Pass.AttachmentReference' defined by @subpass@, the
+--     @failOp@, @passOp@ and @depthFailOp@ members of each of the @front@
+--     and @back@ members of @pDepthStencilState@ /must/ be
+--     'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06041# If @renderPass@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     then for each color attachment in the subpass, if the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential format features>
+--     of the format of the corresponding attachment description 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-VkGraphicsPipelineCreateInfo-renderPass-06042# If @renderPass@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and the subpass uses color attachments, the @attachmentCount@ member
+--     of @pColorBlendState@ /must/ be equal to the @colorAttachmentCount@
+--     used to create @subpass@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04130# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' or
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT',
+--     the @pViewports@ member of @pViewportState@ /must/ be a valid
+--     pointer to an array of @pViewportState->viewportCount@ valid
+--     'Viewport' structures
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04131# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' or
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT',
+--     the @pScissors@ member of @pViewportState@ /must/ be a valid pointer
+--     to an array of @pViewportState->scissorCount@
+--     'Vulkan.Core10.FundamentalTypes.Rect2D' structures
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and the wide lines feature is not enabled, and no element of the
+--     @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH', the
+--     @lineWidth@ member of @pRasterizationState@ /must/ be @1.0@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750# If
+--     the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
+--     'Vulkan.Core10.FundamentalTypes.FALSE', @pViewportState@ /must/ be a
+--     valid pointer to a valid 'PipelineViewportStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pViewportState-04892# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and the graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE'
+--     dynamic state enabled, @pViewportState@ /must/ be a valid pointer to
+--     a valid 'PipelineViewportStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751# If
+--     the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @pMultisampleState@ /must/ be a valid pointer to a valid
+--     'PipelineMultisampleStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06043# If @renderPass@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and @subpass@ uses a depth\/stencil attachment, @pDepthStencilState@
+--     /must/ be a valid pointer to a valid
+--     'PipelineDepthStencilStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06044# If @renderPass@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and @subpass@ uses color attachments, @pColorBlendState@ /must/ be a
+--     valid pointer to a valid 'PipelineColorBlendStateCreateInfo'
+--     structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     the depth bias clamping feature is not enabled, no element of the
+--     @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS', and the
+--     @depthBiasEnable@ member of @pRasterizationState@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @depthBiasClamp@ member
+--     of @pRasterizationState@ /must/ be @0.0@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-02510# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and the @VK_EXT_depth_range_unrestricted@ extension is not enabled
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS', and
+--     the @depthBoundsTestEnable@ member of @pDepthStencilState@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @minDepthBounds@ and
+--     @maxDepthBounds@ members of @pDepthStencilState@ /must/ be between
+--     @0.0@ and @1.0@, inclusive
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01521# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
+--     and the @sampleLocationsEnable@ member of a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pMultisampleState@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE',
+--     @sampleLocationsInfo.sampleLocationGridSize.width@ /must/ evenly
+--     divide
+--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.width@
+--     as returned by
+--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
+--     with a @samples@ parameter equaling @rasterizationSamples@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01522# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
+--     and the @sampleLocationsEnable@ member of a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pMultisampleState@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE',
+--     @sampleLocationsInfo.sampleLocationGridSize.height@ /must/ evenly
+--     divide
+--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.height@
+--     as returned by
+--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
+--     with a @samples@ parameter equaling @rasterizationSamples@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01523# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
+--     and the @sampleLocationsEnable@ member of a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pMultisampleState@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE',
+--     @sampleLocationsInfo.sampleLocationsPerPixel@ /must/ equal
+--     @rasterizationSamples@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524# If
+--     the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and the @sampleLocationsEnable@ member of a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pMultisampleState@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', the fragment shader code
+--     /must/ not statically use the extended instruction
+--     @InterpolateAtSample@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-layout-00756# @layout@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
+--     with all shaders specified in @pStages@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-00757# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and neither the @VK_AMD_mixed_attachment_samples@ nor the
+--     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if
+--     @subpass@ uses color and\/or depth\/stencil attachments, then the
+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the
+--     same as the sample count for those subpass attachments
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01505# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and the @VK_AMD_mixed_attachment_samples@ extension is enabled, and
+--     if @subpass@ uses color and\/or depth\/stencil attachments, then the
+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ equal
+--     the maximum of the sample counts of those subpass attachments
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01411# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
+--     if @subpass@ has a depth\/stencil attachment and depth test, stencil
+--     test, or depth bounds test are enabled, then the
+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the
+--     same as the sample count of the depth\/stencil attachment
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01412# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
+--     if @subpass@ has any color attachments, then the
+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ be
+--     greater than or equal to the sample count for those subpass
+--     attachments
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-coverageReductionMode-02722# If
+--     the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and the @VK_NV_coverage_reduction_mode@ extension is enabled, the
+--     coverage reduction mode specified by
+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV'::@coverageReductionMode@,
+--     the @rasterizationSamples@ member of @pMultisampleState@ and the
+--     sample counts for the color and depth\/stencil attachments (if the
+--     subpass has them) /must/ be a valid combination returned by
+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-00758# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and @subpass@ does not use any color and\/or depth\/stencil
+--     attachments, then the @rasterizationSamples@ member of
+--     @pMultisampleState@ /must/ follow the rules for a
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#renderpass-noattachments zero-attachment subpass>
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06046# If @renderPass@
+--     is a valid renderPass, @subpass@ /must/ be a valid subpass within
+--     @renderPass@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06047# If @renderPass@
+--     is a valid renderPass, the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and the @renderPass@ has multiview enabled and @subpass@ has more
+--     than one bit set in the view mask and @multiviewTessellationShader@
+--     is not enabled, then @pStages@ /must/ not include tessellation
+--     shaders
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06048# If @renderPass@
+--     is a valid renderPass, the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and the @renderPass@ has multiview enabled and @subpass@ has more
+--     than one bit set in the view mask and @multiviewGeometryShader@ is
+--     not enabled, then @pStages@ /must/ not include a geometry shader
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06049# If @renderPass@
+--     is a valid renderPass, the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and the @renderPass@ has multiview enabled and @subpass@ has more
+--     than one bit set in the view mask, shaders in the pipeline /must/
+--     not write to the @Layer@ built-in output
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06050# If @renderPass@
+--     is a valid renderPass and the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and the @renderPass@ has multiview enabled, then all shaders /must/
+--     not include variables decorated with the @Layer@ built-in decoration
+--     in their interfaces
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00764# @flags@ /must/ not
+--     contain the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.PIPELINE_CREATE_DISPATCH_BASE'
+--     flag
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-01565# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and an input attachment was referenced by an @aspectMask@ at
+--     @renderPass@ creation time, the fragment shader /must/ only read
+--     from the aspects that were specified for that input attachment
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-layout-01688# The number of
+--     resources in @layout@ accessible to each shader stage that is used
+--     by the pipeline /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV',
+--     and the @viewportWScalingEnable@ member of a
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--     structure, included in the @pNext@ chain of @pViewportState@, is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @pViewportWScalings@
+--     member of the
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--     /must/ be a pointer to an array of
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@
+--     valid
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.ViewportWScalingNV'
+--     structures
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04056# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV',
+--     and if @pViewportState->pNext@ chain includes a
+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'
+--     structure, and if its @exclusiveScissorCount@ member is not @0@,
+--     then its @pExclusiveScissors@ member /must/ be a valid pointer to an
+--     array of @exclusiveScissorCount@
+--     'Vulkan.Core10.FundamentalTypes.Rect2D' structures
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04057# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV',
+--     and if @pViewportState->pNext@ chain includes a
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'
+--     structure, then its @pShadingRatePalettes@ member /must/ be a valid
+--     pointer to an array of @viewportCount@ valid
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.ShadingRatePaletteNV'
+--     structures
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04058# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DISCARD_RECTANGLE_EXT',
+--     and if @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'
+--     structure, and if its @discardRectangleCount@ member is not @0@,
+--     then its @pDiscardRectangles@ member /must/ be a valid pointer to an
+--     array of @discardRectangleCount@
+--     'Vulkan.Core10.FundamentalTypes.Rect2D' structures
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-04910# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-vertex-input vertex input state>,
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT' is
+--     not set, @pVertexInputState@ /must/ be a valid pointer to a valid
+--     'PipelineVertexInputStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02098# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-vertex-input vertex input state>,
+--     @pInputAssemblyState@ /must/ be a valid pointer to a valid
+--     'PipelineInputAssemblyStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02317# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     the @Xfb@ execution mode /can/ be specified by no more than one
+--     shader stage in @pStages@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02318# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and any shader stage in @pStages@ specifies @Xfb@ execution mode it
+--     /must/ be the last
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02319# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and a
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@
+--     value other than zero is specified, all variables in the output
+--     interface of the entry point being compiled decorated with
+--     @Position@, @PointSize@, @ClipDistance@, or @CullDistance@ /must/ be
+--     decorated with identical @Stream@ values that match the
+--     @rasterizationStream@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02320# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@
+--     is zero, or not specified, all variables in the output interface of
+--     the entry point being compiled decorated with @Position@,
+--     @PointSize@, @ClipDistance@, or @CullDistance@ /must/ be decorated
+--     with a @Stream@ value of zero, or /must/ not specify the @Stream@
+--     decoration
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-geometryStreams-02321# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and the last
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stage>
+--     is a geometry shader, and that geometry shader uses the
+--     @GeometryStreams@ capability, then
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT'::@geometryStreams@
+--     feature /must/ be enabled
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-None-02322# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and there are any mesh shader stages in the pipeline there /must/
+--     not be any shader stage in the pipeline with a @Xfb@ execution mode
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766# If
+--     the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and at least one of
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and @pMultisampleState@ is not @NULL@, the @lineRasterizationMode@
+--     member of a
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pRasterizationState@ is
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_BRESENHAM_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT',
+--     then the @alphaToCoverageEnable@, @alphaToOneEnable@, and
+--     @sampleShadingEnable@ members of @pMultisampleState@ /must/ all be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-stippledLineEnable-02767# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     the @stippledLineEnable@ member of
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
+--     is 'Vulkan.Core10.FundamentalTypes.TRUE', and no element of the
+--     @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_EXT',
+--     then the @lineStippleFactor@ member of
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
+--     /must/ be in the range [1,256]
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03372# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03373# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03374# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03375# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03376# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03377# @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
+--
+-- -   #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-03379# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
+--     is included in the @pDynamicStates@ array then @viewportCount@
+--     /must/ be zero
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03380# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
+--     is included in the @pDynamicStates@ array then @scissorCount@ /must/
+--     be zero
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
+--     is included in the @pDynamicStates@ array then
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' /must/ not
+--     be present
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
+--     is included in the @pDynamicStates@ array then
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' /must/ not
+--     be present
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04869# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState2LogicOp extendedDynamicState2LogicOp>
+--     feature is not enabled, there /must/ be no element of the
+--     @pDynamicStates@ member of @pDynamicState@ set to
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04870# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState2PatchControlPoints extendedDynamicState2PatchControlPoints>
+--     feature is not enabled, there /must/ be no element of the
+--     @pDynamicStates@ member of @pDynamicState@ set to
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-02877# If @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',
+--     then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
+--     feature /must/ be enabled
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-02966# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',
+--     then all stages /must/ not specify @Xfb@ execution mode
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pipelineCreationCacheControl-02878#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04494# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.width@
+--     /must/ be greater than or equal to @1@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04495# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.height@
+--     /must/ be greater than or equal to @1@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04496# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.width@
+--     /must/ be a power-of-two value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04497# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.height@
+--     /must/ be a power-of-two value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04498# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.width@
+--     /must/ be less than or equal to @4@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04499# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.height@
+--     /must/ be less than or equal to @4@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04500# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate feature>
+--     is not enabled,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.width@
+--     and
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@fragmentSize.height@
+--     /must/ both be equal to @1@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06567# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[0]
+--     /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'
+--     value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06568# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[1]
+--     /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'
+--     value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04501# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate feature>
+--     is not enabled,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[0]
+--     /must/ be
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04502# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate feature>
+--     is not enabled,
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[1]
+--     /must/ be
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04503#
+--     If the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
+--     limit is not supported,
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
+--     is not included in @pDynamicState->pDynamicStates@, and
+--     'PipelineViewportStateCreateInfo'::@viewportCount@ is greater than
+--     @1@, entry points specified in @pStages@ /must/ not write to the
+--     @PrimitiveShadingRateKHR@ built-in
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04504#
+--     If the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
+--     limit is not supported, and entry points specified in @pStages@
+--     write to the @ViewportIndex@ built-in, they /must/ not also write to
+--     the @PrimitiveShadingRateKHR@ built-in
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04505#
+--     If the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
+--     limit is not supported, and entry points specified in @pStages@
+--     write to the @ViewportMaskNV@ built-in, they /must/ not also write
+--     to the @PrimitiveShadingRateKHR@ built-in
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04506#
+--     If the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentShadingRateNonTrivialCombinerOps>
+--     limit is not supported, and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@, elements of
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@
+--     /must/ be
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
+--     or
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-None-06569# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRateType@
+--     /must/ be a valid
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FragmentShadingRateTypeNV'
+--     value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06570# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRate@
+--     /must/ be a valid
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FragmentShadingRateNV'
+--     value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06571# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@[0]
+--     /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'
+--     value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06572# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@[1]
+--     /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'
+--     value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04569# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-fragmentShadingRateEnums fragmentShadingRateEnums feature>
+--     is not enabled,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRateType@
+--     /must/ be equal to
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04570# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate feature>
+--     is not enabled,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRate@
+--     /must/ be equal to
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04571# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate feature>
+--     is not enabled,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@[0]
+--     /must/ be
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04572# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>
+--     feature is not enabled,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@[1]
+--     /must/ be
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04573#
+--     If the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentShadingRateNonTrivialCombinerOps>
+--     limit is not supported and
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
+--     is not included in @pDynamicState->pDynamicStates@, elements of
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@
+--     /must/ be
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
+--     or
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-None-04574# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-supersampleFragmentShadingRates supersampleFragmentShadingRates>
+--     feature is not enabled,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRate@
+--     /must/ not be equal to
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV',
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV',
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV',
+--     or
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-None-04575# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-noInvocationFragmentShadingRates noInvocationFragmentShadingRates>
+--     feature is not enabled,
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@shadingRate@
+--     /must/ not be equal to
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03578# All
+--     elements of the @pDynamicStates@ member of @pDynamicState@ /must/
+--     not be
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04807# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-vertexInputDynamicState vertexInputDynamicState>
+--     feature is not enabled, there /must/ be no element of the
+--     @pDynamicStates@ member of @pDynamicState@ set to
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04800# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-colorWriteEnable colorWriteEnable>
+--     feature is not enabled, there /must/ be no element of the
+--     @pDynamicStates@ member of @pDynamicState@ set to
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizationSamples-04899# If
+--     the pipeline is being created with fragment shader state, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_QCOM_render_pass_shader_resolve VK_QCOM_render_pass_shader_resolve>
+--     extension is enabled, and if subpass has any input attachments, and
+--     if the subpass description contains
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM',
+--     then the sample count of the input attachments /must/ equal
+--     @rasterizationSamples@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-sampleShadingEnable-04900# If the
+--     pipeline is being created with fragment shader state, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_QCOM_render_pass_shader_resolve VK_QCOM_render_pass_shader_resolve>
+--     extension is enabled, and if the subpass description contains
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM',
+--     then @sampleShadingEnable@ /must/ be false
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-04901# If @flags@ includes
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
+--     then the subpass /must/ be the last subpass in a subpass dependency
+--     chain
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-04902# If @flags@ includes
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
+--     and if @pResolveAttachments@ is not @NULL@, then each resolve
+--     attachment /must/ be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06575# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @renderPass@ /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a
+--     valid render pass object
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06576# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-dynamicRendering dynamicRendering>
+--     feature is not enabled and the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @renderPass@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-multiview-06577# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiview multiview>
+--     feature is not enabled, the pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@viewMask@
+--     /must/ be @0@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06578# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the
+--     index of the most significant bit in
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@viewMask@
+--     /must/ be less than
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxMultiviewViewCount maxMultiviewViewCount>
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06579# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', and
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@colorAttachmentCount@
+--     is not 0,
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
+--     /must/ be a valid pointer to an array of @colorAttachmentCount@
+--     valid 'Vulkan.Core10.Enums.Format.Format' values
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06580# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', each
+--     element of
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
+--     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06582# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', and any
+--     element of
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
+--     is not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', that format
+--     /must/ be a format with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential format features>
+--     that include
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--     or
+--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06583# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@depthAttachmentFormat@
+--     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06584# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@stencilAttachmentFormat@
+--     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06585# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', and
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@depthAttachmentFormat@
+--     is not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a
+--     format with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential format features>
+--     that include
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06586# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', and
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@stencilAttachmentFormat@
+--     is not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a
+--     format with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential format features>
+--     that include
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06587# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', and
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@depthAttachmentFormat@
+--     is not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a
+--     format that includes a depth aspect
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06588# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', and
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@stencilAttachmentFormat@
+--     is not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a
+--     format that includes a stencil aspect
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06589# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@depthAttachmentFormat@
+--     is not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', and
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@stencilAttachmentFormat@
+--     is not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED',
+--     @depthAttachmentFormat@ /must/ equal @stencilAttachmentFormat@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06053# If @renderPass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
+--     created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and either of
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::depthAttachmentFormat
+--     or
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::stencilAttachmentFormat
+--     are not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED',
+--     @pDepthStencilState@ /must/ be a valid pointer to a valid
+--     'PipelineDepthStencilStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06590# If @renderPass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     but not
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @pDepthStencilState@ /must/ be a valid pointer to a valid
+--     'PipelineDepthStencilStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06054# If @renderPass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
+--     created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     and
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::colorAttachmentCount
+--     is not equal to @0@, @pColorBlendState@ /must/ be a valid pointer to
+--     a valid 'PipelineColorBlendStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06055# If @renderPass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     @pColorBlendState->attachmentCount@ /must/ be equal to
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::colorAttachmentCount
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06056# If @renderPass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     the fragment shader /must/ not read from any input attachment
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06057# If @renderPass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
+--     created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     the @viewMask@ member of a
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
+--     structure included in the @pNext@ chain is not @0@, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiview-tess multiviewTessellationShader>
+--     feature is not enabled, then @pStages@ /must/ not include
+--     tessellation shaders
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06058# If @renderPass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
+--     created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     the @viewMask@ member of a
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
+--     structure included in the @pNext@ chain is not @0@, and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiview-gs multiviewGeometryShader>
+--     feature is not enabled, then @pStages@ /must/ not include a geometry
+--     shader
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06059# If @renderPass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
+--     created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,
+--     and the @viewMask@ member of a
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
+--     structure included in the @pNext@ chain is not @0@, shaders in
+--     @pStages@ /must/ not include variables decorated with the @Layer@
+--     built-in decoration in their interfaces
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06060# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pColorBlendState->attachmentCount@ /must/ be equal to the
+--     @colorAttachmentCount@ member of the
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'
+--     structure included in the @pNext@ chain
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06061# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     fragment shaders in @pStages@ /must/ not include the
+--     @InputAttachment@ capability
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06062# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', for
+--     each color attachment format defined by the
+--     @pColorAttachmentFormats@ member of
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo',
+--     if its
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential 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-VkGraphicsPipelineCreateInfo-renderPass-06063# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', if the
+--     @pNext@ chain includes
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
+--     or
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV',
+--     the @colorAttachmentCount@ member of that structure /must/ be equal
+--     to the value of
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@colorAttachmentCount@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06591# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and the fragment shader code enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#shaders-fragment-earlytest early fragment tests>,
+--     the @flags@ member of 'PipelineDepthStencilStateCreateInfo' /must/
+--     not include
+--     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM'
+--     or
+--     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06482# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     and the @flags@ member of 'PipelineColorBlendStateCreateInfo'
+--     includes
+--     'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM',
+--     @renderpass@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06483# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     and the @flags@ member of 'PipelineDepthStencilStateCreateInfo'
+--     includes
+--     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM'
+--     or
+--     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM',
+--     @renderpass@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pColorAttachmentSamples-06592# If
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,
+--     elements of the @pColorAttachmentSamples@ member of
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
+--     or
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'
+--     /must/ be valid
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' values
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-depthStencilAttachmentSamples-06593#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     and the @depthStencilAttachmentSamples@ member of
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
+--     or
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'
+--     is not 0, it /must/ be a valid
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06484# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     and the @flags@ member of 'PipelineColorBlendStateCreateInfo'
+--     includes
+--     'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlagBits.PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM'
+--     @subpass@ /must/ have been created with
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06485# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     and the @flags@ member of 'PipelineDepthStencilStateCreateInfo'
+--     includes
+--     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM',
+--     @subpass@ /must/ have been created with
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06486# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>
+--     and the @flags@ member of 'PipelineDepthStencilStateCreateInfo'
+--     includes
+--     'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits.PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM',
+--     @subpass@ /must/ have been created with
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pipelineStageCreationFeedbackCount-06594#
+--     If
+--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo'::@pipelineStageCreationFeedbackCount@
+--     is not @0@, it /must/ be equal to @stageCount@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-06595# If @renderPass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being
+--     created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,
+--     and
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX'::@perViewAttributesPositionXOnly@
+--     is 'Vulkan.Core10.FundamentalTypes.TRUE' then
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX'::@perViewAttributes@
+--     /must/ also be 'Vulkan.Core10.FundamentalTypes.TRUE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06596# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other flag, the value of
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX'::@perViewAttributes@
+--     specified in both this pipeline and the library /must/ be equal
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06597# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and another element includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     the value of
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX'::@perViewAttributes@
+--     specified in both libraries /must/ be equal
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06598# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other flag, the value of
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX'::@perViewAttributesPositionXOnly@
+--     specified in both this pipeline and the library /must/ be equal
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06599# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and another element includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     the value of
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX'::@perViewAttributesPositionXOnly@
+--     specified in both libraries /must/ be equal
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-graphicsPipelineLibrary-06606# If
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-graphicsPipelineLibrary graphicsPipelineLibrary>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-graphicsPipelineLibrary-06607# If
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-graphicsPipelineLibrary graphicsPipelineLibrary>
+--     feature is not enabled, the pipeline /must/ be created with a
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-graphics-subsets-complete complete set of state>
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06608# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-complete all possible state subsets>,
+--     @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06609# If @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT',
+--     pipeline libraries included via
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
+--     /must/ have been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06610# If @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT',
+--     pipeline libraries included via
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
+--     /must/ have been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06611# Any pipeline
+--     libraries included via
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     /must/ not include any
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets state subset>
+--     already defined by this structure or defined by any other pipeline
+--     library in
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06612# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other flag, and @layout@ was not created with
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT',
+--     then the @layout@ used by this pipeline and the library /must/ be
+--     /identically defined/
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06613# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and another element includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and the @layout@ specified by either library was not created with
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT',
+--     then the @layout@ used by each library /must/ be /identically
+--     defined/
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06614# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other subset, and @layout@ was created with
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT',
+--     then the @layout@ used by the library /must/ also have been created
+--     with
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06615# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and another element includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and the @layout@ specified by either library was created with
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT',
+--     then the @layout@ used by both libaries /must/ have been created
+--     with
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06616# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other subset, and @layout@ was created with
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT',
+--     elements of the @pSetLayouts@ array which @layout@ was created with
+--     that are not 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ be
+--     /identically defined/ to the element at the same index of
+--     @pSetLayouts@ used to create the library’s @layout@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06617# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and another element includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and the @layout@ specified by either library was created with
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT',
+--     elements of the @pSetLayouts@ array which either @layout@ was
+--     created with that are not 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--     /must/ be /identically defined/ to the element at the same index of
+--     @pSetLayouts@ used to create the other library’s @layout@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06618# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other flag, any descriptor set layout /N/ specified by
+--     @layout@ in both this pipeline and the library which include
+--     bindings accessed by shader stages in each /must/ be /identically
+--     defined/
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06619# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and another element includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     any descriptor set layout /N/ specified by @layout@ in both
+--     libraries which include bindings accessed by shader stages in each
+--     /must/ be /identically defined/
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06620# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other flag, push constants specified in @layout@ in
+--     both this pipeline and the library which are available to shader
+--     stages in each /must/ be /identically defined/
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06621# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and another element includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     push constants specified in @layout@ in both this pipeline and the
+--     library which are available to shader stages in each /must/ be
+--     /identically defined/
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06679# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other subset, and any element of the @pSetLayouts@
+--     array which @layout@ was created with was
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', then the corresponding
+--     element of the @pSetLayouts@ array used to create the library’s
+--     @layout@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06680# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other subset, and any element of the @pSetLayouts@
+--     array used to create the library’s @layout@ was
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', then the corresponding
+--     element of the @pSetLayouts@ array used to create this pipeline’s
+--     @layout@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06681# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and another element includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and any element of the @pSetLayouts@ array used to create each
+--     library’s @layout@ was 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     then the corresponding element of the @pSetLayouts@ array used to
+--     create the other library’s @layout@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06682# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes both
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     @layout@ /must/ have been created with no elements of the
+--     @pSetLayouts@ array set to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06683# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and @pRasterizationState@->@rasterizerDiscardEnable@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', @layout@ /must/ have been
+--     created with no elements of the @pSetLayouts@ array set to
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06684# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes at least one of and no more than two of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes one of the other flags, the value of @subpass@ /must/ be
+--     equal to that used to create the library
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06623# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes at least one of and no more than two of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     and another element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes one of the other flags, the value of @subpass@ used to
+--     create each library /must/ be identical
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderpass-06624# If @renderpass@
+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes at least one of and no more than two of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes one of the other flags, @renderPass@ /must/ be compatible
+--     with that used to create the library
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderpass-06625# If @renderpass@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes at least one of and no more than two of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes one of the other flags, the value of @renderPass@ used to
+--     create that library /must/ also be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06626# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes at least one of and no more than two of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes one of the other flags, and @renderPass@ is
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@viewMask@
+--     used by this pipeline and that specified by the library /must/ be
+--     identical
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06627# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes at least one of and no more than two of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     another element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes one of the other flags, and @renderPass@ was
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' for both libraries, the
+--     value of
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@viewMask@
+--     set by each library /must/ be identical
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06628# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes at least one of and no more than two of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     and another element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes one of the other flags, the @renderPass@ objects used to
+--     create each library /must/ be compatible or all equal to
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pMultisampleState-06629# If the
+--     pipeline is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     @pMultisampleState@ /must/ be @NULL@ or a valid pointer to a valid
+--     'PipelineMultisampleStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderpass-06631# If the pipeline
+--     is being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     and @renderpass@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     then @pMultisampleState@ /must/ not be @NULL@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-Input-06632# If the pipeline is
+--     being created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>
+--     with a fragment shader that either enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-sampleshading sample shading>
+--     or decorates any variable in the @Input@ storage class with
+--     @Sample@, then @pMultisampleState@ /must/ not be @NULL@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06633# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT'
+--     with a @pMultisampleState@ that was not @NULL@, and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     was created with
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     @pMultisampleState@ /must/ be /identically defined/ to that used to
+--     create the library
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06634# If an element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     was created with
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT'
+--     with a @pMultisampleState@ that was not @NULL@, and if
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     @pMultisampleState@ /must/ be /identically defined/ to that used to
+--     create the library
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06635# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     was created with
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT'
+--     with a @pMultisampleState@ that was not @NULL@, and if a different
+--     element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     was created with
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     the @pMultisampleState@ used to create each library /must/ be
+--     /identically defined/
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06636# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     was created with
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT'
+--     and a value of @pMultisampleState->sampleShading@ equal
+--     'Vulkan.Core10.FundamentalTypes.TRUE', and if a different element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     was created with
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     the @pMultisampleState@ used to create each library /must/ be
+--     /identically defined/
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06637# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     @pMultisampleState->sampleShading@ is
+--     'Vulkan.Core10.FundamentalTypes.TRUE', and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     was created with
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     the @pMultisampleState@ used to create that library /must/ be
+--     /identically defined/ @pMultisampleState@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06638# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes only one of
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     and an element of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes the other flag, values specified in
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'
+--     for both this pipeline and that library /must/ be identical
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06639# If one element
+--     of
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     and another element includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     values specified in
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'
+--     for both this pipeline and that library /must/ be identical
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06640# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     @pStages@ /must/ be a valid pointer to an array of @stageCount@
+--     valid 'PipelineShaderStageCreateInfo' structures
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06641# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT',
+--     @pRasterizationState@ /must/ be a valid pointer to a valid
+--     'PipelineRasterizationStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06642# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
+--     handle
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06643# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT',
+--     and @renderPass@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'
+--     handle
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06644# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     includes
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT',
+--     @stageCount@ /must/ be greater than @0@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06645# If
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     is non-zero, if @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR',
+--     any libraries /must/ have also been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06646# If
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes more than one library, and any library was created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR',
+--     all libraries /must/ have also been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pLibraries-06647# If
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@pLibraries@
+--     includes at least one library,
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@
+--     is non-zero, and any library was created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR',
+--     @flags@ /must/ include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-libraryCount-06648# If the
+--     pipeline is not created with a
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-graphics-subsets-complete complete set of state>,
+--     or
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@libraryCount@
+--     is not @0@,
+--     'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV'::@groupCount@
+--     and
+--     'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV'::@pipelineCount@
+--     /must/ be @0@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-libraryCount-06649# If the
+--     pipeline is created with a
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-graphics-subsets-complete complete set of state>,
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'::@libraryCount@
+--     is @0@, and the @pNext@ chain includes an instance of
+--     'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV'::@groupCount@
+--     /must/ be greater than @0@
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-06650# If @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT'
+--     and the pipeline includes a
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-graphics-subsets-complete complete set of state>
+--     specified entirely by libraries, @pipelineLayout@ /must/ be either
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', or a
+--     'Vulkan.Core10.Handles.PipelineLayout' that was created without
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--     but would be compatible with the union of the pipeline layouts used
+--     in the libraries if it had included
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-sType-sType# @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-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_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT',
+--     'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
+--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX',
+--     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD',
+--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo',
+--     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',
+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR',
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',
+--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo',
+--     or
+--     'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV'
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-sType-unique# The @sType@ value
+--     of each struct in the @pNext@ chain /must/ be unique
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-parameter# @flags@ /must/
+--     be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+--     values
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-parameter# If
+--     @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid
+--     pointer to a valid 'PipelineDynamicStateCreateInfo' structure
+--
+-- -   #VUID-VkGraphicsPipelineCreateInfo-commonparent# Each of
+--     @basePipelineHandle@, @layout@, and @renderPass@ that are valid
+--     handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
+-- 'Vulkan.Core10.Handles.Pipeline', 'PipelineColorBlendStateCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
+-- 'PipelineDepthStencilStateCreateInfo', 'PipelineDynamicStateCreateInfo',
+-- 'PipelineInputAssemblyStateCreateInfo',
+-- 'Vulkan.Core10.Handles.PipelineLayout',
+-- 'PipelineMultisampleStateCreateInfo',
+-- 'PipelineRasterizationStateCreateInfo', 'PipelineShaderStageCreateInfo',
+-- 'PipelineTessellationStateCreateInfo',
+-- 'PipelineVertexInputStateCreateInfo', 'PipelineViewportStateCreateInfo',
+-- 'Vulkan.Core10.Handles.RenderPass',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createGraphicsPipelines'
+data GraphicsPipelineCreateInfo (es :: [Type]) = GraphicsPipelineCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+    -- specifying how the pipeline will be generated.
+    flags :: PipelineCreateFlags
+  , -- | @stageCount@ is the number of entries in the @pStages@ array.
+    stageCount :: Word32
+  , -- | @pStages@ is a pointer to an array of @stageCount@
+    -- 'PipelineShaderStageCreateInfo' structures describing the set of the
+    -- shader stages to be included in the graphics pipeline.
+    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
+  , -- | @pVertexInputState@ is a pointer to a
+    -- 'PipelineVertexInputStateCreateInfo' structure defining vertex input
+    -- state for use with vertex shading.
+    vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
+  , -- | @pInputAssemblyState@ is a pointer to a
+    -- 'PipelineInputAssemblyStateCreateInfo' structure which determines input
+    -- assembly behavior for vertex shading, as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#drawing Drawing Commands>.
+    inputAssemblyState :: Maybe PipelineInputAssemblyStateCreateInfo
+  , -- | @pTessellationState@ is a pointer to a
+    -- 'PipelineTessellationStateCreateInfo' structure defining tessellation
+    -- state used by tessellation shaders.
+    tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)
+  , -- | @pViewportState@ is a pointer to a 'PipelineViewportStateCreateInfo'
+    -- structure defining viewport state used when rasterization is enabled.
+    viewportState :: Maybe (SomeStruct PipelineViewportStateCreateInfo)
+  , -- | @pRasterizationState@ is a pointer to a
+    -- 'PipelineRasterizationStateCreateInfo' structure defining rasterization
+    -- state.
+    rasterizationState :: Maybe (SomeStruct PipelineRasterizationStateCreateInfo)
+  , -- | @pMultisampleState@ is a pointer to a
+    -- 'PipelineMultisampleStateCreateInfo' structure defining multisample
+    -- state used when rasterization is enabled.
+    multisampleState :: Maybe (SomeStruct PipelineMultisampleStateCreateInfo)
+  , -- | @pDepthStencilState@ is a pointer to a
+    -- 'PipelineDepthStencilStateCreateInfo' structure defining depth\/stencil
+    -- state used when rasterization is enabled for depth or stencil
+    -- attachments accessed during rendering.
+    depthStencilState :: Maybe PipelineDepthStencilStateCreateInfo
+  , -- | @pColorBlendState@ is a pointer to a 'PipelineColorBlendStateCreateInfo'
+    -- structure defining color blend state used when rasterization is enabled
+    -- for any color attachments accessed during rendering.
+    colorBlendState :: Maybe (SomeStruct PipelineColorBlendStateCreateInfo)
+  , -- | @pDynamicState@ is a pointer to a 'PipelineDynamicStateCreateInfo'
+    -- structure defining which properties of the pipeline state object are
+    -- dynamic and /can/ be changed independently of the pipeline state. This
+    -- /can/ be @NULL@, which means no state in the pipeline is considered
+    -- dynamic.
+    dynamicState :: Maybe PipelineDynamicStateCreateInfo
+  , -- | @layout@ is the description of binding locations used by both the
+    -- pipeline and descriptor sets used with the pipeline.
+    layout :: PipelineLayout
+  , -- | @renderPass@ is a handle to a render pass object describing the
+    -- environment in which the pipeline will be used. The pipeline /must/ only
+    -- be used with a render pass instance compatible with the one provided.
+    -- See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility>
+    -- for more information.
+    renderPass :: RenderPass
+  , -- | @subpass@ is the index of the subpass in the render pass where this
+    -- pipeline will be used.
+    subpass :: Word32
+  , -- | @basePipelineHandle@ is a pipeline to derive from.
+    basePipelineHandle :: Pipeline
+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
+    -- as a pipeline to derive from.
+    basePipelineIndex :: Int32
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (GraphicsPipelineCreateInfo (es :: [Type]))
+#endif
+deriving instance Show (Chain es) => Show (GraphicsPipelineCreateInfo es)
+
+instance Extensible GraphicsPipelineCreateInfo where
+  extensibleTypeName = "GraphicsPipelineCreateInfo"
+  setNext GraphicsPipelineCreateInfo{..} next' = GraphicsPipelineCreateInfo{next = next', ..}
+  getNext GraphicsPipelineCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends GraphicsPipelineCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @GraphicsPipelineLibraryCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @MultiviewPerViewAttributesInfoNVX = Just f
+    | Just Refl <- eqT @e @AttachmentSampleCountInfoAMD = Just f
+    | Just Refl <- eqT @e @PipelineRenderingCreateInfo = Just f
+    | Just Refl <- eqT @e @PipelineFragmentShadingRateEnumStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineFragmentShadingRateStateCreateInfoKHR = Just f
+    | Just Refl <- eqT @e @PipelineLibraryCreateInfoKHR = Just f
+    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f
+    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfo = Just f
+    | Just Refl <- eqT @e @PipelineRepresentativeFragmentTestStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineDiscardRectangleStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @GraphicsPipelineShaderGroupsCreateInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss GraphicsPipelineCreateInfo es, PokeChain es) => ToCStruct (GraphicsPipelineCreateInfo es) where
+  withCStruct x f = allocaBytes 144 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GraphicsPipelineCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
+    let pStagesLength = Data.Vector.length $ (stages)
+    stageCount'' <- lift $ if (stageCount) == 0
+      then pure $ fromIntegral pStagesLength
+      else do
+        unless (fromIntegral pStagesLength == (stageCount) || pStagesLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pStages must be empty or have 'stageCount' elements" Nothing Nothing
+        pure (stageCount)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (stageCount'')
+    pStages'' <- if Data.Vector.null (stages)
+      then pure nullPtr
+      else do
+        pPStages <- ContT $ allocaBytes @(PipelineShaderStageCreateInfo _) (((Data.Vector.length (stages))) * 48)
+        Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) ((stages))
+        pure $ pPStages
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) pStages''
+    pVertexInputState'' <- case (vertexInputState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineVertexInputStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineVertexInputStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _)))) pVertexInputState''
+    pInputAssemblyState'' <- case (inputAssemblyState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr PipelineInputAssemblyStateCreateInfo))) pInputAssemblyState''
+    pTessellationState'' <- case (tessellationState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineTessellationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineTessellationStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _)))) pTessellationState''
+    pViewportState'' <- case (viewportState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineViewportStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineViewportStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (PipelineViewportStateCreateInfo _)))) pViewportState''
+    pRasterizationState'' <- case (rasterizationState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineRasterizationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineRasterizationStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _)))) pRasterizationState''
+    pMultisampleState'' <- case (multisampleState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineMultisampleStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineMultisampleStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr (PipelineMultisampleStateCreateInfo _)))) pMultisampleState''
+    pDepthStencilState'' <- case (depthStencilState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr PipelineDepthStencilStateCreateInfo))) pDepthStencilState''
+    pColorBlendState'' <- case (colorBlendState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineColorBlendStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineColorBlendStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr (PipelineColorBlendStateCreateInfo _)))) pColorBlendState''
+    pDynamicState'' <- case (dynamicState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 96 :: Ptr (Ptr PipelineDynamicStateCreateInfo))) pDynamicState''
+    lift $ poke ((p `plusPtr` 104 :: Ptr PipelineLayout)) (layout)
+    lift $ poke ((p `plusPtr` 112 :: Ptr RenderPass)) (renderPass)
+    lift $ poke ((p `plusPtr` 120 :: Ptr Word32)) (subpass)
+    lift $ poke ((p `plusPtr` 128 :: Ptr Pipeline)) (basePipelineHandle)
+    lift $ poke ((p `plusPtr` 136 :: Ptr Int32)) (basePipelineIndex)
+    lift $ f
+  cStructSize = 144
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 120 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 136 :: Ptr Int32)) (zero)
+    lift $ f
+
+instance (Extendss GraphicsPipelineCreateInfo es, PeekChain es) => FromCStruct (GraphicsPipelineCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
+    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _))))
+    let pStagesLength = if pStages == nullPtr then 0 else (fromIntegral stageCount)
+    pStages' <- generateM pStagesLength (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
+    pVertexInputState <- peek @(Ptr (PipelineVertexInputStateCreateInfo _)) ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _))))
+    pVertexInputState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pVertexInputState
+    pInputAssemblyState <- peek @(Ptr PipelineInputAssemblyStateCreateInfo) ((p `plusPtr` 40 :: Ptr (Ptr PipelineInputAssemblyStateCreateInfo)))
+    pInputAssemblyState' <- maybePeek (\j -> peekCStruct @PipelineInputAssemblyStateCreateInfo (j)) pInputAssemblyState
+    pTessellationState <- peek @(Ptr (PipelineTessellationStateCreateInfo _)) ((p `plusPtr` 48 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _))))
+    pTessellationState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pTessellationState
+    pViewportState <- peek @(Ptr (PipelineViewportStateCreateInfo _)) ((p `plusPtr` 56 :: Ptr (Ptr (PipelineViewportStateCreateInfo _))))
+    pViewportState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pViewportState
+    pRasterizationState <- peek @(Ptr (PipelineRasterizationStateCreateInfo _)) ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _))))
+    pRasterizationState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pRasterizationState
+    pMultisampleState <- peek @(Ptr (PipelineMultisampleStateCreateInfo _)) ((p `plusPtr` 72 :: Ptr (Ptr (PipelineMultisampleStateCreateInfo _))))
+    pMultisampleState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pMultisampleState
+    pDepthStencilState <- peek @(Ptr PipelineDepthStencilStateCreateInfo) ((p `plusPtr` 80 :: Ptr (Ptr PipelineDepthStencilStateCreateInfo)))
+    pDepthStencilState' <- maybePeek (\j -> peekCStruct @PipelineDepthStencilStateCreateInfo (j)) pDepthStencilState
+    pColorBlendState <- peek @(Ptr (PipelineColorBlendStateCreateInfo _)) ((p `plusPtr` 88 :: Ptr (Ptr (PipelineColorBlendStateCreateInfo _))))
+    pColorBlendState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pColorBlendState
+    pDynamicState <- peek @(Ptr PipelineDynamicStateCreateInfo) ((p `plusPtr` 96 :: Ptr (Ptr PipelineDynamicStateCreateInfo)))
+    pDynamicState' <- maybePeek (\j -> peekCStruct @PipelineDynamicStateCreateInfo (j)) pDynamicState
+    layout <- peek @PipelineLayout ((p `plusPtr` 104 :: Ptr PipelineLayout))
+    renderPass <- peek @RenderPass ((p `plusPtr` 112 :: Ptr RenderPass))
+    subpass <- peek @Word32 ((p `plusPtr` 120 :: Ptr Word32))
+    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 128 :: Ptr Pipeline))
+    basePipelineIndex <- peek @Int32 ((p `plusPtr` 136 :: Ptr Int32))
+    pure $ GraphicsPipelineCreateInfo
+             next flags stageCount pStages' pVertexInputState' pInputAssemblyState' pTessellationState' pViewportState' pRasterizationState' pMultisampleState' pDepthStencilState' pColorBlendState' pDynamicState' layout renderPass subpass basePipelineHandle basePipelineIndex
+
+instance es ~ '[] => Zero (GraphicsPipelineCreateInfo es) where
+  zero = GraphicsPipelineCreateInfo
+           ()
+           zero
+           zero
+           mempty
+           Nothing
+           Nothing
+           Nothing
+           Nothing
+           Nothing
            Nothing
            Nothing
            Nothing
diff --git a/src/Vulkan/Core10/PipelineLayout.hs b/src/Vulkan/Core10/PipelineLayout.hs
--- a/src/Vulkan/Core10/PipelineLayout.hs
+++ b/src/Vulkan/Core10/PipelineLayout.hs
@@ -57,7 +57,7 @@
 import Vulkan.Core10.Handles (Device_T)
 import Vulkan.Core10.Handles (PipelineLayout)
 import Vulkan.Core10.Handles (PipelineLayout(..))
-import Vulkan.Core10.Enums.PipelineLayoutCreateFlags (PipelineLayoutCreateFlags)
+import Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits (PipelineLayoutCreateFlags)
 import Vulkan.Core10.Enums.Result (Result)
 import Vulkan.Core10.Enums.Result (Result(..))
 import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
@@ -674,6 +674,12 @@
 --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE'
 --     bit set
 --
+-- -   #VUID-VkPipelineLayoutCreateInfo-flags-06562# If @flags@: does not
+--     include
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT',
+--     elements of @pSetLayouts@ /must/ be valid
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' objects
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkPipelineLayoutCreateInfo-sType-sType# @sType@ /must/ be
@@ -682,12 +688,15 @@
 -- -   #VUID-VkPipelineLayoutCreateInfo-pNext-pNext# @pNext@ /must/ be
 --     @NULL@
 --
--- -   #VUID-VkPipelineLayoutCreateInfo-flags-zerobitmask# @flags@ /must/
---     be @0@
+-- -   #VUID-VkPipelineLayoutCreateInfo-flags-parameter# @flags@ /must/ be
+--     a valid combination of
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PipelineLayoutCreateFlagBits'
+--     values
 --
 -- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-parameter# If
 --     @setLayoutCount@ is not @0@, @pSetLayouts@ /must/ be a valid pointer
---     to an array of @setLayoutCount@ valid
+--     to an array of @setLayoutCount@ valid or
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --     'Vulkan.Core10.Handles.DescriptorSetLayout' handles
 --
 -- -   #VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-parameter# If
@@ -699,7 +708,7 @@
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
 -- 'Vulkan.Core10.Handles.DescriptorSetLayout',
--- 'Vulkan.Core10.Enums.PipelineLayoutCreateFlags.PipelineLayoutCreateFlags',
+-- 'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PipelineLayoutCreateFlags',
 -- 'PushConstantRange', 'Vulkan.Core10.Enums.StructureType.StructureType',
 -- 'createPipelineLayout'
 data PipelineLayoutCreateInfo = PipelineLayoutCreateInfo
diff --git a/src/Vulkan/Core10/Shader.hs b/src/Vulkan/Core10/Shader.hs
--- a/src/Vulkan/Core10/Shader.hs
+++ b/src/Vulkan/Core10/Shader.hs
@@ -317,13 +317,6 @@
 -- -   #VUID-VkShaderModuleCreateInfo-sType-sType# @sType@ /must/ be
 --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO'
 --
--- -   #VUID-VkShaderModuleCreateInfo-pNext-pNext# @pNext@ /must/ be @NULL@
---     or a pointer to a valid instance of
---     'Vulkan.Extensions.VK_EXT_validation_cache.ShaderModuleValidationCacheCreateInfoEXT'
---
--- -   #VUID-VkShaderModuleCreateInfo-sType-unique# The @sType@ value of
---     each struct in the @pNext@ chain /must/ be unique
---
 -- -   #VUID-VkShaderModuleCreateInfo-flags-zerobitmask# @flags@ /must/ be
 --     @0@
 --
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs
--- a/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs
@@ -340,16 +340,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDispatchBase-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDispatchBase-None-02697# For each set /n/ that is
@@ -448,6 +448,23 @@
 --     is not supported, 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-vkCmdDispatchBase-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDispatchBase-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
 --
 -- -   #VUID-vkCmdDispatchBase-None-04115# If a
 --     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@
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
@@ -120,6 +120,7 @@
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (PhysicalDeviceDepthStencilResolveProperties)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping (PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDeviceDeviceMemoryReportFeaturesEXT)
@@ -149,6 +150,8 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRateFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRatePropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_global_priority (PhysicalDeviceGlobalPriorityQueryFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_graphics_pipeline_library (PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_graphics_pipeline_library (PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceIDProperties)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (PhysicalDeviceImageDrmFormatModifierInfoEXT)
@@ -190,6 +193,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id (PhysicalDevicePresentIdFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_wait (PhysicalDevicePresentWaitFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_primitive_topology_list_restart (PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_primitives_generated_query (PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_private_data (PhysicalDevicePrivateDataFeatures)
 import Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
 import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
@@ -721,6 +725,8 @@
   getNext PhysicalDeviceFeatures2{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceFeatures2 e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceLinearColorAttachmentFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM = Just f
     | Just Refl <- eqT @e @PhysicalDeviceImageViewMinLodFeaturesEXT = Just f
@@ -731,6 +737,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceProvokingVertexFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceInheritedViewportScissorFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceSynchronization2Features = Just f
     | Just Refl <- eqT @e @PhysicalDeviceColorWriteEnableFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceExternalMemoryRDMAFeaturesNV = Just f
@@ -897,6 +904,7 @@
 --     'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',
 --     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsPropertiesNV',
 --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRatePropertiesKHR',
+--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT',
 --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
 --     'Vulkan.Core13.Promoted_From_VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockProperties',
 --     'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationPropertiesEXT',
@@ -966,6 +974,7 @@
   getNext PhysicalDeviceProperties2{..} = next
   extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceProperties2 e => b) -> Maybe b
   extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDrmPropertiesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderIntegerDotProductProperties = Just f
     | Just Refl <- eqT @e @PhysicalDeviceProvokingVertexPropertiesEXT = Just f
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs
--- a/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs
@@ -330,6 +330,15 @@
 --     view index /must/ not be set in more than one element of
 --     @pCorrelationMasks@
 --
+-- -   #VUID-VkRenderPassMultiviewCreateInfo-multiview-06555# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiview multiview>
+--     feature is not enabled, each element of @pViewMasks@ /must/ be @0@
+--
+-- -   #VUID-VkRenderPassMultiviewCreateInfo-pViewMasks-06697# The index of
+--     the most significant bit in each element of @pViewMasks@ /must/ be
+--     less than
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxMultiviewViewCount maxMultiviewViewCount>
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkRenderPassMultiviewCreateInfo-sType-sType# @sType@ /must/ be
diff --git a/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs b/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs
--- a/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs
+++ b/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs
@@ -75,11 +75,13 @@
 -- this binding that are not /dynamically used/ need not contain valid
 -- descriptors at the time the descriptors are consumed. A descriptor is
 -- dynamically used if any shader invocation executes an instruction that
--- performs any memory access using the descriptor.
+-- performs any memory access using the descriptor. If a descriptor is not
+-- dynamically used, any resource referenced by the descriptor is not
+-- considered to be referenced during command execution.
 pattern DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT             = DescriptorBindingFlagBits 0x00000004
 -- | 'DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT' indicates that this
--- descriptor binding has a variable size that will be specified when a
--- descriptor set is allocated using this layout. The value of
+-- is a /variable-sized descriptor binding/ whose size will be specified
+-- when a descriptor set is allocated using this layout. The value of
 -- @descriptorCount@ is treated as an upper bound on the size of the
 -- binding. This /must/ only be used for the last binding in the descriptor
 -- set layout (i.e. the binding with the largest value of @binding@). For
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs b/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs
--- a/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs
@@ -924,14 +924,14 @@
 -- If @descriptorSetCount@ is zero or this structure is not included in the
 -- @pNext@ chain, then the variable lengths are considered to be zero.
 -- Otherwise, @pDescriptorCounts@[i] is the number of descriptors in the
--- variable count descriptor binding in the corresponding descriptor set
--- layout. If the variable count descriptor binding in the corresponding
+-- variable-sized descriptor binding in the corresponding descriptor set
+-- layout. If the variable-sized descriptor binding in the corresponding
 -- descriptor set layout has a descriptor type of
 -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK'
 -- then @pDescriptorCounts@[i] specifies the binding’s capacity in bytes.
 -- If
 -- 'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo'::@pSetLayouts@[i]
--- does not include a variable count descriptor binding, then
+-- does not include a variable-sized descriptor binding, then
 -- @pDescriptorCounts@[i] is ignored.
 --
 -- == Valid Usage
@@ -944,7 +944,7 @@
 -- -   #VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-pSetLayouts-03046#
 --     If
 --     'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo'::@pSetLayouts@[i]
---     has a variable descriptor count binding, then @pDescriptorCounts@[i]
+--     has a variable-sized descriptor binding, then @pDescriptorCounts@[i]
 --     /must/ be less than or equal to the descriptor count specified for
 --     that binding when the descriptor set layout was created
 --
@@ -965,9 +965,8 @@
 -- 'Vulkan.Core10.Enums.StructureType.StructureType'
 data DescriptorSetVariableDescriptorCountAllocateInfo = DescriptorSetVariableDescriptorCountAllocateInfo
   { -- | @pDescriptorCounts@ is a pointer to an array of descriptor counts, with
-    -- each member specifying the number of descriptors in a variable
-    -- descriptor count binding in the corresponding descriptor set being
-    -- allocated.
+    -- each member specifying the number of descriptors in a variable-sized
+    -- descriptor binding in the corresponding descriptor set being allocated.
     descriptorCounts :: Vector Word32 }
   deriving (Typeable)
 #if defined(GENERIC_INSTANCES)
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
--- a/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
@@ -665,11 +665,38 @@
 --
 -- == Valid Usage
 --
+-- -   #VUID-VkAttachmentDescription2-format-06701# @format@ /must/ not be
+--     VK_FORMAT_UNDEFINED
+--
 -- -   #VUID-VkAttachmentDescription2-finalLayout-03061# @finalLayout@
 --     /must/ not be
 --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
 --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
 --
+-- -   #VUID-VkAttachmentDescription2-format-06702# If @format@ includes a
+--     color or depth aspect and @loadOp@ is
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_LOAD', then
+--     @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'
+--
+-- -   #VUID-VkAttachmentDescription2-pNext-06704# If the @pNext@ chain
+--     does not include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+--     structure, @format@ includes a stencil aspect, and @stencilLoadOp@
+--     is 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_LOAD',
+--     then @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'
+--
+-- -   #VUID-VkAttachmentDescription2-pNext-06705# If the @pNext@ chain
+--     does includes a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+--     structure, @format@ includes a stencil aspect, and @stencilLoadOp@
+--     is 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_LOAD',
+--     then
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'::stencilInitialLayout
+--     /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'
+--
 -- -   #VUID-VkAttachmentDescription2-format-03294# If @format@ is a color
 --     format, @initialLayout@ /must/ not be
 --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
@@ -778,6 +805,28 @@
 --     or
 --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
 --
+-- -   #VUID-VkAttachmentDescription2-separateDepthStencilLayouts-06556# If
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+--     feature is enabled and @format@ is a depth\/stencil format that
+--     includes a depth aspect and the @pNext@ chain includes a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+--     structure, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   #VUID-VkAttachmentDescription2-separateDepthStencilLayouts-06557# If
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+--     feature is enabled and @format@ is a depth\/stencil format that
+--     includes a depth aspect and the @pNext@ chain includes a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+--     structure, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkAttachmentDescription2-sType-sType# @sType@ /must/ be
@@ -1328,6 +1377,14 @@
 -- -   #VUID-VkSubpassDescription2-pDepthStencilAttachment-04440# An
 --     attachment /must/ not be used in both @pDepthStencilAttachment@ and
 --     @pColorAttachments@
+--
+-- -   #VUID-VkSubpassDescription2-multiview-06558# If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiview multiview>
+--     feature is not enabled, @viewMask@ /must/ be @0@
+--
+-- -   #VUID-VkSubpassDescription2-viewMask-06706# The index of the most
+--     significant bit in @viewMask@ /must/ be less than
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxMultiviewViewCount maxMultiviewViewCount>
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
--- a/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
@@ -125,16 +125,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndirectCount-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndirectCount-None-02697# For each set /n/ that is
@@ -234,6 +234,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawIndirectCount-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawIndirectCount-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDrawIndirectCount-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
@@ -341,6 +358,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawIndirectCount-None-06666# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawIndirectCount-viewportCount-03417# If the bound
 --     graphics pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -600,6 +625,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawIndirectCount-attachmentCount-06667# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawIndirectCount-pDepthAttachment-06181# If the current
 --     render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -750,6 +787,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdDrawIndirectCount-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawIndirectCount-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdDrawIndirectCount-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
@@ -1076,16 +1131,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndexedIndirectCount-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02697# For each set /n/
@@ -1185,6 +1240,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawIndexedIndirectCount-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDrawIndexedIndirectCount-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
@@ -1294,6 +1366,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-06666# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417# If the
 --     bound graphics pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -1554,6 +1634,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawIndexedIndirectCount-attachmentCount-06667# If the
+--     bound graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawIndexedIndirectCount-pDepthAttachment-06181# If the
 --     current render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -1703,6 +1795,24 @@
 --     the currently bound pipeline /must/ have been created with a
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-vkCmdDrawIndexedIndirectCount-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawIndexedIndirectCount-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
 --
 -- -   #VUID-vkCmdDrawIndexedIndirectCount-None-04007# All vertex input
 --     bindings accessed via vertex input variables declared in the vertex
diff --git a/src/Vulkan/Core13/Enums.hs b/src/Vulkan/Core13/Enums.hs
--- a/src/Vulkan/Core13/Enums.hs
+++ b/src/Vulkan/Core13/Enums.hs
@@ -4,7 +4,7 @@
                             , module Vulkan.Core13.Enums.FormatFeatureFlags2
                             , module Vulkan.Core13.Enums.PipelineCreationFeedbackFlagBits
                             , module Vulkan.Core13.Enums.PipelineStageFlags2
-                            , module Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits
+                            , module Vulkan.Core13.Enums.PrivateDataSlotCreateFlags
                             , module Vulkan.Core13.Enums.RenderingFlagBits
                             , module Vulkan.Core13.Enums.SubmitFlagBits
                             , module Vulkan.Core13.Enums.ToolPurposeFlagBits
@@ -13,7 +13,7 @@
 import Vulkan.Core13.Enums.FormatFeatureFlags2
 import Vulkan.Core13.Enums.PipelineCreationFeedbackFlagBits
 import Vulkan.Core13.Enums.PipelineStageFlags2
-import Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits
+import Vulkan.Core13.Enums.PrivateDataSlotCreateFlags
 import Vulkan.Core13.Enums.RenderingFlagBits
 import Vulkan.Core13.Enums.SubmitFlagBits
 import Vulkan.Core13.Enums.ToolPurposeFlagBits
diff --git a/src/Vulkan/Core13/Enums/FormatFeatureFlags2.hs b/src/Vulkan/Core13/Enums/FormatFeatureFlags2.hs
--- a/src/Vulkan/Core13/Enums/FormatFeatureFlags2.hs
+++ b/src/Vulkan/Core13/Enums/FormatFeatureFlags2.hs
@@ -367,7 +367,7 @@
 --
 -- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT' specifies that
 --     image views created with this format /can/ be used for depth
---     comparison performed by @OpImage*Dref@ instructions.
+--     comparison performed by @OpImage*Dref*@ instructions.
 --
 -- -   'FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV' specifies that the
 --     format is supported as a renderable
@@ -598,7 +598,7 @@
 pattern FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT         = FormatFeatureFlagBits2 0x0000000100000000
 -- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT' specifies that
 -- image views created with this format /can/ be used for depth comparison
--- performed by @OpImage*Dref@ instructions.
+-- performed by @OpImage*Dref*@ instructions.
 pattern FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT       = FormatFeatureFlagBits2 0x0000000200000000
 -- | 'FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV' specifies that the
 -- format is supported as a renderable
diff --git a/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlagBits.hs b/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlagBits.hs
deleted file mode 100644
--- a/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlagBits.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# language CPP #-}
--- No documentation found for Chapter "PrivateDataSlotCreateFlagBits"
-module Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits  ( PrivateDataSlotCreateFlags
-                                                          , PrivateDataSlotCreateFlagBits(..)
-                                                          ) where
-
-import Vulkan.Internal.Utils (enumReadPrec)
-import Vulkan.Internal.Utils (enumShowsPrec)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Vulkan.Zero (Zero)
-import Data.Bits (Bits)
-import Data.Bits (FiniteBits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import GHC.Show (Show(showsPrec))
-import Vulkan.Core10.FundamentalTypes (Flags)
-type PrivateDataSlotCreateFlags = PrivateDataSlotCreateFlagBits
-
--- | VkPrivateDataSlotCreateFlagBits - Bitmask specifying additional
--- parameters for private data slot creation
---
--- = See Also
---
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_private_data VK_EXT_private_data>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_3 VK_VERSION_1_3>,
--- 'PrivateDataSlotCreateFlags'
-newtype PrivateDataSlotCreateFlagBits = PrivateDataSlotCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
-
-
-
-conNamePrivateDataSlotCreateFlagBits :: String
-conNamePrivateDataSlotCreateFlagBits = "PrivateDataSlotCreateFlagBits"
-
-enumPrefixPrivateDataSlotCreateFlagBits :: String
-enumPrefixPrivateDataSlotCreateFlagBits = ""
-
-showTablePrivateDataSlotCreateFlagBits :: [(PrivateDataSlotCreateFlagBits, String)]
-showTablePrivateDataSlotCreateFlagBits = []
-
-instance Show PrivateDataSlotCreateFlagBits where
-  showsPrec = enumShowsPrec enumPrefixPrivateDataSlotCreateFlagBits
-                            showTablePrivateDataSlotCreateFlagBits
-                            conNamePrivateDataSlotCreateFlagBits
-                            (\(PrivateDataSlotCreateFlagBits x) -> x)
-                            (\x -> showString "0x" . showHex x)
-
-instance Read PrivateDataSlotCreateFlagBits where
-  readPrec = enumReadPrec enumPrefixPrivateDataSlotCreateFlagBits
-                          showTablePrivateDataSlotCreateFlagBits
-                          conNamePrivateDataSlotCreateFlagBits
-                          PrivateDataSlotCreateFlagBits
-
diff --git a/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlagBits.hs-boot b/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlagBits.hs-boot
deleted file mode 100644
--- a/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlagBits.hs-boot
+++ /dev/null
@@ -1,12 +0,0 @@
-{-# language CPP #-}
--- No documentation found for Chapter "PrivateDataSlotCreateFlagBits"
-module Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits  ( PrivateDataSlotCreateFlags
-                                                          , PrivateDataSlotCreateFlagBits
-                                                          ) where
-
-
-
-type PrivateDataSlotCreateFlags = PrivateDataSlotCreateFlagBits
-
-data PrivateDataSlotCreateFlagBits
-
diff --git a/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlags.hs b/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlags.hs
@@ -0,0 +1,54 @@
+{-# language CPP #-}
+-- No documentation found for Chapter "PrivateDataSlotCreateFlags"
+module Vulkan.Core13.Enums.PrivateDataSlotCreateFlags  (PrivateDataSlotCreateFlags(..)) where
+
+import Vulkan.Internal.Utils (enumReadPrec)
+import Vulkan.Internal.Utils (enumShowsPrec)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Vulkan.Zero (Zero)
+import Data.Bits (Bits)
+import Data.Bits (FiniteBits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import GHC.Show (Show(showsPrec))
+import Vulkan.Core10.FundamentalTypes (Flags)
+-- | VkPrivateDataSlotCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PrivateDataSlotCreateFlags' is a bitmask type for setting a mask, but
+-- is currently reserved for future use.
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_private_data VK_EXT_private_data>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_3 VK_VERSION_1_3>,
+-- 'Vulkan.Core13.Promoted_From_VK_EXT_private_data.PrivateDataSlotCreateInfo'
+newtype PrivateDataSlotCreateFlags = PrivateDataSlotCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
+
+
+
+conNamePrivateDataSlotCreateFlags :: String
+conNamePrivateDataSlotCreateFlags = "PrivateDataSlotCreateFlags"
+
+enumPrefixPrivateDataSlotCreateFlags :: String
+enumPrefixPrivateDataSlotCreateFlags = ""
+
+showTablePrivateDataSlotCreateFlags :: [(PrivateDataSlotCreateFlags, String)]
+showTablePrivateDataSlotCreateFlags = []
+
+instance Show PrivateDataSlotCreateFlags where
+  showsPrec = enumShowsPrec enumPrefixPrivateDataSlotCreateFlags
+                            showTablePrivateDataSlotCreateFlags
+                            conNamePrivateDataSlotCreateFlags
+                            (\(PrivateDataSlotCreateFlags x) -> x)
+                            (\x -> showString "0x" . showHex x)
+
+instance Read PrivateDataSlotCreateFlags where
+  readPrec = enumReadPrec enumPrefixPrivateDataSlotCreateFlags
+                          showTablePrivateDataSlotCreateFlags
+                          conNamePrivateDataSlotCreateFlags
+                          PrivateDataSlotCreateFlags
+
diff --git a/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlags.hs-boot b/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlags.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core13/Enums/PrivateDataSlotCreateFlags.hs-boot
@@ -0,0 +1,8 @@
+{-# language CPP #-}
+-- No documentation found for Chapter "PrivateDataSlotCreateFlags"
+module Vulkan.Core13.Enums.PrivateDataSlotCreateFlags  (PrivateDataSlotCreateFlags) where
+
+
+
+data PrivateDataSlotCreateFlags
+
diff --git a/src/Vulkan/Core13/Promoted_From_VK_EXT_extended_dynamic_state.hs b/src/Vulkan/Core13/Promoted_From_VK_EXT_extended_dynamic_state.hs
--- a/src/Vulkan/Core13/Promoted_From_VK_EXT_extended_dynamic_state.hs
+++ b/src/Vulkan/Core13/Promoted_From_VK_EXT_extended_dynamic_state.hs
@@ -94,12 +94,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@cullMode@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetCullMode-None-03384# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetCullMode-commandBuffer-parameter# @commandBuffer@
@@ -178,12 +172,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@frontFace@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetFrontFace-None-03383# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetFrontFace-commandBuffer-parameter# @commandBuffer@
@@ -263,12 +251,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetPrimitiveTopology-None-03347# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetPrimitiveTopology-commandBuffer-parameter#
@@ -351,10 +333,6 @@
 --
 -- == Valid Usage
 --
--- -   #VUID-vkCmdSetViewportWithCount-None-03393# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- -   #VUID-vkCmdSetViewportWithCount-viewportCount-03394# @viewportCount@
 --     /must/ be between @1@ and
 --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
@@ -455,10 +433,6 @@
 --
 -- == Valid Usage
 --
--- -   #VUID-vkCmdSetScissorWithCount-None-03396# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- -   #VUID-vkCmdSetScissorWithCount-scissorCount-03397# @scissorCount@
 --     /must/ be between @1@ and
 --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
@@ -784,12 +758,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@depthTestEnable@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetDepthTestEnable-None-03352# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetDepthTestEnable-commandBuffer-parameter#
@@ -866,12 +834,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@depthWriteEnable@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetDepthWriteEnable-None-03354# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetDepthWriteEnable-commandBuffer-parameter#
@@ -947,12 +909,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@depthCompareOp@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetDepthCompareOp-None-03353# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetDepthCompareOp-commandBuffer-parameter#
@@ -1033,12 +989,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@depthBoundsTestEnable@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetDepthBoundsTestEnable-None-03349# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetDepthBoundsTestEnable-commandBuffer-parameter#
@@ -1115,12 +1065,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@stencilTestEnable@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetStencilTestEnable-None-03350# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetStencilTestEnable-commandBuffer-parameter#
@@ -1196,12 +1140,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@failOp@,
 -- @passOp@, @depthFailOp@, and @compareOp@ values used to create the
 -- currently active pipeline, for both front and back faces.
---
--- == Valid Usage
---
--- -   #VUID-vkCmdSetStencilOp-None-03351# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>
---     feature /must/ be enabled
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Core13/Promoted_From_VK_EXT_extended_dynamic_state2.hs b/src/Vulkan/Core13/Promoted_From_VK_EXT_extended_dynamic_state2.hs
--- a/src/Vulkan/Core13/Promoted_From_VK_EXT_extended_dynamic_state2.hs
+++ b/src/Vulkan/Core13/Promoted_From_VK_EXT_extended_dynamic_state2.hs
@@ -50,12 +50,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@rasterizerDiscardEnable@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetRasterizerDiscardEnable-None-04871# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState2 extendedDynamicState2>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetRasterizerDiscardEnable-commandBuffer-parameter#
@@ -133,12 +127,6 @@
 -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@depthBiasEnable@
 -- value used to create the currently active pipeline.
 --
--- == Valid Usage
---
--- -   #VUID-vkCmdSetDepthBiasEnable-None-04872# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState2 extendedDynamicState2>
---     feature /must/ be enabled
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdSetDepthBiasEnable-commandBuffer-parameter#
@@ -214,12 +202,6 @@
 -- Otherwise, this state is specified by the
 -- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@primitiveRestartEnable@
 -- value used to create the currently active pipeline.
---
--- == Valid Usage
---
--- -   #VUID-vkCmdSetPrimitiveRestartEnable-None-04866# The
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-extendedDynamicState2 extendedDynamicState2>
---     feature /must/ be enabled
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Core13/Promoted_From_VK_EXT_pipeline_creation_feedback.hs b/src/Vulkan/Core13/Promoted_From_VK_EXT_pipeline_creation_feedback.hs
--- a/src/Vulkan/Core13/Promoted_From_VK_EXT_pipeline_creation_feedback.hs
+++ b/src/Vulkan/Core13/Promoted_From_VK_EXT_pipeline_creation_feedback.hs
@@ -129,33 +129,6 @@
 -- element of @pPipelineStageCreationFeedbacks@ corresponds to
 -- 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo'::@stage@.
 --
--- == Valid Usage
---
--- -   #VUID-VkPipelineCreationFeedbackCreateInfo-pipelineStageCreationFeedbackCount-02668#
---     When chained to 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
---     'PipelineCreationFeedback'::@pipelineStageCreationFeedbackCount@
---     /must/ equal
---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@stageCount@
---
--- -   #VUID-VkPipelineCreationFeedbackCreateInfo-pipelineStageCreationFeedbackCount-02669#
---     When chained to 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
---     'PipelineCreationFeedback'::@pipelineStageCreationFeedbackCount@
---     /must/ equal 1
---
--- -   #VUID-VkPipelineCreationFeedbackCreateInfo-pipelineStageCreationFeedbackCount-02670#
---     When chained to
---     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
---     'PipelineCreationFeedback'::@pipelineStageCreationFeedbackCount@
---     /must/ equal
---     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR'::@stageCount@
---
--- -   #VUID-VkPipelineCreationFeedbackCreateInfo-pipelineStageCreationFeedbackCount-02969#
---     When chained to
---     'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
---     'PipelineCreationFeedback'::@pipelineStageCreationFeedbackCount@
---     /must/ equal
---     'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@stageCount@
---
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkPipelineCreationFeedbackCreateInfo-sType-sType# @sType@
@@ -167,13 +140,11 @@
 --     'PipelineCreationFeedback' structure
 --
 -- -   #VUID-VkPipelineCreationFeedbackCreateInfo-pPipelineStageCreationFeedbacks-parameter#
+--     If @pipelineStageCreationFeedbackCount@ is not @0@,
 --     @pPipelineStageCreationFeedbacks@ /must/ be a valid pointer to an
 --     array of @pipelineStageCreationFeedbackCount@
 --     'PipelineCreationFeedback' structures
 --
--- -   #VUID-VkPipelineCreationFeedbackCreateInfo-pipelineStageCreationFeedbackCount-arraylength#
---     @pipelineStageCreationFeedbackCount@ /must/ be greater than @0@
---
 -- = See Also
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_pipeline_creation_feedback VK_EXT_pipeline_creation_feedback>,
@@ -217,7 +188,6 @@
     poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO)
     poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
     poke ((p `plusPtr` 16 :: Ptr (Ptr PipelineCreationFeedback))) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
     poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineCreationFeedback))) (zero)
     f
 
diff --git a/src/Vulkan/Core13/Promoted_From_VK_EXT_private_data.hs b/src/Vulkan/Core13/Promoted_From_VK_EXT_private_data.hs
--- a/src/Vulkan/Core13/Promoted_From_VK_EXT_private_data.hs
+++ b/src/Vulkan/Core13/Promoted_From_VK_EXT_private_data.hs
@@ -9,10 +9,9 @@
                                                         , PrivateDataSlotCreateInfo(..)
                                                         , PhysicalDevicePrivateDataFeatures(..)
                                                         , PrivateDataSlot(..)
+                                                        , PrivateDataSlotCreateFlags(..)
                                                         , StructureType(..)
                                                         , ObjectType(..)
-                                                        , PrivateDataSlotCreateFlagBits(..)
-                                                        , PrivateDataSlotCreateFlags
                                                         ) where
 
 import Vulkan.Internal.Utils (traceAroundEvent)
@@ -66,7 +65,7 @@
 import Vulkan.Core10.Enums.ObjectType (ObjectType(..))
 import Vulkan.Core13.Handles (PrivateDataSlot)
 import Vulkan.Core13.Handles (PrivateDataSlot(..))
-import Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits (PrivateDataSlotCreateFlags)
+import Vulkan.Core13.Enums.PrivateDataSlotCreateFlags (PrivateDataSlotCreateFlags)
 import Vulkan.Core10.Enums.Result (Result)
 import Vulkan.Core10.Enums.Result (Result(..))
 import Vulkan.Core10.Enums.StructureType (StructureType)
@@ -77,8 +76,7 @@
 import Vulkan.Core10.Enums.Result (Result(SUCCESS))
 import Vulkan.Core10.Enums.ObjectType (ObjectType(..))
 import Vulkan.Core13.Handles (PrivateDataSlot(..))
-import Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits (PrivateDataSlotCreateFlagBits(..))
-import Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits (PrivateDataSlotCreateFlags)
+import Vulkan.Core13.Enums.PrivateDataSlotCreateFlags (PrivateDataSlotCreateFlags(..))
 import Vulkan.Core10.Enums.StructureType (StructureType(..))
 foreign import ccall
 #if !defined(SAFE_FOREIGN_CALLS)
@@ -442,14 +440,12 @@
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_private_data VK_EXT_private_data>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_3 VK_VERSION_1_3>,
--- 'Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits.PrivateDataSlotCreateFlags',
+-- 'Vulkan.Core13.Enums.PrivateDataSlotCreateFlags.PrivateDataSlotCreateFlags',
 -- 'Vulkan.Core10.Enums.StructureType.StructureType',
 -- 'createPrivateDataSlot',
 -- 'Vulkan.Extensions.VK_EXT_private_data.createPrivateDataSlotEXT'
 data PrivateDataSlotCreateInfo = PrivateDataSlotCreateInfo
-  { -- | @flags@ is a bitmask of
-    -- 'Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits.PrivateDataSlotCreateFlags'
-    -- specifying additional parameters of the new private data slot
+  { -- | @flags@ is reserved for future use.
     --
     -- #VUID-VkPrivateDataSlotCreateInfo-flags-zerobitmask# @flags@ /must/ be
     -- @0@
diff --git a/src/Vulkan/Core13/Promoted_From_VK_KHR_copy_commands2.hs b/src/Vulkan/Core13/Promoted_From_VK_KHR_copy_commands2.hs
--- a/src/Vulkan/Core13/Promoted_From_VK_KHR_copy_commands2.hs
+++ b/src/Vulkan/Core13/Promoted_From_VK_KHR_copy_commands2.hs
@@ -766,6 +766,12 @@
 --     /must/ match the number of slices of the @extent@ (for 3D) or layers
 --     of the @dstSubresource@ (for non-3D)
 --
+-- -   #VUID-VkImageCopy2-extent-06668# @extent.width@ /must/ not be 0
+--
+-- -   #VUID-VkImageCopy2-extent-06669# @extent.height@ /must/ not be 0
+--
+-- -   #VUID-VkImageCopy2-extent-06670# @extent.depth@ /must/ not be 0
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkImageCopy2-sType-sType# @sType@ /must/ be
@@ -1022,6 +1028,15 @@
 -- -   #VUID-VkBufferImageCopy2-aspectMask-00212# The @aspectMask@ member
 --     of @imageSubresource@ /must/ only have a single bit set
 --
+-- -   #VUID-VkBufferImageCopy2-imageExtent-06659# @imageExtent.width@
+--     /must/ not be 0
+--
+-- -   #VUID-VkBufferImageCopy2-imageExtent-06660# @imageExtent.height@
+--     /must/ not be 0
+--
+-- -   #VUID-VkBufferImageCopy2-imageExtent-06661# @imageExtent.depth@
+--     /must/ not be 0
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkBufferImageCopy2-sType-sType# @sType@ /must/ be
@@ -1398,11 +1413,6 @@
 --     of @srcImage@ /must/ contain
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'
 --
--- -   #VUID-VkCopyImageInfo2-srcImage-00126# @srcImage@ /must/ have been
---     created with
---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
---     usage flag
---
 -- -   #VUID-VkCopyImageInfo2-srcImage-01546# If @srcImage@ is non-sparse
 --     then the image or /disjoint/ plane to be copied /must/ be bound
 --     completely and contiguously to a single
@@ -1424,11 +1434,6 @@
 --     of @dstImage@ /must/ contain
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
 --
--- -   #VUID-VkCopyImageInfo2-dstImage-00131# @dstImage@ /must/ have been
---     created with
---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
 -- -   #VUID-VkCopyImageInfo2-dstImage-01547# If @dstImage@ is non-sparse
 --     then the image or /disjoint/ plane that is the destination of the
 --     copy /must/ be bound completely and contiguously to a single
@@ -1703,6 +1708,46 @@
 --     @dstOffset.z@) /must/ equal the depth of the specified
 --     @dstSubresource@ of @dstImage@
 --
+-- -   #VUID-VkCopyImageInfo2-aspect-06662# If the @aspect@ member of any
+--     element of @pRegions@ includes any flag other than
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--     or @srcImage@ was not created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkImageStencilUsageCreateInfo separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create
+--     @srcImage@
+--
+-- -   #VUID-VkCopyImageInfo2-aspect-06663# If the @aspect@ member of any
+--     element of @pRegions@ includes any flag other than
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--     or @dstImage@ was not created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkImageStencilUsageCreateInfo separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create
+--     @dstImage@
+--
+-- -   #VUID-VkCopyImageInfo2-aspect-06664# If the @aspect@ member of any
+--     element of @pRegions@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     and @srcImage@ was created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkImageStencilUsageCreateInfo separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
+--     used to create @srcImage@
+--
+-- -   #VUID-VkCopyImageInfo2-aspect-06665# If the @aspect@ member of any
+--     element of @pRegions@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     and @dstImage@ was created with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkImageStencilUsageCreateInfo separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
+--     used to create @dstImage@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkCopyImageInfo2-sType-sType# @sType@ /must/ be
@@ -1832,7 +1877,7 @@
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
 --
 -- -   #VUID-VkBlitImageInfo2-srcImage-06421# @srcImage@ /must/ not use a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y’CBCR conversion>
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y′CBCR conversion>
 --
 -- -   #VUID-VkBlitImageInfo2-srcImage-00219# @srcImage@ /must/ have been
 --     created with
@@ -1860,7 +1905,7 @@
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'
 --
 -- -   #VUID-VkBlitImageInfo2-dstImage-06422# @dstImage@ /must/ not use a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y’CBCR conversion>
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y′CBCR conversion>
 --
 -- -   #VUID-VkBlitImageInfo2-dstImage-00224# @dstImage@ /must/ have been
 --     created with
diff --git a/src/Vulkan/Core13/Promoted_From_VK_KHR_dynamic_rendering.hs b/src/Vulkan/Core13/Promoted_From_VK_KHR_dynamic_rendering.hs
--- a/src/Vulkan/Core13/Promoted_From_VK_KHR_dynamic_rendering.hs
+++ b/src/Vulkan/Core13/Promoted_From_VK_KHR_dynamic_rendering.hs
@@ -294,67 +294,8 @@
 -- indicate that an attachment /can/ be used - but it is still valid to set
 -- the attachment to @NULL@ when beginning rendering.
 --
--- == Valid Usage
---
--- -   #VUID-VkPipelineRenderingCreateInfoKHR-pColorAttachmentFormats-06495#
---     If any element of @pColorAttachmentFormats@ is not
---     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format
---     with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential format features>
---     that includes either
---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---     or
---     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV'
---
--- -   #VUID-VkPipelineRenderingCreateInfo-depthAttachmentFormat-06065# If
---     @depthAttachmentFormat@ is not
---     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format
---     with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential format features>
---     that include
---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   #VUID-VkPipelineRenderingCreateInfo-stencilAttachmentFormat-06164#
---     If @stencilAttachmentFormat@ is not
---     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format
---     with
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential format features>
---     that include
---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   #VUID-VkPipelineRenderingCreateInfo-depthAttachmentFormat-06165# If
---     @depthAttachmentFormat@ is not
---     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' and
---     @stencilAttachmentFormat@ is not
---     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED',
---     @depthAttachmentFormat@ /must/ equal @stencilAttachmentFormat@
---
--- -   #VUID-VkPipelineRenderingCreateInfo-multiview-06066# If the
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-multiview multiview>
---     feature is not enabled, @viewMask@ /must/ be @0@
---
--- -   #VUID-VkPipelineRenderingCreateInfo-viewMask-06067# The index of the
---     most significant bit in @viewMask@ /must/ be less than
---     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxMultiviewViewCount maxMultiviewViewCount>
---
 -- == Valid Usage (Implicit)
 --
--- -   #VUID-VkPipelineRenderingCreateInfo-sType-sType# @sType@ /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO'
---
--- -   #VUID-VkPipelineRenderingCreateInfo-pColorAttachmentFormats-parameter#
---     If @colorAttachmentCount@ is not @0@, @pColorAttachmentFormats@
---     /must/ be a valid pointer to an array of @colorAttachmentCount@
---     valid 'Vulkan.Core10.Enums.Format.Format' values
---
--- -   #VUID-VkPipelineRenderingCreateInfo-depthAttachmentFormat-parameter#
---     @depthAttachmentFormat@ /must/ be a valid
---     'Vulkan.Core10.Enums.Format.Format' value
---
--- -   #VUID-VkPipelineRenderingCreateInfo-stencilAttachmentFormat-parameter#
---     @stencilAttachmentFormat@ /must/ be a valid
---     'Vulkan.Core10.Enums.Format.Format' value
---
 -- = See Also
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,
@@ -522,12 +463,25 @@
 --     have been created with
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
 --
+-- -   #VUID-VkRenderingInfo-pDepthAttachment-06547# If @pDepthAttachment@
+--     is not @NULL@ and @pDepthAttachment->imageView@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pDepthAttachment->imageView@ /must/ have been created with a format
+--     that includes a depth aspect
+--
 -- -   #VUID-VkRenderingInfo-pDepthAttachment-06088# If @pDepthAttachment@
 --     is not @NULL@ and @pDepthAttachment->imageView@ is not
 --     'Vulkan.Core10.APIConstants.NULL_HANDLE',
 --     @pDepthAttachment->imageView@ /must/ have been created with
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
 --
+-- -   #VUID-VkRenderingInfo-pStencilAttachment-06548# If
+--     @pStencilAttachment@ is not @NULL@ and
+--     @pStencilAttachment->imageView@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pStencilAttachment->imageView@ /must/ have been created with a
+--     format that includes a stencil aspect
+--
 -- -   #VUID-VkRenderingInfo-pStencilAttachment-06089# If
 --     @pStencilAttachment@ is not @NULL@ and
 --     @pStencilAttachment->imageView@ is not
@@ -1369,6 +1323,11 @@
 --     that include
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
 --
+-- -   #VUID-VkCommandBufferInheritanceRenderingInfo-depthAttachmentFormat-06540#
+--     If @depthAttachmentFormat@ is not
+--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format
+--     that includes a depth aspect
+--
 -- -   #VUID-VkCommandBufferInheritanceRenderingInfo-depthAttachmentFormat-06007#
 --     If @depthAttachmentFormat@ is not
 --     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format
@@ -1386,6 +1345,11 @@
 --     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#potential-format-features potential format features>
 --     that include
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV'
+--
+-- -   #VUID-VkCommandBufferInheritanceRenderingInfo-stencilAttachmentFormat-06541#
+--     If @stencilAttachmentFormat@ is not
+--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format
+--     that includes a stencil aspect
 --
 -- -   #VUID-VkCommandBufferInheritanceRenderingInfo-stencilAttachmentFormat-06199#
 --     If @stencilAttachmentFormat@ is not
diff --git a/src/Vulkan/Core13/Promoted_From_VK_KHR_maintenance4.hs b/src/Vulkan/Core13/Promoted_From_VK_KHR_maintenance4.hs
--- a/src/Vulkan/Core13/Promoted_From_VK_KHR_maintenance4.hs
+++ b/src/Vulkan/Core13/Promoted_From_VK_KHR_maintenance4.hs
@@ -343,8 +343,8 @@
 --     @pCreateInfo@ /must/ be a valid pointer to a valid
 --     'Vulkan.Core10.Image.ImageCreateInfo' structure
 --
--- -   #VUID-VkDeviceImageMemoryRequirements-planeAspect-parameter#
---     @planeAspect@ /must/ be a valid
+-- -   #VUID-VkDeviceImageMemoryRequirements-planeAspect-parameter# If
+--     @planeAspect@ is not @0@, @planeAspect@ /must/ be a valid
 --     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' value
 --
 -- = See Also
@@ -394,7 +394,6 @@
     lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
     pCreateInfo'' <- ContT @_ @_ @(Ptr (ImageCreateInfo '[])) $ \cont -> withSomeCStruct @ImageCreateInfo ((SomeStruct zero)) (cont . castPtr)
     lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr (ImageCreateInfo _)))) pCreateInfo''
-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageAspectFlagBits)) (zero)
     lift $ f
 
 instance FromCStruct DeviceImageMemoryRequirements where
diff --git a/src/Vulkan/Dynamic.hs b/src/Vulkan/Dynamic.hs
--- a/src/Vulkan/Dynamic.hs
+++ b/src/Vulkan/Dynamic.hs
@@ -122,8 +122,10 @@
 import {-# SOURCE #-} Vulkan.Core10.Enums.DescriptorPoolResetFlags (DescriptorPoolResetFlags)
 import {-# SOURCE #-} Vulkan.Core10.Handles (DescriptorSet)
 import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetAllocateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping (DescriptorSetBindingReferenceVALVE)
 import {-# SOURCE #-} Vulkan.Core10.Handles (DescriptorSetLayout)
 import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetLayoutCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping (DescriptorSetLayoutHostMappingInfoVALVE)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (DescriptorSetLayoutSupport)
 import {-# SOURCE #-} Vulkan.Core11.Handles (DescriptorUpdateTemplate)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateCreateInfo)
@@ -1039,6 +1041,8 @@
   , pVkGetBufferCollectionPropertiesFUCHSIA :: FunPtr (Ptr Device_T -> BufferCollectionFUCHSIA -> ("pProperties" ::: Ptr BufferCollectionPropertiesFUCHSIA) -> IO Result)
   , pVkCmdBeginRendering :: FunPtr (Ptr CommandBuffer_T -> ("pRenderingInfo" ::: Ptr (SomeStruct RenderingInfo)) -> IO ())
   , pVkCmdEndRendering :: FunPtr (Ptr CommandBuffer_T -> IO ())
+  , pVkGetDescriptorSetLayoutHostMappingInfoVALVE :: FunPtr (Ptr Device_T -> ("pBindingReference" ::: Ptr DescriptorSetBindingReferenceVALVE) -> ("pHostMapping" ::: Ptr DescriptorSetLayoutHostMappingInfoVALVE) -> IO ())
+  , pVkGetDescriptorSetHostMappingVALVE :: FunPtr (Ptr Device_T -> DescriptorSet -> ("ppData" ::: Ptr (Ptr ())) -> IO ())
   }
 
 deriving instance Eq DeviceCmds
@@ -1089,7 +1093,8 @@
     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 nullFunPtr
+    nullFunPtr
 
 foreign import ccall
 #if !defined(SAFE_FOREIGN_CALLS)
@@ -1468,6 +1473,8 @@
   vkGetBufferCollectionPropertiesFUCHSIA <- getDeviceProcAddr' handle (Ptr "vkGetBufferCollectionPropertiesFUCHSIA"#)
   vkCmdBeginRendering <- getFirstDeviceProcAddr [(Ptr "vkCmdBeginRenderingKHR"#), (Ptr "vkCmdBeginRendering"#)]
   vkCmdEndRendering <- getFirstDeviceProcAddr [(Ptr "vkCmdEndRenderingKHR"#), (Ptr "vkCmdEndRendering"#)]
+  vkGetDescriptorSetLayoutHostMappingInfoVALVE <- getDeviceProcAddr' handle (Ptr "vkGetDescriptorSetLayoutHostMappingInfoVALVE"#)
+  vkGetDescriptorSetHostMappingVALVE <- getDeviceProcAddr' handle (Ptr "vkGetDescriptorSetHostMappingVALVE"#)
   pure $ DeviceCmds handle
     (castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetDeviceProcAddr)
     (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDevice)
@@ -1827,4 +1834,6 @@
     (castFunPtr @_ @(Ptr Device_T -> BufferCollectionFUCHSIA -> ("pProperties" ::: Ptr BufferCollectionPropertiesFUCHSIA) -> IO Result) vkGetBufferCollectionPropertiesFUCHSIA)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRenderingInfo" ::: Ptr (SomeStruct RenderingInfo)) -> IO ()) vkCmdBeginRendering)
     (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdEndRendering)
+    (castFunPtr @_ @(Ptr Device_T -> ("pBindingReference" ::: Ptr DescriptorSetBindingReferenceVALVE) -> ("pHostMapping" ::: Ptr DescriptorSetLayoutHostMappingInfoVALVE) -> IO ()) vkGetDescriptorSetLayoutHostMappingInfoVALVE)
+    (castFunPtr @_ @(Ptr Device_T -> DescriptorSet -> ("ppData" ::: Ptr (Ptr ())) -> IO ()) vkGetDescriptorSetHostMappingVALVE)
 
diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs
--- a/src/Vulkan/Extensions.hs
+++ b/src/Vulkan/Extensions.hs
@@ -61,6 +61,7 @@
                           , module Vulkan.Extensions.VK_EXT_full_screen_exclusive
                           , module Vulkan.Extensions.VK_EXT_global_priority
                           , module Vulkan.Extensions.VK_EXT_global_priority_query
+                          , module Vulkan.Extensions.VK_EXT_graphics_pipeline_library
                           , module Vulkan.Extensions.VK_EXT_hdr_metadata
                           , module Vulkan.Extensions.VK_EXT_headless_surface
                           , module Vulkan.Extensions.VK_EXT_host_query_reset
@@ -82,6 +83,7 @@
                           , module Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
                           , module Vulkan.Extensions.VK_EXT_post_depth_coverage
                           , module Vulkan.Extensions.VK_EXT_primitive_topology_list_restart
+                          , module Vulkan.Extensions.VK_EXT_primitives_generated_query
                           , module Vulkan.Extensions.VK_EXT_private_data
                           , module Vulkan.Extensions.VK_EXT_provoking_vertex
                           , module Vulkan.Extensions.VK_EXT_queue_family_foreign
@@ -178,6 +180,7 @@
                           , module Vulkan.Extensions.VK_KHR_performance_query
                           , module Vulkan.Extensions.VK_KHR_pipeline_executable_properties
                           , module Vulkan.Extensions.VK_KHR_pipeline_library
+                          , module Vulkan.Extensions.VK_KHR_portability_enumeration
                           , module Vulkan.Extensions.VK_KHR_portability_subset
                           , module Vulkan.Extensions.VK_KHR_present_id
                           , module Vulkan.Extensions.VK_KHR_present_wait
@@ -266,6 +269,7 @@
                           , module Vulkan.Extensions.VK_QCOM_render_pass_transform
                           , module Vulkan.Extensions.VK_QCOM_rotated_copy_commands
                           , module Vulkan.Extensions.VK_QNX_screen_surface
+                          , module Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping
                           , module Vulkan.Extensions.VK_VALVE_mutable_descriptor_type
                           ) where
 import Vulkan.Extensions.Dependencies
@@ -329,6 +333,7 @@
 import Vulkan.Extensions.VK_EXT_full_screen_exclusive
 import Vulkan.Extensions.VK_EXT_global_priority
 import Vulkan.Extensions.VK_EXT_global_priority_query
+import Vulkan.Extensions.VK_EXT_graphics_pipeline_library
 import Vulkan.Extensions.VK_EXT_hdr_metadata
 import Vulkan.Extensions.VK_EXT_headless_surface
 import Vulkan.Extensions.VK_EXT_host_query_reset
@@ -350,6 +355,7 @@
 import Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
 import Vulkan.Extensions.VK_EXT_post_depth_coverage
 import Vulkan.Extensions.VK_EXT_primitive_topology_list_restart
+import Vulkan.Extensions.VK_EXT_primitives_generated_query
 import Vulkan.Extensions.VK_EXT_private_data
 import Vulkan.Extensions.VK_EXT_provoking_vertex
 import Vulkan.Extensions.VK_EXT_queue_family_foreign
@@ -446,6 +452,7 @@
 import Vulkan.Extensions.VK_KHR_performance_query
 import Vulkan.Extensions.VK_KHR_pipeline_executable_properties
 import Vulkan.Extensions.VK_KHR_pipeline_library
+import Vulkan.Extensions.VK_KHR_portability_enumeration
 import Vulkan.Extensions.VK_KHR_portability_subset
 import Vulkan.Extensions.VK_KHR_present_id
 import Vulkan.Extensions.VK_KHR_present_wait
@@ -534,5 +541,6 @@
 import Vulkan.Extensions.VK_QCOM_render_pass_transform
 import Vulkan.Extensions.VK_QCOM_rotated_copy_commands
 import Vulkan.Extensions.VK_QNX_screen_surface
+import Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping
 import Vulkan.Extensions.VK_VALVE_mutable_descriptor_type
 
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
@@ -44,6 +44,7 @@
 import Vulkan.Extensions.VK_EXT_full_screen_exclusive (pattern EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_global_priority (pattern EXT_GLOBAL_PRIORITY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_global_priority_query (pattern EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME)
+import Vulkan.Extensions.VK_EXT_graphics_pipeline_library (pattern EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_hdr_metadata (pattern EXT_HDR_METADATA_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_headless_surface (pattern EXT_HEADLESS_SURFACE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_EXT_host_query_reset (pattern EXT_HOST_QUERY_RESET_EXTENSION_NAME)
@@ -58,6 +59,7 @@
 import Vulkan.Extensions.VK_EXT_pageable_device_local_memory (pattern EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_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_primitives_generated_query (pattern EXT_PRIMITIVES_GENERATED_QUERY_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_rgba10x6_formats (pattern EXT_RGBA10X6_FORMATS_EXTENSION_NAME)
@@ -133,6 +135,7 @@
 import Vulkan.Extensions.VK_KHR_multiview (pattern KHR_MULTIVIEW_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_performance_query (pattern KHR_PERFORMANCE_QUERY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_pipeline_executable_properties (pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME)
+import Vulkan.Extensions.VK_KHR_pipeline_library (pattern KHR_PIPELINE_LIBRARY_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_portability_subset (pattern KHR_PORTABILITY_SUBSET_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_present_id (pattern KHR_PRESENT_ID_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_present_wait (pattern KHR_PRESENT_WAIT_EXTENSION_NAME)
@@ -504,9 +507,11 @@
   EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME       -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME ->
     [EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, KHR_DISPLAY_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
-  KHR_PRESENT_ID_EXTENSION_NAME                       -> [KHR_SWAPCHAIN_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
-  NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME         -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  KHR_SYNCHRONIZATION_2_EXTENSION_NAME                -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  KHR_PRESENT_ID_EXTENSION_NAME               -> [KHR_SWAPCHAIN_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
+  NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  KHR_SYNCHRONIZATION_2_EXTENSION_NAME        -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME ->
+    [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, KHR_PIPELINE_LIBRARY_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
@@ -604,6 +609,8 @@
   EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   QNX_SCREEN_SURFACE_EXTENSION_NAME           -> [KHR_SURFACE_EXTENSION_NAME]
   EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME       -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME ->
+    [EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME ->
     [EXT_GLOBAL_PRIORITY_EXTENSION_NAME, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME   -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
diff --git a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
--- a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
+++ b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
@@ -15,7 +15,7 @@
 --     130
 --
 -- [__Revision__]
---     4
+--     5
 --
 -- [__Extension and Version Dependencies__]
 --
@@ -229,7 +229,7 @@
 -- new AHB formats\/usages and existing Vulkan features. No new Vulkan
 -- features or implementation requirements can be added. The extension
 -- version number will be incremented when this additional documentation is
--- added, but the version number does not indicate that an implementaiton
+-- added, but the version number does not indicate that an implementation
 -- supports Vulkan memory or resources that map to the new
 -- 'AHardwareBuffer' features: support for that must be queried with
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
@@ -242,6 +242,10 @@
 --
 -- == Version History
 --
+-- -   Revision 5, 2022-02-04 (Chris Forbes)
+--
+--     -   Describe mapping of flags for storage image support
+--
 -- -   Revision 4, 2021-09-30 (Jon Leech)
 --
 --     -   Add interaction with @VK_KHR_format_feature_flags2@ to @vk.xml@
@@ -1180,11 +1184,11 @@
            zero
 
 
-type ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 4
+type ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 5
 
 -- No documentation found for TopLevel "VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION"
 pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION :: forall a . Integral a => a
-pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 4
+pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 5
 
 
 type ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME = "VK_ANDROID_external_memory_android_hardware_buffer"
diff --git a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
--- a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
+++ b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
@@ -15,7 +15,7 @@
 --     130
 --
 -- [__Revision__]
---     4
+--     5
 --
 -- [__Extension and Version Dependencies__]
 --
@@ -229,7 +229,7 @@
 -- new AHB formats\/usages and existing Vulkan features. No new Vulkan
 -- features or implementation requirements can be added. The extension
 -- version number will be incremented when this additional documentation is
--- added, but the version number does not indicate that an implementaiton
+-- added, but the version number does not indicate that an implementation
 -- supports Vulkan memory or resources that map to the new
 -- 'AHardwareBuffer' features: support for that must be queried with
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
@@ -241,6 +241,10 @@
 -- existing Vulkan features map to that new Android feature.
 --
 -- == Version History
+--
+-- -   Revision 5, 2022-02-04 (Chris Forbes)
+--
+--     -   Describe mapping of flags for storage image support
 --
 -- -   Revision 4, 2021-09-30 (Jon Leech)
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_color_write_enable.hs b/src/Vulkan/Extensions/VK_EXT_color_write_enable.hs
--- a/src/Vulkan/Extensions/VK_EXT_color_write_enable.hs
+++ b/src/Vulkan/Extensions/VK_EXT_color_write_enable.hs
@@ -195,10 +195,10 @@
 --     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-colorWriteEnable colorWriteEnable>
 --     feature /must/ be enabled
 --
--- -   #VUID-vkCmdSetColorWriteEnableEXT-attachmentCount-04804#
---     @attachmentCount@ /must/ be equal to the @attachmentCount@ member of
---     the 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'
---     structure specified during pipeline creation
+-- -   #VUID-vkCmdSetColorWriteEnableEXT-attachmentCount-06656#
+--     @attachmentCount@ /must/ be less than or equal to the
+--     @maxColorAttachments@ member of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'
 --
 -- == Valid Usage (Implicit)
 --
@@ -379,6 +379,11 @@
 --     @attachmentCount@ /must/ be equal to the @attachmentCount@ member of
 --     the 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'
 --     structure specified during pipeline creation
+--
+-- -   #VUID-VkPipelineColorWriteCreateInfoEXT-attachmentCount-06655#
+--     @attachmentCount@ /must/ be less than or equal to the
+--     @maxColorAttachments@ member of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs
--- a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs
+++ b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs
@@ -151,14 +151,16 @@
 --
 -- -   'DebugUtilsMessengerCallbackDataEXT'
 --
--- -   'DebugUtilsObjectNameInfoEXT'
---
 -- -   'DebugUtilsObjectTagInfoEXT'
 --
 -- -   Extending 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo':
 --
 --     -   'DebugUtilsMessengerCreateInfoEXT'
 --
+-- -   Extending 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo':
+--
+--     -   'DebugUtilsObjectNameInfoEXT'
+--
 -- == New Function Pointers
 --
 -- -   'PFN_vkDebugUtilsMessengerCallbackEXT'
@@ -1393,6 +1395,15 @@
 -- @pObjectName@ is either @NULL@ or an empty string, then any previously
 -- set name is removed.
 --
+-- The
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-graphicsPipelineLibrary graphicsPipelineLibrary>
+-- feature allows the specification of pipelines without the creation of
+-- 'Vulkan.Core10.Handles.ShaderModule' objects beforehand. In order to
+-- continue to allow naming these shaders independently,
+-- 'DebugUtilsObjectNameInfoEXT' /can/ be included in the @pNext@ chain of
+-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo', which associates
+-- a static name with that particular shader.
+--
 -- == Valid Usage
 --
 -- -   #VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02589# If
@@ -1412,9 +1423,6 @@
 --
 -- -   #VUID-VkDebugUtilsObjectNameInfoEXT-sType-sType# @sType@ /must/ be
 --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT'
---
--- -   #VUID-VkDebugUtilsObjectNameInfoEXT-pNext-pNext# @pNext@ /must/ be
---     @NULL@
 --
 -- -   #VUID-VkDebugUtilsObjectNameInfoEXT-objectType-parameter#
 --     @objectType@ /must/ be a valid
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
@@ -151,13 +151,15 @@
 --
 -- -   'DebugUtilsMessengerCallbackDataEXT'
 --
--- -   'DebugUtilsObjectNameInfoEXT'
---
 -- -   'DebugUtilsObjectTagInfoEXT'
 --
 -- -   Extending 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo':
 --
 --     -   'DebugUtilsMessengerCreateInfoEXT'
+--
+-- -   Extending 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo':
+--
+--     -   'DebugUtilsObjectNameInfoEXT'
 --
 -- == New Function Pointers
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_depth_clip_control.hs b/src/Vulkan/Extensions/VK_EXT_depth_clip_control.hs
--- a/src/Vulkan/Extensions/VK_EXT_depth_clip_control.hs
+++ b/src/Vulkan/Extensions/VK_EXT_depth_clip_control.hs
@@ -95,10 +95,10 @@
 -- 1) Should this extension include an origin control option to match
 -- GL_LOWER_LEFT found in ARB_clip_control?
 --
--- __RESOLVED__: Yes. The fix for porting over the origin is a simple
--- y-axis flip. The depth clip control is a much harder problem to solve
--- than what this extension is aimed to solve. Adding an equivalent to
--- GL_LOWER_LEFT would require more testing.
+-- __RESOLVED__: No. The fix for porting over the origin is a simple y-axis
+-- flip. The depth clip control is a much harder problem to solve than what
+-- this extension is aimed to solve. Adding an equivalent to GL_LOWER_LEFT
+-- would require more testing.
 --
 -- 2) Should this pipeline state be dynamic?
 --
@@ -110,7 +110,7 @@
 -- 3) Should the control provided in this extension be an enum that could
 -- be extended in the future?
 --
--- __RESOLVED__: Yes. It is highly unlikely that the depth range is changed
+-- __RESOLVED__: No. It is highly unlikely that the depth range is changed
 -- to anything other than [0, 1] in the future. Should that happen a new
 -- extension will be required to extend such an enum, and that extension
 -- might as well add a new struct to chain to
diff --git a/src/Vulkan/Extensions/VK_EXT_depth_clip_control.hs-boot b/src/Vulkan/Extensions/VK_EXT_depth_clip_control.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_depth_clip_control.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_depth_clip_control.hs-boot
@@ -95,10 +95,10 @@
 -- 1) Should this extension include an origin control option to match
 -- GL_LOWER_LEFT found in ARB_clip_control?
 --
--- __RESOLVED__: Yes. The fix for porting over the origin is a simple
--- y-axis flip. The depth clip control is a much harder problem to solve
--- than what this extension is aimed to solve. Adding an equivalent to
--- GL_LOWER_LEFT would require more testing.
+-- __RESOLVED__: No. The fix for porting over the origin is a simple y-axis
+-- flip. The depth clip control is a much harder problem to solve than what
+-- this extension is aimed to solve. Adding an equivalent to GL_LOWER_LEFT
+-- would require more testing.
 --
 -- 2) Should this pipeline state be dynamic?
 --
@@ -110,7 +110,7 @@
 -- 3) Should the control provided in this extension be an enum that could
 -- be extended in the future?
 --
--- __RESOLVED__: Yes. It is highly unlikely that the depth range is changed
+-- __RESOLVED__: No. It is highly unlikely that the depth range is changed
 -- to anything other than [0, 1] in the future. Should that happen a new
 -- extension will be required to extend such an enum, and that extension
 -- might as well add a new struct to chain to
diff --git a/src/Vulkan/Extensions/VK_EXT_graphics_pipeline_library.hs b/src/Vulkan/Extensions/VK_EXT_graphics_pipeline_library.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_graphics_pipeline_library.hs
@@ -0,0 +1,500 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_graphics_pipeline_library - device extension
+--
+-- == VK_EXT_graphics_pipeline_library
+--
+-- [__Name String__]
+--     @VK_EXT_graphics_pipeline_library@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     321
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
+--     -   Requires @VK_KHR_pipeline_library@
+--
+-- [__Contact__]
+--
+--     -   Tobias Hector
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_graphics_pipeline_library] @tobski%0A<<Here describe the issue or question you have about the VK_EXT_graphics_pipeline_library extension>> >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_graphics_pipeline_library.asciidoc VK_EXT_graphics_pipeline_library>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-08-17
+--
+-- [__Contributors__]
+--
+--     -   Tobias Hector, AMD
+--
+--     -   Chris Glover, Google
+--
+--     -   Jeff Leger, Qualcomm
+--
+--     -   Jan-Harald Fredriksen, Arm
+--
+--     -   Piers Daniell, NVidia
+--
+--     -   Boris Zanin, Mobica
+--
+--     -   Krzysztof Niski, NVidia
+--
+--     -   Dan Ginsburg, Valve
+--
+--     -   Sebastian Aaltonen, Unity
+--
+--     -   Arseny Kapoulkine, Roblox
+--
+--     -   Calle Lejdfors, Ubisoft
+--
+--     -   Tiago Rodrigues, Ubisoft
+--
+--     -   Francois Duranleau, Gameloft
+--
+-- == Description
+--
+-- This extension allows the separate compilation of four distinct parts of
+-- graphics pipelines, with the intent of allowing faster pipeline loading
+-- for applications reusing the same shaders or state in multiple
+-- pipelines. Each part can be independently compiled into a graphics
+-- pipeline library, with a final link step required to create an
+-- executable pipeline that can be bound to a command buffer.
+--
+-- == New Structures
+--
+-- -   Extending 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':
+--
+--     -   'GraphicsPipelineLibraryCreateInfoEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
+--
+--     -   'PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT'
+--
+-- == New Enums
+--
+-- -   'GraphicsPipelineLibraryFlagBitsEXT'
+--
+-- -   'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PipelineLayoutCreateFlagBits'
+--
+-- == New Bitmasks
+--
+-- -   'GraphicsPipelineLibraryFlagsEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME'
+--
+-- -   'EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT'
+--
+--     -   'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PipelineLayoutCreateFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT'
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-08-17 (Tobias Hector)
+--
+--     -   Initial draft.
+--
+-- == See Also
+--
+-- 'GraphicsPipelineLibraryCreateInfoEXT',
+-- 'GraphicsPipelineLibraryFlagBitsEXT', 'GraphicsPipelineLibraryFlagsEXT',
+-- 'PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT',
+-- 'PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT',
+-- 'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PipelineLayoutCreateFlagBits'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_graphics_pipeline_library 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_graphics_pipeline_library  ( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(..)
+                                                           , PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(..)
+                                                           , GraphicsPipelineLibraryCreateInfoEXT(..)
+                                                           , GraphicsPipelineLibraryFlagsEXT
+                                                           , GraphicsPipelineLibraryFlagBitsEXT( GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT
+                                                                                               , GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT
+                                                                                               , GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT
+                                                                                               , GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT
+                                                                                               , ..
+                                                                                               )
+                                                           , EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION
+                                                           , pattern EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION
+                                                           , EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME
+                                                           , pattern EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME
+                                                           ) where
+
+import Vulkan.Internal.Utils (enumReadPrec)
+import Vulkan.Internal.Utils (enumShowsPrec)
+import Foreign.Marshal.Alloc (allocaBytes)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Data.Bits (Bits)
+import Data.Bits (FiniteBits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import GHC.Show (Show(showsPrec))
+import Data.Kind (Type)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.FundamentalTypes (Flags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT))
+-- | VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT - Structure
+-- describing support for graphics pipeline libraries
+--
+-- = Members
+--
+-- This structure describes the following feature:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT' 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. 'PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT' /can/ also
+-- be used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to selectively enable these features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_graphics_pipeline_library VK_EXT_graphics_pipeline_library>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT = PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+  { -- | #features-graphicsPipelineLibrary# @graphicsPipelineLibrary@ indicates
+    -- that the implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-library graphics pipeline libraries>.
+    graphicsPipelineLibrary :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT)
+#endif
+deriving instance Show PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+
+instance ToCStruct PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (graphicsPipelineLibrary))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT where
+  peekCStruct p = do
+    graphicsPipelineLibrary <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+             (bool32ToBool graphicsPipelineLibrary)
+
+instance Storable PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT where
+  zero = PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+           zero
+
+
+-- | VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT - Structure
+-- describing additional properties of graphics pipeline libraries
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT' 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
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_graphics_pipeline_library VK_EXT_graphics_pipeline_library>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT = PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+  { -- | #limits-graphicsPipelineLibraryFastLinking#
+    -- @graphicsPipelineLibraryFastLinking@ indicates whether fast linking of
+    -- graphics pipelines is supported. If it is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE', creating a graphics pipeline
+    -- entirely from pipeline libraries without
+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT'
+    -- is comparable in cost to recording a command in a command buffer.
+    graphicsPipelineLibraryFastLinking :: Bool
+  , -- | #limits-graphicsPipelineLibraryIndependentInterpolationDecoration#
+    -- @graphicsPipelineLibraryIndependentInterpolationDecoration@ indicates
+    -- whether @NoPerspective@ and @Flat@ interpolation decorations in the last
+    -- vertex processing stage and the fragment shader are required to match
+    -- when using graphics pipeline libraries. If it is
+    -- 'Vulkan.Core10.FundamentalTypes.TRUE', the interpolation decorations do
+    -- not need to match. If it is 'Vulkan.Core10.FundamentalTypes.FALSE',
+    -- these decorations /must/ either be present in both stages or neither
+    -- stage in order for a given interface variable to match.
+    graphicsPipelineLibraryIndependentInterpolationDecoration :: Bool
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT)
+#endif
+deriving instance Show PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+
+instance ToCStruct PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (graphicsPipelineLibraryFastLinking))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (graphicsPipelineLibraryIndependentInterpolationDecoration))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_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))
+    f
+
+instance FromCStruct PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT where
+  peekCStruct p = do
+    graphicsPipelineLibraryFastLinking <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    graphicsPipelineLibraryIndependentInterpolationDecoration <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+             (bool32ToBool graphicsPipelineLibraryFastLinking) (bool32ToBool graphicsPipelineLibraryIndependentInterpolationDecoration)
+
+instance Storable PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT where
+  zero = PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+           zero
+           zero
+
+
+-- | VkGraphicsPipelineLibraryCreateInfoEXT - Structure specifying the
+-- subsets of the graphics pipeline being compiled
+--
+-- = Description
+--
+-- If a 'GraphicsPipelineLibraryCreateInfoEXT' structure is included in the
+-- @pNext@ chain of 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', it
+-- specifies the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets subsets of the graphics pipeline>
+-- being created.
+--
+-- If this structure is omitted, and either
+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@flags@ includes
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+-- or the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pNext@
+-- chain includes a
+-- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
+-- structure with a @libraryCount@ greater than @0@, it is as if @flags@ is
+-- @0@. Otherwise if this structure is omitted, it is as if @flags@
+-- includes all possible subsets of the graphics pipeline (i.e. a
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-complete complete graphics pipeline>).
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_graphics_pipeline_library VK_EXT_graphics_pipeline_library>,
+-- 'GraphicsPipelineLibraryFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data GraphicsPipelineLibraryCreateInfoEXT = GraphicsPipelineLibraryCreateInfoEXT
+  { -- | @flags@ is a bitmask of 'GraphicsPipelineLibraryFlagBitsEXT' specifying
+    -- the subsets of the graphics pipeline that are being compiled.
+    --
+    -- #VUID-VkGraphicsPipelineLibraryCreateInfoEXT-flags-parameter# @flags@
+    -- /must/ be a valid combination of 'GraphicsPipelineLibraryFlagBitsEXT'
+    -- values
+    --
+    -- #VUID-VkGraphicsPipelineLibraryCreateInfoEXT-flags-requiredbitmask#
+    -- @flags@ /must/ not be @0@
+    flags :: GraphicsPipelineLibraryFlagsEXT }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (GraphicsPipelineLibraryCreateInfoEXT)
+#endif
+deriving instance Show GraphicsPipelineLibraryCreateInfoEXT
+
+instance ToCStruct GraphicsPipelineLibraryCreateInfoEXT where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GraphicsPipelineLibraryCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr GraphicsPipelineLibraryFlagsEXT)) (flags)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr GraphicsPipelineLibraryFlagsEXT)) (zero)
+    f
+
+instance FromCStruct GraphicsPipelineLibraryCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @GraphicsPipelineLibraryFlagsEXT ((p `plusPtr` 16 :: Ptr GraphicsPipelineLibraryFlagsEXT))
+    pure $ GraphicsPipelineLibraryCreateInfoEXT
+             flags
+
+instance Storable GraphicsPipelineLibraryCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero GraphicsPipelineLibraryCreateInfoEXT where
+  zero = GraphicsPipelineLibraryCreateInfoEXT
+           zero
+
+
+type GraphicsPipelineLibraryFlagsEXT = GraphicsPipelineLibraryFlagBitsEXT
+
+-- | VkGraphicsPipelineLibraryFlagBitsEXT - Bitmask specifying the subset of
+-- a graphics pipeline to compile
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_graphics_pipeline_library VK_EXT_graphics_pipeline_library>,
+-- 'GraphicsPipelineLibraryFlagsEXT'
+newtype GraphicsPipelineLibraryFlagBitsEXT = GraphicsPipelineLibraryFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
+
+-- | 'GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT' specifies
+-- that a pipeline will include
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-vertex-input vertex input interface state>.
+pattern GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT    = GraphicsPipelineLibraryFlagBitsEXT 0x00000001
+-- | 'GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT' specifies
+-- that a pipeline will include
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>.
+pattern GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT = GraphicsPipelineLibraryFlagBitsEXT 0x00000002
+-- | 'GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT' specifies that a
+-- pipeline will include
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>.
+pattern GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT           = GraphicsPipelineLibraryFlagBitsEXT 0x00000004
+-- | 'GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT' specifies
+-- that a pipeline will include
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>.
+pattern GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT = GraphicsPipelineLibraryFlagBitsEXT 0x00000008
+
+conNameGraphicsPipelineLibraryFlagBitsEXT :: String
+conNameGraphicsPipelineLibraryFlagBitsEXT = "GraphicsPipelineLibraryFlagBitsEXT"
+
+enumPrefixGraphicsPipelineLibraryFlagBitsEXT :: String
+enumPrefixGraphicsPipelineLibraryFlagBitsEXT = "GRAPHICS_PIPELINE_LIBRARY_"
+
+showTableGraphicsPipelineLibraryFlagBitsEXT :: [(GraphicsPipelineLibraryFlagBitsEXT, String)]
+showTableGraphicsPipelineLibraryFlagBitsEXT =
+  [ (GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT   , "VERTEX_INPUT_INTERFACE_BIT_EXT")
+  , (GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, "PRE_RASTERIZATION_SHADERS_BIT_EXT")
+  , (GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT          , "FRAGMENT_SHADER_BIT_EXT")
+  , (GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, "FRAGMENT_OUTPUT_INTERFACE_BIT_EXT")
+  ]
+
+instance Show GraphicsPipelineLibraryFlagBitsEXT where
+  showsPrec = enumShowsPrec enumPrefixGraphicsPipelineLibraryFlagBitsEXT
+                            showTableGraphicsPipelineLibraryFlagBitsEXT
+                            conNameGraphicsPipelineLibraryFlagBitsEXT
+                            (\(GraphicsPipelineLibraryFlagBitsEXT x) -> x)
+                            (\x -> showString "0x" . showHex x)
+
+instance Read GraphicsPipelineLibraryFlagBitsEXT where
+  readPrec = enumReadPrec enumPrefixGraphicsPipelineLibraryFlagBitsEXT
+                          showTableGraphicsPipelineLibraryFlagBitsEXT
+                          conNameGraphicsPipelineLibraryFlagBitsEXT
+                          GraphicsPipelineLibraryFlagBitsEXT
+
+
+type EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION"
+pattern EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION = 1
+
+
+type EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME = "VK_EXT_graphics_pipeline_library"
+
+-- No documentation found for TopLevel "VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME"
+pattern EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME = "VK_EXT_graphics_pipeline_library"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_graphics_pipeline_library.hs-boot b/src/Vulkan/Extensions/VK_EXT_graphics_pipeline_library.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_graphics_pipeline_library.hs-boot
@@ -0,0 +1,183 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_graphics_pipeline_library - device extension
+--
+-- == VK_EXT_graphics_pipeline_library
+--
+-- [__Name String__]
+--     @VK_EXT_graphics_pipeline_library@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     321
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
+--     -   Requires @VK_KHR_pipeline_library@
+--
+-- [__Contact__]
+--
+--     -   Tobias Hector
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_graphics_pipeline_library] @tobski%0A<<Here describe the issue or question you have about the VK_EXT_graphics_pipeline_library extension>> >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_graphics_pipeline_library.asciidoc VK_EXT_graphics_pipeline_library>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-08-17
+--
+-- [__Contributors__]
+--
+--     -   Tobias Hector, AMD
+--
+--     -   Chris Glover, Google
+--
+--     -   Jeff Leger, Qualcomm
+--
+--     -   Jan-Harald Fredriksen, Arm
+--
+--     -   Piers Daniell, NVidia
+--
+--     -   Boris Zanin, Mobica
+--
+--     -   Krzysztof Niski, NVidia
+--
+--     -   Dan Ginsburg, Valve
+--
+--     -   Sebastian Aaltonen, Unity
+--
+--     -   Arseny Kapoulkine, Roblox
+--
+--     -   Calle Lejdfors, Ubisoft
+--
+--     -   Tiago Rodrigues, Ubisoft
+--
+--     -   Francois Duranleau, Gameloft
+--
+-- == Description
+--
+-- This extension allows the separate compilation of four distinct parts of
+-- graphics pipelines, with the intent of allowing faster pipeline loading
+-- for applications reusing the same shaders or state in multiple
+-- pipelines. Each part can be independently compiled into a graphics
+-- pipeline library, with a final link step required to create an
+-- executable pipeline that can be bound to a command buffer.
+--
+-- == New Structures
+--
+-- -   Extending 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':
+--
+--     -   'GraphicsPipelineLibraryCreateInfoEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
+--
+--     -   'PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT'
+--
+-- == New Enums
+--
+-- -   'GraphicsPipelineLibraryFlagBitsEXT'
+--
+-- -   'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PipelineLayoutCreateFlagBits'
+--
+-- == New Bitmasks
+--
+-- -   'GraphicsPipelineLibraryFlagsEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME'
+--
+-- -   'EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT'
+--
+--     -   'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PipelineLayoutCreateFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT'
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-08-17 (Tobias Hector)
+--
+--     -   Initial draft.
+--
+-- == See Also
+--
+-- 'GraphicsPipelineLibraryCreateInfoEXT',
+-- 'GraphicsPipelineLibraryFlagBitsEXT', 'GraphicsPipelineLibraryFlagsEXT',
+-- 'PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT',
+-- 'PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT',
+-- 'Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits.PipelineLayoutCreateFlagBits'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_graphics_pipeline_library 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_graphics_pipeline_library  ( GraphicsPipelineLibraryCreateInfoEXT
+                                                           , PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+                                                           , PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+                                                           ) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data GraphicsPipelineLibraryCreateInfoEXT
+
+instance ToCStruct GraphicsPipelineLibraryCreateInfoEXT
+instance Show GraphicsPipelineLibraryCreateInfoEXT
+
+instance FromCStruct GraphicsPipelineLibraryCreateInfoEXT
+
+
+data PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+
+instance ToCStruct PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+instance Show PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+
+instance FromCStruct PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+
+
+data PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+
+instance ToCStruct PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+instance Show PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+
+instance FromCStruct PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_multi_draw.hs b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs
--- a/src/Vulkan/Extensions/VK_EXT_multi_draw.hs
+++ b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs
@@ -279,16 +279,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMultiEXT-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMultiEXT-None-02697# For each set /n/ that is
@@ -388,6 +388,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawMultiEXT-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawMultiEXT-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #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
@@ -495,6 +512,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawMultiEXT-None-06666# If the bound graphics pipeline
+--     state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawMultiEXT-viewportCount-03417# If the bound graphics
 --     pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -754,6 +779,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawMultiEXT-attachmentCount-06667# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawMultiEXT-pDepthAttachment-06181# If the current
 --     render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -904,6 +941,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdDrawMultiEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawMultiEXT-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdDrawMultiEXT-commandBuffer-02712# If @commandBuffer@ is a
 --     protected command buffer and
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault>
@@ -1192,16 +1247,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMultiIndexedEXT-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMultiIndexedEXT-None-02697# For each set /n/ that is
@@ -1301,6 +1356,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #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
@@ -1408,6 +1480,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-None-06666# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03417# If the bound
 --     graphics pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -1667,6 +1747,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-attachmentCount-06667# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06181# If the
 --     current render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -1817,6 +1909,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawMultiIndexedEXT-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712# If
 --     @commandBuffer@ is a protected command buffer and
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault>
@@ -2155,8 +2265,8 @@
 --
 -- = Description
 --
--- If the @VkPhysicalDeviceMultiDrawPropertiesPropertiesEXT@ structure is
--- included in the @pNext@ chain of the
+-- If the 'PhysicalDeviceMultiDrawPropertiesEXT' 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',
diff --git a/src/Vulkan/Extensions/VK_EXT_primitives_generated_query.hs b/src/Vulkan/Extensions/VK_EXT_primitives_generated_query.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_primitives_generated_query.hs
@@ -0,0 +1,274 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_primitives_generated_query - device extension
+--
+-- == VK_EXT_primitives_generated_query
+--
+-- [__Name String__]
+--     @VK_EXT_primitives_generated_query@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     383
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_EXT_transform_feedback@
+--
+-- [__Special Use__]
+--
+--     -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-compatibility-specialuse OpenGL \/ ES support>
+--
+-- [__Contact__]
+--
+--     -   Shahbaz Youssefi
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_primitives_generated_query] @syoussefi%0A<<Here describe the issue or question you have about the VK_EXT_primitives_generated_query extension>> >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_primitives_generated_query.asciidoc VK_EXT_primitives_generated_query>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2022-01-24
+--
+-- [__Contributors__]
+--
+--     -   Shahbaz Youssefi, Google
+--
+--     -   Piers Daniell, NVIDIA
+--
+--     -   Jason Ekstrand, Collabora
+--
+--     -   Jan-Harald Fredriksen, Arm
+--
+-- == Description
+--
+-- This extension adds support for a new query type to match OpenGL’s
+-- @GL_PRIMITIVES_GENERATED@ to support layering.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME'
+--
+-- -   'EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.QueryType.QueryType':
+--
+--     -   'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT'
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-06-23 (Shahbaz Youssefi)
+--
+--     -   Internal revisions
+--
+-- == Issues
+--
+-- 1) Can the query from @VK_EXT_transform_feedback@ be used instead?
+--
+-- __RESOLVED__: No. While the query from VK_EXT_transform_feedback can
+-- produce the same results as in this extension, it is only available
+-- while transform feedback is active. The OpenGL @GL_PRIMITIVES_GENERATED@
+-- query is independent from transform feedback. Emulation through
+-- artificial transform feedback is unnecessarily inefficient.
+--
+-- 2) Can
+-- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT'
+-- be used instead?
+--
+-- __RESOLVED__: It could, but we prefer the extension for simplicity.
+-- Vulkan requires that only one query be active at a time. If both the
+-- @GL_PRIMITIVES_GENERATED@ and the @GL_CLIPPING_INPUT_PRIMITIVES_ARB@
+-- queries need to be simultaneously enabled, emulation of both through
+-- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT'
+-- is inconvenient.
+--
+-- 3) On some hardware, this query cannot be implemented if
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@rasterizerDiscardEnable@
+-- is enabled. How will this be handled?
+--
+-- __RESOLVED__: A feature flag is exposed by this extension for this. On
+-- said hardware, the GL implementation disables rasterizer-discard and
+-- achieves the same effect through other means. It will not be able to do
+-- the same in Vulkan due to lack of state information. A feature flag is
+-- exposed by this extension so the OpenGL implementation on top of Vulkan
+-- would be able to implement a similar workaround.
+--
+-- 4) On some hardware, this query cannot be implemented for non-zero query
+-- indices. How will this be handled?
+--
+-- __RESOLVED__: A feature flag is exposed by this extension for this. If
+-- this feature is not present, the query from @VK_EXT_transform_feedback@
+-- can be used to the same effect.
+--
+-- 5) How is the interaction of this extension with
+-- @transformFeedbackRasterizationStreamSelect@ handled?
+--
+-- __RESOLVED__: Disallowed for non-zero streams. In OpenGL, the
+-- rasterization stream is always stream zero.
+--
+-- == See Also
+--
+-- 'PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_primitives_generated_query 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_primitives_generated_query  ( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(..)
+                                                            , EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION
+                                                            , pattern EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION
+                                                            , EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME
+                                                            , pattern EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME
+                                                            ) where
+
+import Foreign.Marshal.Alloc (allocaBytes)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT))
+-- | VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT - Structure
+-- describing support for primitives generated query
+--
+-- = Members
+--
+-- This structure describes the following feature:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT' 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. 'PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT' /can/
+-- also be used in the @pNext@ chain of
+-- 'Vulkan.Core10.Device.DeviceCreateInfo' to selectively enable these
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_primitives_generated_query VK_EXT_primitives_generated_query>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT = PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+  { -- | #features-primitivesGeneratedQuery# @primitivesGeneratedQuery@ indicates
+    -- whether the implementation supports the
+    -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+    -- query type.
+    primitivesGeneratedQuery :: Bool
+  , -- | #features-primitivesGeneratedQueryWithRasterizerDiscard#
+    -- @primitivesGeneratedQueryWithRasterizerDiscard@ indicates whether the
+    -- implementation supports this query when
+    -- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+    -- is enabled.
+    primitivesGeneratedQueryWithRasterizerDiscard :: Bool
+  , -- | #features-primitivesGeneratedQueryWithNonZeroStreams#
+    -- @primitivesGeneratedQueryWithNonZeroStreams@ indicates whether the
+    -- implementation supports this query with a non-zero index in
+    -- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT'.
+    primitivesGeneratedQueryWithNonZeroStreams :: Bool
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT)
+#endif
+deriving instance Show PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+
+instance ToCStruct PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (primitivesGeneratedQuery))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (primitivesGeneratedQueryWithRasterizerDiscard))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (primitivesGeneratedQueryWithNonZeroStreams))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT where
+  peekCStruct p = do
+    primitivesGeneratedQuery <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    primitivesGeneratedQueryWithRasterizerDiscard <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    primitivesGeneratedQueryWithNonZeroStreams <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+             (bool32ToBool primitivesGeneratedQuery) (bool32ToBool primitivesGeneratedQueryWithRasterizerDiscard) (bool32ToBool primitivesGeneratedQueryWithNonZeroStreams)
+
+instance Storable PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT where
+  zero = PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+           zero
+           zero
+           zero
+
+
+type EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION"
+pattern EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION = 1
+
+
+type EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME = "VK_EXT_primitives_generated_query"
+
+-- No documentation found for TopLevel "VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME"
+pattern EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME = "VK_EXT_primitives_generated_query"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_primitives_generated_query.hs-boot b/src/Vulkan/Extensions/VK_EXT_primitives_generated_query.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_primitives_generated_query.hs-boot
@@ -0,0 +1,154 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_EXT_primitives_generated_query - device extension
+--
+-- == VK_EXT_primitives_generated_query
+--
+-- [__Name String__]
+--     @VK_EXT_primitives_generated_query@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     383
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_EXT_transform_feedback@
+--
+-- [__Special Use__]
+--
+--     -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-compatibility-specialuse OpenGL \/ ES support>
+--
+-- [__Contact__]
+--
+--     -   Shahbaz Youssefi
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_primitives_generated_query] @syoussefi%0A<<Here describe the issue or question you have about the VK_EXT_primitives_generated_query extension>> >
+--
+-- [__Extension Proposal__]
+--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_primitives_generated_query.asciidoc VK_EXT_primitives_generated_query>
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2022-01-24
+--
+-- [__Contributors__]
+--
+--     -   Shahbaz Youssefi, Google
+--
+--     -   Piers Daniell, NVIDIA
+--
+--     -   Jason Ekstrand, Collabora
+--
+--     -   Jan-Harald Fredriksen, Arm
+--
+-- == Description
+--
+-- This extension adds support for a new query type to match OpenGL’s
+-- @GL_PRIMITIVES_GENERATED@ to support layering.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT'
+--
+-- == New Enum Constants
+--
+-- -   'EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME'
+--
+-- -   'EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.QueryType.QueryType':
+--
+--     -   'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT'
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-06-23 (Shahbaz Youssefi)
+--
+--     -   Internal revisions
+--
+-- == Issues
+--
+-- 1) Can the query from @VK_EXT_transform_feedback@ be used instead?
+--
+-- __RESOLVED__: No. While the query from VK_EXT_transform_feedback can
+-- produce the same results as in this extension, it is only available
+-- while transform feedback is active. The OpenGL @GL_PRIMITIVES_GENERATED@
+-- query is independent from transform feedback. Emulation through
+-- artificial transform feedback is unnecessarily inefficient.
+--
+-- 2) Can
+-- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT'
+-- be used instead?
+--
+-- __RESOLVED__: It could, but we prefer the extension for simplicity.
+-- Vulkan requires that only one query be active at a time. If both the
+-- @GL_PRIMITIVES_GENERATED@ and the @GL_CLIPPING_INPUT_PRIMITIVES_ARB@
+-- queries need to be simultaneously enabled, emulation of both through
+-- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT'
+-- is inconvenient.
+--
+-- 3) On some hardware, this query cannot be implemented if
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@rasterizerDiscardEnable@
+-- is enabled. How will this be handled?
+--
+-- __RESOLVED__: A feature flag is exposed by this extension for this. On
+-- said hardware, the GL implementation disables rasterizer-discard and
+-- achieves the same effect through other means. It will not be able to do
+-- the same in Vulkan due to lack of state information. A feature flag is
+-- exposed by this extension so the OpenGL implementation on top of Vulkan
+-- would be able to implement a similar workaround.
+--
+-- 4) On some hardware, this query cannot be implemented for non-zero query
+-- indices. How will this be handled?
+--
+-- __RESOLVED__: A feature flag is exposed by this extension for this. If
+-- this feature is not present, the query from @VK_EXT_transform_feedback@
+-- can be used to the same effect.
+--
+-- 5) How is the interaction of this extension with
+-- @transformFeedbackRasterizationStreamSelect@ handled?
+--
+-- __RESOLVED__: Disallowed for non-zero streams. In OpenGL, the
+-- rasterization stream is always stream zero.
+--
+-- == See Also
+--
+-- 'PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_primitives_generated_query 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_primitives_generated_query  (PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+
+instance ToCStruct PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+instance Show PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+
+instance FromCStruct PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_private_data.hs b/src/Vulkan/Extensions/VK_EXT_private_data.hs
--- a/src/Vulkan/Extensions/VK_EXT_private_data.hs
+++ b/src/Vulkan/Extensions/VK_EXT_private_data.hs
@@ -91,10 +91,6 @@
 --
 --     -   'PhysicalDevicePrivateDataFeaturesEXT'
 --
--- == New Enums
---
--- -   'PrivateDataSlotCreateFlagBitsEXT'
---
 -- == New Bitmasks
 --
 -- -   'PrivateDataSlotCreateFlagsEXT'
@@ -136,8 +132,7 @@
 -- == See Also
 --
 -- 'DevicePrivateDataCreateInfoEXT',
--- 'PhysicalDevicePrivateDataFeaturesEXT',
--- 'PrivateDataSlotCreateFlagBitsEXT', 'PrivateDataSlotCreateFlagsEXT',
+-- 'PhysicalDevicePrivateDataFeaturesEXT', 'PrivateDataSlotCreateFlagsEXT',
 -- 'PrivateDataSlotCreateInfoEXT', 'PrivateDataSlotEXT',
 -- 'createPrivateDataSlotEXT', 'destroyPrivateDataSlotEXT',
 -- 'getPrivateDataEXT', 'setPrivateDataEXT'
@@ -159,7 +154,6 @@
                                               , getPrivateDataEXT
                                               , PrivateDataSlotCreateFlagsEXT
                                               , PrivateDataSlotEXT
-                                              , PrivateDataSlotCreateFlagBitsEXT
                                               , DevicePrivateDataCreateInfoEXT
                                               , PrivateDataSlotCreateInfoEXT
                                               , PhysicalDevicePrivateDataFeaturesEXT
@@ -177,8 +171,7 @@
 import Vulkan.Core13.Promoted_From_VK_EXT_private_data (DevicePrivateDataCreateInfo)
 import Vulkan.Core13.Promoted_From_VK_EXT_private_data (PhysicalDevicePrivateDataFeatures)
 import Vulkan.Core13.Handles (PrivateDataSlot)
-import Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits (PrivateDataSlotCreateFlagBits)
-import Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits (PrivateDataSlotCreateFlags)
+import Vulkan.Core13.Enums.PrivateDataSlotCreateFlags (PrivateDataSlotCreateFlags)
 import Vulkan.Core13.Promoted_From_VK_EXT_private_data (PrivateDataSlotCreateInfo)
 import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_PRIVATE_DATA_SLOT))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO))
@@ -222,10 +215,6 @@
 
 -- No documentation found for TopLevel "VkPrivateDataSlotEXT"
 type PrivateDataSlotEXT = PrivateDataSlot
-
-
--- No documentation found for TopLevel "VkPrivateDataSlotCreateFlagBitsEXT"
-type PrivateDataSlotCreateFlagBitsEXT = PrivateDataSlotCreateFlagBits
 
 
 -- No documentation found for TopLevel "VkDevicePrivateDataCreateInfoEXT"
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
@@ -914,11 +914,39 @@
 --     the @index@ parameter /must/ be less than
 --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@
 --
--- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-02340# If the @queryType@
+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-06689# If the @queryType@
+--     used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-06690# If the @queryType@
+--     used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     the @index@ parameter /must/ be less than
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@
+--
+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-06691# If the @queryType@
+--     used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled, the @index@ parameter /must/ be zero.
+--
+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-06692# If the @queryType@
 --     used to create @queryPool@ was not
 --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     and not
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT',
 --     the @index@ /must/ be zero
 --
+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-06693# If the @queryType@
+--     used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     then
+--     <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-primitivesGeneratedQuery primitivesGeneratedQuery>
+--     /must/ be enabled
+--
 -- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-02341# If the @queryType@
 --     used to create @queryPool@ was
 --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
@@ -1036,6 +1064,7 @@
                            QueryControlFlags
                         -> -- | @index@ is the query type specific index. When the query type is
                            -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+                           -- or 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT',
                            -- the index represents the vertex stream.
                            ("index" ::: Word32)
                         -> io ()
@@ -1090,20 +1119,26 @@
 --     view mask /must/ be less than or equal to the number of queries in
 --     @queryPool@
 --
--- -   #VUID-vkCmdEndQueryIndexedEXT-queryType-02346# If the @queryType@
+-- -   #VUID-vkCmdEndQueryIndexedEXT-queryType-06694# If the @queryType@
 --     used to create @queryPool@ was
 --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     or
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT',
 --     the @index@ parameter /must/ be less than
 --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@
 --
--- -   #VUID-vkCmdEndQueryIndexedEXT-queryType-02347# If the @queryType@
+-- -   #VUID-vkCmdEndQueryIndexedEXT-queryType-06695# If the @queryType@
 --     used to create @queryPool@ was not
 --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     and not
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT',
 --     the @index@ /must/ be zero
 --
--- -   #VUID-vkCmdEndQueryIndexedEXT-queryType-02723# If the @queryType@
+-- -   #VUID-vkCmdEndQueryIndexedEXT-queryType-06696# If the @queryType@
 --     used to create @queryPool@ was
 --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     or
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT',
 --     @index@ /must/ equal the @index@ used to begin the query
 --
 -- == Valid Usage (Implicit)
@@ -1279,16 +1314,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndirectByteCountEXT-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02697# For each set /n/
@@ -1388,6 +1423,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDrawIndirectByteCountEXT-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
@@ -1497,6 +1549,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-06666# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417# If the
 --     bound graphics pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -1757,6 +1817,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-attachmentCount-06667# If the
+--     bound graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawIndirectByteCountEXT-pDepthAttachment-06181# If the
 --     current render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -1906,6 +1978,24 @@
 --     the currently bound pipeline /must/ have been created with a
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
 --
 -- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-04007# All vertex input
 --     bindings accessed via vertex input variables declared in the vertex
diff --git a/src/Vulkan/Extensions/VK_HUAWEI_subpass_shading.hs b/src/Vulkan/Extensions/VK_HUAWEI_subpass_shading.hs
--- a/src/Vulkan/Extensions/VK_HUAWEI_subpass_shading.hs
+++ b/src/Vulkan/Extensions/VK_HUAWEI_subpass_shading.hs
@@ -563,16 +563,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdSubpassShadingHUAWEI-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdSubpassShadingHUAWEI-None-02697# For each set /n/ that is
@@ -671,6 +671,23 @@
 --     is not supported, 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-vkCmdSubpassShadingHUAWEI-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdSubpassShadingHUAWEI-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
 --
 -- -   #VUID-vkCmdSubpassShadingHUAWEI-None-04115# If a
 --     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@
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
@@ -3180,13 +3180,13 @@
 --     non-sparse buffer then it /must/ be bound completely and
 --     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
 --
--- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03815# For any
+-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-06707# For any
 --     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
 --     with a @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', each
 --     'AccelerationStructureInstanceKHR'::@accelerationStructureReference@
 --     value in @geometry.instances.data.deviceAddress@ /must/ be a valid
 --     device address containing a value obtained from
---     'getAccelerationStructureDeviceAddressKHR'
+--     'getAccelerationStructureDeviceAddressKHR' or @0@
 --
 -- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03675# For each
 --     @pInfos@[i], @dstAccelerationStructure@ /must/ have been created
@@ -3762,14 +3762,14 @@
 --     non-sparse buffer then it /must/ be bound completely and
 --     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
 --
--- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03815# For
+-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-06707# For
 --     any element of @pInfos@[i].@pGeometries@ or
 --     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
 --     'GEOMETRY_TYPE_INSTANCES_KHR', each
 --     'AccelerationStructureInstanceKHR'::@accelerationStructureReference@
 --     value in @geometry.instances.data.deviceAddress@ /must/ be a valid
 --     device address containing a value obtained from
---     'getAccelerationStructureDeviceAddressKHR'
+--     'getAccelerationStructureDeviceAddressKHR' or @0@
 --
 -- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03645#
 --     For any element of @pIndirectDeviceAddresses@, if the buffer from
diff --git a/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs b/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
--- a/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
+++ b/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
@@ -106,9 +106,7 @@
 --
 -- The following examples will illustrate the concept of deferrable
 -- operations using a hypothetical example. The command
--- @vkDoSomethingExpensiveEXT@ denotes a deferrable command. The structure
--- @VkExpensiveOperationArgsEXT@ represents the arguments which it would
--- normally accept.
+-- @vkDoSomethingExpensive@ denotes a deferrable command.
 --
 -- The following example illustrates how a vulkan application might request
 -- deferral of an expensive operation:
@@ -159,7 +157,7 @@
 -- >                 // in a job system, a return of VK_THREAD_IDLE_KHR should queue another
 -- >                 // job, but it is not functionally required
 -- >     }
--- >   );
+-- >   ));
 -- > }
 -- >
 -- > for (auto &f : joins) {
diff --git a/src/Vulkan/Extensions/VK_KHR_dynamic_rendering.hs b/src/Vulkan/Extensions/VK_KHR_dynamic_rendering.hs
--- a/src/Vulkan/Extensions/VK_KHR_dynamic_rendering.hs
+++ b/src/Vulkan/Extensions/VK_KHR_dynamic_rendering.hs
@@ -696,20 +696,6 @@
 --
 -- == Valid Usage (Implicit)
 --
--- -   #VUID-VkAttachmentSampleCountInfoAMD-sType-sType# @sType@ /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD'
---
--- -   #VUID-VkAttachmentSampleCountInfoAMD-pColorAttachmentSamples-parameter#
---     If @colorAttachmentCount@ is not @0@, @pColorAttachmentSamples@
---     /must/ be a valid pointer to an array of @colorAttachmentCount@
---     valid 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
---     values
---
--- -   #VUID-VkAttachmentSampleCountInfoAMD-depthStencilAttachmentSamples-parameter#
---     If @depthStencilAttachmentSamples@ is not @0@,
---     @depthStencilAttachmentSamples@ /must/ be a valid
---     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
---
 -- = See Also
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_mixed_attachment_samples VK_AMD_mixed_attachment_samples>,
@@ -787,18 +773,7 @@
 -- specifying the dynamic render pass instance parameters for secondary
 -- command buffers.
 --
--- == Valid Usage
---
--- -   #VUID-VkMultiviewPerViewAttributesInfoNVX-perViewAttributesPositionXOnly-06163#
---     If @perViewAttributesPositionXOnly@ is
---     'Vulkan.Core10.FundamentalTypes.TRUE' then @perViewAttributes@
---     /must/ also be 'Vulkan.Core10.FundamentalTypes.TRUE'
---
 -- == Valid Usage (Implicit)
---
--- -   #VUID-VkMultiviewPerViewAttributesInfoNVX-sType-sType# @sType@
---     /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX'
 --
 -- = See Also
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_format_feature_flags2.hs b/src/Vulkan/Extensions/VK_KHR_format_feature_flags2.hs
--- a/src/Vulkan/Extensions/VK_KHR_format_feature_flags2.hs
+++ b/src/Vulkan/Extensions/VK_KHR_format_feature_flags2.hs
@@ -88,7 +88,7 @@
 --
 -- -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR'
 --     indicates that an implementation supports depth comparison performed
---     by @OpImage*Dref@ instructions on a given
+--     by @OpImage*Dref*@ instructions on a given
 --     'Vulkan.Core10.Enums.Format.Format'. Previously the result of
 --     executing a @OpImage*Dref*@ instruction on an image view, where the
 --     @format@ was not one of the depth\/stencil formats with a depth
diff --git a/src/Vulkan/Extensions/VK_KHR_fragment_shading_rate.hs b/src/Vulkan/Extensions/VK_KHR_fragment_shading_rate.hs
--- a/src/Vulkan/Extensions/VK_KHR_fragment_shading_rate.hs
+++ b/src/Vulkan/Extensions/VK_KHR_fragment_shading_rate.hs
@@ -812,14 +812,6 @@
 --
 -- == Valid Usage (Implicit)
 --
--- -   #VUID-VkPipelineFragmentShadingRateStateCreateInfoKHR-sType-sType#
---     @sType@ /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR'
---
--- -   #VUID-VkPipelineFragmentShadingRateStateCreateInfoKHR-combinerOps-parameter#
---     Any given element of @combinerOps@ /must/ be a valid
---     'FragmentShadingRateCombinerOpKHR' value
---
 -- = See Also
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_fragment_shading_rate VK_KHR_fragment_shading_rate>,
diff --git a/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs b/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs
--- a/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs
+++ b/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs
@@ -48,8 +48,10 @@
 --
 -- == New Structures
 --
--- -   'PipelineLibraryCreateInfoKHR'
+-- -   Extending 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':
 --
+--     -   'PipelineLibraryCreateInfoKHR'
+--
 -- == New Enum Constants
 --
 -- -   'KHR_PIPELINE_LIBRARY_EXTENSION_NAME'
@@ -129,9 +131,6 @@
 --
 -- -   #VUID-VkPipelineLibraryCreateInfoKHR-sType-sType# @sType@ /must/ be
 --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR'
---
--- -   #VUID-VkPipelineLibraryCreateInfoKHR-pNext-pNext# @pNext@ /must/ be
---     @NULL@
 --
 -- -   #VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-parameter# If
 --     @libraryCount@ is not @0@, @pLibraries@ /must/ be a valid pointer to
diff --git a/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot b/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot
--- a/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot
+++ b/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot
@@ -48,7 +48,9 @@
 --
 -- == New Structures
 --
--- -   'PipelineLibraryCreateInfoKHR'
+-- -   Extending 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':
+--
+--     -   'PipelineLibraryCreateInfoKHR'
 --
 -- == New Enum Constants
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_portability_enumeration.hs b/src/Vulkan/Extensions/VK_KHR_portability_enumeration.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_portability_enumeration.hs
@@ -0,0 +1,110 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_KHR_portability_enumeration - instance extension
+--
+-- == VK_KHR_portability_enumeration
+--
+-- [__Name String__]
+--     @VK_KHR_portability_enumeration@
+--
+-- [__Extension Type__]
+--     Instance extension
+--
+-- [__Registered Extension Number__]
+--     395
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+-- [__Contact__]
+--
+--     -   Charles Giessen
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_KHR_portability_enumeration] @charles-lunarg%0A<<Here describe the issue or question you have about the VK_KHR_portability_enumeration extension>> >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-06-02
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Interactions and External Dependencies__]
+--
+--     -   Interacts with @VK_KHR_portability_subset@
+--
+-- [__Contributors__]
+--
+--     -   Lenny Komow, LunarG
+--
+--     -   Charles Giessen, LunarG
+--
+-- == Description
+--
+-- This extension allows applications to control whether devices that
+-- expose the @VK_KHR_portability_subset@ extension are included in the
+-- results of physical device enumeration. Since devices which support the
+-- @VK_KHR_portability_subset@ extension are not fully conformant Vulkan
+-- implementations, the Vulkan loader does not report those devices unless
+-- the application explicitly asks for them. This prevents applications
+-- which may not be aware of non-conformant devices from accidentally using
+-- them, as any device which supports the @VK_KHR_portability_subset@
+-- extension mandates that the extension must be enabled if that device is
+-- used.
+--
+-- This extension is implemented in the loader.
+--
+-- == New Enum Constants
+--
+-- -   'KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME'
+--
+-- -   'KHR_PORTABILITY_ENUMERATION_SPEC_VERSION'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.InstanceCreateFlagBits.InstanceCreateFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.InstanceCreateFlagBits.INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR'
+--
+-- == Version History
+--
+-- -   Revision 1, 2021-06-02 (Lenny Komow)
+--
+--     -   Initial version
+--
+-- == See Also
+--
+-- No cross-references are available
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VK_KHR_portability_enumeration Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_KHR_portability_enumeration  ( KHR_PORTABILITY_ENUMERATION_SPEC_VERSION
+                                                         , pattern KHR_PORTABILITY_ENUMERATION_SPEC_VERSION
+                                                         , KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME
+                                                         , pattern KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME
+                                                         ) where
+
+import Data.String (IsString)
+
+type KHR_PORTABILITY_ENUMERATION_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION"
+pattern KHR_PORTABILITY_ENUMERATION_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_PORTABILITY_ENUMERATION_SPEC_VERSION = 1
+
+
+type KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME = "VK_KHR_portability_enumeration"
+
+-- No documentation found for TopLevel "VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME"
+pattern KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME = "VK_KHR_portability_enumeration"
+
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
@@ -958,16 +958,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdTraceRaysKHR-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdTraceRaysKHR-None-02697# For each set /n/ that is
@@ -1067,6 +1067,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdTraceRaysKHR-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdTraceRaysKHR-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdTraceRaysKHR-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
@@ -1864,16 +1881,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdTraceRaysIndirectKHR-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02697# For each set /n/ that is
@@ -1973,6 +1990,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdTraceRaysIndirectKHR-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdTraceRaysIndirectKHR-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
@@ -2855,6 +2889,12 @@
 --     feature is not enabled, @flags@ /must/ not include
 --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
 --
+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-06546# @flags@ /must/
+--     not include both
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
+--     and
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
+--
 -- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03598# If @flags@
 --     includes
 --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR',
@@ -2880,6 +2920,11 @@
 -- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pDynamicStates-03602# Any
 --     element of the @pDynamicStates@ member of @pDynamicState@ /must/ be
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR'
+--
+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pipelineStageCreationFeedbackCount-06652#
+--     If
+--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo'::@pipelineStageCreationFeedbackCount@
+--     is not @0@, it /must/ be equal to @stageCount@
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_subgroup_uniform_control_flow.hs b/src/Vulkan/Extensions/VK_KHR_shader_subgroup_uniform_control_flow.hs
--- a/src/Vulkan/Extensions/VK_KHR_shader_subgroup_uniform_control_flow.hs
+++ b/src/Vulkan/Extensions/VK_KHR_shader_subgroup_uniform_control_flow.hs
@@ -137,15 +137,13 @@
 --
 -- = Description
 --
--- If the
--- 'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT'
+-- If the 'PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR'
 -- 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.
--- 'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT'
+-- supported. 'PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR'
 -- /can/ also be used in the @pNext@ chain of
 -- 'Vulkan.Core10.Device.DeviceCreateInfo' to selectively enable these
 -- features.
diff --git a/src/Vulkan/Extensions/VK_KHR_swapchain.hs b/src/Vulkan/Extensions/VK_KHR_swapchain.hs
--- a/src/Vulkan/Extensions/VK_KHR_swapchain.hs
+++ b/src/Vulkan/Extensions/VK_KHR_swapchain.hs
@@ -1274,11 +1274,90 @@
 --
 -- = Description
 --
+-- As mentioned above, if 'createSwapchainKHR' succeeds, it will return a
+-- handle to a swapchain containing an array of at least
+-- @pCreateInfo->minImageCount@ presentable images.
+--
+-- While acquired by the application, presentable images /can/ be used in
+-- any way that equivalent non-presentable images /can/ be used. A
+-- presentable image is equivalent to a non-presentable image created with
+-- the following 'Vulkan.Core10.Image.ImageCreateInfo' parameters:
+--
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | 'Vulkan.Core10.Image.ImageCreateInfo' | Value                                                                                  |
+-- | Field                                 |                                                                                        |
+-- +=======================================+========================================================================================+
+-- | @flags@                               | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT' |
+-- |                                       | is set if 'SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR' is set                |
+-- |                                       |                                                                                        |
+-- |                                       | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT' is set if         |
+-- |                                       | 'SWAPCHAIN_CREATE_PROTECTED_BIT_KHR' is set                                            |
+-- |                                       |                                                                                        |
+-- |                                       | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT' and          |
+-- |                                       | 'Vulkan.Extensions.VK_KHR_maintenance2.IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR' are both   |
+-- |                                       | set if 'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' is set                                |
+-- |                                       |                                                                                        |
+-- |                                       | all other bits are unset                                                               |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @imageType@                           | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                                          |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @format@                              | @pCreateInfo->imageFormat@                                                             |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @extent@                              | {@pCreateInfo->imageExtent.width@, @pCreateInfo->imageExtent.height@, @1@}             |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @mipLevels@                           | 1                                                                                      |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @arrayLayers@                         | @pCreateInfo->imageArrayLayers@                                                        |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @samples@                             | 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'                           |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @tiling@                              | 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'                                 |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @usage@                               | @pCreateInfo->imageUsage@                                                              |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @sharingMode@                         | @pCreateInfo->imageSharingMode@                                                        |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @queueFamilyIndexCount@               | @pCreateInfo->queueFamilyIndexCount@                                                   |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @pQueueFamilyIndices@                 | @pCreateInfo->pQueueFamilyIndices@                                                     |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+-- | @initialLayout@                       | 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'                               |
+-- +---------------------------------------+----------------------------------------------------------------------------------------+
+--
+-- The @pCreateInfo->surface@ /must/ not be destroyed until after the
+-- swapchain is destroyed.
+--
+-- If @pCreateInfo->oldSwapchain@ is
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the native window referred
+-- to by @pCreateInfo->surface@ is already associated with a Vulkan
+-- swapchain, 'Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
+-- /must/ be returned.
+--
+-- If the native window referred to by @pCreateInfo->surface@ is already
+-- associated with a non-Vulkan graphics API surface,
+-- 'Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR' /must/ be
+-- returned.
+--
+-- The native window referred to by @pCreateInfo->surface@ /must/ not
+-- become associated with a non-Vulkan graphics API surface before all
+-- associated Vulkan swapchains have been destroyed.
+--
+-- 'createSwapchainKHR' will return
+-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST' if the logical device was
+-- lost. The 'Vulkan.Extensions.Handles.SwapchainKHR' is a child of the
+-- @device@, and /must/ not be destroyed before the @device@. However,
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' is not a child of any
+-- 'Vulkan.Core10.Handles.Device' and is not affected by the lost device.
+-- After successfully recreating a 'Vulkan.Core10.Handles.Device', the same
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' /can/ be used to create a new
+-- 'Vulkan.Extensions.Handles.SwapchainKHR', provided the previous one was
+-- destroyed.
+--
 -- If the @oldSwapchain@ parameter of @pCreateInfo@ is a valid swapchain,
 -- which has exclusive full-screen access, that access is released from
--- @oldSwapchain@. If the command succeeds in this case, the newly created
--- swapchain will automatically acquire exclusive full-screen access from
--- @oldSwapchain@.
+-- @pCreateInfo->oldSwapchain@. If the command succeeds in this case, the
+-- newly created swapchain will automatically acquire exclusive full-screen
+-- access from @pCreateInfo->oldSwapchain@.
 --
 -- Note
 --
diff --git a/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs b/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs
--- a/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs
+++ b/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs
@@ -794,16 +794,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdExecuteGeneratedCommandsNV-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02697# For each set /n/
@@ -903,6 +903,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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
@@ -1012,6 +1029,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-06666# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-03417# If the
 --     bound graphics pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -1272,6 +1297,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-attachmentCount-06667# If the
+--     bound graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdExecuteGeneratedCommandsNV-pDepthAttachment-06181# If the
 --     current render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -1422,6 +1459,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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
@@ -2392,16 +2447,14 @@
 --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV'
 --
 -- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-parameter#
---     @pGroups@ /must/ be a valid pointer to an array of @groupCount@
---     valid 'GraphicsShaderGroupCreateInfoNV' structures
+--     If @groupCount@ is not @0@, @pGroups@ /must/ be a valid pointer to
+--     an array of @groupCount@ valid 'GraphicsShaderGroupCreateInfoNV'
+--     structures
 --
 -- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-parameter#
 --     If @pipelineCount@ is not @0@, @pPipelines@ /must/ be a valid
 --     pointer to an array of @pipelineCount@ valid
 --     'Vulkan.Core10.Handles.Pipeline' handles
---
--- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-arraylength#
---     @groupCount@ /must/ be greater than @0@
 --
 -- = See Also
 --
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs b/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs
--- a/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs
+++ b/src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs
@@ -608,22 +608,6 @@
 --
 -- == Valid Usage (Implicit)
 --
--- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-sType-sType#
---     @sType@ /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV'
---
--- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-shadingRateType-parameter#
---     @shadingRateType@ /must/ be a valid 'FragmentShadingRateTypeNV'
---     value
---
--- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-shadingRate-parameter#
---     @shadingRate@ /must/ be a valid 'FragmentShadingRateNV' value
---
--- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-combinerOps-parameter#
---     Any given element of @combinerOps@ /must/ be a valid
---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'
---     value
---
 -- = See Also
 --
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_fragment_shading_rate_enums VK_NV_fragment_shading_rate_enums>,
diff --git a/src/Vulkan/Extensions/VK_NV_mesh_shader.hs b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs
--- a/src/Vulkan/Extensions/VK_NV_mesh_shader.hs
+++ b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs
@@ -411,16 +411,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMeshTasksNV-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMeshTasksNV-None-02697# For each set /n/ that is
@@ -520,6 +520,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawMeshTasksNV-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawMeshTasksNV-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDrawMeshTasksNV-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
@@ -627,6 +644,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawMeshTasksNV-None-06666# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawMeshTasksNV-viewportCount-03417# If the bound
 --     graphics pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -886,6 +911,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawMeshTasksNV-attachmentCount-06667# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawMeshTasksNV-pDepthAttachment-06181# If the current
 --     render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -1036,6 +1073,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdDrawMeshTasksNV-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawMeshTasksNV-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdDrawMeshTasksNV-stage-06480# The bound graphics pipeline
 --     /must/ not have been created with the
 --     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'::@stage@
@@ -1212,16 +1267,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectNV-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02697# For each set /n/ that
@@ -1321,6 +1376,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDrawMeshTasksIndirectNV-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
@@ -1430,6 +1502,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-06666# If the bound graphics
+--     pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417# If the bound
 --     graphics pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -1690,6 +1770,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-attachmentCount-06667# If the
+--     bound graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawMeshTasksIndirectNV-pDepthAttachment-06181# If the
 --     current render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -1840,6 +1932,24 @@
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
 --
+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
+--
 -- -   #VUID-vkCmdDrawMeshTasksIndirectNV-stage-06480# The bound graphics
 --     pipeline /must/ not have been created with the
 --     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'::@stage@
@@ -2060,16 +2170,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697# For each set /n/
@@ -2169,6 +2279,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-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
@@ -2278,6 +2405,14 @@
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
 --     bit set
 --
+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-06666# If the bound
+--     graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command
+--
 -- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417# If the
 --     bound graphics pipeline state was created with the
 --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
@@ -2538,6 +2673,18 @@
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
 --     used to create the currently bound graphics pipeline
 --
+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-attachmentCount-06667# If
+--     the bound graphics pipeline state was created with the
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
+--     dynamic state enabled then
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ have been called in the current command buffer prior to this
+--     drawing command, and the @attachmentCount@ parameter of
+--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
+--     /must/ be equal to the
+--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
+--     of the currently bound graphics pipeline
+--
 -- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-pDepthAttachment-06181# If
 --     the current render pass instance was begun with
 --     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
@@ -2687,6 +2834,24 @@
 --     the currently bound pipeline /must/ have been created with a
 --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
 --     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-primitivesGeneratedQueryWithRasterizerDiscard-06708#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active,
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
+--     /must/ not be enabled.
+--
+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-primitivesGeneratedQueryWithNonZeroStreams-06709#
+--     If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
+--     feature is not enabled and the
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
+--     query is active, the bound graphics pipeline /must/ not have been
+--     created with a non-zero value in
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@.
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-stage-06480# The bound
 --     graphics pipeline /must/ not have been created with the
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
@@ -1709,16 +1709,16 @@
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being written as a storage image
 --     or storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdTraceRaysNV-OpTypeImage-06424# Any
 --     'Vulkan.Core10.Handles.ImageView' or
 --     'Vulkan.Core10.Handles.BufferView' being read as a storage image or
 --     storage texel buffer where the image format field of the
---     @OpTypeImage@ is @Unknown@ /must/ have image format features that
---     support
+--     @OpTypeImage@ is @Unknown@ then the view’s format feature /must/
+--     contain
 --     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
 --
 -- -   #VUID-vkCmdTraceRaysNV-None-02697# For each set /n/ that is
@@ -1818,6 +1818,23 @@
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
 --     point used by this command /must/ not be a protected resource
 --
+-- -   #VUID-vkCmdTraceRaysNV-None-06550# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ only be used with @OpImageSample*@ or
+--     @OpImageSparseSample*@ instructions
+--
+-- -   #VUID-vkCmdTraceRaysNV-ConstOffset-06551# If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' or 'Vulkan.Core10.Handles.ImageView'
+--     object that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
+--
 -- -   #VUID-vkCmdTraceRaysNV-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
@@ -2715,6 +2732,11 @@
 --     and
 --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'
 --     at the same time
+--
+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-pipelineStageCreationFeedbackCount-06651#
+--     If
+--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo'::@pipelineStageCreationFeedbackCount@
+--     is not @0@, it /must/ be equal to @stageCount@
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Extensions/VK_VALVE_descriptor_set_host_mapping.hs b/src/Vulkan/Extensions/VK_VALVE_descriptor_set_host_mapping.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_VALVE_descriptor_set_host_mapping.hs
@@ -0,0 +1,554 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_VALVE_descriptor_set_host_mapping - device extension
+--
+-- == VK_VALVE_descriptor_set_host_mapping
+--
+-- [__Name String__]
+--     @VK_VALVE_descriptor_set_host_mapping@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     421
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+-- [__Special Use__]
+--
+--     -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-compatibility-specialuse D3D support>
+--
+-- [__Contact__]
+--
+--     -   Hans-Kristian Arntzen
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_VALVE_descriptor_set_host_mapping] @HansKristian-Work%0A<<Here describe the issue or question you have about the VK_VALVE_descriptor_set_host_mapping extension>> >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2022-02-22
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Hans-Kristian Arntzen, Valve
+--
+-- == Description
+--
+-- This extension allows applications to directly query a host pointer for
+-- a 'Vulkan.Core10.Handles.DescriptorSet' which /can/ be used to copy
+-- descriptors between descriptor sets without the use of an API command.
+-- Memory offsets and sizes for descriptors /can/ be queried from a
+-- 'Vulkan.Core10.Handles.DescriptorSetLayout' as well.
+--
+-- Note
+--
+-- There is currently no specification language written for this extension.
+-- The links to APIs defined by the extension are to stubs that only
+-- include generated content such as API declarations and implicit valid
+-- usage statements.
+--
+-- Note
+--
+-- This extension is only intended for use in specific embedded
+-- environments with known implementation details, and is therefore
+-- undocumented.
+--
+-- == New Commands
+--
+-- -   'getDescriptorSetHostMappingVALVE'
+--
+-- -   'getDescriptorSetLayoutHostMappingInfoVALVE'
+--
+-- == New Structures
+--
+-- -   'DescriptorSetBindingReferenceVALVE'
+--
+-- -   'DescriptorSetLayoutHostMappingInfoVALVE'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE'
+--
+-- == New Enum Constants
+--
+-- -   'VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME'
+--
+-- -   'VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE'
+--
+-- == Stub API References
+--
+-- There is currently no specification language written for this command.
+-- This section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > void vkGetDescriptorSetLayoutHostMappingInfoVALVE(
+-- >     VkDevice                                    device,
+-- >     const VkDescriptorSetBindingReferenceVALVE* pBindingReference,
+-- >     VkDescriptorSetLayoutHostMappingInfoVALVE*  pHostMapping);
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-device-parameter#
+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   #VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-pBindingReference-parameter#
+--     @pBindingReference@ /must/ be a valid pointer to a valid
+--     'DescriptorSetBindingReferenceVALVE' structure
+--
+-- -   #VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-pHostMapping-parameter#
+--     @pHostMapping@ /must/ be a valid pointer to a
+--     'DescriptorSetLayoutHostMappingInfoVALVE' structure
+--
+-- There is currently no specification language written for this command.
+-- This section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > void vkGetDescriptorSetHostMappingVALVE(
+-- >     VkDevice                                    device,
+-- >     VkDescriptorSet                             descriptorSet,
+-- >     void**                                      ppData);
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-vkGetDescriptorSetHostMappingVALVE-device-parameter# @device@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   #VUID-vkGetDescriptorSetHostMappingVALVE-descriptorSet-parameter#
+--     @descriptorSet@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorSet' handle
+--
+-- -   #VUID-vkGetDescriptorSetHostMappingVALVE-ppData-parameter# @ppData@
+--     /must/ be a valid pointer to a pointer value
+--
+-- There is currently no specification language written for this type. This
+-- section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > typedef struct VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE {
+-- >     VkStructureType    sType;
+-- >     void*              pNext;
+-- >     VkBool32           descriptorSetHostMapping;
+-- > } VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE;
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE-sType-sType#
+--     @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE'
+--
+-- There is currently no specification language written for this type. This
+-- section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > typedef struct VkDescriptorSetBindingReferenceVALVE {
+-- >     VkStructureType          sType;
+-- >     const void*              pNext;
+-- >     VkDescriptorSetLayout    descriptorSetLayout;
+-- >     uint32_t                 binding;
+-- > } VkDescriptorSetBindingReferenceVALVE;
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-VkDescriptorSetBindingReferenceVALVE-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE'
+--
+-- -   #VUID-VkDescriptorSetBindingReferenceVALVE-pNext-pNext# @pNext@
+--     /must/ be @NULL@
+--
+-- -   #VUID-VkDescriptorSetBindingReferenceVALVE-descriptorSetLayout-parameter#
+--     @descriptorSetLayout@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' handle
+--
+-- There is currently no specification language written for this type. This
+-- section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > typedef struct VkDescriptorSetLayoutHostMappingInfoVALVE {
+-- >     VkStructureType    sType;
+-- >     void*              pNext;
+-- >     size_t             descriptorOffset;
+-- >     uint32_t           descriptorSize;
+-- > } VkDescriptorSetLayoutHostMappingInfoVALVE;
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-VkDescriptorSetLayoutHostMappingInfoVALVE-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE'
+--
+-- -   #VUID-VkDescriptorSetLayoutHostMappingInfoVALVE-pNext-pNext# @pNext@
+--     /must/ be @NULL@
+--
+-- == Version History
+--
+-- -   Revision 1, 2022-02-22 (Hans-Kristian Arntzen)
+--
+--     -   Initial specification
+--
+-- == See Also
+--
+-- 'DescriptorSetBindingReferenceVALVE',
+-- 'DescriptorSetLayoutHostMappingInfoVALVE',
+-- 'PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE',
+-- 'getDescriptorSetHostMappingVALVE',
+-- 'getDescriptorSetLayoutHostMappingInfoVALVE'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VK_VALVE_descriptor_set_host_mapping Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping  ( getDescriptorSetLayoutHostMappingInfoVALVE
+                                                               , getDescriptorSetHostMappingVALVE
+                                                               , PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE(..)
+                                                               , DescriptorSetBindingReferenceVALVE(..)
+                                                               , DescriptorSetLayoutHostMappingInfoVALVE(..)
+                                                               , VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION
+                                                               , pattern VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION
+                                                               , VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME
+                                                               , pattern VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME
+                                                               ) 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 (allocaBytes)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Coerce (coerce)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+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.C.Types (CSize)
+import Foreign.C.Types (CSize(..))
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Handles (DescriptorSet)
+import Vulkan.Core10.Handles (DescriptorSet(..))
+import Vulkan.Core10.Handles (DescriptorSetLayout)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.Handles (Device(Device))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDescriptorSetHostMappingVALVE))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDescriptorSetLayoutHostMappingInfoVALVE))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDescriptorSetLayoutHostMappingInfoVALVE
+  :: FunPtr (Ptr Device_T -> Ptr DescriptorSetBindingReferenceVALVE -> Ptr DescriptorSetLayoutHostMappingInfoVALVE -> IO ()) -> Ptr Device_T -> Ptr DescriptorSetBindingReferenceVALVE -> Ptr DescriptorSetLayoutHostMappingInfoVALVE -> IO ()
+
+-- | vkGetDescriptorSetLayoutHostMappingInfoVALVE - Stub description of
+-- vkGetDescriptorSetLayoutHostMappingInfoVALVE
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VALVE_descriptor_set_host_mapping VK_VALVE_descriptor_set_host_mapping>,
+-- 'DescriptorSetBindingReferenceVALVE',
+-- 'DescriptorSetLayoutHostMappingInfoVALVE',
+-- 'Vulkan.Core10.Handles.Device'
+getDescriptorSetLayoutHostMappingInfoVALVE :: forall io
+                                            . (MonadIO io)
+                                           => -- | #VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-device-parameter#
+                                              -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+                                              Device
+                                           -> -- | #VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-pBindingReference-parameter#
+                                              -- @pBindingReference@ /must/ be a valid pointer to a valid
+                                              -- 'DescriptorSetBindingReferenceVALVE' structure
+                                              DescriptorSetBindingReferenceVALVE
+                                           -> io (DescriptorSetLayoutHostMappingInfoVALVE)
+getDescriptorSetLayoutHostMappingInfoVALVE device bindingReference = liftIO . evalContT $ do
+  let vkGetDescriptorSetLayoutHostMappingInfoVALVEPtr = pVkGetDescriptorSetLayoutHostMappingInfoVALVE (case device of Device{deviceCmds} -> deviceCmds)
+  lift $ unless (vkGetDescriptorSetLayoutHostMappingInfoVALVEPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDescriptorSetLayoutHostMappingInfoVALVE is null" Nothing Nothing
+  let vkGetDescriptorSetLayoutHostMappingInfoVALVE' = mkVkGetDescriptorSetLayoutHostMappingInfoVALVE vkGetDescriptorSetLayoutHostMappingInfoVALVEPtr
+  pBindingReference <- ContT $ withCStruct (bindingReference)
+  pPHostMapping <- ContT (withZeroCStruct @DescriptorSetLayoutHostMappingInfoVALVE)
+  lift $ traceAroundEvent "vkGetDescriptorSetLayoutHostMappingInfoVALVE" (vkGetDescriptorSetLayoutHostMappingInfoVALVE' (deviceHandle (device)) pBindingReference (pPHostMapping))
+  pHostMapping <- lift $ peekCStruct @DescriptorSetLayoutHostMappingInfoVALVE pPHostMapping
+  pure $ (pHostMapping)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDescriptorSetHostMappingVALVE
+  :: FunPtr (Ptr Device_T -> DescriptorSet -> Ptr (Ptr ()) -> IO ()) -> Ptr Device_T -> DescriptorSet -> Ptr (Ptr ()) -> IO ()
+
+-- | vkGetDescriptorSetHostMappingVALVE - Stub description of
+-- vkGetDescriptorSetHostMappingVALVE
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VALVE_descriptor_set_host_mapping VK_VALVE_descriptor_set_host_mapping>,
+-- 'Vulkan.Core10.Handles.DescriptorSet', 'Vulkan.Core10.Handles.Device'
+getDescriptorSetHostMappingVALVE :: forall io
+                                  . (MonadIO io)
+                                 => -- | #VUID-vkGetDescriptorSetHostMappingVALVE-device-parameter# @device@
+                                    -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+                                    Device
+                                 -> -- | #VUID-vkGetDescriptorSetHostMappingVALVE-descriptorSet-parameter#
+                                    -- @descriptorSet@ /must/ be a valid 'Vulkan.Core10.Handles.DescriptorSet'
+                                    -- handle
+                                    DescriptorSet
+                                 -> io (("data" ::: Ptr ()))
+getDescriptorSetHostMappingVALVE device descriptorSet = liftIO . evalContT $ do
+  let vkGetDescriptorSetHostMappingVALVEPtr = pVkGetDescriptorSetHostMappingVALVE (case device of Device{deviceCmds} -> deviceCmds)
+  lift $ unless (vkGetDescriptorSetHostMappingVALVEPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDescriptorSetHostMappingVALVE is null" Nothing Nothing
+  let vkGetDescriptorSetHostMappingVALVE' = mkVkGetDescriptorSetHostMappingVALVE vkGetDescriptorSetHostMappingVALVEPtr
+  pPpData <- ContT $ bracket (callocBytes @(Ptr ()) 8) free
+  lift $ traceAroundEvent "vkGetDescriptorSetHostMappingVALVE" (vkGetDescriptorSetHostMappingVALVE' (deviceHandle (device)) (descriptorSet) (pPpData))
+  ppData <- lift $ peek @(Ptr ()) pPpData
+  pure $ (ppData)
+
+
+-- | VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE - Stub description
+-- of VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VALVE_descriptor_set_host_mapping VK_VALVE_descriptor_set_host_mapping>,
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE = PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+  { -- No documentation found for Nested "VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE" "descriptorSetHostMapping"
+    descriptorSetHostMapping :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE)
+#endif
+deriving instance Show PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+
+instance ToCStruct PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (descriptorSetHostMapping))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE where
+  peekCStruct p = do
+    descriptorSetHostMapping <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+             (bool32ToBool descriptorSetHostMapping)
+
+instance Storable PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE where
+  zero = PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+           zero
+
+
+-- | VkDescriptorSetBindingReferenceVALVE - Stub description of
+-- VkDescriptorSetBindingReferenceVALVE
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VALVE_descriptor_set_host_mapping VK_VALVE_descriptor_set_host_mapping>,
+-- 'Vulkan.Core10.Handles.DescriptorSetLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getDescriptorSetLayoutHostMappingInfoVALVE'
+data DescriptorSetBindingReferenceVALVE = DescriptorSetBindingReferenceVALVE
+  { -- | #VUID-VkDescriptorSetBindingReferenceVALVE-descriptorSetLayout-parameter#
+    -- @descriptorSetLayout@ /must/ be a valid
+    -- 'Vulkan.Core10.Handles.DescriptorSetLayout' handle
+    descriptorSetLayout :: DescriptorSetLayout
+  , -- No documentation found for Nested "VkDescriptorSetBindingReferenceVALVE" "binding"
+    binding :: Word32
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (DescriptorSetBindingReferenceVALVE)
+#endif
+deriving instance Show DescriptorSetBindingReferenceVALVE
+
+instance ToCStruct DescriptorSetBindingReferenceVALVE where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorSetBindingReferenceVALVE{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DescriptorSetLayout)) (descriptorSetLayout)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (binding)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DescriptorSetLayout)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DescriptorSetBindingReferenceVALVE where
+  peekCStruct p = do
+    descriptorSetLayout <- peek @DescriptorSetLayout ((p `plusPtr` 16 :: Ptr DescriptorSetLayout))
+    binding <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ DescriptorSetBindingReferenceVALVE
+             descriptorSetLayout binding
+
+instance Storable DescriptorSetBindingReferenceVALVE where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DescriptorSetBindingReferenceVALVE where
+  zero = DescriptorSetBindingReferenceVALVE
+           zero
+           zero
+
+
+-- | VkDescriptorSetLayoutHostMappingInfoVALVE - Stub description of
+-- VkDescriptorSetLayoutHostMappingInfoVALVE
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VALVE_descriptor_set_host_mapping VK_VALVE_descriptor_set_host_mapping>,
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getDescriptorSetLayoutHostMappingInfoVALVE'
+data DescriptorSetLayoutHostMappingInfoVALVE = DescriptorSetLayoutHostMappingInfoVALVE
+  { -- No documentation found for Nested "VkDescriptorSetLayoutHostMappingInfoVALVE" "descriptorOffset"
+    descriptorOffset :: Word64
+  , -- No documentation found for Nested "VkDescriptorSetLayoutHostMappingInfoVALVE" "descriptorSize"
+    descriptorSize :: Word32
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (DescriptorSetLayoutHostMappingInfoVALVE)
+#endif
+deriving instance Show DescriptorSetLayoutHostMappingInfoVALVE
+
+instance ToCStruct DescriptorSetLayoutHostMappingInfoVALVE where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorSetLayoutHostMappingInfoVALVE{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (descriptorOffset))
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (descriptorSize)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (zero))
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DescriptorSetLayoutHostMappingInfoVALVE where
+  peekCStruct p = do
+    descriptorOffset <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))
+    descriptorSize <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ DescriptorSetLayoutHostMappingInfoVALVE
+             (coerce @CSize @Word64 descriptorOffset) descriptorSize
+
+instance Storable DescriptorSetLayoutHostMappingInfoVALVE where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DescriptorSetLayoutHostMappingInfoVALVE where
+  zero = DescriptorSetLayoutHostMappingInfoVALVE
+           zero
+           zero
+
+
+type VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION"
+pattern VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION :: forall a . Integral a => a
+pattern VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION = 1
+
+
+type VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME = "VK_VALVE_descriptor_set_host_mapping"
+
+-- No documentation found for TopLevel "VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME"
+pattern VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME = "VK_VALVE_descriptor_set_host_mapping"
+
diff --git a/src/Vulkan/Extensions/VK_VALVE_descriptor_set_host_mapping.hs-boot b/src/Vulkan/Extensions/VK_VALVE_descriptor_set_host_mapping.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_VALVE_descriptor_set_host_mapping.hs-boot
@@ -0,0 +1,260 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_VALVE_descriptor_set_host_mapping - device extension
+--
+-- == VK_VALVE_descriptor_set_host_mapping
+--
+-- [__Name String__]
+--     @VK_VALVE_descriptor_set_host_mapping@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     421
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+-- [__Special Use__]
+--
+--     -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-compatibility-specialuse D3D support>
+--
+-- [__Contact__]
+--
+--     -   Hans-Kristian Arntzen
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_VALVE_descriptor_set_host_mapping] @HansKristian-Work%0A<<Here describe the issue or question you have about the VK_VALVE_descriptor_set_host_mapping extension>> >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2022-02-22
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Hans-Kristian Arntzen, Valve
+--
+-- == Description
+--
+-- This extension allows applications to directly query a host pointer for
+-- a 'Vulkan.Core10.Handles.DescriptorSet' which /can/ be used to copy
+-- descriptors between descriptor sets without the use of an API command.
+-- Memory offsets and sizes for descriptors /can/ be queried from a
+-- 'Vulkan.Core10.Handles.DescriptorSetLayout' as well.
+--
+-- Note
+--
+-- There is currently no specification language written for this extension.
+-- The links to APIs defined by the extension are to stubs that only
+-- include generated content such as API declarations and implicit valid
+-- usage statements.
+--
+-- Note
+--
+-- This extension is only intended for use in specific embedded
+-- environments with known implementation details, and is therefore
+-- undocumented.
+--
+-- == New Commands
+--
+-- -   'getDescriptorSetHostMappingVALVE'
+--
+-- -   'getDescriptorSetLayoutHostMappingInfoVALVE'
+--
+-- == New Structures
+--
+-- -   'DescriptorSetBindingReferenceVALVE'
+--
+-- -   'DescriptorSetLayoutHostMappingInfoVALVE'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE'
+--
+-- == New Enum Constants
+--
+-- -   'VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME'
+--
+-- -   'VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE'
+--
+-- == Stub API References
+--
+-- There is currently no specification language written for this command.
+-- This section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > void vkGetDescriptorSetLayoutHostMappingInfoVALVE(
+-- >     VkDevice                                    device,
+-- >     const VkDescriptorSetBindingReferenceVALVE* pBindingReference,
+-- >     VkDescriptorSetLayoutHostMappingInfoVALVE*  pHostMapping);
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-device-parameter#
+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   #VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-pBindingReference-parameter#
+--     @pBindingReference@ /must/ be a valid pointer to a valid
+--     'DescriptorSetBindingReferenceVALVE' structure
+--
+-- -   #VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-pHostMapping-parameter#
+--     @pHostMapping@ /must/ be a valid pointer to a
+--     'DescriptorSetLayoutHostMappingInfoVALVE' structure
+--
+-- There is currently no specification language written for this command.
+-- This section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > void vkGetDescriptorSetHostMappingVALVE(
+-- >     VkDevice                                    device,
+-- >     VkDescriptorSet                             descriptorSet,
+-- >     void**                                      ppData);
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-vkGetDescriptorSetHostMappingVALVE-device-parameter# @device@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   #VUID-vkGetDescriptorSetHostMappingVALVE-descriptorSet-parameter#
+--     @descriptorSet@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorSet' handle
+--
+-- -   #VUID-vkGetDescriptorSetHostMappingVALVE-ppData-parameter# @ppData@
+--     /must/ be a valid pointer to a pointer value
+--
+-- There is currently no specification language written for this type. This
+-- section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > typedef struct VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE {
+-- >     VkStructureType    sType;
+-- >     void*              pNext;
+-- >     VkBool32           descriptorSetHostMapping;
+-- > } VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE;
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE-sType-sType#
+--     @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE'
+--
+-- There is currently no specification language written for this type. This
+-- section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > typedef struct VkDescriptorSetBindingReferenceVALVE {
+-- >     VkStructureType          sType;
+-- >     const void*              pNext;
+-- >     VkDescriptorSetLayout    descriptorSetLayout;
+-- >     uint32_t                 binding;
+-- > } VkDescriptorSetBindingReferenceVALVE;
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-VkDescriptorSetBindingReferenceVALVE-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE'
+--
+-- -   #VUID-VkDescriptorSetBindingReferenceVALVE-pNext-pNext# @pNext@
+--     /must/ be @NULL@
+--
+-- -   #VUID-VkDescriptorSetBindingReferenceVALVE-descriptorSetLayout-parameter#
+--     @descriptorSetLayout@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' handle
+--
+-- There is currently no specification language written for this type. This
+-- section acts only as placeholder and to avoid dead links in the
+-- specification and reference pages.
+--
+-- > // Provided by VK_VALVE_descriptor_set_host_mapping
+-- > typedef struct VkDescriptorSetLayoutHostMappingInfoVALVE {
+-- >     VkStructureType    sType;
+-- >     void*              pNext;
+-- >     size_t             descriptorOffset;
+-- >     uint32_t           descriptorSize;
+-- > } VkDescriptorSetLayoutHostMappingInfoVALVE;
+--
+-- === Valid Usage (Implicit)
+--
+-- -   #VUID-VkDescriptorSetLayoutHostMappingInfoVALVE-sType-sType# @sType@
+--     /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE'
+--
+-- -   #VUID-VkDescriptorSetLayoutHostMappingInfoVALVE-pNext-pNext# @pNext@
+--     /must/ be @NULL@
+--
+-- == Version History
+--
+-- -   Revision 1, 2022-02-22 (Hans-Kristian Arntzen)
+--
+--     -   Initial specification
+--
+-- == See Also
+--
+-- 'DescriptorSetBindingReferenceVALVE',
+-- 'DescriptorSetLayoutHostMappingInfoVALVE',
+-- 'PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE',
+-- 'getDescriptorSetHostMappingVALVE',
+-- 'getDescriptorSetLayoutHostMappingInfoVALVE'
+--
+-- == Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VK_VALVE_descriptor_set_host_mapping Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping  ( DescriptorSetBindingReferenceVALVE
+                                                               , DescriptorSetLayoutHostMappingInfoVALVE
+                                                               , PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+                                                               ) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data DescriptorSetBindingReferenceVALVE
+
+instance ToCStruct DescriptorSetBindingReferenceVALVE
+instance Show DescriptorSetBindingReferenceVALVE
+
+instance FromCStruct DescriptorSetBindingReferenceVALVE
+
+
+data DescriptorSetLayoutHostMappingInfoVALVE
+
+instance ToCStruct DescriptorSetLayoutHostMappingInfoVALVE
+instance Show DescriptorSetLayoutHostMappingInfoVALVE
+
+instance FromCStruct DescriptorSetLayoutHostMappingInfoVALVE
+
+
+data PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+
+instance ToCStruct PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+instance Show PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+
+instance FromCStruct PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
+
diff --git a/src/Vulkan/SPIRVRequirements.hs b/src/Vulkan/SPIRVRequirements.hs
--- a/src/Vulkan/SPIRVRequirements.hs
+++ b/src/Vulkan/SPIRVRequirements.hs
@@ -633,6 +633,17 @@
     ]
   "SPV_KHR_integer_dot_product" ->
     (,) [RequireInstanceVersion $ MAKE_API_VERSION 1 3 0] [RequireDeviceVersion $ MAKE_API_VERSION 1 3 0]
+  "SPV_INTEL_shader_integer_functions" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
   "SPV_KHR_device_group" ->
     (,) [RequireInstanceVersion $ MAKE_API_VERSION 1 1 0] [RequireDeviceVersion $ MAKE_API_VERSION 1 1 0]
   _ -> ([], [])
diff --git a/src/Vulkan/Version.hs b/src/Vulkan/Version.hs
--- a/src/Vulkan/Version.hs
+++ b/src/Vulkan/Version.hs
@@ -19,11 +19,11 @@
 import Data.Word (Word32)
 
 pattern HEADER_VERSION :: Word32
-pattern HEADER_VERSION = 205
+pattern HEADER_VERSION = 210
 
 
 pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 3 205
+pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 3 210
 
 
 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.16.2
+version:        3.17
 synopsis:       Bindings to the Vulkan graphics API.
 description:    Please see [the readme](https://github.com/expipiplus1/vulkan/#readme)
 category:       Graphics
@@ -96,7 +96,7 @@
       Vulkan.Core10.Enums.ImageViewCreateFlagBits
       Vulkan.Core10.Enums.ImageViewType
       Vulkan.Core10.Enums.IndexType
-      Vulkan.Core10.Enums.InstanceCreateFlags
+      Vulkan.Core10.Enums.InstanceCreateFlagBits
       Vulkan.Core10.Enums.InternalAllocationType
       Vulkan.Core10.Enums.LogicOp
       Vulkan.Core10.Enums.MemoryHeapFlagBits
@@ -112,7 +112,7 @@
       Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlagBits
       Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags
       Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags
-      Vulkan.Core10.Enums.PipelineLayoutCreateFlags
+      Vulkan.Core10.Enums.PipelineLayoutCreateFlagBits
       Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags
       Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags
       Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits
@@ -253,7 +253,7 @@
       Vulkan.Core13.Enums.FormatFeatureFlags2
       Vulkan.Core13.Enums.PipelineCreationFeedbackFlagBits
       Vulkan.Core13.Enums.PipelineStageFlags2
-      Vulkan.Core13.Enums.PrivateDataSlotCreateFlagBits
+      Vulkan.Core13.Enums.PrivateDataSlotCreateFlags
       Vulkan.Core13.Enums.RenderingFlagBits
       Vulkan.Core13.Enums.SubmitFlagBits
       Vulkan.Core13.Enums.ToolPurposeFlagBits
@@ -344,6 +344,7 @@
       Vulkan.Extensions.VK_EXT_full_screen_exclusive
       Vulkan.Extensions.VK_EXT_global_priority
       Vulkan.Extensions.VK_EXT_global_priority_query
+      Vulkan.Extensions.VK_EXT_graphics_pipeline_library
       Vulkan.Extensions.VK_EXT_hdr_metadata
       Vulkan.Extensions.VK_EXT_headless_surface
       Vulkan.Extensions.VK_EXT_host_query_reset
@@ -365,6 +366,7 @@
       Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
       Vulkan.Extensions.VK_EXT_post_depth_coverage
       Vulkan.Extensions.VK_EXT_primitive_topology_list_restart
+      Vulkan.Extensions.VK_EXT_primitives_generated_query
       Vulkan.Extensions.VK_EXT_private_data
       Vulkan.Extensions.VK_EXT_provoking_vertex
       Vulkan.Extensions.VK_EXT_queue_family_foreign
@@ -461,6 +463,7 @@
       Vulkan.Extensions.VK_KHR_performance_query
       Vulkan.Extensions.VK_KHR_pipeline_executable_properties
       Vulkan.Extensions.VK_KHR_pipeline_library
+      Vulkan.Extensions.VK_KHR_portability_enumeration
       Vulkan.Extensions.VK_KHR_portability_subset
       Vulkan.Extensions.VK_KHR_present_id
       Vulkan.Extensions.VK_KHR_present_wait
@@ -549,6 +552,7 @@
       Vulkan.Extensions.VK_QCOM_render_pass_transform
       Vulkan.Extensions.VK_QCOM_rotated_copy_commands
       Vulkan.Extensions.VK_QNX_screen_surface
+      Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping
       Vulkan.Extensions.VK_VALVE_mutable_descriptor_type
       Vulkan.NamedType
       Vulkan.SPIRVRequirements
