diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,9 @@
 
 ## WIP
 
+## [3.6.4] - 2020-08-11
+  - Bump API version to 1.2.150
+
 ## [3.6.3] - 2020-08-05
   - Bump API version to 1.2.149
 
diff --git a/src/Vulkan/Core10/CommandBuffer.hs b/src/Vulkan/Core10/CommandBuffer.hs
--- a/src/Vulkan/Core10/CommandBuffer.hs
+++ b/src/Vulkan/Core10/CommandBuffer.hs
@@ -515,8 +515,6 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
---     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
 --     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
 --
 -- = See Also
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
@@ -9711,7 +9711,7 @@
 -- -   If @framebuffer@ was created with a
 --     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
 --     included
---     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR',
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
 --     each element of the @pAttachments@ member of a
 --     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
 --     structure included in the @pNext@ chain /must/ have been created on
@@ -9728,7 +9728,7 @@
 --     'Vulkan.Core10.Handles.ImageView' of an image created with a value
 --     of 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ equal to the
 --     @flags@ member of the corresponding element of
---     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR'::@pAttachments@
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
 --     used to create @framebuffer@
 --
 -- -   If @framebuffer@ was created with a
diff --git a/src/Vulkan/Core10/CommandPool.hs b/src/Vulkan/Core10/CommandPool.hs
--- a/src/Vulkan/Core10/CommandPool.hs
+++ b/src/Vulkan/Core10/CommandPool.hs
@@ -290,8 +290,6 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
---     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
 --     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
 --
 -- = See Also
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
@@ -1340,7 +1340,8 @@
 --     or 'Vulkan.Extensions.VK_EXT_validation_flags.ValidationFlagsEXT'
 --
 -- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
+--     unique, with the exception of structures of type
+--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT'
 --
 -- -   @flags@ /must/ be @0@
 --
diff --git a/src/Vulkan/Core10/Enums/Result.hs b/src/Vulkan/Core10/Enums/Result.hs
--- a/src/Vulkan/Core10/Enums/Result.hs
+++ b/src/Vulkan/Core10/Enums/Result.hs
@@ -66,9 +66,16 @@
 -- have undefined contents, except that @sType@ and @pNext@ will be
 -- unmodified.
 --
--- Out of memory errors do not damage any currently existing Vulkan
--- objects. Objects that have already been successfully created /can/ still
--- be used by the application.
+-- @VK_ERROR_OUT_OF_*_MEMORY@ errors do not modify any currently existing
+-- Vulkan objects. Objects that have already been successfully created
+-- /can/ still be used by the application.
+--
+-- Note
+--
+-- As a general rule, @Free@, @Release@, and @Reset@ commands do not return
+-- 'ERROR_OUT_OF_HOST_MEMORY', while any other command with a return code
+-- /may/ return it. Any exceptions from this rule are described for those
+-- commands.
 --
 -- 'ERROR_UNKNOWN' will be returned by an implementation when an unexpected
 -- error occurs that cannot be attributed to valid behavior of the
diff --git a/src/Vulkan/Core10/Event.hs b/src/Vulkan/Core10/Event.hs
--- a/src/Vulkan/Core10/Event.hs
+++ b/src/Vulkan/Core10/Event.hs
@@ -399,8 +399,6 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
---     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
 --     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
 --
 -- = See Also
diff --git a/src/Vulkan/Core10/Fence.hs b/src/Vulkan/Core10/Fence.hs
--- a/src/Vulkan/Core10/Fence.hs
+++ b/src/Vulkan/Core10/Fence.hs
@@ -289,8 +289,6 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
---     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
 --     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
 --
 -- = See Also
diff --git a/src/Vulkan/Core10/FuncPointers.hs b/src/Vulkan/Core10/FuncPointers.hs
--- a/src/Vulkan/Core10/FuncPointers.hs
+++ b/src/Vulkan/Core10/FuncPointers.hs
@@ -143,7 +143,8 @@
 
 
 type FN_vkVoidFunction = () -> IO ()
