diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,11 @@
 
 ## WIP
 
+## [3.9.1] - 2021-02-06
+- Bump API version to v1.2.169
+- Add `COMPLETE` pragma to `MAKE_VERSION` pattern
+  https://github.com/expipiplus1/vulkan/issues/256
+
 ## [3.10] - 2021-01-09
 - Make zero instance for `TransformMatrixKHR` return identity matrix. See
   https://github.com/expipiplus1/vulkan/issues/240
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: vulkan
-version: "3.9"
+version: "3.9.1"
 synopsis: Bindings to the Vulkan graphics API.
 category: Graphics
 maintainer: Joe Hermaszewski <live.long.and.prosper@monoid.al>
diff --git a/src/Vulkan/CStruct/Extends.hs b/src/Vulkan/CStruct/Extends.hs
--- a/src/Vulkan/CStruct/Extends.hs
+++ b/src/Vulkan/CStruct/Extends.hs
@@ -464,7 +464,9 @@
 import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Features)
 import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Properties)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout (PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory (PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Core10.PipelineCache (PipelineCacheCreateInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PipelineColorBlendAdvancedStateCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineColorBlendAttachmentState)
@@ -834,8 +836,10 @@
   Extends DeviceCreateInfo PhysicalDeviceExtendedDynamicStateFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceDiagnosticsConfigFeaturesNV = ()
   Extends DeviceCreateInfo DeviceDiagnosticsConfigCreateInfoNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = ()
   Extends DeviceCreateInfo PhysicalDeviceRobustness2FeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceImageRobustnessFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR = ()
   Extends DeviceCreateInfo PhysicalDevicePortabilitySubsetFeaturesKHR = ()
   Extends DeviceCreateInfo PhysicalDevice4444FormatsFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = ()
@@ -963,8 +967,10 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceCustomBorderColorFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceExtendedDynamicStateFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceDiagnosticsConfigFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceRobustness2FeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceImageRobustnessFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR = ()
   Extends PhysicalDeviceFeatures2 PhysicalDevicePortabilitySubsetFeaturesKHR = ()
   Extends PhysicalDeviceFeatures2 PhysicalDevice4444FormatsFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = ()
@@ -1441,9 +1447,11 @@
   STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM -> go @CommandBufferInheritanceRenderPassTransformInfoQCOM
   STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV -> go @PhysicalDeviceDiagnosticsConfigFeaturesNV
   STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV -> go @DeviceDiagnosticsConfigCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR -> go @PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
   STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT -> go @PhysicalDeviceRobustness2FeaturesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT -> go @PhysicalDeviceRobustness2PropertiesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT -> go @PhysicalDeviceImageRobustnessFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR -> go @PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
   STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR -> go @PhysicalDevicePortabilitySubsetFeaturesKHR
   STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR -> go @PhysicalDevicePortabilitySubsetPropertiesKHR
   STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT -> go @PhysicalDevice4444FormatsFeaturesEXT
@@ -1758,9 +1766,11 @@
 {-# complete (::&) :: CommandBufferInheritanceRenderPassTransformInfoQCOM #-}
 {-# complete (::&) :: PhysicalDeviceDiagnosticsConfigFeaturesNV #-}
 {-# complete (::&) :: DeviceDiagnosticsConfigCreateInfoNV #-}
+{-# complete (::&) :: PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR #-}
 {-# complete (::&) :: PhysicalDeviceRobustness2FeaturesEXT #-}
 {-# complete (::&) :: PhysicalDeviceRobustness2PropertiesEXT #-}
 {-# complete (::&) :: PhysicalDeviceImageRobustnessFeaturesEXT #-}
+{-# complete (::&) :: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR #-}
 {-# complete (::&) :: PhysicalDevicePortabilitySubsetFeaturesKHR #-}
 {-# complete (::&) :: PhysicalDevicePortabilitySubsetPropertiesKHR #-}
 {-# complete (::&) :: PhysicalDevice4444FormatsFeaturesEXT #-}
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
@@ -2091,6 +2091,16 @@
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
 --
+-- -   #VUID-vkCmdDraw-blendEnable-04727# If rasterization is not disabled
+--     in the bound graphics pipeline, then for each color attachment in
+--     the subpass, if the corresponding image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
 -- -   #VUID-vkCmdDraw-commandBuffer-02712# If @commandBuffer@ is a
 --     protected command buffer, any resource written to by the
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
@@ -2614,6 +2624,16 @@
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
 --
+-- -   #VUID-vkCmdDrawIndexed-blendEnable-04727# If rasterization is not
+--     disabled in the bound graphics pipeline, then for each color
+--     attachment in the subpass, if the corresponding image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
 -- -   #VUID-vkCmdDrawIndexed-commandBuffer-02712# If @commandBuffer@ is a
 --     protected command buffer, any resource written to by the
 --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
@@ -3131,6 +3151,16 @@
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
 --
+-- -   #VUID-vkCmdDrawIndirect-blendEnable-04727# If rasterization is not
+--     disabled in the bound graphics pipeline, then for each color
+--     attachment in the subpass, if the corresponding image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
 -- -   #VUID-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
@@ -3676,6 +3706,16 @@
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
 --
+-- -   #VUID-vkCmdDrawIndexedIndirect-blendEnable-04727# If rasterization
+--     is not disabled in the bound graphics pipeline, then for each color
+--     attachment in the subpass, if the corresponding image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
 -- -   #VUID-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
@@ -5692,18 +5732,6 @@
 --     have been created with @flags@ containing
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
 --
--- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-04052# If the queue
---     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
---     @commandBuffer@ was allocated from does not support
---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
---     @bufferOffset@ member of any element of @pRegions@ /must/ be a
---     multiple of @4@
---
--- -   #VUID-vkCmdCopyBufferToImage-dstImage-04053# If @dstImage@ has a
---     depth\/stencil format, the @bufferOffset@ member of any element of
---     @pRegions@ /must/ be a multiple of @4@
---
 -- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-04477# If the queue
 --     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
 --     @commandBuffer@ was allocated from does not support
@@ -5824,6 +5852,29 @@
 --     element of @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be
 --     @0@ and @imageSubresource.layerCount@ /must/ be @1@
 --
+-- -   #VUID-vkCmdCopyBufferToImage-pRegions-04725# If @dstImage@ is not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ multiplied by the
+--     texel block size of @dstImage@ /must/ be less than or equal to 231-1
+--
+-- -   #VUID-vkCmdCopyBufferToImage-pRegions-04726# If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ divided by the
+--     compressed texel block width and then multiplied by the texel block
+--     size of @dstImage@ /must/ be less than or equal to 231-1
+--
+-- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-04052# If the queue
+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
+--     @commandBuffer@ was allocated from does not support
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a
+--     multiple of @4@
+--
+-- -   #VUID-vkCmdCopyBufferToImage-srcImage-04053# If @dstImage@ has a
+--     depth\/stencil format, the @bufferOffset@ member of any element of
+--     @pRegions@ /must/ be a multiple of @4@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-parameter#
@@ -6037,18 +6088,6 @@
 --     have been created with @flags@ containing
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
 --
--- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-04054# If the queue
---     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
---     @commandBuffer@ was allocated from does not support
---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
---     @bufferOffset@ member of any element of @pRegions@ /must/ be a
---     multiple of @4@
---
--- -   #VUID-vkCmdCopyImageToBuffer-srcImage-04055# If @srcImage@ has a
---     depth\/stencil format, the @bufferOffset@ member of any element of
---     @pRegions@ /must/ be a multiple of @4@
---
 -- -   #VUID-vkCmdCopyImageToBuffer-imageOffset-00197# For each element of
 --     @pRegions@ , @imageOffset.x@ and (@imageExtent.width@ +
 --     @imageOffset.x@) /must/ both be greater than or equal to @0@ and
@@ -6160,6 +6199,29 @@
 --     element of @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be
 --     @0@ and @imageSubresource.layerCount@ /must/ be @1@
 --
+-- -   #VUID-vkCmdCopyImageToBuffer-pRegions-04725# If @srcImage@ is not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ multiplied by the
+--     texel block size of @srcImage@ /must/ be less than or equal to 231-1
+--
+-- -   #VUID-vkCmdCopyImageToBuffer-pRegions-04726# If @srcImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ divided by the
+--     compressed texel block width and then multiplied by the texel block
+--     size of @srcImage@ /must/ be less than or equal to 231-1
+--
+-- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-04052# If the queue
+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
+--     @commandBuffer@ was allocated from does not support
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a
+--     multiple of @4@
+--
+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-04053# If @srcImage@ has a
+--     depth\/stencil format, the @bufferOffset@ member of any element of
+--     @pRegions@ /must/ be a multiple of @4@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter#
@@ -6641,9 +6703,6 @@
 --     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'
 --     value
 --
--- -   #VUID-vkCmdClearColorImage-pColor-parameter# @pColor@ /must/ be a
---     valid pointer to a valid 'ClearColorValue' union
---
 -- -   #VUID-vkCmdClearColorImage-pRanges-parameter# @pRanges@ /must/ be a
 --     valid pointer to an array of @rangeCount@ valid
 --     'Vulkan.Core10.ImageView.ImageSubresourceRange' structures
@@ -8612,6 +8671,16 @@
 --     create @queryPool@ /must/ not be
 --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'
 --
+-- -   #VUID-vkCmdBeginQuery-queryType-04728# The @queryType@ used to
+--     create @queryPool@ /must/ not be
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
+--     or
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
+--
+-- -   #VUID-vkCmdBeginQuery-queryType-04729# The @queryType@ used to
+--     create @queryPool@ /must/ not be
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV'
+--
 -- -   #VUID-vkCmdBeginQuery-queryType-00800# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>
 --     feature is not enabled, or the @queryType@ used to create
@@ -10724,7 +10793,7 @@
 -- For purpose of valid usage statements here and in related copy commands,
 -- a /blocked image/ is defined as:
 --
--- -   a image with a /single-plane/, “@_422@” format, which is treated as
+-- -   an image with a /single-plane/, “@_422@” format, which is treated as
 --     a format with a 2 × 1 compressed texel block, or
 --
 -- -   a compressed image.
@@ -11204,10 +11273,6 @@
 --
 -- -   #VUID-VkRenderPassBeginInfo-framebuffer-parameter# @framebuffer@
 --     /must/ be a valid 'Vulkan.Core10.Handles.Framebuffer' handle
---
--- -   #VUID-VkRenderPassBeginInfo-pClearValues-parameter# If
---     @clearValueCount@ is not @0@, @pClearValues@ /must/ be a valid
---     pointer to an array of @clearValueCount@ 'ClearValue' unions
 --
 -- -   #VUID-VkRenderPassBeginInfo-commonparent# Both of @framebuffer@, and
 --     @renderPass@ /must/ have been created, allocated, or retrieved from
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
@@ -165,7 +165,9 @@
 import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan11Features)
 import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Features)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout (PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory (PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR)
 import Vulkan.Core10.Handles (PhysicalDevice_T)
 import Vulkan.CStruct.Extends (PokeChain)
 import Vulkan.CStruct.Extends (PokeChain(..))
@@ -755,8 +757,10 @@
 --     'Vulkan.Core12.PhysicalDeviceVulkan11Features',
 --     'Vulkan.Core12.PhysicalDeviceVulkan12Features',
 --     'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
+--     'Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout.PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR',
+--     'Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT',
 --     or
---     'Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT'
+--     'Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory.PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR'
 --
 -- -   #VUID-VkDeviceCreateInfo-sType-unique# The @sType@ value of each
 --     struct in the @pNext@ chain /must/ be unique, with the exception of
@@ -843,8 +847,10 @@
     | Just Refl <- eqT @e @PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDevice4444FormatsFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDevicePortabilitySubsetFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceImageRobustnessFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceRobustness2FeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = Just f
     | Just Refl <- eqT @e @DeviceDiagnosticsConfigCreateInfoNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDiagnosticsConfigFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceExtendedDynamicStateFeaturesEXT = 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
@@ -3093,10 +3093,11 @@
     -- This also specifies whether shader modules /can/ declare the @Int16@
     -- capability. However, this only enables a subset of the storage classes
     -- that SPIR-V allows for the @Int16@ SPIR-V capability: Declaring and
-    -- using 16-bit integers in the @Private@, @Workgroup@, and @Function@
-    -- storage classes is enabled, while declaring them in the interface
-    -- storage classes (e.g., @UniformConstant@, @Uniform@, @StorageBuffer@,
-    -- @Input@, @Output@, and @PushConstant@) is not enabled.
+    -- using 16-bit integers in the @Private@, @Workgroup@ (for non-Block
+    -- variables), and @Function@ storage classes is enabled, while declaring
+    -- them in the interface storage classes (e.g., @UniformConstant@,
+    -- @Uniform@, @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is
+    -- not enabled.
     shaderInt16 :: Bool
   , -- | #features-shaderResourceResidency# @shaderResourceResidency@ specifies
     -- whether image operations that return resource residency information are
@@ -4063,13 +4064,17 @@
   , -- | #limits-maxComputeSharedMemorySize# @maxComputeSharedMemorySize@ is the
     -- maximum total storage size, in bytes, available for variables declared
     -- with the @Workgroup@ storage class in shader modules (or with the
-    -- @shared@ storage qualifier in GLSL) in the compute shader stage. The
-    -- amount of storage consumed by the variables declared with the
-    -- @Workgroup@ storage class is implementation-dependent. However, the
-    -- amount of storage consumed may not exceed the largest block size that
-    -- would be obtained if all active variables declared with @Workgroup@
-    -- storage class were assigned offsets in an arbitrary order by
-    -- successively taking the smallest valid offset according to the
+    -- @shared@ storage qualifier in GLSL) in the compute shader stage. When
+    -- variables declared with the @Workgroup@ storage class are explicitly
+    -- laid out (hence they are also decorated with @Block@), the amount of
+    -- storage consumed is the size of the largest Block variable, not counting
+    -- any padding at the end. The amount of storage consumed by the non-Block
+    -- variables declared with the @Workgroup@ storage class is
+    -- implementation-dependent. However, the amount of storage consumed may
+    -- not exceed the largest block size that would be obtained if all active
+    -- non-Block variables declared with @Workgroup@ storage class were
+    -- assigned offsets in an arbitrary order by successively taking the
+    -- smallest valid offset according to the
     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Storage Buffer Layout>
     -- rules. (This is equivalent to using the GLSL std430 layout rules.)
     maxComputeSharedMemorySize :: Word32
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
@@ -44,13 +44,20 @@
 -- | 'QUERY_TYPE_PERFORMANCE_QUERY_INTEL' specifies a
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-performance-intel Intel performance query>.
 pattern QUERY_TYPE_PERFORMANCE_QUERY_INTEL       = QueryType 1000210000
--- No documentation found for Nested "VkQueryType" "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV"
+-- | 'QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV' specifies a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-copying acceleration structure size query>
+-- for use with
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV'.
 pattern QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = QueryType 1000165000
 -- | 'QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR' specifies a
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-copying serialization acceleration structure size query>
 pattern QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = QueryType 1000150001
 -- | 'QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR' specifies a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-copying acceleration structure size query>.
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-copying acceleration structure size query>
+-- for use with
+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.cmdWriteAccelerationStructuresPropertiesKHR'
+-- or
+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.writeAccelerationStructuresPropertiesKHR'.
 pattern QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = QueryType 1000150000
 -- | 'QUERY_TYPE_PERFORMANCE_QUERY_KHR' specifies a
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-performance performance query>.
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
@@ -64,6 +64,7 @@
                                                         , STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR
                                                         , STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR
                                                         , STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT
                                                         , STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT
@@ -71,6 +72,7 @@
                                                         , STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR
                                                         , STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT
@@ -859,7 +861,9 @@
 -- 'Vulkan.Core12.PhysicalDeviceVulkan12Features',
 -- 'Vulkan.Core12.PhysicalDeviceVulkan12Properties',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
+-- 'Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout.PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT',
+-- 'Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory.PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR',
 -- 'Vulkan.Core10.PipelineCache.PipelineCacheCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT',
 -- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo',
@@ -1110,6 +1114,8 @@
 pattern STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR                     = StructureType 1000337001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR"
 pattern STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR                    = StructureType 1000337000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = StructureType 1000336000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = StructureType 1000335000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM"
@@ -1124,6 +1130,8 @@
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = StructureType 1000326001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = StructureType 1000326000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR = StructureType 1000325000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"
 pattern STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV  = StructureType 1000300001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"
@@ -1992,6 +2000,7 @@
              STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR,
              STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR,
              STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT,
              STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT,
@@ -1999,6 +2008,7 @@
              STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR,
              STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT,
@@ -2463,19 +2473,22 @@
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE
     , "PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE"
     )
-  , (STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT             , "DIRECTFB_SURFACE_CREATE_INFO_EXT")
-  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT    , "PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT")
-  , (STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR                          , "IMAGE_RESOLVE_2_KHR")
-  , (STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR                      , "BUFFER_IMAGE_COPY_2_KHR")
-  , (STRUCTURE_TYPE_IMAGE_BLIT_2_KHR                             , "IMAGE_BLIT_2_KHR")
-  , (STRUCTURE_TYPE_IMAGE_COPY_2_KHR                             , "IMAGE_COPY_2_KHR")
-  , (STRUCTURE_TYPE_BUFFER_COPY_2_KHR                            , "BUFFER_COPY_2_KHR")
-  , (STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR                     , "RESOLVE_IMAGE_INFO_2_KHR")
-  , (STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR                        , "BLIT_IMAGE_INFO_2_KHR")
-  , (STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR              , "COPY_IMAGE_TO_BUFFER_INFO_2_KHR")
-  , (STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR              , "COPY_BUFFER_TO_IMAGE_INFO_2_KHR")
-  , (STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR                        , "COPY_IMAGE_INFO_2_KHR")
-  , (STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR                       , "COPY_BUFFER_INFO_2_KHR")
+  , (STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT         , "DIRECTFB_SURFACE_CREATE_INFO_EXT")
+  , (STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, "PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT")
+  , (STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR                      , "IMAGE_RESOLVE_2_KHR")
+  , (STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR                  , "BUFFER_IMAGE_COPY_2_KHR")
+  , (STRUCTURE_TYPE_IMAGE_BLIT_2_KHR                         , "IMAGE_BLIT_2_KHR")
+  , (STRUCTURE_TYPE_IMAGE_COPY_2_KHR                         , "IMAGE_COPY_2_KHR")
+  , (STRUCTURE_TYPE_BUFFER_COPY_2_KHR                        , "BUFFER_COPY_2_KHR")
+  , (STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR                 , "RESOLVE_IMAGE_INFO_2_KHR")
+  , (STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR                    , "BLIT_IMAGE_INFO_2_KHR")
+  , (STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR          , "COPY_IMAGE_TO_BUFFER_INFO_2_KHR")
+  , (STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR          , "COPY_BUFFER_TO_IMAGE_INFO_2_KHR")
+  , (STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR                    , "COPY_IMAGE_INFO_2_KHR")
+  , (STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR                   , "COPY_BUFFER_INFO_2_KHR")
+  , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR
+    , "PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR"
+    )
   , (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT, "PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT")
   , (STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM             , "COPY_COMMAND_TRANSFORM_INFO_QCOM")
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT
@@ -2492,6 +2505,9 @@
     )
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV
     , "PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV"
+    )
+  , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR
+    , "PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR"
     )
   , (STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV      , "DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV")
   , (STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, "PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV")
diff --git a/src/Vulkan/Core10/FundamentalTypes.hs b/src/Vulkan/Core10/FundamentalTypes.hs
--- a/src/Vulkan/Core10/FundamentalTypes.hs
+++ b/src/Vulkan/Core10/FundamentalTypes.hs
@@ -491,7 +491,9 @@
 -- 'Vulkan.Core12.PhysicalDeviceVulkan12Features',
 -- 'Vulkan.Core12.PhysicalDeviceVulkan12Properties',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
+-- 'Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout.PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT',
+-- 'Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory.PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR',
 -- 'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT',
 -- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState',
 -- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo',
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
@@ -959,6 +959,13 @@
 --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
 --     @format@ /must/ be identical to the @format@ used to create @image@
 --
+-- -   #VUID-VkImageViewCreateInfo-format-04724# If @format@ is one of
+--     those listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>,
+--     then the pNext chain /must/ include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--     structure with a conversion value other than VK_NULL_HANDLE
+--
 -- -   #VUID-VkImageViewCreateInfo-format-04714# If @format@ has a @_422@
 --     or @_420@ suffix then @image@ /must/ have been created with a width
 --     that is a multiple of 2
diff --git a/src/Vulkan/Core10/OtherTypes.hs b/src/Vulkan/Core10/OtherTypes.hs
--- a/src/Vulkan/Core10/OtherTypes.hs
+++ b/src/Vulkan/Core10/OtherTypes.hs
@@ -529,7 +529,7 @@
 --     or @oldLayout@ and @newLayout@ define a
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
 --     and @oldLayout@ or @newLayout@ is
---     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR'
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
 --     then @image@ /must/ have been created with at least one of
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', or
@@ -542,7 +542,7 @@
 --     or @oldLayout@ and @newLayout@ define a
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
 --     and @oldLayout@ or @newLayout@ is
---     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR'
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
 --     then @image@ /must/ have been created with
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
 --     set
@@ -553,7 +553,7 @@
 --     or @oldLayout@ and @newLayout@ define a
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
 --     and @oldLayout@ or @newLayout@ is
---     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR'
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
 --     then @image@ /must/ have been created with at least one of
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', or
@@ -566,7 +566,7 @@
 --     or @oldLayout@ and @newLayout@ define a
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
 --     and @oldLayout@ or @newLayout@ is
---     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR'
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
 --     then @image@ /must/ have been created with
 --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
 --     set
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
@@ -934,11 +934,11 @@
 --     be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',
 --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED',
 --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR',
---     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR',
---     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR',
---     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
 --     or
---     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR'
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
 --
 -- == Valid Usage (Implicit)
 --
@@ -1178,8 +1178,8 @@
 --
 -- -   #VUID-VkSubpassDescription-pDepthStencilAttachment-02650# If
 --     @pDepthStencilAttachment@ is not @NULL@ and the attachment is not
---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it /must/ have a
---     image format whose
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it /must/ have
+--     an image format whose
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>
 --     contain
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
@@ -2274,12 +2274,12 @@
 -- -   #VUID-VkFramebufferCreateInfo-flags-03190# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @pNext@ chain /must/ include an instance of
---     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR'
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
 --
 -- -   #VUID-VkFramebufferCreateInfo-flags-03191# If @flags@ includes
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @attachmentImageInfoCount@ member of an instance of
---     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR'
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
 --     in the @pNext@ chain /must/ be equal to either zero or
 --     @attachmentCount@
 --
@@ -2287,7 +2287,7 @@
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @width@ member of any element of the @pAttachmentImageInfos@
 --     member of an instance of
---     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR'
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
 --     in the @pNext@ chain that is used as an input, color, resolve or
 --     depth\/stencil attachment in @pRenderPass@ /must/ be greater than or
 --     equal to @width@
@@ -2296,7 +2296,7 @@
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @height@ member of any element of the @pAttachmentImageInfos@
 --     member of an instance of
---     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR'
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
 --     in the @pNext@ chain that is used as an input, color, resolve or
 --     depth\/stencil attachment in @pRenderPass@ /must/ be greater than or
 --     equal to @height@
@@ -2305,7 +2305,7 @@
 --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     the @width@ member of any element of the @pAttachmentImageInfos@
 --     member of an instance of
---     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR'
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
 --     in the @pNext@ chain that is referenced by
 --     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@
 --     in @renderPass@ /must/ be greater than or equal to
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
@@ -3533,15 +3533,16 @@
 --     of the @front@ and @back@ members of @pDepthStencilState@ /must/ be
 --     'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
 --
--- -   #VUID-VkGraphicsPipelineCreateInfo-blendEnable-02023# If
---     rasterization is not disabled and the subpass uses color
---     attachments, then for each color attachment in the subpass the
---     @blendEnable@ member of the corresponding element of the
---     @pAttachment@ member of @pColorBlendState@ /must/ be
---     'Vulkan.Core10.FundamentalTypes.FALSE' if the attached image’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     does not contain
---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT'
+-- -   #VUID-VkGraphicsPipelineCreateInfo-blendEnable-04717# If
+--     rasterization is not disabled, then for each color attachment in the
+--     subpass, if the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-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-attachmentCount-00746# If
 --     rasterization is not disabled and the subpass uses color
diff --git a/src/Vulkan/Core10/Queue.hs b/src/Vulkan/Core10/Queue.hs
--- a/src/Vulkan/Core10/Queue.hs
+++ b/src/Vulkan/Core10/Queue.hs
@@ -696,7 +696,7 @@
 --     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.ProtectedSubmitInfo'
 --     structure with @protectedSubmit@ set to
 --     'Vulkan.Core10.FundamentalTypes.TRUE', then each element of the
---     @pCommandBuffers@ array /must/ be an protected command buffer
+--     @pCommandBuffers@ array /must/ be a protected command buffer
 --
 -- == Valid Usage (Implicit)
 --
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
@@ -218,7 +218,9 @@
 import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Features)
 import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Properties)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout (PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory (PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR)
 import Vulkan.Core10.Handles (PhysicalDevice_T)
 import Vulkan.CStruct.Extends (PokeChain)
 import Vulkan.CStruct.Extends (PokeChain(..))
@@ -679,8 +681,10 @@
     | Just Refl <- eqT @e @PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDevice4444FormatsFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDevicePortabilitySubsetFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceImageRobustnessFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceRobustness2FeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDiagnosticsConfigFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceExtendedDynamicStateFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceCustomBorderColorFeaturesEXT = Just f
diff --git a/src/Vulkan/Core12.hs b/src/Vulkan/Core12.hs
--- a/src/Vulkan/Core12.hs
+++ b/src/Vulkan/Core12.hs
@@ -557,22 +557,22 @@
 --     whether shader modules /can/ declare the @Float16@ capability.
 --     However, this only enables a subset of the storage classes that
 --     SPIR-V allows for the @Float16@ SPIR-V capability: Declaring and
---     using 16-bit floats in the @Private@, @Workgroup@, and @Function@
---     storage classes is enabled, while declaring them in the interface
---     storage classes (e.g., @UniformConstant@, @Uniform@,
---     @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is not
---     enabled.
+--     using 16-bit floats in the @Private@, @Workgroup@ (for non-Block
+--     variables), and @Function@ storage classes is enabled, while
+--     declaring them in the interface storage classes (e.g.,
+--     @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@,
+--     and @PushConstant@) is not enabled.
 --
 -- -   #features-shaderInt8# @shaderInt8@ indicates whether 8-bit integers
 --     (signed and unsigned) are supported in shader code. This also
 --     indicates whether shader modules /can/ declare the @Int8@
 --     capability. However, this only enables a subset of the storage
 --     classes that SPIR-V allows for the @Int8@ SPIR-V capability:
---     Declaring and using 8-bit integers in the @Private@, @Workgroup@,
---     and @Function@ storage classes is enabled, while declaring them in
---     the interface storage classes (e.g., @UniformConstant@, @Uniform@,
---     @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is not
---     enabled.
+--     Declaring and using 8-bit integers in the @Private@, @Workgroup@
+--     (for non-Block variables), and @Function@ storage classes is
+--     enabled, while declaring them in the interface storage classes
+--     (e.g., @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@,
+--     @Output@, and @PushConstant@) is not enabled.
 --
 -- -   #features-descriptorIndexing# @descriptorIndexing@ indicates whether
 --     the implementation supports the minimum set of descriptor indexing
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
@@ -1152,8 +1152,8 @@
 --
 -- -   #VUID-VkSubpassDescription2-pDepthStencilAttachment-02900# If
 --     @pDepthStencilAttachment@ is not @NULL@ and the attachment is not
---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it /must/ have a
---     image format whose
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it /must/ have
+--     an image format whose
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>
 --     contain
 --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
@@ -1634,6 +1634,7 @@
     poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
     poke ((p `plusPtr` 24 :: Ptr PipelineStageFlags)) (zero)
     poke ((p `plusPtr` 28 :: Ptr PipelineStageFlags)) (zero)
+    poke ((p `plusPtr` 44 :: Ptr Int32)) (zero)
     f
 
 instance FromCStruct SubpassDependency2 where
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
@@ -438,6 +438,16 @@
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
 --
+-- -   #VUID-vkCmdDrawIndirectCount-blendEnable-04727# If rasterization is
+--     not disabled in the bound graphics pipeline, then for each color
+--     attachment in the subpass, if the corresponding image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
 -- -   #VUID-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
@@ -1008,6 +1018,17 @@
 --     draw command, and the @viewportCount@ parameter of
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
+--
+-- -   #VUID-vkCmdDrawIndexedIndirectCount-blendEnable-04727# If
+--     rasterization is not disabled in the bound graphics pipeline, then
+--     for each color attachment in the subpass, if the corresponding image
+--     view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
 --
 -- -   #VUID-vkCmdDrawIndexedIndirectCount-None-04007# All vertex input
 --     bindings accessed via vertex input variables declared in the vertex
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs
--- a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs
@@ -41,20 +41,20 @@
     -- whether shader modules /can/ declare the @Float16@ capability. However,
     -- this only enables a subset of the storage classes that SPIR-V allows for
     -- the @Float16@ SPIR-V capability: Declaring and using 16-bit floats in
-    -- the @Private@, @Workgroup@, and @Function@ storage classes is enabled,
-    -- while declaring them in the interface storage classes (e.g.,
-    -- @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@, and
-    -- @PushConstant@) is not enabled.
+    -- the @Private@, @Workgroup@ (for non-Block variables), and @Function@
+    -- storage classes is enabled, while declaring them in the interface
+    -- storage classes (e.g., @UniformConstant@, @Uniform@, @StorageBuffer@,
+    -- @Input@, @Output@, and @PushConstant@) is not enabled.
     shaderFloat16 :: Bool
   , -- | #extension-features-shaderInt8# @shaderInt8@ indicates whether 8-bit
     -- integers (signed and unsigned) are supported in shader code. This also
     -- indicates whether shader modules /can/ declare the @Int8@ capability.
     -- However, this only enables a subset of the storage classes that SPIR-V
     -- allows for the @Int8@ SPIR-V capability: Declaring and using 8-bit
-    -- integers in the @Private@, @Workgroup@, and @Function@ storage classes
-    -- is enabled, while declaring them in the interface storage classes (e.g.,
-    -- @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@, and
-    -- @PushConstant@) is not enabled.
+    -- integers in the @Private@, @Workgroup@ (for non-Block variables), and
+    -- @Function@ storage classes is enabled, while declaring them in the
+    -- interface storage classes (e.g., @UniformConstant@, @Uniform@,
+    -- @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is not enabled.
     shaderInt8 :: Bool
   }
   deriving (Typeable, Eq)
diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs
--- a/src/Vulkan/Extensions.hs
+++ b/src/Vulkan/Extensions.hs
@@ -180,8 +180,10 @@
                           , module Vulkan.Extensions.VK_KHR_wayland_surface
                           , module Vulkan.Extensions.VK_KHR_win32_keyed_mutex
                           , module Vulkan.Extensions.VK_KHR_win32_surface
+                          , module Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout
                           , module Vulkan.Extensions.VK_KHR_xcb_surface
                           , module Vulkan.Extensions.VK_KHR_xlib_surface
+                          , module Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory
                           , module Vulkan.Extensions.VK_MVK_ios_surface
                           , module Vulkan.Extensions.VK_MVK_macos_surface
                           , module Vulkan.Extensions.VK_NN_vi_surface
@@ -406,8 +408,10 @@
 import Vulkan.Extensions.VK_KHR_wayland_surface
 import Vulkan.Extensions.VK_KHR_win32_keyed_mutex
 import Vulkan.Extensions.VK_KHR_win32_surface
+import Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout
 import Vulkan.Extensions.VK_KHR_xcb_surface
 import Vulkan.Extensions.VK_KHR_xlib_surface
+import Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory
 import Vulkan.Extensions.VK_MVK_ios_surface
 import Vulkan.Extensions.VK_MVK_macos_surface
 import Vulkan.Extensions.VK_NN_vi_surface
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
@@ -131,8 +131,10 @@
 import Vulkan.Extensions.VK_KHR_wayland_surface (pattern KHR_WAYLAND_SURFACE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_win32_keyed_mutex (pattern KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_win32_surface (pattern KHR_WIN32_SURFACE_EXTENSION_NAME)
+import Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout (pattern KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_xcb_surface (pattern KHR_XCB_SURFACE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_xlib_surface (pattern KHR_XLIB_SURFACE_EXTENSION_NAME)
+import Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory (pattern KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME)
 import Vulkan.Version (pattern MAKE_VERSION)
 import Vulkan.Extensions.VK_MVK_ios_surface (pattern MVK_IOS_SURFACE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_MVK_macos_surface (pattern MVK_MACOS_SURFACE_EXTENSION_NAME)
@@ -162,7 +164,7 @@
 import Vulkan.Extensions.VK_NV_shading_rate_image (pattern NV_SHADING_RATE_IMAGE_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_win32_keyed_mutex (pattern NV_WIN32_KEYED_MUTEX_EXTENSION_NAME)
 import Vulkan.Extensions.VK_QCOM_render_pass_transform (pattern QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME)
-import Vulkan.Extensions.VK_QCOM_rotated_copy_commands (pattern QCOM_rotated_copy_commands_EXTENSION_NAME)
+import Vulkan.Extensions.VK_QCOM_rotated_copy_commands (pattern QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME)
 import Vulkan.Extensions.VK_VALVE_mutable_descriptor_type (pattern VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME)
 -- | The set of other extensions required to use this extension
 extensionDependencies :: ("extensionName" ::: ByteString) -> [ByteString]
@@ -452,6 +454,7 @@
   QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME             -> [KHR_SWAPCHAIN_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
   EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME               -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME           -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME   -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME ->
     [ KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME
     , KHR_CREATE_RENDERPASS_2_EXTENSION_NAME
@@ -461,10 +464,11 @@
     ]
   EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME ->
     [EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  QCOM_rotated_copy_commands_EXTENSION_NAME ->
+  QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME ->
     [KHR_SWAPCHAIN_EXTENSION_NAME, KHR_COPY_COMMANDS_2_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
-  EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
-  EXT_4444_FORMATS_EXTENSION_NAME     -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME                 -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
+  EXT_4444_FORMATS_EXTENSION_NAME                     -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
   NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME ->
     [EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, KHR_DISPLAY_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME]
   EXT_DIRECTFB_SURFACE_EXTENSION_NAME -> [KHR_SURFACE_EXTENSION_NAME]
diff --git a/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
--- a/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
+++ b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
@@ -347,7 +347,7 @@
 -- coinciding timestamp values, however, depending on the nature of the
 -- time domains and other properties of the platform extrapolating values
 -- over a sufficiently long period of time /may/ no longer be accurate
--- enough to fit any particular purpose so applications are expected to
+-- enough to fit any particular purpose, so applications are expected to
 -- re-calibrate the timestamps on a regular basis.
 --
 -- == Return Codes
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_marker.hs b/src/Vulkan/Extensions/VK_EXT_debug_marker.hs
--- a/src/Vulkan/Extensions/VK_EXT_debug_marker.hs
+++ b/src/Vulkan/Extensions/VK_EXT_debug_marker.hs
@@ -920,6 +920,13 @@
     lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
     pMarkerName'' <- ContT $ useAsCString (mempty)
     lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pMarkerName''
+    let pColor' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
+    lift $ case ((zero, zero, zero, zero)) of
+      (e0, e1, e2, e3) -> do
+        poke (pColor' :: Ptr CFloat) (CFloat (e0))
+        poke (pColor' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+        poke (pColor' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+        poke (pColor' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
     lift $ f
 
 instance FromCStruct DebugMarkerMarkerInfoEXT where
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
@@ -232,8 +232,8 @@
 -- >     VkDebugUtilsMessengerEXT cb1, cb2, cb3;
 -- >
 -- >     // Must call extension functions through a function pointer:
--- >     PFN_vkCreateDebugUtilsMessengerEXT pfnCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetDeviceProcAddr(device, "vkCreateDebugUtilsMessengerEXT");
--- >     PFN_vkDestroyDebugUtilsMessengerEXT pfnDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetDeviceProcAddr(device, "vkDestroyDebugUtilsMessengerEXT");
+-- >     PFN_vkCreateDebugUtilsMessengerEXT pfnCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
+-- >     PFN_vkDestroyDebugUtilsMessengerEXT pfnDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT");
 -- >
 -- >     VkDebugUtilsMessengeCreateInfoEXT callback1 = {
 -- >             VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,  // sType
@@ -287,11 +287,12 @@
 -- or with validation layers that can print a friendly name when referring
 -- to objects in error messages.
 --
+-- >     extern VkInstance instance;
 -- >     extern VkDevice device;
 -- >     extern VkImage image;
 -- >
 -- >     // Must call extension functions through a function pointer:
--- >     PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)vkGetDeviceProcAddr(device, "vkSetDebugUtilsObjectNameEXT");
+-- >     PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectNameEXT");
 -- >
 -- >     // Set a name on the image
 -- >     const VkDebugUtilsObjectNameInfoEXT imageNameInfo =
@@ -315,15 +316,15 @@
 -- analysis tools can display a more usable visualization of the commands
 -- submitted.
 --
--- >     extern VkDevice device;
+-- >     extern VkInstance instance;
 -- >     extern VkCommandBuffer commandBuffer;
 -- >
 -- >     // Must call extension functions through a function pointer:
--- >     PFN_vkQueueBeginDebugUtilsLabelEXT pfnQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkQueueBeginDebugUtilsLabelEXT");
--- >     PFN_vkQueueEndDebugUtilsLabelEXT pfnQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkQueueEndDebugUtilsLabelEXT");
--- >     PFN_vkCmdBeginDebugUtilsLabelEXT pfnCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkCmdBeginDebugUtilsLabelEXT");
--- >     PFN_vkCmdEndDebugUtilsLabelEXT pfnCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkCmdEndDebugUtilsLabelEXT");
--- >     PFN_vkCmdInsertDebugUtilsLabelEXT pfnCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkCmdInsertDebugUtilsLabelEXT");
+-- >     PFN_vkQueueBeginDebugUtilsLabelEXT pfnQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueBeginDebugUtilsLabelEXT");
+-- >     PFN_vkQueueEndDebugUtilsLabelEXT pfnQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueEndDebugUtilsLabelEXT");
+-- >     PFN_vkCmdBeginDebugUtilsLabelEXT pfnCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdBeginDebugUtilsLabelEXT");
+-- >     PFN_vkCmdEndDebugUtilsLabelEXT pfnCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdEndDebugUtilsLabelEXT");
+-- >     PFN_vkCmdInsertDebugUtilsLabelEXT pfnCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdInsertDebugUtilsLabelEXT");
 -- >
 -- >     // Describe the area being rendered
 -- >     const VkDebugUtilsLabelEXT houseLabel =
@@ -1613,6 +1614,13 @@
     lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
     pLabelName'' <- ContT $ useAsCString (mempty)
     lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pLabelName''
+    let pColor' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
+    lift $ case ((zero, zero, zero, zero)) of
+      (e0, e1, e2, e3) -> do
+        poke (pColor' :: Ptr CFloat) (CFloat (e0))
+        poke (pColor' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+        poke (pColor' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+        poke (pColor' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
     lift $ f
 
 instance FromCStruct DebugUtilsLabelEXT where
@@ -1920,6 +1928,7 @@
   pokeZeroCStruct p f = evalContT $ do
     lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
     lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Int32)) (zero)
     pMessage'' <- ContT $ useAsCString (mempty)
     lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr CChar))) pMessage''
     lift $ f
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
@@ -232,8 +232,8 @@
 -- >     VkDebugUtilsMessengerEXT cb1, cb2, cb3;
 -- >
 -- >     // Must call extension functions through a function pointer:
--- >     PFN_vkCreateDebugUtilsMessengerEXT pfnCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetDeviceProcAddr(device, "vkCreateDebugUtilsMessengerEXT");
--- >     PFN_vkDestroyDebugUtilsMessengerEXT pfnDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetDeviceProcAddr(device, "vkDestroyDebugUtilsMessengerEXT");
+-- >     PFN_vkCreateDebugUtilsMessengerEXT pfnCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
+-- >     PFN_vkDestroyDebugUtilsMessengerEXT pfnDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT");
 -- >
 -- >     VkDebugUtilsMessengeCreateInfoEXT callback1 = {
 -- >             VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,  // sType
@@ -287,11 +287,12 @@
 -- or with validation layers that can print a friendly name when referring
 -- to objects in error messages.
 --
+-- >     extern VkInstance instance;
 -- >     extern VkDevice device;
 -- >     extern VkImage image;
 -- >
 -- >     // Must call extension functions through a function pointer:
--- >     PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)vkGetDeviceProcAddr(device, "vkSetDebugUtilsObjectNameEXT");
+-- >     PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectNameEXT");
 -- >
 -- >     // Set a name on the image
 -- >     const VkDebugUtilsObjectNameInfoEXT imageNameInfo =
@@ -315,15 +316,15 @@
 -- analysis tools can display a more usable visualization of the commands
 -- submitted.
 --
--- >     extern VkDevice device;
+-- >     extern VkInstance instance;
 -- >     extern VkCommandBuffer commandBuffer;
 -- >
 -- >     // Must call extension functions through a function pointer:
--- >     PFN_vkQueueBeginDebugUtilsLabelEXT pfnQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkQueueBeginDebugUtilsLabelEXT");
--- >     PFN_vkQueueEndDebugUtilsLabelEXT pfnQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkQueueEndDebugUtilsLabelEXT");
--- >     PFN_vkCmdBeginDebugUtilsLabelEXT pfnCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkCmdBeginDebugUtilsLabelEXT");
--- >     PFN_vkCmdEndDebugUtilsLabelEXT pfnCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkCmdEndDebugUtilsLabelEXT");
--- >     PFN_vkCmdInsertDebugUtilsLabelEXT pfnCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)vkGetDeviceProcAddr(device, "vkCmdInsertDebugUtilsLabelEXT");
+-- >     PFN_vkQueueBeginDebugUtilsLabelEXT pfnQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueBeginDebugUtilsLabelEXT");
+-- >     PFN_vkQueueEndDebugUtilsLabelEXT pfnQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueEndDebugUtilsLabelEXT");
+-- >     PFN_vkCmdBeginDebugUtilsLabelEXT pfnCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdBeginDebugUtilsLabelEXT");
+-- >     PFN_vkCmdEndDebugUtilsLabelEXT pfnCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdEndDebugUtilsLabelEXT");
+-- >     PFN_vkCmdInsertDebugUtilsLabelEXT pfnCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdInsertDebugUtilsLabelEXT");
 -- >
 -- >     // Describe the area being rendered
 -- >     const VkDebugUtilsLabelEXT houseLabel =
diff --git a/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs
--- a/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs
+++ b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs
@@ -15,7 +15,7 @@
 --     285
 --
 -- [__Revision__]
---     1
+--     2
 --
 -- [__Extension and Version Dependencies__]
 --
@@ -35,7 +35,7 @@
 -- == Other Extension Metadata
 --
 -- [__Last Modified Date__]
---     2020-08-26
+--     2021-01-06
 --
 -- [__IP Status__]
 --     No known IP claims.
@@ -217,6 +217,12 @@
 --
 -- -   Revision 1, 2020-08-26 (Yiwei Zhang)
 --
+--     -   Initial version
+--
+-- -   Revision 2, 2021-01-06 (Yiwei Zhang)
+--
+--     -   Minor description update
+--
 -- = See Also
 --
 -- 'PFN_vkDeviceMemoryReportCallbackEXT',
@@ -498,32 +504,36 @@
   , -- | @size@ is the size of the memory object in bytes. If @type@ is
     -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT',
     -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT' or
-    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT', @size@ /must/
-    -- be a valid 'Vulkan.Core10.FundamentalTypes.DeviceSize' value.
+    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT', @size@ is a
+    -- valid 'Vulkan.Core10.FundamentalTypes.DeviceSize' value. Otherwise,
+    -- @size@ is undefined.
     size :: DeviceSize
   , -- | @objectType@ is a 'Vulkan.Core10.Enums.ObjectType.ObjectType' value
     -- specifying the type of the object associated with this device memory
     -- report event. If @type@ is
     -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT',
-    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT' or
-    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT', @objectType@
-    -- /must/ be a valid 'Vulkan.Core10.Enums.ObjectType.ObjectType' enum.
+    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT',
+    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT',
+    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT' or
+    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT', @objectType@ is
+    -- a valid 'Vulkan.Core10.Enums.ObjectType.ObjectType' enum. Otherwise,
+    -- @objectType@ is undefined.
     objectType :: ObjectType
   , -- | @objectHandle@ is the object this device memory report event is
     -- attributed to. If @type@ is
     -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT',
     -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT',
     -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT' or
-    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT', @objectHandle@ /must/ be
-    -- a valid Vulkan handle of the type associated with @objectType@ as
-    -- defined in the
+    -- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT', @objectHandle@ is a
+    -- valid Vulkan handle of the type associated with @objectType@ as defined
+    -- in the
     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-types VkObjectType and Vulkan Handle Relationship>
-    -- table.
+    -- table. Otherwise, @objectHandle@ is undefined.
     objectHandle :: Word64
   , -- | @heapIndex@ describes which memory heap this device memory allocation is
     -- made from. If @type@ is 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT'
     -- or 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT', @heapIndex@
-    -- /must/ correspond to one of the valid heaps from the
+    -- corresponds to one of the valid heaps from the
     -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'
     -- structure. Otherwise, @heapIndex@ is undefined.
     heapIndex :: Word32
@@ -555,6 +565,10 @@
     poke ((p `plusPtr` 16 :: Ptr DeviceMemoryReportFlagsEXT)) (zero)
     poke ((p `plusPtr` 20 :: Ptr DeviceMemoryReportEventTypeEXT)) (zero)
     poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr ObjectType)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
     f
 
 instance FromCStruct DeviceMemoryReportCallbackDataEXT where
@@ -691,11 +705,11 @@
 type PFN_vkDeviceMemoryReportCallbackEXT = FunPtr FN_vkDeviceMemoryReportCallbackEXT
 
 
-type EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION = 1
+type EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION = 2
 
 -- No documentation found for TopLevel "VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION"
 pattern EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION = 1
+pattern EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION = 2
 
 
 type EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME = "VK_EXT_device_memory_report"
diff --git a/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs-boot b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs-boot
@@ -15,7 +15,7 @@
 --     285
 --
 -- [__Revision__]
---     1
+--     2
 --
 -- [__Extension and Version Dependencies__]
 --
@@ -35,7 +35,7 @@
 -- == Other Extension Metadata
 --
 -- [__Last Modified Date__]
---     2020-08-26
+--     2021-01-06
 --
 -- [__IP Status__]
 --     No known IP claims.
@@ -216,6 +216,12 @@
 -- == Version History
 --
 -- -   Revision 1, 2020-08-26 (Yiwei Zhang)
+--
+--     -   Initial version
+--
+-- -   Revision 2, 2021-01-06 (Yiwei Zhang)
+--
+--     -   Minor description update
 --
 -- = See Also
 --
diff --git a/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs b/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs
--- a/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs
+++ b/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs
@@ -547,6 +547,8 @@
     poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
     poke ((p `plusPtr` 16 :: Ptr LineRasterizationModeEXT)) (zero)
     poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word16)) (zero)
     f
 
 instance FromCStruct PipelineRasterizationLineStateCreateInfoEXT where
diff --git a/src/Vulkan/Extensions/VK_EXT_sample_locations.hs b/src/Vulkan/Extensions/VK_EXT_sample_locations.hs
--- a/src/Vulkan/Extensions/VK_EXT_sample_locations.hs
+++ b/src/Vulkan/Extensions/VK_EXT_sample_locations.hs
@@ -472,11 +472,6 @@
 -- -   #VUID-VkSampleLocationsInfoEXT-sType-sType# @sType@ /must/ be
 --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT'
 --
--- -   #VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-parameter# If
---     @sampleLocationsPerPixel@ is not @0@, @sampleLocationsPerPixel@
---     /must/ be a valid
---     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
---
 -- -   #VUID-VkSampleLocationsInfoEXT-pSampleLocations-parameter# If
 --     @sampleLocationsCount@ is not @0@, @pSampleLocations@ /must/ be a
 --     valid pointer to an array of @sampleLocationsCount@
@@ -492,8 +487,8 @@
 -- 'SubpassSampleLocationsEXT', 'cmdSetSampleLocationsEXT'
 data SampleLocationsInfoEXT = SampleLocationsInfoEXT
   { -- | @sampleLocationsPerPixel@ is a
-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' specifying
-    -- the number of sample locations per pixel.
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+    -- specifying the number of sample locations per pixel.
     sampleLocationsPerPixel :: SampleCountFlagBits
   , -- | @sampleLocationGridSize@ is the size of the sample location grid to
     -- select custom sample locations for.
@@ -525,6 +520,7 @@
   pokeZeroCStruct p f = do
     poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT)
     poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SampleCountFlagBits)) (zero)
     poke ((p `plusPtr` 20 :: Ptr Extent2D)) (zero)
     f
 
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
@@ -192,7 +192,7 @@
 -- to a destination access of
 -- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT'
 -- at pipeline stage
--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'.
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'.
 --
 -- 2) How does this interact with multiview?
 --
@@ -836,6 +836,16 @@
 --     used to create @queryPool@ /must/ not be
 --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'
 --
+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-04728# The @queryType@
+--     used to create @queryPool@ /must/ not be
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
+--     or
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
+--
+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-04729# The @queryType@
+--     used to create @queryPool@ /must/ not be
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV'
+--
 -- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-00800# If the
 --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>
 --     feature is not enabled, or the @queryType@ used to create
@@ -1566,6 +1576,17 @@
 --     draw command, and the @viewportCount@ parameter of
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
+--
+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-blendEnable-04727# If
+--     rasterization is not disabled in the bound graphics pipeline, then
+--     for each color attachment in the subpass, if the corresponding image
+--     view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
 --
 -- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-04007# All vertex input
 --     bindings accessed via vertex input variables declared in the vertex
diff --git a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot
--- a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot
+++ b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot
@@ -192,7 +192,7 @@
 -- to a destination access of
 -- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT'
 -- at pipeline stage
--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'.
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'.
 --
 -- 2) How does this interact with multiview?
 --
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
@@ -1266,6 +1266,7 @@
 import Data.Vector (generateM)
 import qualified Data.Vector (imapM_)
 import qualified Data.Vector (length)
+import qualified Data.Vector (null)
 import Foreign.C.Types (CSize(..))
 import Vulkan.CStruct (FromCStruct)
 import Vulkan.CStruct (FromCStruct(..))
@@ -4532,8 +4533,9 @@
 --     'AccelerationStructureBuildGeometryInfoKHR' structure
 --
 -- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-pMaxPrimitiveCounts-parameter#
---     @pMaxPrimitiveCounts@ /must/ be a valid pointer to an array of
---     @pBuildInfo->geometryCount@ @uint32_t@ values
+--     If @pMaxPrimitiveCounts@ is not @NULL@, @pMaxPrimitiveCounts@ /must/
+--     be a valid pointer to an array of @pBuildInfo->geometryCount@
+--     @uint32_t@ values
 --
 -- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-pSizeInfo-parameter#
 --     @pSizeInfo@ /must/ be a valid pointer to a
@@ -4567,10 +4569,14 @@
     throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAccelerationStructureBuildSizesKHR is null" Nothing Nothing
   let vkGetAccelerationStructureBuildSizesKHR' = mkVkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHRPtr
   pBuildInfo <- ContT $ withCStruct (buildInfo)
-  pPMaxPrimitiveCounts <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (maxPrimitiveCounts)) * 4) 4
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPMaxPrimitiveCounts `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (maxPrimitiveCounts)
+  pMaxPrimitiveCounts <- if Data.Vector.null (maxPrimitiveCounts)
+    then pure nullPtr
+    else do
+      pPMaxPrimitiveCounts <- ContT $ allocaBytesAligned @Word32 (((Data.Vector.length (maxPrimitiveCounts))) * 4) 4
+      lift $ Data.Vector.imapM_ (\i e -> poke (pPMaxPrimitiveCounts `plusPtr` (4 * (i)) :: Ptr Word32) (e)) ((maxPrimitiveCounts))
+      pure $ pPMaxPrimitiveCounts
   pPSizeInfo <- ContT (withZeroCStruct @AccelerationStructureBuildSizesInfoKHR)
-  lift $ traceAroundEvent "vkGetAccelerationStructureBuildSizesKHR" (vkGetAccelerationStructureBuildSizesKHR' (deviceHandle (device)) (buildType) pBuildInfo (pPMaxPrimitiveCounts) (pPSizeInfo))
+  lift $ traceAroundEvent "vkGetAccelerationStructureBuildSizesKHR" (vkGetAccelerationStructureBuildSizesKHR' (deviceHandle (device)) (buildType) pBuildInfo pMaxPrimitiveCounts (pPSizeInfo))
   pSizeInfo <- lift $ peekCStruct @AccelerationStructureBuildSizesInfoKHR pPSizeInfo
   pure $ (pSizeInfo)
 
@@ -4916,57 +4922,8 @@
 -- @vertexStride@ for acceleration structure geometry is instead restricted
 -- to being a 32-bit value.
 --
--- == Valid Usage
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735#
---     @vertexStride@ /must/ be a multiple of the size in bytes of the
---     smallest component of @vertexFormat@
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819#
---     @vertexStride@ /must/ be less than or equal to 232-1
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797#
---     @vertexFormat@ /must/ support the
---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
---     in
---     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
---     as returned by
---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798#
---     @indexType@ /must/ be
---     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',
---     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or
---     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
---
 -- == Valid Usage (Implicit)
 --
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-sType#
---     @sType@ /must/ be
---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR'
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-pNext-pNext#
---     @pNext@ /must/ be @NULL@
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter#
---     @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
---     value
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexData-parameter#
---     @vertexData@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter#
---     @indexType@ /must/ be a valid
---     'Vulkan.Core10.Enums.IndexType.IndexType' value
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexData-parameter#
---     If @indexData@ is not @0@, @indexData@ /must/ be a valid
---     'DeviceOrHostAddressConstKHR' union
---
--- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-transformData-parameter#
---     If @transformData@ is not @0@, @transformData@ /must/ be a valid
---     'DeviceOrHostAddressConstKHR' union
---
 -- = See Also
 --
 -- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',
@@ -4977,17 +4934,45 @@
 data AccelerationStructureGeometryTrianglesDataKHR = AccelerationStructureGeometryTrianglesDataKHR
   { -- | @vertexFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of each vertex
     -- element.
+    --
+    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797#
+    -- @vertexFormat@ /must/ support the
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
+    -- in
+    -- 'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
+    -- as returned by
+    -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
+    --
+    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter#
+    -- @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
+    -- value
     vertexFormat :: Format
   , -- | @vertexData@ is a device or host address to memory containing vertex
     -- data for this geometry.
     vertexData :: DeviceOrHostAddressConstKHR
   , -- | @vertexStride@ is the stride in bytes between each vertex.
+    --
+    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735#
+    -- @vertexStride@ /must/ be a multiple of the size in bytes of the smallest
+    -- component of @vertexFormat@
+    --
+    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819#
+    -- @vertexStride@ /must/ be less than or equal to 232-1
     vertexStride :: DeviceSize
   , -- | @maxVertex@ is the highest index of a vertex that will be addressed by a
     -- build command using this structure.
     maxVertex :: Word32
   , -- | @indexType@ is the 'Vulkan.Core10.Enums.IndexType.IndexType' of each
     -- index element.
+    --
+    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798#
+    -- @indexType@ /must/ be 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',
+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or
+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
+    --
+    -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter#
+    -- @indexType@ /must/ be a valid 'Vulkan.Core10.Enums.IndexType.IndexType'
+    -- value
     indexType :: IndexType
   , -- | @indexData@ is a device or host address to memory containing index data
     -- for this geometry.
@@ -5026,6 +5011,8 @@
     lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
     lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
     lift $ poke ((p `plusPtr` 44 :: Ptr IndexType)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
     lift $ f
 
 instance Zero AccelerationStructureGeometryTrianglesDataKHR where
@@ -5054,9 +5041,6 @@
   { -- | @data@ is a device or host address to memory containing
     -- 'AabbPositionsKHR' structures containing position data for each
     -- axis-aligned bounding box in the geometry.
-    --
-    -- #VUID-VkAccelerationStructureGeometryAabbsDataKHR-data-parameter# @data@
-    -- /must/ be a valid 'DeviceOrHostAddressConstKHR' union
     data' :: DeviceOrHostAddressConstKHR
   , -- | @stride@ is the stride in bytes between each entry in @data@. The stride
     -- /must/ be a multiple of @8@.
@@ -5115,9 +5099,6 @@
     -- referencing individual 'AccelerationStructureInstanceKHR' structures if
     -- @arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or the
     -- address of an array of 'AccelerationStructureInstanceKHR' structures.
-    --
-    -- #VUID-VkAccelerationStructureGeometryInstancesDataKHR-data-parameter#
-    -- @data@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
     data' :: DeviceOrHostAddressConstKHR
   }
   deriving (Typeable)
@@ -5345,9 +5326,6 @@
 --     @geometryCount@ valid pointers to valid
 --     'AccelerationStructureGeometryKHR' structures
 --
--- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-scratchData-parameter#
---     @scratchData@ /must/ be a valid 'DeviceOrHostAddressKHR' union
---
 -- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-commonparent# Both
 --     of @dstAccelerationStructure@, and @srcAccelerationStructure@ that
 --     are valid handles of non-ignored parameters /must/ have been
@@ -5548,6 +5526,8 @@
   pokeZeroCStruct p f = do
     poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
     poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
     f
 
 instance FromCStruct AccelerationStructureBuildRangeInfoKHR where
@@ -6304,9 +6284,6 @@
 --     @src@ /must/ be a valid
 --     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
 --
--- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-dst-parameter#
---     @dst@ /must/ be a valid 'DeviceOrHostAddressKHR' union
---
 -- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-parameter#
 --     @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value
 --
@@ -6384,9 +6361,6 @@
 --
 -- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pNext-pNext#
 --     @pNext@ /must/ be @NULL@
---
--- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-src-parameter#
---     @src@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
 --
 -- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-dst-parameter#
 --     @dst@ /must/ be a valid
diff --git a/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs b/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs
--- a/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs
+++ b/src/Vulkan/Extensions/VK_KHR_copy_commands2.hs
@@ -2364,18 +2364,6 @@
 --     not have been created with @flags@ containing
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
 --
--- -   #VUID-VkCopyBufferToImageInfo2KHR-commandBuffer-04052# If the queue
---     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
---     @commandBuffer@ was allocated from does not support
---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
---     @bufferOffset@ member of any element of @pRegions@ /must/ be a
---     multiple of @4@
---
--- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImage-04053# If @dstImage@ has
---     a depth\/stencil format, the @bufferOffset@ member of any element of
---     @pRegions@ /must/ be a multiple of @4@
---
 -- -   #VUID-VkCopyBufferToImageInfo2KHR-commandBuffer-04477# If the queue
 --     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
 --     @commandBuffer@ was allocated from does not support
@@ -2507,6 +2495,30 @@
 --     for each element of @pRegions@, @imageSubresource.baseArrayLayer@
 --     /must/ be @0@ and @imageSubresource.layerCount@ /must/ be @1@
 --
+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pRegions-04725# If @dstImage@ is
+--     not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ multiplied by the
+--     texel block size of @dstImage@ /must/ be less than or equal to 231-1
+--
+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pRegions-04726# If @dstImage@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ divided by the
+--     compressed texel block width and then multiplied by the texel block
+--     size of @dstImage@ /must/ be less than or equal to 231-1
+--
+-- -   #VUID-VkCopyBufferToImageInfo2KHR-commandBuffer-04052# If the queue
+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
+--     @commandBuffer@ was allocated from does not support
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a
+--     multiple of @4@
+--
+-- -   #VUID-VkCopyBufferToImageInfo2KHR-srcImage-04053# If @dstImage@ has
+--     a depth\/stencil format, the @bufferOffset@ member of any element of
+--     @pRegions@ /must/ be a multiple of @4@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   #VUID-VkCopyBufferToImageInfo2KHR-sType-sType# @sType@ /must/ be
@@ -2603,8 +2615,8 @@
            mempty
 
 
--- | VkCopyImageToBufferInfo2KHR - Structure specifying parameters of a image
--- to buffer copy command
+-- | VkCopyImageToBufferInfo2KHR - Structure specifying parameters of an
+-- image to buffer copy command
 --
 -- == Valid Usage
 --
@@ -2709,18 +2721,6 @@
 --     not have been created with @flags@ containing
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
 --
--- -   #VUID-VkCopyImageToBufferInfo2KHR-commandBuffer-04054# If the queue
---     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
---     @commandBuffer@ was allocated from does not support
---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
---     @bufferOffset@ member of any element of @pRegions@ /must/ be a
---     multiple of @4@
---
--- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-04055# If @srcImage@ has
---     a depth\/stencil format, the @bufferOffset@ member of any element of
---     @pRegions@ /must/ be a multiple of @4@
---
 -- -   #VUID-VkCopyImageToBufferInfo2KHR-imageOffset-00197# For each
 --     element of @pRegions@ not containing
 --     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'
@@ -2843,6 +2843,32 @@
 --     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each element of
 --     @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be @0@ and
 --     @imageSubresource.layerCount@ /must/ be @1@
+--
+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pRegions-04725# If {imageparam} is
+--     not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ multiplied by the
+--     texel block size of {imageparam} /must/ be less than or equal to
+--     231-1
+--
+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pRegions-04726# If {imageparam} is
+--     a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,
+--     for each element of @pRegions@, @bufferRowLength@ divided by the
+--     compressed texel block width and then multiplied by the texel block
+--     size of {imageparam} /must/ be less than or equal to 231-1
+--
+-- -   #VUID-VkCopyImageToBufferInfo2KHR-commandBuffer-04052# If the queue
+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which
+--     @commandBuffer@ was allocated from does not support
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the
+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a
+--     multiple of @4@
+--
+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-04053# If {imageparam}
+--     has a depth\/stencil format, the @bufferOffset@ member of any
+--     element of @pRegions@ /must/ be a multiple of @4@
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Extensions/VK_KHR_display.hs b/src/Vulkan/Extensions/VK_KHR_display.hs
--- a/src/Vulkan/Extensions/VK_KHR_display.hs
+++ b/src/Vulkan/Extensions/VK_KHR_display.hs
@@ -1591,6 +1591,9 @@
 -- mode height) for @minSrcExtent@, @maxSrcExtent@, @minDstExtent@, and
 -- @maxDstExtent@.
 --
+-- The value @supportedAlpha@ /must/ contain at least one valid
+-- 'DisplayPlaneAlphaFlagBitsKHR' bit.
+--
 -- These values indicate the limits of the implementation’s individual
 -- fields. Not all combinations of values within the offset and extent
 -- ranges returned in 'DisplayPlaneCapabilitiesKHR' are guaranteed to be
@@ -1737,10 +1740,9 @@
 --     between @0@ and @1@, inclusive
 --
 -- -   #VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01255# @alphaMode@
---     /must/ be @0@ or one of the bits present in the @supportedAlpha@
---     member of 'DisplayPlaneCapabilitiesKHR' returned by
---     'getDisplayPlaneCapabilitiesKHR' for the display plane corresponding
---     to @displayMode@
+--     /must/ be one of the bits present in the @supportedAlpha@ member of
+--     'DisplayPlaneCapabilitiesKHR' for the display plane corresponding to
+--     @displayMode@
 --
 -- -   #VUID-VkDisplaySurfaceCreateInfoKHR-width-01256# The @width@ and
 --     @height@ members of @imageExtent@ /must/ be less than or equal to
diff --git a/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
--- a/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
+++ b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
@@ -348,14 +348,13 @@
 --     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT',
 --     @name@ /must/ be @NULL@
 --
--- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-01460# If
---     @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/ name a
---     valid synchronization primitive of the type specified by
---     @handleType@
+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-01460# If @handle@
+--     is @NULL@, @name@ /must/ name a valid synchronization primitive of
+--     the type specified by @handleType@
 --
--- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-01461# If
---     @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be a
---     valid handle of the type specified by @handleType@
+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-01461# If @name@ is
+--     @NULL@, @handle@ /must/ be a valid handle of the type specified by
+--     @handleType@
 --
 -- -   #VUID-VkImportFenceWin32HandleInfoKHR-handle-01462# If @handle@ is
 --     not @NULL@, @name@ /must/ be @NULL@
@@ -384,11 +383,6 @@
 --     /must/ be a valid combination of
 --     'Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits' values
 --
--- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-parameter# If
---     @handleType@ is not @0@, @handleType@ /must/ be a valid
---     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
---     value
---
 -- == Host Synchronization
 --
 -- -   Host access to @fence@ /must/ be externally synchronized
@@ -438,6 +432,7 @@
     poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR)
     poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
     poke ((p `plusPtr` 16 :: Ptr Fence)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits)) (zero)
     f
 
 instance FromCStruct ImportFenceWin32HandleInfoKHR where
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs b/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
--- a/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
@@ -347,11 +347,11 @@
 --     physical device as @device@
 --
 -- -   #VUID-VkImportMemoryFdInfoKHR-handleType-00669# If @handleType@ is
---     not @0@, it /must/ be defined as a POSIX file descriptor handle
+--     not @0@, it /must/ be
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT'.
 --
 -- -   #VUID-VkImportMemoryFdInfoKHR-handleType-00670# If @handleType@ is
---     not @0@, @fd@ /must/ be a valid handle of the type specified by
---     @handleType@
+--     not @0@, @fd@ /must/ be a valid POSIX file descriptor handle.
 --
 -- -   #VUID-VkImportMemoryFdInfoKHR-fd-01746# The memory represented by
 --     @fd@ /must/ have been created from a physical device and driver that
diff --git a/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs b/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
--- a/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
+++ b/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
@@ -390,13 +390,12 @@
 --     @name@ /must/ be @NULL@
 --
 -- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01467# If
---     @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/ name a
---     valid synchronization primitive of the type specified by
---     @handleType@
+--     @handle@ is @NULL@, @name@ /must/ name a valid synchronization
+--     primitive of the type specified by @handleType@
 --
 -- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01468# If
---     @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be a
---     valid handle of the type specified by @handleType@
+--     @name@ is @NULL@, @handle@ /must/ be a valid handle of the type
+--     specified by @handleType@
 --
 -- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01469# If @handle@
 --     is not @NULL@, @name@ /must/ be @NULL@
@@ -457,11 +456,6 @@
 --     'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits'
 --     values
 --
--- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-parameter# If
---     @handleType@ is not @0@, @handleType@ /must/ be a valid
---     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
---     value
---
 -- == Host Synchronization
 --
 -- -   Host access to @semaphore@ /must/ be externally synchronized
@@ -512,6 +506,7 @@
     poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
     poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
     poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (zero)
     f
 
 instance FromCStruct ImportSemaphoreWin32HandleInfoKHR where
diff --git a/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs b/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs
--- a/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs
+++ b/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs
@@ -1021,6 +1021,7 @@
     pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
     pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
     poke ((p `plusPtr` 528 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 536 :: Ptr CSize)) (CSize (zero))
     f
 
 instance FromCStruct PipelineExecutableInternalRepresentationKHR where
diff --git a/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs b/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs
--- a/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs
+++ b/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs
@@ -373,7 +373,7 @@
 --     'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo', or
 --     'Vulkan.Core10.Handles.BufferView' in a layout defined by
 --     @descriptorUpdateTemplate@ when it was created with
---     'Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR'
+--     'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.createDescriptorUpdateTemplate'
 --
 -- == Valid Usage (Implicit)
 --
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
@@ -2697,6 +2697,54 @@
 --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR'
 --     bit set
 --
+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04718# If @flags@
+--     includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR',
+--     each element of the @pLibraries@ member of @libraries@ /must/ have
+--     been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
+--     bit set
+--
+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04719# If @flags@
+--     includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR',
+--     each element of the @pLibraries@ member of @libraries@ /must/ have
+--     been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
+--     bit set
+--
+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04720# If @flags@
+--     includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',
+--     each element of the @pLibraries@ member of @libraries@ /must/ have
+--     been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
+--     bit set
+--
+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04721# If @flags@
+--     includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',
+--     each element of the @pLibraries@ member of @libraries@ /must/ have
+--     been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
+--     bit set
+--
+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04722# If @flags@
+--     includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',
+--     each element of the @pLibraries@ member of @libraries@ /must/ have
+--     been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
+--     bit set
+--
+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04723# If @flags@
+--     includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR',
+--     each element of the @pLibraries@ member of @libraries@ /must/ have
+--     been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
+--     bit set
+--
 -- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03595# If the
 --     <VK_KHR_pipeline_library.html VK_KHR_pipeline_library> extension is
 --     not enabled, @pLibraryInfo@ and @pLibraryInterface@ /must/ be
@@ -3227,7 +3275,7 @@
 data StridedDeviceAddressRegionKHR = StridedDeviceAddressRegionKHR
   { -- | @deviceAddress@ is the device address (as returned by the
     -- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
-    -- command) at which the region starts.
+    -- command) at which the region starts, or zero if the region is unused.
     deviceAddress :: DeviceAddress
   , -- | @stride@ is the byte stride between consecutive elements.
     stride :: DeviceSize
diff --git a/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs b/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs
@@ -0,0 +1,261 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_KHR_workgroup_memory_explicit_layout - device extension
+--
+-- == VK_KHR_workgroup_memory_explicit_layout
+--
+-- [__Name String__]
+--     @VK_KHR_workgroup_memory_explicit_layout@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     337
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
+-- [__Contact__]
+--
+--     -   Caio Marcelo de Oliveira Filho
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_workgroup_memory_explicit_layout:%20&body=@cmarcelo%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2020-06-01
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Interactions and External Dependencies__]
+--
+--     -   This extension requires
+--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_workgroup_memory_explicit_layout.html SPV_KHR_workgroup_memory_explicit_layout>
+--
+-- [__Contributors__]
+--
+--     -   Caio Marcelo de Oliveira Filho, Intel
+--
+--     -   Jeff Bolz, NVIDIA
+--
+--     -   Graeme Leese, Broadcom
+--
+--     -   Jason Ekstrand, Intel
+--
+--     -   Daniel Koch, NVIDIA
+--
+-- == Description
+--
+-- This extension adds Vulkan support for the
+-- <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_workgroup_memory_explicit_layout.html SPV_KHR_workgroup_memory_explicit_layout>
+-- SPIR-V extension, which allows shaders to explicitly define the layout
+-- of @Workgroup@ storage class memory and create aliases between variables
+-- from that storage class in a compute shader.
+--
+-- The aliasing feature allows different \"views\" on the same data, so the
+-- shader can bulk copy data from another storage class using one type
+-- (e.g. an array of large vectors), and then use the data with a more
+-- specific type. It also enables reducing the amount of workgroup memory
+-- consumed by allowing the shader to alias data whose lifetimes don’t
+-- overlap.
+--
+-- The explicit layout support and some form of aliasing is also required
+-- for layering OpenCL on top of Vulkan.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR'
+--
+-- == New Enum Constants
+--
+-- -   'KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME'
+--
+-- -   'KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR'
+--
+-- == New SPIR-V Capabilities
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-workgroup-memory-explicit-layout WorkgroupMemoryExplicitLayoutKHR>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-workgroup-memory-explicit-layout-8-bit-access WorkgroupMemoryExplicitLayout8BitAccessKHR>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-workgroup-memory-explicit-layout-16-bit-access WorkgroupMemoryExplicitLayout16BitAccessKHR>
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-06-01 (Caio Marcelo de Oliveira Filho)
+--
+--     -   Initial version
+--
+-- = See Also
+--
+-- 'PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_workgroup_memory_explicit_layout 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_workgroup_memory_explicit_layout  ( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(..)
+                                                                  , KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION
+                                                                  , pattern KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION
+                                                                  , KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME
+                                                                  , pattern KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME
+                                                                  ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import 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_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR))
+-- | VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR - Structure
+-- describing the workgroup storage explicit layout features that can be
+-- supported by an implementation
+--
+-- = Members
+--
+-- The members of the
+-- 'PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR'
+-- structure is included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable the feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR = PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+  { -- | #features-workgroupMemoryExplicitLayout# @workgroupMemoryExplicitLayout@
+    -- indicates whether the implementation supports the SPIR-V
+    -- @WorkgroupMemoryExplicitLayoutKHR@ capability.
+    workgroupMemoryExplicitLayout :: Bool
+  , -- | #features-workgroupMemoryExplicitLayoutScalarBlockLayout#
+    -- @workgroupMemoryExplicitLayoutScalarBlockLayout@ indicates whether the
+    -- implementation supports scalar alignment for laying out Workgroup
+    -- Blocks.
+    workgroupMemoryExplicitLayoutScalarBlockLayout :: Bool
+  , -- | #features-workgroupMemoryExplicitLayout8BitAccess#
+    -- @workgroupMemoryExplicitLayout8BitAccess@ indicates whether objects in
+    -- the @Workgroup@ storage class with the @Block@ decoration /can/ have
+    -- 8-bit integer members. If this feature is not enabled, 8-bit integer
+    -- members /must/ not be used in such objects. This also indicates whether
+    -- shader modules /can/ declare the
+    -- @WorkgroupMemoryExplicitLayout8BitAccessKHR@ capability.
+    workgroupMemoryExplicitLayout8BitAccess :: Bool
+  , -- | #features-workgroupMemoryExplicitLayout16BitAccess#
+    -- @workgroupMemoryExplicitLayout16BitAccess@ indicates whether objects in
+    -- the @Workgroup@ storage class with the @Block@ decoration /can/ have
+    -- 16-bit integer and 16-bit floating-point members. If this feature is not
+    -- enabled, 16-bit integer or 16-bit floating-point members /must/ not be
+    -- used in such objects. This also indicates whether shader modules /can/
+    -- declare the @WorkgroupMemoryExplicitLayout16BitAccessKHR@ capability.
+    workgroupMemoryExplicitLayout16BitAccess :: Bool
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR)
+#endif
+deriving instance Show PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+
+instance ToCStruct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (workgroupMemoryExplicitLayout))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (workgroupMemoryExplicitLayoutScalarBlockLayout))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (workgroupMemoryExplicitLayout8BitAccess))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (workgroupMemoryExplicitLayout16BitAccess))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR where
+  peekCStruct p = do
+    workgroupMemoryExplicitLayout <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    workgroupMemoryExplicitLayoutScalarBlockLayout <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    workgroupMemoryExplicitLayout8BitAccess <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    workgroupMemoryExplicitLayout16BitAccess <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    pure $ PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+             (bool32ToBool workgroupMemoryExplicitLayout) (bool32ToBool workgroupMemoryExplicitLayoutScalarBlockLayout) (bool32ToBool workgroupMemoryExplicitLayout8BitAccess) (bool32ToBool workgroupMemoryExplicitLayout16BitAccess)
+
+instance Storable PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR where
+  zero = PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+           zero
+           zero
+           zero
+           zero
+
+
+type KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION"
+pattern KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION = 1
+
+
+type KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME = "VK_KHR_workgroup_memory_explicit_layout"
+
+-- No documentation found for TopLevel "VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME"
+pattern KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME = "VK_KHR_workgroup_memory_explicit_layout"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs-boot b/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_workgroup_memory_explicit_layout.hs-boot
@@ -0,0 +1,129 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_KHR_workgroup_memory_explicit_layout - device extension
+--
+-- == VK_KHR_workgroup_memory_explicit_layout
+--
+-- [__Name String__]
+--     @VK_KHR_workgroup_memory_explicit_layout@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     337
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
+-- [__Contact__]
+--
+--     -   Caio Marcelo de Oliveira Filho
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_workgroup_memory_explicit_layout:%20&body=@cmarcelo%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2020-06-01
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Interactions and External Dependencies__]
+--
+--     -   This extension requires
+--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_workgroup_memory_explicit_layout.html SPV_KHR_workgroup_memory_explicit_layout>
+--
+-- [__Contributors__]
+--
+--     -   Caio Marcelo de Oliveira Filho, Intel
+--
+--     -   Jeff Bolz, NVIDIA
+--
+--     -   Graeme Leese, Broadcom
+--
+--     -   Jason Ekstrand, Intel
+--
+--     -   Daniel Koch, NVIDIA
+--
+-- == Description
+--
+-- This extension adds Vulkan support for the
+-- <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_workgroup_memory_explicit_layout.html SPV_KHR_workgroup_memory_explicit_layout>
+-- SPIR-V extension, which allows shaders to explicitly define the layout
+-- of @Workgroup@ storage class memory and create aliases between variables
+-- from that storage class in a compute shader.
+--
+-- The aliasing feature allows different \"views\" on the same data, so the
+-- shader can bulk copy data from another storage class using one type
+-- (e.g. an array of large vectors), and then use the data with a more
+-- specific type. It also enables reducing the amount of workgroup memory
+-- consumed by allowing the shader to alias data whose lifetimes don’t
+-- overlap.
+--
+-- The explicit layout support and some form of aliasing is also required
+-- for layering OpenCL on top of Vulkan.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR'
+--
+-- == New Enum Constants
+--
+-- -   'KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME'
+--
+-- -   'KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR'
+--
+-- == New SPIR-V Capabilities
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-workgroup-memory-explicit-layout WorkgroupMemoryExplicitLayoutKHR>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-workgroup-memory-explicit-layout-8-bit-access WorkgroupMemoryExplicitLayout8BitAccessKHR>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-workgroup-memory-explicit-layout-16-bit-access WorkgroupMemoryExplicitLayout16BitAccessKHR>
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-06-01 (Caio Marcelo de Oliveira Filho)
+--
+--     -   Initial version
+--
+-- = See Also
+--
+-- 'PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_workgroup_memory_explicit_layout 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_workgroup_memory_explicit_layout  (PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+
+instance ToCStruct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+instance Show PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+
+instance FromCStruct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_zero_initialize_workgroup_memory.hs b/src/Vulkan/Extensions/VK_KHR_zero_initialize_workgroup_memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_zero_initialize_workgroup_memory.hs
@@ -0,0 +1,200 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_KHR_zero_initialize_workgroup_memory - device extension
+--
+-- == VK_KHR_zero_initialize_workgroup_memory
+--
+-- [__Name String__]
+--     @VK_KHR_zero_initialize_workgroup_memory@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     326
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
+-- [__Contact__]
+--
+--     -   Alan Baker
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_zero_initialize_workgroup_memory:%20&body=@alan-baker%20 >
+--
+-- [__Last Modified Date__]
+--     2020-11-18
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Interactions and External Dependencies__]
+--     None
+--
+-- [__Contributors__]
+--
+--     -   Alan Baker, Google
+--
+--     -   Jeff Bolz, Nvidia
+--
+--     -   Jason Ekstrand, Intel
+--
+-- This extension allows the use of a null constant initializer on shader
+-- Workgroup memory variables, allowing implementations to expose any
+-- special hardware or instructions they may have. Zero initialization is
+-- commonly used by applications running untrusted content (e.g. web
+-- browsers) as way of defeating memory-scraping attacks.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR'
+--
+-- == New Enum Constants
+--
+-- -   'KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME'
+--
+-- -   'KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR'
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-11-18 (Alan Baker)
+--
+--     -   Internal draft version
+--
+-- = See Also
+--
+-- 'PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_zero_initialize_workgroup_memory 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_zero_initialize_workgroup_memory  ( PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR(..)
+                                                                  , KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION
+                                                                  , pattern KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION
+                                                                  , KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME
+                                                                  , pattern KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME
+                                                                  ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import 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_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR))
+-- | VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR - Structure
+-- describing support for zero initialization of workgroup memory by an
+-- implementation
+--
+-- = Members
+--
+-- The member of the
+-- 'PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR' structure
+-- describe the following feature:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR'
+-- structure is included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with a value indicating whether the feature is supported.
+-- 'PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable the features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+  { -- | #features-shaderZeroInitializeWorkgroupMemory#
+    -- @shaderZeroInitializeWorkgroupMemory@ specifies whether the
+    -- implementation supports initializing a variable in Workgroup storage
+    -- class.
+    shaderZeroInitializeWorkgroupMemory :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR)
+#endif
+deriving instance Show PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+
+instance ToCStruct PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderZeroInitializeWorkgroupMemory))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR where
+  peekCStruct p = do
+    shaderZeroInitializeWorkgroupMemory <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+             (bool32ToBool shaderZeroInitializeWorkgroupMemory)
+
+instance Storable PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR where
+  zero = PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+           zero
+
+
+type KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION"
+pattern KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION = 1
+
+
+type KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME = "VK_KHR_zero_initialize_workgroup_memory"
+
+-- No documentation found for TopLevel "VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME"
+pattern KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME = "VK_KHR_zero_initialize_workgroup_memory"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_zero_initialize_workgroup_memory.hs-boot b/src/Vulkan/Extensions/VK_KHR_zero_initialize_workgroup_memory.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_zero_initialize_workgroup_memory.hs-boot
@@ -0,0 +1,101 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_KHR_zero_initialize_workgroup_memory - device extension
+--
+-- == VK_KHR_zero_initialize_workgroup_memory
+--
+-- [__Name String__]
+--     @VK_KHR_zero_initialize_workgroup_memory@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     326
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_get_physical_device_properties2@
+--
+-- [__Contact__]
+--
+--     -   Alan Baker
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_zero_initialize_workgroup_memory:%20&body=@alan-baker%20 >
+--
+-- [__Last Modified Date__]
+--     2020-11-18
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Interactions and External Dependencies__]
+--     None
+--
+-- [__Contributors__]
+--
+--     -   Alan Baker, Google
+--
+--     -   Jeff Bolz, Nvidia
+--
+--     -   Jason Ekstrand, Intel
+--
+-- This extension allows the use of a null constant initializer on shader
+-- Workgroup memory variables, allowing implementations to expose any
+-- special hardware or instructions they may have. Zero initialization is
+-- commonly used by applications running untrusted content (e.g. web
+-- browsers) as way of defeating memory-scraping attacks.
+--
+-- == New Structures
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR'
+--
+-- == New Enum Constants
+--
+-- -   'KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME'
+--
+-- -   'KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR'
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-11-18 (Alan Baker)
+--
+--     -   Internal draft version
+--
+-- = See Also
+--
+-- 'PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_zero_initialize_workgroup_memory 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_zero_initialize_workgroup_memory  (PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Data.Kind (Type)
+
+data PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+
+instance ToCStruct PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+instance Show PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+
+instance FromCStruct PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+
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
@@ -1099,6 +1099,17 @@
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
 --
+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-blendEnable-04727# If
+--     rasterization is not disabled in the bound graphics pipeline, then
+--     for each color attachment in the subpass, if the corresponding image
+--     view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
 -- -   #VUID-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
@@ -3015,6 +3026,8 @@
     poke ((p `plusPtr` 64 :: Ptr Buffer)) (zero)
     poke ((p `plusPtr` 72 :: Ptr DeviceSize)) (zero)
     poke ((p `plusPtr` 80 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 96 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 112 :: Ptr DeviceSize)) (zero)
     f
 
 instance FromCStruct GeneratedCommandsInfoNV where
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
@@ -723,6 +723,16 @@
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
 --
+-- -   #VUID-vkCmdDrawMeshTasksNV-blendEnable-04727# If rasterization is
+--     not disabled in the bound graphics pipeline, then for each color
+--     attachment in the subpass, if the corresponding image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
 -- -   #VUID-vkCmdDrawMeshTasksNV-taskCount-02119# @taskCount@ /must/ be
 --     less than or equal to
 --     'PhysicalDeviceMeshShaderPropertiesNV'::@maxDrawMeshTasksCount@
@@ -1204,6 +1214,17 @@
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
 --
+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-blendEnable-04727# If
+--     rasterization is not disabled in the bound graphics pipeline, then
+--     for each color attachment in the subpass, if the corresponding image
+--     view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
+--
 -- -   #VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708# If @buffer@ is
 --     non-sparse then it /must/ be bound completely and contiguously to a
 --     single 'Vulkan.Core10.Handles.DeviceMemory' object
@@ -1728,6 +1749,17 @@
 --     draw command, and the @viewportCount@ parameter of
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'
 --     /must/ be @1@
+--
+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-blendEnable-04727# If
+--     rasterization is not disabled in the bound graphics pipeline, then
+--     for each color attachment in the subpass, if the corresponding image
+--     view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     do not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
+--     then the @blendEnable@ member of the corresponding element of the
+--     @pAttachments@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.FundamentalTypes.FALSE'
 --
 -- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708# If @buffer@ is
 --     non-sparse then it /must/ be bound completely and contiguously to a
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
@@ -1284,13 +1284,11 @@
 --     been built with
 --     'Vulkan.Extensions.VK_KHR_acceleration_structure.BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR'
 --     if @queryType@ is
---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV'
 --
 -- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryType-03432#
 --     @queryType@ /must/ be
---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
---     or
---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV'
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs
--- a/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs
+++ b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs
@@ -1119,9 +1119,9 @@
   , -- | @sampleCount@ identifies the per-pixel coverage sample count for the
     -- combination of fragment area and coverage sample count to control.
     sampleCount :: Word32
-  , -- | @pSampleLocations@ is a pointer to an array of
-    -- 'CoarseSampleOrderCustomNV' structures specifying the location of each
-    -- sample in the custom ordering.
+  , -- | @pSampleLocations@ is a pointer to an array of 'CoarseSampleLocationNV'
+    -- structures specifying the location of each sample in the custom
+    -- ordering.
     sampleLocations :: Vector CoarseSampleLocationNV
   }
   deriving (Typeable)
diff --git a/src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs b/src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs
--- a/src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs
+++ b/src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs
@@ -95,9 +95,9 @@
 --
 -- == New Enum Constants
 --
--- -   'QCOM_rotated_copy_commands_EXTENSION_NAME'
+-- -   'QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME'
 --
--- -   'QCOM_rotated_copy_commands_SPEC_VERSION'
+-- -   'QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION'
 --
 -- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
 --
@@ -119,10 +119,10 @@
 -- This page is a generated document. Fixes and changes should be made to
 -- the generator scripts, not directly.
 module Vulkan.Extensions.VK_QCOM_rotated_copy_commands  ( CopyCommandTransformInfoQCOM(..)
-                                                        , QCOM_rotated_copy_commands_SPEC_VERSION
-                                                        , pattern QCOM_rotated_copy_commands_SPEC_VERSION
-                                                        , QCOM_rotated_copy_commands_EXTENSION_NAME
-                                                        , pattern QCOM_rotated_copy_commands_EXTENSION_NAME
+                                                        , QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION
+                                                        , pattern QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION
+                                                        , QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME
+                                                        , pattern QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME
                                                         , SurfaceTransformFlagBitsKHR(..)
                                                         , SurfaceTransformFlagsKHR
                                                         ) where
@@ -209,16 +209,16 @@
            zero
 
 
-type QCOM_rotated_copy_commands_SPEC_VERSION = 0
+type QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION = 0
 
--- No documentation found for TopLevel "VK_QCOM_rotated_copy_commands_SPEC_VERSION"
-pattern QCOM_rotated_copy_commands_SPEC_VERSION :: forall a . Integral a => a
-pattern QCOM_rotated_copy_commands_SPEC_VERSION = 0
+-- No documentation found for TopLevel "VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION"
+pattern QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION :: forall a . Integral a => a
+pattern QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION = 0
 
 
-type QCOM_rotated_copy_commands_EXTENSION_NAME = "VK_QCOM_rotated_copy_commands"
+type QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME = "VK_QCOM_rotated_copy_commands"
 
--- No documentation found for TopLevel "VK_QCOM_rotated_copy_commands_EXTENSION_NAME"
-pattern QCOM_rotated_copy_commands_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern QCOM_rotated_copy_commands_EXTENSION_NAME = "VK_QCOM_rotated_copy_commands"
+-- No documentation found for TopLevel "VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME"
+pattern QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME = "VK_QCOM_rotated_copy_commands"
 
diff --git a/src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs-boot b/src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs-boot
--- a/src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs-boot
+++ b/src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs-boot
@@ -95,9 +95,9 @@
 --
 -- == New Enum Constants
 --
--- -   'QCOM_rotated_copy_commands_EXTENSION_NAME'
+-- -   'QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME'
 --
--- -   'QCOM_rotated_copy_commands_SPEC_VERSION'
+-- -   'QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION'
 --
 -- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
 --
diff --git a/src/Vulkan/SPIRVRequirements.hs b/src/Vulkan/SPIRVRequirements.hs
--- a/src/Vulkan/SPIRVRequirements.hs
+++ b/src/Vulkan/SPIRVRequirements.hs
@@ -58,6 +58,8 @@
 import Vulkan.Core12 (PhysicalDeviceVulkan12Features(..))
 import Vulkan.Core12 (PhysicalDeviceVulkan12Properties)
 import Vulkan.Core12 (PhysicalDeviceVulkan12Properties(..))
+import Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout (PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR)
+import Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout (PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(..))
 import Vulkan.Extensions.VK_AMD_gcn_shader (pattern AMD_GCN_SHADER_EXTENSION_NAME)
 import Vulkan.Extensions.VK_AMD_gpu_shader_half_float (pattern AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME)
 import Vulkan.Extensions.VK_AMD_gpu_shader_int16 (pattern AMD_GPU_SHADER_INT16_EXTENSION_NAME)
@@ -111,6 +113,7 @@
 import Vulkan.Extensions.VK_KHR_storage_buffer_storage_class (pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_variable_pointers (pattern KHR_VARIABLE_POINTERS_EXTENSION_NAME)
 import Vulkan.Extensions.VK_KHR_vulkan_memory_model (pattern KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME)
+import Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout (pattern KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME)
 import Vulkan.Version (pattern MAKE_VERSION)
 import Vulkan.Extensions.VK_NVX_multiview_per_view_attributes (pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_compute_shader_derivatives (pattern NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME)
@@ -601,6 +604,18 @@
                              , deviceExtensionMinVersion = 0
                              }
     ]
+  "SPV_KHR_multiview" -> (,) [RequireInstanceVersion $ MAKE_VERSION 1 1 0] [RequireDeviceVersion $ MAKE_VERSION 1 1 0]
+  "SPV_KHR_workgroup_memory_explicit_layout" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
   _ -> ([], [])
 
 spirvCapabilityRequirements :: ByteString -> ([InstanceRequirement], [DeviceRequirement])
@@ -2130,6 +2145,60 @@
                              }
     , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
                              , deviceExtensionName       = KHR_MAINTENANCE2_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
+  "WorkgroupMemoryExplicitLayoutKHR" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceFeature
+      { featureName   = "workgroupMemoryExplicitLayout"
+      , checkFeature  = workgroupMemoryExplicitLayout :: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR -> Bool
+      , enableFeature = \f ->
+        f { workgroupMemoryExplicitLayout = True } :: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+      }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
+  "WorkgroupMemoryExplicitLayout8BitAccessKHR" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceFeature
+      { featureName = "workgroupMemoryExplicitLayout8BitAccess"
+      , checkFeature = workgroupMemoryExplicitLayout8BitAccess :: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+                       -> Bool
+      , enableFeature =
+        \f ->
+          f { workgroupMemoryExplicitLayout8BitAccess = True } :: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+      }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME
+                             , deviceExtensionMinVersion = 0
+                             }
+    ]
+  "WorkgroupMemoryExplicitLayout16BitAccessKHR" -> (,)
+    [ RequireInstanceExtension { instanceExtensionLayerName  = Nothing
+                               , instanceExtensionName       = KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                               , instanceExtensionMinVersion = 0
+                               }
+    ]
+    [ RequireDeviceFeature
+      { featureName   = "workgroupMemoryExplicitLayout16BitAccess"
+      , checkFeature  =
+        workgroupMemoryExplicitLayout16BitAccess :: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR -> Bool
+      , enableFeature = \f ->
+        f { workgroupMemoryExplicitLayout16BitAccess = True } :: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+      }
+    , RequireDeviceExtension { deviceExtensionLayerName  = Nothing
+                             , deviceExtensionName       = KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME
                              , deviceExtensionMinVersion = 0
                              }
     ]
diff --git a/src/Vulkan/Version.hs b/src/Vulkan/Version.hs
--- a/src/Vulkan/Version.hs
+++ b/src/Vulkan/Version.hs
@@ -15,17 +15,19 @@
 import Data.Word (Word32)
 
 pattern HEADER_VERSION :: Word32
-pattern HEADER_VERSION = 166
+pattern HEADER_VERSION = 169
 
 
 pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 166
+pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 169
 
 
 pattern MAKE_VERSION :: Word32 -> Word32 -> Word32 -> Word32
 pattern MAKE_VERSION major minor patch <-
   (\v -> (_VERSION_MAJOR v, _VERSION_MINOR v, _VERSION_PATCH v) -> (major, minor, patch))
   where MAKE_VERSION major minor patch = major `shiftL` 22 .|. minor `shiftL` 12 .|. patch
+
+{-# complete MAKE_VERSION #-}
 
 _VERSION_MAJOR :: Word32 -> Word32
 _VERSION_MAJOR v = v `shiftR` 22
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.9
+version:        3.9.1
 synopsis:       Bindings to the Vulkan graphics API.
 category:       Graphics
 homepage:       https://github.com/expipiplus1/vulkan#readme
@@ -431,8 +431,10 @@
       Vulkan.Extensions.VK_KHR_wayland_surface
       Vulkan.Extensions.VK_KHR_win32_keyed_mutex
       Vulkan.Extensions.VK_KHR_win32_surface
+      Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout
       Vulkan.Extensions.VK_KHR_xcb_surface
       Vulkan.Extensions.VK_KHR_xlib_surface
+      Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory
       Vulkan.Extensions.VK_MVK_ios_surface
       Vulkan.Extensions.VK_MVK_macos_surface
       Vulkan.Extensions.VK_NN_vi_surface