--- | PFN_vkVoidFunction - Dummy function pointer type returned by queries
+-- | PFN_vkVoidFunction - Placeholder function pointer type returned by
+-- queries
 --
 -- = See Also
 --
diff --git a/src/Vulkan/Core10/FuncPointers.hs-boot b/src/Vulkan/Core10/FuncPointers.hs-boot
--- a/src/Vulkan/Core10/FuncPointers.hs-boot
+++ b/src/Vulkan/Core10/FuncPointers.hs-boot
@@ -6,7 +6,8 @@
 import Foreign.Ptr (FunPtr)
 
 type FN_vkVoidFunction = () -> IO ()
--- | PFN_vkVoidFunction - Dummy function pointer type returned by queries
+-- | PFN_vkVoidFunction - Placeholder function pointer type returned by
+-- queries
 --
 -- = See Also
 --
diff --git a/src/Vulkan/Core10/Memory.hs b/src/Vulkan/Core10/Memory.hs
--- a/src/Vulkan/Core10/Memory.hs
+++ b/src/Vulkan/Core10/Memory.hs
@@ -134,14 +134,20 @@
 --
 -- The maximum number of valid memory allocations that /can/ exist
 -- simultaneously within a 'Vulkan.Core10.Handles.Device' /may/ be
--- restricted by implementation- or platform-dependent limits. If a call to
--- 'allocateMemory' would cause the total number of allocations to exceed
--- these limits, such a call will fail and /must/ return
--- 'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'. The
+-- restricted by implementation- or platform-dependent limits. The
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxMemoryAllocationCount maxMemoryAllocationCount>
 -- feature describes the number of allocations that /can/ exist
 -- simultaneously before encountering these internal limits.
 --
+-- Note
+--
+-- For historical reasons, if @maxMemoryAllocationCount@ is exceeded, some
+-- implementations may return
+-- 'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'. Exceeding this
+-- limit will result in undefined behavior, and an application should not
+-- rely on the use of the returned error code in order to identify when the
+-- limit is reached.
+--
 -- Some platforms /may/ have a limit on the maximum size of a single
 -- allocation. For example, certain systems /may/ fail to create
 -- allocations with a size greater than or equal to 4GB. Such a limit is
@@ -209,8 +215,6 @@
 --     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
 --
 --     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
 --
 --     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
 --
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
@@ -657,8 +657,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
---     command buffer of the @pCommandBuffers@ array /must/ be an
---     unprotected command buffer
+--     @pCommandBuffers@ array /must/ be an unprotected command buffer
 --
 -- == Valid Usage (Implicit)
 --
diff --git a/src/Vulkan/Core10/Sampler.hs b/src/Vulkan/Core10/Sampler.hs
--- a/src/Vulkan/Core10/Sampler.hs
+++ b/src/Vulkan/Core10/Sampler.hs
@@ -131,8 +131,6 @@
 --
 --     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
 --
---     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
 -- = See Also
 --
 -- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
@@ -283,8 +281,16 @@
 -- created on a device is implementation-dependent and specified by the
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxSamplerAllocationCount maxSamplerAllocationCount>
 -- member of the 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'
--- structure. If @maxSamplerAllocationCount@ is exceeded, 'createSampler'
--- will return 'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'.
+-- structure.
+--
+-- Note
+--
+-- For historical reasons, if @maxSamplerAllocationCount@ is exceeded, some
+-- implementations may return
+-- 'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'. Exceeding this
+-- limit will result in undefined behavior, and an application should not
+-- rely on the use of the returned error code in order to identify when the
+-- limit is reached.
 --
 -- Since 'Vulkan.Core10.Handles.Sampler' is a non-dispatchable handle type,
 -- implementations /may/ return the same handle for sampler state vectors
diff --git a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
--- a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
+++ b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
@@ -103,6 +103,8 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 --     -   'Vulkan.Extensions.VK_KHR_external_memory.ERROR_INVALID_EXTERNAL_HANDLE_KHR'
 --
 -- = See Also
diff --git a/src/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs b/src/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
--- a/src/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
+++ b/src/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
@@ -80,6 +80,8 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 --     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
 --
 -- = See Also
diff --git a/src/Vulkan/Extensions/VK_EXT_display_control.hs b/src/Vulkan/Extensions/VK_EXT_display_control.hs
--- a/src/Vulkan/Extensions/VK_EXT_display_control.hs
+++ b/src/Vulkan/Extensions/VK_EXT_display_control.hs
@@ -346,6 +346,8 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 --     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
 --
 --     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
diff --git a/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs
--- a/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs
+++ b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs
@@ -102,6 +102,8 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 --     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
 --
 -- = See Also
diff --git a/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs b/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs
--- a/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs
+++ b/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs
@@ -15,6 +15,7 @@
 import Control.Monad (unless)
 import Control.Monad.IO.Class (liftIO)
 import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (when)
 import GHC.IO (throwIO)
 import GHC.Ptr (nullFunPtr)
 import Foreign.Ptr (nullPtr)
@@ -58,12 +59,14 @@
 import Vulkan.Core10.Image (SubresourceLayout)
 import Vulkan.CStruct (ToCStruct)
 import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
 import Vulkan.Zero (Zero(..))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
 foreign import ccall
 #if !defined(SAFE_FOREIGN_CALLS)
   unsafe
@@ -80,6 +83,10 @@
 --
 --     -   'Vulkan.Core10.Enums.Result.SUCCESS'
 --
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 -- = See Also
 --
 -- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Image',
@@ -107,7 +114,8 @@
     throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetImageDrmFormatModifierPropertiesEXT is null" Nothing Nothing
   let vkGetImageDrmFormatModifierPropertiesEXT' = mkVkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXTPtr
   pPProperties <- ContT (withZeroCStruct @ImageDrmFormatModifierPropertiesEXT)
-  _ <- lift $ vkGetImageDrmFormatModifierPropertiesEXT' (deviceHandle (device)) (image) (pPProperties)
+  r <- lift $ vkGetImageDrmFormatModifierPropertiesEXT' (deviceHandle (device)) (image) (pPProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
   pProperties <- lift $ peekCStruct @ImageDrmFormatModifierPropertiesEXT pPProperties
   pure $ (pProperties)
 
diff --git a/src/Vulkan/Extensions/VK_EXT_tooling_info.hs b/src/Vulkan/Extensions/VK_EXT_tooling_info.hs
--- a/src/Vulkan/Extensions/VK_EXT_tooling_info.hs
+++ b/src/Vulkan/Extensions/VK_EXT_tooling_info.hs
@@ -24,6 +24,7 @@
 import Foreign.Marshal.Alloc (allocaBytesAligned)
 import Foreign.Marshal.Alloc (callocBytes)
 import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
 import GHC.IO (throwIO)
 import GHC.Ptr (nullFunPtr)
 import Foreign.Ptr (nullPtr)
@@ -80,9 +81,11 @@
 import Vulkan.Core10.Enums.StructureType (StructureType)
 import Vulkan.CStruct (ToCStruct)
 import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
 import Vulkan.Zero (Zero)
 import Vulkan.Zero (Zero(..))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
 foreign import ccall
 #if !defined(SAFE_FOREIGN_CALLS)
   unsafe
@@ -127,6 +130,10 @@
 --
 --     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
 --
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 -- = See Also
 --
 -- 'Vulkan.Core10.Handles.PhysicalDevice',
@@ -144,14 +151,16 @@
   let vkGetPhysicalDeviceToolPropertiesEXT' = mkVkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXTPtr
   let physicalDevice' = physicalDeviceHandle (physicalDevice)
   pPToolCount <- ContT $ bracket (callocBytes @Word32 4) free
-  _ <- lift $ vkGetPhysicalDeviceToolPropertiesEXT' physicalDevice' (pPToolCount) (nullPtr)
+  r <- lift $ vkGetPhysicalDeviceToolPropertiesEXT' physicalDevice' (pPToolCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
   pToolCount <- lift $ peek @Word32 pPToolCount
   pPToolProperties <- ContT $ bracket (callocBytes @PhysicalDeviceToolPropertiesEXT ((fromIntegral (pToolCount)) * 1048)) free
   _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPToolProperties `advancePtrBytes` (i * 1048) :: Ptr PhysicalDeviceToolPropertiesEXT) . ($ ())) [0..(fromIntegral (pToolCount)) - 1]
-  r <- lift $ vkGetPhysicalDeviceToolPropertiesEXT' physicalDevice' (pPToolCount) ((pPToolProperties))
+  r' <- lift $ vkGetPhysicalDeviceToolPropertiesEXT' physicalDevice' (pPToolCount) ((pPToolProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
   pToolCount' <- lift $ peek @Word32 pPToolCount
   pToolProperties' <- lift $ generateM (fromIntegral (pToolCount')) (\i -> peekCStruct @PhysicalDeviceToolPropertiesEXT (((pPToolProperties) `advancePtrBytes` (1048 * (i)) :: Ptr PhysicalDeviceToolPropertiesEXT)))
-  pure $ (r, pToolProperties')
+  pure $ ((r'), pToolProperties')
 
 
 -- | VkPhysicalDeviceToolPropertiesEXT - Structure providing information
diff --git a/src/Vulkan/Extensions/VK_EXT_validation_features.hs b/src/Vulkan/Extensions/VK_EXT_validation_features.hs
--- a/src/Vulkan/Extensions/VK_EXT_validation_features.hs
+++ b/src/Vulkan/Extensions/VK_EXT_validation_features.hs
@@ -4,6 +4,7 @@
                                                                                  , VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT
                                                                                  , VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT
                                                                                  , VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT
+                                                                                 , VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT
                                                                                  , ..
                                                                                  )
                                                      , ValidationFeatureDisableEXT( VALIDATION_FEATURE_DISABLE_ALL_EXT
@@ -187,10 +188,17 @@
 -- resulting output to the debug callback. This feature is disabled by
 -- default.
 pattern VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = ValidationFeatureEnableEXT 3
+-- | 'VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT' specifies
+-- that Vulkan synchronization validation is enabled. This feature reports
+-- resource access conflicts due to missing or incorrect synchronization
+-- operations between actions (Draw, Copy, Dispatch, Blit) reading or
+-- writing the same regions of memory. This feature is disabled by default.
+pattern VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT = ValidationFeatureEnableEXT 4
 {-# complete VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT,
              VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT,
              VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT,
-             VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT :: ValidationFeatureEnableEXT #-}
+             VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT,
+             VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT :: ValidationFeatureEnableEXT #-}
 
 instance Show ValidationFeatureEnableEXT where
   showsPrec p = \case
@@ -198,13 +206,15 @@
     VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT -> showString "VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT"
     VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT -> showString "VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT"
     VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT -> showString "VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT"
+    VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT -> showString "VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT"
     ValidationFeatureEnableEXT x -> showParen (p >= 11) (showString "ValidationFeatureEnableEXT " . showsPrec 11 x)
 
 instance Read ValidationFeatureEnableEXT where
   readPrec = parens (choose [("VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT", pure VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT)
                             , ("VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT", pure VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT)
                             , ("VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT", pure VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT)
-                            , ("VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT", pure VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT)]
+                            , ("VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT", pure VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT)
+                            , ("VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT", pure VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT)]
                      +++
                      prec 10 (do
                        expectP (Ident "ValidationFeatureEnableEXT")
@@ -278,11 +288,11 @@
                        pure (ValidationFeatureDisableEXT v)))
 
 
-type EXT_VALIDATION_FEATURES_SPEC_VERSION = 3
+type EXT_VALIDATION_FEATURES_SPEC_VERSION = 4
 
 -- No documentation found for TopLevel "VK_EXT_VALIDATION_FEATURES_SPEC_VERSION"
 pattern EXT_VALIDATION_FEATURES_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_VALIDATION_FEATURES_SPEC_VERSION = 3
+pattern EXT_VALIDATION_FEATURES_SPEC_VERSION = 4
 
 
 type EXT_VALIDATION_FEATURES_EXTENSION_NAME = "VK_EXT_validation_features"
diff --git a/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs b/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
--- a/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
+++ b/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
@@ -103,6 +103,8 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 --     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
 --
 --     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
@@ -189,6 +191,8 @@
 --     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
 --
 --     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
 --
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
@@ -143,6 +143,8 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 --     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
 --
 -- = See Also
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs b/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
--- a/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
@@ -148,6 +148,8 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 --     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
 --
 -- = See Also
diff --git a/src/Vulkan/Extensions/VK_KHR_performance_query.hs b/src/Vulkan/Extensions/VK_KHR_performance_query.hs
--- a/src/Vulkan/Extensions/VK_KHR_performance_query.hs
+++ b/src/Vulkan/Extensions/VK_KHR_performance_query.hs
@@ -315,6 +315,8 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 --     -   'Vulkan.Core10.Enums.Result.TIMEOUT'
 --
 -- = See Also
diff --git a/src/Vulkan/Extensions/VK_MVK_ios_surface.hs b/src/Vulkan/Extensions/VK_MVK_ios_surface.hs
--- a/src/Vulkan/Extensions/VK_MVK_ios_surface.hs
+++ b/src/Vulkan/Extensions/VK_MVK_ios_surface.hs
@@ -79,6 +79,30 @@
 
 -- | vkCreateIOSSurfaceMVK - Create a VkSurfaceKHR object for an iOS UIView
 --
+-- = Parameters
+--
+-- Note
+--
+-- The 'createIOSSurfaceMVK' function is considered deprecated and has been
+-- superseded by
+-- 'Vulkan.Extensions.VK_EXT_metal_surface.createMetalSurfaceEXT' from the
+-- @VK_EXT_metal_surface@ extension.
+--
+-- = Description
+--
+-- -   @instance@ is the instance with which to associate the surface.
+--
+-- -   @pCreateInfo@ is a pointer to a 'IOSSurfaceCreateInfoMVK' structure
+--     containing parameters affecting the creation of the surface object.
+--
+-- -   @pAllocator@ is the allocator used for host memory allocated for the
+--     surface object when there is no more specific allocator available
+--     (see
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
@@ -114,14 +138,11 @@
 -- 'Vulkan.Extensions.Handles.SurfaceKHR'
 createIOSSurfaceMVK :: forall io
                      . (MonadIO io)
-                    => -- | @instance@ is the instance with which to associate the surface.
+                    => -- No documentation found for Nested "vkCreateIOSSurfaceMVK" "instance"
                        Instance
-                    -> -- | @pCreateInfo@ is a pointer to a 'IOSSurfaceCreateInfoMVK' structure
-                       -- containing parameters affecting the creation of the surface object.
+                    -> -- No documentation found for Nested "vkCreateIOSSurfaceMVK" "pCreateInfo"
                        IOSSurfaceCreateInfoMVK
-                    -> -- | @pAllocator@ is the allocator used for host memory allocated for the
-                       -- surface object when there is no more specific allocator available (see
-                       -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+                    -> -- No documentation found for Nested "vkCreateIOSSurfaceMVK" "pAllocator"
                        ("allocator" ::: Maybe AllocationCallbacks)
                     -> io (SurfaceKHR)
 createIOSSurfaceMVK instance' createInfo allocator = liftIO . evalContT $ do
@@ -143,23 +164,37 @@
 -- | VkIOSSurfaceCreateInfoMVK - Structure specifying parameters of a newly
 -- created iOS surface object
 --
+-- == Valid Usage
+--
+-- -   If @pView@ is a
+--     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer' object, it
+--     /must/ be a valid
+--     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer'.
+--
+-- -   If @pView@ is a @UIView@ object, it /must/ be a valid @UIView@,
+--     /must/ be backed by a @CALayer@ object of type
+--     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer', and
+--     'createIOSSurfaceMVK' /must/ be called on the main thread.
+--
 -- == Valid Usage (Implicit)
 --
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
 -- = See Also
 --
 -- 'IOSSurfaceCreateFlagsMVK',
 -- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createIOSSurfaceMVK'
 data IOSSurfaceCreateInfoMVK = IOSSurfaceCreateInfoMVK
   { -- | @flags@ is reserved for future use.
-    --
-    -- @flags@ /must/ be @0@
     flags :: IOSSurfaceCreateFlagsMVK
-  , -- | @pView@ is a reference to a @UIView@ object which will display this
-    -- surface. This @UIView@ /must/ be backed by a @CALayer@ instance of type
-    -- 'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer'.
-    --
-    -- @pView@ /must/ be a valid @UIView@ and /must/ be backed by a @CALayer@
-    -- instance of type 'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer'
+  , -- | @pView@ is a reference to either a
+    -- 'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer' object or a
+    -- @UIView@ object.
     view :: Ptr ()
   }
   deriving (Typeable)
@@ -231,11 +266,11 @@
                        pure (IOSSurfaceCreateFlagsMVK v)))
 
 
-type MVK_IOS_SURFACE_SPEC_VERSION = 2
+type MVK_IOS_SURFACE_SPEC_VERSION = 3
 
 -- No documentation found for TopLevel "VK_MVK_IOS_SURFACE_SPEC_VERSION"
 pattern MVK_IOS_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern MVK_IOS_SURFACE_SPEC_VERSION = 2
+pattern MVK_IOS_SURFACE_SPEC_VERSION = 3
 
 
 type MVK_IOS_SURFACE_EXTENSION_NAME = "VK_MVK_ios_surface"
diff --git a/src/Vulkan/Extensions/VK_MVK_macos_surface.hs b/src/Vulkan/Extensions/VK_MVK_macos_surface.hs
--- a/src/Vulkan/Extensions/VK_MVK_macos_surface.hs
+++ b/src/Vulkan/Extensions/VK_MVK_macos_surface.hs
@@ -80,6 +80,31 @@
 -- | vkCreateMacOSSurfaceMVK - Create a VkSurfaceKHR object for a macOS
 -- NSView
 --
+-- = Parameters
+--
+-- Note
+--
+-- The 'createMacOSSurfaceMVK' function is considered deprecated and has
+-- been superseded by
+-- 'Vulkan.Extensions.VK_EXT_metal_surface.createMetalSurfaceEXT' from the
+-- @VK_EXT_metal_surface@ extension.
+--
+-- = Description
+--
+-- -   @instance@ is the instance with which to associate the surface.
+--
+-- -   @pCreateInfo@ is a pointer to a 'MacOSSurfaceCreateInfoMVK'
+--     structure containing parameters affecting the creation of the
+--     surface object.
+--
+-- -   @pAllocator@ is the allocator used for host memory allocated for the
+--     surface object when there is no more specific allocator available
+--     (see
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
@@ -115,14 +140,11 @@
 -- 'Vulkan.Extensions.Handles.SurfaceKHR'
 createMacOSSurfaceMVK :: forall io
                        . (MonadIO io)
-                      => -- | @instance@ is the instance with which to associate the surface.
+                      => -- No documentation found for Nested "vkCreateMacOSSurfaceMVK" "instance"
                          Instance
-                      -> -- | @pCreateInfo@ is a pointer to a 'MacOSSurfaceCreateInfoMVK' structure
-                         -- containing parameters affecting the creation of the surface object.
+                      -> -- No documentation found for Nested "vkCreateMacOSSurfaceMVK" "pCreateInfo"
                          MacOSSurfaceCreateInfoMVK
-                      -> -- | @pAllocator@ is the allocator used for host memory allocated for the
-                         -- surface object when there is no more specific allocator available (see
-                         -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+                      -> -- No documentation found for Nested "vkCreateMacOSSurfaceMVK" "pAllocator"
                          ("allocator" ::: Maybe AllocationCallbacks)
                       -> io (SurfaceKHR)
 createMacOSSurfaceMVK instance' createInfo allocator = liftIO . evalContT $ do
@@ -144,8 +166,27 @@
 -- | VkMacOSSurfaceCreateInfoMVK - Structure specifying parameters of a newly
 -- created macOS surface object
 --
+-- == Valid Usage
+--
+-- -   If @pView@ is a
+--     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer' object, it
+--     /must/ be a valid
+--     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer'.
+--
+-- -   If @pView@ is an @NSView@ object, it /must/ be a valid @NSView@,
+--     /must/ be backed by a @CALayer@ object of type
+--     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer', and
+--     'createMacOSSurfaceMVK' /must/ be called on the main thread.
+--
 -- == Valid Usage (Implicit)
 --
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
 -- = See Also
 --
 -- 'MacOSSurfaceCreateFlagsMVK',
@@ -153,15 +194,10 @@
 -- 'createMacOSSurfaceMVK'
 data MacOSSurfaceCreateInfoMVK = MacOSSurfaceCreateInfoMVK
   { -- | @flags@ is reserved for future use.
-    --
-    -- @flags@ /must/ be @0@
     flags :: MacOSSurfaceCreateFlagsMVK
-  , -- | @pView@ is a reference to a @NSView@ object which will display this
-    -- surface. This @NSView@ /must/ be backed by a @CALayer@ instance of type
-    -- 'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer'.
-    --
-    -- @pView@ /must/ be a valid @NSView@ and /must/ be backed by a @CALayer@
-    -- instance of type 'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer'
+  , -- | @pView@ is a reference to either a
+    -- 'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer' object or an
+    -- @NSView@ object.
     view :: Ptr ()
   }
   deriving (Typeable)
@@ -233,11 +269,11 @@
                        pure (MacOSSurfaceCreateFlagsMVK v)))
 
 
-type MVK_MACOS_SURFACE_SPEC_VERSION = 2
+type MVK_MACOS_SURFACE_SPEC_VERSION = 3
 
 -- No documentation found for TopLevel "VK_MVK_MACOS_SURFACE_SPEC_VERSION"
 pattern MVK_MACOS_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern MVK_MACOS_SURFACE_SPEC_VERSION = 2
+pattern MVK_MACOS_SURFACE_SPEC_VERSION = 3
 
 
 type MVK_MACOS_SURFACE_EXTENSION_NAME = "VK_MVK_macos_surface"
diff --git a/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs b/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs
--- a/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs
+++ b/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs
@@ -111,6 +111,8 @@
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
 --
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
 --     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
 --
 -- = See Also
diff --git a/src/Vulkan/Version.hs b/src/Vulkan/Version.hs
--- a/src/Vulkan/Version.hs
+++ b/src/Vulkan/Version.hs
@@ -14,11 +14,11 @@
 import Data.Word (Word32)
 
 pattern HEADER_VERSION :: Word32
-pattern HEADER_VERSION = 149
+pattern HEADER_VERSION = 150
 
 
 pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 149
+pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 150
 
 
 pattern MAKE_VERSION :: Word32 -> Word32 -> Word32 -> Word32
diff --git a/vulkan.cabal b/vulkan.cabal
--- a/vulkan.cabal
+++ b/vulkan.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 14155dcf426cf6fd705b8752c72ecf0ad37d593e437a0999679d7310edeef968
+-- hash: a4fb7621925a28b93d11cd1be3a5a0f474437bbe2a5057ebb959332de6ed3be3
 
 name:           vulkan
-version:        3.6.3
+version:        3.6.4
 synopsis:       Bindings to the Vulkan graphics API.
 category:       Graphics
 homepage:       https://github.com/expipiplus1/vulkan#readme
