diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,7 +2,8 @@
 
 ## WIP
 
-## [3.6.8] - 2020-10-04
+## [3.6.9] - 2020-10-07
+  - Bump API version to v1.2.156
 
 ## [3.6.8] - 2020-09-28
   - Bump API version to v1.2.155
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
@@ -152,6 +152,7 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateCreateInfo)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateEntry)
 import {-# SOURCE #-} Vulkan.Core10.Device (DeviceCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (DeviceDeviceMemoryReportCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (DeviceDiagnosticsConfigCreateInfoNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (DeviceEventInfoEXT)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupBindSparseInfo)
@@ -164,6 +165,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupSwapchainCreateInfoKHR)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (DeviceMemoryOpaqueCaptureAddressInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_memory_overallocation_behavior (DeviceMemoryOverallocationCreateInfoAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (DeviceMemoryReportCallbackDataEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (DevicePrivateDataCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Core10.Device (DeviceQueueCreateInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_global_priority (DeviceQueueGlobalPriorityCreateInfoEXT)
@@ -338,6 +340,7 @@
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDeviceDeviceMemoryReportFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
@@ -760,6 +763,8 @@
   Extends DeviceCreateInfo PhysicalDeviceShaderDrawParametersFeatures = ()
   Extends DeviceCreateInfo PhysicalDeviceShaderFloat16Int8Features = ()
   Extends DeviceCreateInfo PhysicalDeviceHostQueryResetFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceDeviceMemoryReportFeaturesEXT = ()
+  Extends DeviceCreateInfo DeviceDeviceMemoryReportCreateInfoEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceDescriptorIndexingFeatures = ()
   Extends DeviceCreateInfo PhysicalDeviceTimelineSemaphoreFeatures = ()
   Extends DeviceCreateInfo PhysicalDevice8BitStorageFeatures = ()
@@ -881,6 +886,7 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderDrawParametersFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderFloat16Int8Features = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceHostQueryResetFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceDeviceMemoryReportFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceDescriptorIndexingFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceTimelineSemaphoreFeatures = ()
   Extends PhysicalDeviceFeatures2 PhysicalDevice8BitStorageFeatures = ()
@@ -1261,6 +1267,8 @@
   STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES -> go @PhysicalDeviceHostQueryResetFeatures
   STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT -> go @DeviceQueueGlobalPriorityCreateInfoEXT
   STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT -> go @DebugUtilsMessengerCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT -> go @PhysicalDeviceDeviceMemoryReportFeaturesEXT
+  STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT -> go @DeviceDeviceMemoryReportCreateInfoEXT
   STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT -> go @ImportMemoryHostPointerInfoEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT -> go @PhysicalDeviceExternalMemoryHostPropertiesEXT
   STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT -> go @PhysicalDeviceConservativeRasterizationPropertiesEXT
@@ -1561,6 +1569,8 @@
 {-# complete (::&) :: PhysicalDeviceHostQueryResetFeatures #-}
 {-# complete (::&) :: DeviceQueueGlobalPriorityCreateInfoEXT #-}
 {-# complete (::&) :: DebugUtilsMessengerCreateInfoEXT #-}
+{-# complete (::&) :: PhysicalDeviceDeviceMemoryReportFeaturesEXT #-}
+{-# complete (::&) :: DeviceDeviceMemoryReportCreateInfoEXT #-}
 {-# complete (::&) :: ImportMemoryHostPointerInfoEXT #-}
 {-# complete (::&) :: PhysicalDeviceExternalMemoryHostPropertiesEXT #-}
 {-# complete (::&) :: PhysicalDeviceConservativeRasterizationPropertiesEXT #-}
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
@@ -62,6 +62,7 @@
 import Vulkan.Core10.Handles (Device(Device))
 import Vulkan.Dynamic (DeviceCmds(pVkDestroyDevice))
 import Vulkan.Core10.Enums.DeviceCreateFlags (DeviceCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (DeviceDeviceMemoryReportCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (DeviceDiagnosticsConfigCreateInfoNV)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (DeviceGroupDeviceCreateInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_memory_overallocation_behavior (DeviceMemoryOverallocationCreateInfoAMD)
@@ -97,6 +98,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PhysicalDeviceDepthClipEnableFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDeviceDeviceMemoryReportFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT)
@@ -606,6 +608,7 @@
 -- -   Each @pNext@ member of any structure (including this one) in the
 --     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
 --     instance of
+--     'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceDeviceMemoryReportCreateInfoEXT',
 --     'Vulkan.Extensions.VK_NV_device_diagnostics_config.DeviceDiagnosticsConfigCreateInfoNV',
 --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',
 --     'Vulkan.Extensions.VK_AMD_memory_overallocation_behavior.DeviceMemoryOverallocationCreateInfoAMD',
@@ -628,6 +631,7 @@
 --     'Vulkan.Extensions.VK_EXT_depth_clip_enable.PhysicalDeviceDepthClipEnableFeaturesEXT',
 --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
 --     'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
+--     'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT',
 --     'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
 --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',
@@ -685,6 +689,8 @@
 --
 -- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
 --     unique, with the exception of structures of type
+--     'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceDeviceMemoryReportCreateInfoEXT'
+--     or
 --     'Vulkan.Extensions.VK_EXT_private_data.DevicePrivateDataCreateInfoEXT'
 --
 -- -   @flags@ /must/ be @0@
@@ -812,6 +818,8 @@
     | Just Refl <- eqT @e @PhysicalDevice8BitStorageFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceTimelineSemaphoreFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDescriptorIndexingFeatures = Just f
+    | Just Refl <- eqT @e @DeviceDeviceMemoryReportCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDeviceMemoryReportFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceHostQueryResetFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f
diff --git a/src/Vulkan/Core10/Enums/ObjectType.hs b/src/Vulkan/Core10/Enums/ObjectType.hs
--- a/src/Vulkan/Core10/Enums/ObjectType.hs
+++ b/src/Vulkan/Core10/Enums/ObjectType.hs
@@ -148,6 +148,7 @@
 --
 -- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT',
 -- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectTagInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceMemoryReportCallbackDataEXT',
 -- 'Vulkan.Extensions.VK_EXT_private_data.getPrivateDataEXT',
 -- 'Vulkan.Extensions.VK_EXT_private_data.setPrivateDataEXT'
 newtype ObjectType = ObjectType Int32
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
@@ -76,6 +76,9 @@
                                                         , STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT
+                                                        , STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT
                                                         , STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM
                                                         , STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT
@@ -581,6 +584,7 @@
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountLayoutSupport',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
 -- 'Vulkan.Core10.Device.DeviceCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceDeviceMemoryReportCreateInfoEXT',
 -- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.DeviceDiagnosticsConfigCreateInfoNV',
 -- 'Vulkan.Extensions.VK_EXT_display_control.DeviceEventInfoEXT',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupBindSparseInfo',
@@ -593,6 +597,7 @@
 -- 'Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupSwapchainCreateInfoKHR',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.DeviceMemoryOpaqueCaptureAddressInfo',
 -- 'Vulkan.Extensions.VK_AMD_memory_overallocation_behavior.DeviceMemoryOverallocationCreateInfoAMD',
+-- 'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceMemoryReportCallbackDataEXT',
 -- 'Vulkan.Extensions.VK_EXT_private_data.DevicePrivateDataCreateInfoEXT',
 -- 'Vulkan.Core10.Device.DeviceQueueCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_global_priority.DeviceQueueGlobalPriorityCreateInfoEXT',
@@ -731,6 +736,7 @@
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsPropertiesNV',
+-- 'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT',
 -- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_discard_rectangles.PhysicalDeviceDiscardRectanglePropertiesEXT',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
@@ -1107,6 +1113,12 @@
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = StructureType 1000286001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = StructureType 1000286000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT"
+pattern STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT = StructureType 1000284002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT = StructureType 1000284001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT = StructureType 1000284000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM"
 pattern STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = StructureType 1000282001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"
@@ -1944,6 +1956,9 @@
              STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT,
+             STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT,
+             STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT,
              STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM,
              STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT,
@@ -2404,6 +2419,9 @@
     STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"
     STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT"
     STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"
+    STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT -> showString "STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT"
+    STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT"
     STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM -> showString "STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM"
     STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"
     STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT"
@@ -2864,6 +2882,9 @@
                             , ("STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT", pure STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT)
                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT)
                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT", pure STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT)
+                            , ("STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT)
                             , ("STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM", pure STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM)
                             , ("STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM", pure STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM)
                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT)
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
@@ -413,6 +413,7 @@
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
 -- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT',
 -- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
 -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',
@@ -617,6 +618,7 @@
 -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
 -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo',
+-- 'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceMemoryReportCallbackDataEXT',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
diff --git a/src/Vulkan/Core10/FundamentalTypes.hs-boot b/src/Vulkan/Core10/FundamentalTypes.hs-boot
--- a/src/Vulkan/Core10/FundamentalTypes.hs-boot
+++ b/src/Vulkan/Core10/FundamentalTypes.hs-boot
@@ -91,6 +91,7 @@
 -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
 -- 'Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
 -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo',
+-- 'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceMemoryReportCallbackDataEXT',
 -- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
 -- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
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
@@ -282,11 +282,13 @@
 -- Before freeing a memory object, an application /must/ ensure the memory
 -- object is no longer in use by the device—​for example by command buffers
 -- in the /pending state/. Memory /can/ be freed whilst still bound to
--- resources, but those resources /must/ not be used afterwards. If there
--- are still any bound images or buffers, the memory /may/ not be
--- immediately released by the implementation, but /must/ be released by
--- the time all bound images and buffers have been destroyed. Once memory
--- is released, it is returned to the heap from which it was allocated.
+-- resources, but those resources /must/ not be used afterwards. Freeing a
+-- memory object releases the reference it held, if any, to its payload. If
+-- there are still any bound images or buffers, the memory object’s payload
+-- /may/ not be immediately released by the implementation, but /must/ be
+-- released by the time all bound images and buffers have been destroyed.
+-- Once all references to a payload are released, it is returned to the
+-- heap from which it was allocated.
 --
 -- How memory objects are bound to Images and Buffers is described in
 -- detail in the
@@ -760,8 +762,13 @@
 --
 -- = Description
 --
--- A 'MemoryAllocateInfo' structure defines a memory import operation if
--- its @pNext@ chain includes one of the following structures:
+-- The internal data of an allocated device memory object /must/ include a
+-- reference to implementation-specific resources, referred to as the
+-- memory object’s /payload/. Applications /can/ also import and export
+-- that internal data to and from device memory objects to share data
+-- between Vulkan instances and other compatible APIs. A
+-- 'MemoryAllocateInfo' structure defines a memory import operation if its
+-- @pNext@ chain includes one of the following structures:
 --
 -- -   'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR'
 --     with non-zero @handleType@ value
@@ -784,13 +791,16 @@
 -- @allocationSize@ is ignored. The implementation /must/ query the size of
 -- these allocations from the OS.
 --
--- Importing memory /must/ not modify the content of the memory.
--- Implementations /must/ ensure that importing memory does not enable the
--- importing Vulkan instance to access any memory or resources in other
--- Vulkan instances other than that corresponding to the memory object
--- imported. Implementations /must/ also ensure accessing imported memory
--- which has not been initialized does not allow the importing Vulkan
--- instance to obtain data from the exporting Vulkan instance or
+-- Whether device memory objects constructed via a memory import operation
+-- hold a reference to their payload depends on the properties of the
+-- handle type used to perform the import, as defined below for each valid
+-- handle type. Importing memory /must/ not modify the content of the
+-- memory. Implementations /must/ ensure that importing memory does not
+-- enable the importing Vulkan instance to access any memory or resources
+-- in other Vulkan instances other than that corresponding to the memory
+-- object imported. Implementations /must/ also ensure accessing imported
+-- memory which has not been initialized does not allow the importing
+-- Vulkan instance to obtain data from the exporting Vulkan instance or
 -- vice-versa.
 --
 -- Note
@@ -802,15 +812,22 @@
 -- /should/ avoid creating many small external memory objects whenever
 -- possible.
 --
+-- Importing memory /must/ not increase overall heap usage within a system.
+-- However, they /must/ affect the following per-process values: *
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties'::@maxMemoryAllocationCount@
+-- *
+-- 'Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT'::@heapUsage@
+--
 -- When performing a memory import operation, it is the responsibility of
--- the application to ensure the external handles meet all valid usage
--- requirements. However, implementations /must/ perform sufficient
--- validation of external handles to ensure that the operation results in a
--- valid memory object which will not cause program termination, device
--- loss, queue stalls, or corruption of other resources when used as
--- allowed according to its allocation parameters. If the external handle
--- provided does not meet these requirements, the implementation /must/
--- fail the memory import operation with the error code
+-- the application to ensure the external handles and their associated
+-- payloads meet all valid usage requirements. However, implementations
+-- /must/ perform sufficient validation of external handles and payloads to
+-- ensure that the operation results in a valid memory object which will
+-- not cause program termination, device loss, queue stalls, or corruption
+-- of other resources when used as allowed according to its allocation
+-- parameters. If the external handle provided does not meet these
+-- requirements, the implementation /must/ fail the memory import operation
+-- with the error code
 -- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'.
 --
 -- == Valid Usage
@@ -851,21 +868,20 @@
 --     type is
 --     'Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR',
 --     then the values of @allocationSize@ and @memoryTypeIndex@ /must/
---     match those specified when the memory object being imported was
---     created
+--     match those specified when the payload being imported was created.
 --
 -- -   If the parameters define an import operation and the external handle
 --     specified was created by the Vulkan API, the device mask specified
 --     by
 --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'
---     /must/ match that specified when the memory object being imported
---     was allocated
+--     /must/ match that specified when the payload being imported was
+--     allocated.
 --
 -- -   If the parameters define an import operation and the external handle
 --     specified was created by the Vulkan API, the list of physical
 --     devices that comprise the logical device passed to 'allocateMemory'
 --     /must/ match the list of physical devices that comprise the logical
---     device on which the memory was originally allocated
+--     device on which the payload was originally allocated.
 --
 -- -   If the parameters define an import operation and the external handle
 --     is an NT handle or a global share handle created outside of the
@@ -879,14 +895,13 @@
 --     or
 --     'Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR',
 --     then the values of @allocationSize@ and @memoryTypeIndex@ /must/
---     match those specified when the memory object being imported was
---     created
+--     match those specified when the payload being imported was created.
 --
 -- -   If the parameters define an import operation and the external handle
 --     type is
 --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
 --     @allocationSize@ /must/ match the size specified when creating the
---     Direct3D 12 heap from which the external handle was extracted
+--     Direct3D 12 heap from which the payload was extracted.
 --
 -- -   If the parameters define an import operation and the external handle
 --     is a POSIX file descriptor created outside of the Vulkan API, the
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
@@ -109,6 +109,7 @@
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDeviceDeviceMemoryReportFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
@@ -701,6 +702,7 @@
     | Just Refl <- eqT @e @PhysicalDevice8BitStorageFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceTimelineSemaphoreFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceDescriptorIndexingFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDeviceMemoryReportFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceHostQueryResetFeatures = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f
     | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f
diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs
--- a/src/Vulkan/Extensions.hs
+++ b/src/Vulkan/Extensions.hs
@@ -37,6 +37,7 @@
                           , module Vulkan.Extensions.VK_EXT_depth_clip_enable
                           , module Vulkan.Extensions.VK_EXT_depth_range_unrestricted
                           , module Vulkan.Extensions.VK_EXT_descriptor_indexing
+                          , module Vulkan.Extensions.VK_EXT_device_memory_report
                           , module Vulkan.Extensions.VK_EXT_direct_mode_display
                           , module Vulkan.Extensions.VK_EXT_directfb_surface
                           , module Vulkan.Extensions.VK_EXT_discard_rectangles
@@ -253,6 +254,7 @@
 import Vulkan.Extensions.VK_EXT_depth_clip_enable
 import Vulkan.Extensions.VK_EXT_depth_range_unrestricted
 import Vulkan.Extensions.VK_EXT_descriptor_indexing
+import Vulkan.Extensions.VK_EXT_device_memory_report
 import Vulkan.Extensions.VK_EXT_direct_mode_display
 import Vulkan.Extensions.VK_EXT_directfb_surface
 import Vulkan.Extensions.VK_EXT_discard_rectangles
diff --git a/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs
@@ -0,0 +1,456 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_device_memory_report  ( PhysicalDeviceDeviceMemoryReportFeaturesEXT(..)
+                                                      , DeviceDeviceMemoryReportCreateInfoEXT(..)
+                                                      , DeviceMemoryReportCallbackDataEXT(..)
+                                                      , DeviceMemoryReportFlagsEXT(..)
+                                                      , DeviceMemoryReportEventTypeEXT( DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT
+                                                                                      , DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT
+                                                                                      , DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT
+                                                                                      , DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT
+                                                                                      , DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT
+                                                                                      , ..
+                                                                                      )
+                                                      , PFN_vkDeviceMemoryReportCallbackEXT
+                                                      , FN_vkDeviceMemoryReportCallbackEXT
+                                                      , EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION
+                                                      , pattern EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION
+                                                      , EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME
+                                                      , pattern EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME
+                                                      ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.FundamentalTypes (DeviceSize)
+import Vulkan.Core10.FundamentalTypes (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ObjectType (ObjectType)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT))
+-- | VkPhysicalDeviceDeviceMemoryReportFeaturesEXT - Structure describing
+-- whether device memory report callback can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceDeviceMemoryReportFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceDeviceMemoryReportFeaturesEXT' 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.
+-- 'PhysicalDeviceDeviceMemoryReportFeaturesEXT' /can/ also be used 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 PhysicalDeviceDeviceMemoryReportFeaturesEXT = PhysicalDeviceDeviceMemoryReportFeaturesEXT
+  { -- | @deviceMemoryReport@ indicates whether the implementation supports the
+    -- ability to register device memory report callbacks.
+    deviceMemoryReport :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceDeviceMemoryReportFeaturesEXT)
+#endif
+deriving instance Show PhysicalDeviceDeviceMemoryReportFeaturesEXT
+
+instance ToCStruct PhysicalDeviceDeviceMemoryReportFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDeviceMemoryReportFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (deviceMemoryReport))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceDeviceMemoryReportFeaturesEXT where
+  peekCStruct p = do
+    deviceMemoryReport <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceDeviceMemoryReportFeaturesEXT
+             (bool32ToBool deviceMemoryReport)
+
+instance Storable PhysicalDeviceDeviceMemoryReportFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDeviceMemoryReportFeaturesEXT where
+  zero = PhysicalDeviceDeviceMemoryReportFeaturesEXT
+           zero
+
+
+-- | VkDeviceDeviceMemoryReportCreateInfoEXT - Register device memory report
+-- callbacks for a Vulkan device
+--
+-- = Description
+--
+-- The callback /may/ be called from multiple threads simultaneously.
+--
+-- The callback /must/ be called only once by the implementation when a
+-- 'DeviceMemoryReportEventTypeEXT' event occurs.
+--
+-- Note
+--
+-- The callback could be called from a background thread other than the
+-- thread calling the Vulkan commands.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PFN_vkDeviceMemoryReportCallbackEXT', 'DeviceMemoryReportFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceDeviceMemoryReportCreateInfoEXT = DeviceDeviceMemoryReportCreateInfoEXT
+  { -- | @flags@ is 0 and reserved for future use.
+    --
+    -- @flags@ /must/ be @0@
+    flags :: DeviceMemoryReportFlagsEXT
+  , -- | @pfnUserCallback@ is the application callback function to call.
+    --
+    -- @pfnUserCallback@ /must/ be a valid
+    -- 'PFN_vkDeviceMemoryReportCallbackEXT' value
+    pfnUserCallback :: PFN_vkDeviceMemoryReportCallbackEXT
+  , -- | @pUserData@ is user data to be passed to the callback.
+    --
+    -- @pUserData@ /must/ be a pointer value
+    userData :: Ptr ()
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (DeviceDeviceMemoryReportCreateInfoEXT)
+#endif
+deriving instance Show DeviceDeviceMemoryReportCreateInfoEXT
+
+instance ToCStruct DeviceDeviceMemoryReportCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceDeviceMemoryReportCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemoryReportFlagsEXT)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr PFN_vkDeviceMemoryReportCallbackEXT)) (pfnUserCallback)
+    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (userData)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemoryReportFlagsEXT)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr PFN_vkDeviceMemoryReportCallbackEXT)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct DeviceDeviceMemoryReportCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @DeviceMemoryReportFlagsEXT ((p `plusPtr` 16 :: Ptr DeviceMemoryReportFlagsEXT))
+    pfnUserCallback <- peek @PFN_vkDeviceMemoryReportCallbackEXT ((p `plusPtr` 24 :: Ptr PFN_vkDeviceMemoryReportCallbackEXT))
+    pUserData <- peek @(Ptr ()) ((p `plusPtr` 32 :: Ptr (Ptr ())))
+    pure $ DeviceDeviceMemoryReportCreateInfoEXT
+             flags pfnUserCallback pUserData
+
+instance Storable DeviceDeviceMemoryReportCreateInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceDeviceMemoryReportCreateInfoEXT where
+  zero = DeviceDeviceMemoryReportCreateInfoEXT
+           zero
+           zero
+           zero
+
+
+-- | VkDeviceMemoryReportCallbackDataEXT - Structure specifying parameters
+-- returned to the callback
+--
+-- = Description
+--
+-- @memoryObjectId@ is used to avoid double-counting on the same memory
+-- object.
+--
+-- If an internally-allocated device memory object or a
+-- 'Vulkan.Core10.Handles.DeviceMemory' /cannot/ be exported,
+-- @memoryObjectId@ /must/ be unique in the 'Vulkan.Core10.Handles.Device'.
+--
+-- If an internally-allocated device memory object or a
+-- 'Vulkan.Core10.Handles.DeviceMemory' supports being exported,
+-- @memoryObjectId@ /must/ be unique system wide.
+--
+-- If an internal device memory object or a
+-- 'Vulkan.Core10.Handles.DeviceMemory' is backed by an imported external
+-- memory object, @memoryObjectId@ /must/ be unique system wide.
+--
+-- Note
+--
+-- This structure should only be considered valid during the lifetime of
+-- the triggered callback.
+--
+-- For 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT' and
+-- 'DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT' events, @objectHandle@
+-- usually will not yet exist when the application or tool receives the
+-- callback. @objectHandle@ will only exist when the create or allocate
+-- call that triggered the event returns, and if the allocation or import
+-- ends up failing @objectHandle@ won’t ever exist.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DeviceMemoryReportEventTypeEXT', 'DeviceMemoryReportFlagsEXT',
+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
+-- 'Vulkan.Core10.Enums.ObjectType.ObjectType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceMemoryReportCallbackDataEXT = DeviceMemoryReportCallbackDataEXT
+  { -- | @flags@ is 0 and reserved for future use.
+    flags :: DeviceMemoryReportFlagsEXT
+  , -- | @type@ is a 'DeviceMemoryReportEventTypeEXT' type specifying the type of
+    -- event reported in this 'DeviceMemoryReportCallbackDataEXT' structure.
+    type' :: DeviceMemoryReportEventTypeEXT
+  , -- | @memoryObjectId@ is the unique id for the underlying memory object as
+    -- described below.
+    memoryObjectId :: Word64
+  , -- | @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.
+    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.
+    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
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-types VkObjectType and Vulkan Handle Relationship>
+    -- table.
+    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
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'
+    -- structure. Otherwise, @heapIndex@ is undefined.
+    heapIndex :: Word32
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (DeviceMemoryReportCallbackDataEXT)
+#endif
+deriving instance Show DeviceMemoryReportCallbackDataEXT
+
+instance ToCStruct DeviceMemoryReportCallbackDataEXT where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceMemoryReportCallbackDataEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemoryReportFlagsEXT)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr DeviceMemoryReportEventTypeEXT)) (type')
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (memoryObjectId)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (size)
+    poke ((p `plusPtr` 40 :: Ptr ObjectType)) (objectType)
+    poke ((p `plusPtr` 48 :: Ptr Word64)) (objectHandle)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (heapIndex)
+    f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemoryReportFlagsEXT)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr DeviceMemoryReportEventTypeEXT)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct DeviceMemoryReportCallbackDataEXT where
+  peekCStruct p = do
+    flags <- peek @DeviceMemoryReportFlagsEXT ((p `plusPtr` 16 :: Ptr DeviceMemoryReportFlagsEXT))
+    type' <- peek @DeviceMemoryReportEventTypeEXT ((p `plusPtr` 20 :: Ptr DeviceMemoryReportEventTypeEXT))
+    memoryObjectId <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    size <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    objectType <- peek @ObjectType ((p `plusPtr` 40 :: Ptr ObjectType))
+    objectHandle <- peek @Word64 ((p `plusPtr` 48 :: Ptr Word64))
+    heapIndex <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    pure $ DeviceMemoryReportCallbackDataEXT
+             flags type' memoryObjectId size objectType objectHandle heapIndex
+
+instance Storable DeviceMemoryReportCallbackDataEXT where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceMemoryReportCallbackDataEXT where
+  zero = DeviceMemoryReportCallbackDataEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkDeviceMemoryReportFlagsEXT"
+newtype DeviceMemoryReportFlagsEXT = DeviceMemoryReportFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show DeviceMemoryReportFlagsEXT where
+  showsPrec p = \case
+    DeviceMemoryReportFlagsEXT x -> showParen (p >= 11) (showString "DeviceMemoryReportFlagsEXT 0x" . showHex x)
+
+instance Read DeviceMemoryReportFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DeviceMemoryReportFlagsEXT")
+                       v <- step readPrec
+                       pure (DeviceMemoryReportFlagsEXT v)))
+
+
+-- | VkDeviceMemoryReportEventTypeEXT - Events that can occur on a device
+-- memory object
+--
+-- = See Also
+--
+-- 'DeviceMemoryReportCallbackDataEXT'
+newtype DeviceMemoryReportEventTypeEXT = DeviceMemoryReportEventTypeEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT' specifies this event
+-- corresponds to the allocation of an internal device memory object or a
+-- 'Vulkan.Core10.Handles.DeviceMemory'.
+pattern DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT = DeviceMemoryReportEventTypeEXT 0
+-- | 'DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT' specifies this event
+-- corresponds to the deallocation of an internally-allocated device memory
+-- object or a 'Vulkan.Core10.Handles.DeviceMemory'.
+pattern DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT = DeviceMemoryReportEventTypeEXT 1
+-- | 'DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT' specifies this event
+-- corresponds to the import of an external memory object.
+pattern DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT = DeviceMemoryReportEventTypeEXT 2
+-- | 'DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT' specifies this event is
+-- the release of an imported external memory object.
+pattern DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT = DeviceMemoryReportEventTypeEXT 3
+-- | 'DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT' specifies this
+-- event corresponds to the failed allocation of an internal device memory
+-- object or a 'Vulkan.Core10.Handles.DeviceMemory'.
+pattern DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT = DeviceMemoryReportEventTypeEXT 4
+{-# complete DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
+             DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT,
+             DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT,
+             DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT,
+             DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT :: DeviceMemoryReportEventTypeEXT #-}
+
+instance Show DeviceMemoryReportEventTypeEXT where
+  showsPrec p = \case
+    DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT -> showString "DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT"
+    DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT -> showString "DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT"
+    DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT -> showString "DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT"
+    DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT -> showString "DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT"
+    DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT -> showString "DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT"
+    DeviceMemoryReportEventTypeEXT x -> showParen (p >= 11) (showString "DeviceMemoryReportEventTypeEXT " . showsPrec 11 x)
+
+instance Read DeviceMemoryReportEventTypeEXT where
+  readPrec = parens (choose [("DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT", pure DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT)
+                            , ("DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT", pure DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT)
+                            , ("DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT", pure DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT)
+                            , ("DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT", pure DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT)
+                            , ("DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT", pure DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DeviceMemoryReportEventTypeEXT")
+                       v <- step readPrec
+                       pure (DeviceMemoryReportEventTypeEXT v)))
+
+
+type FN_vkDeviceMemoryReportCallbackEXT = ("pCallbackData" ::: Ptr DeviceMemoryReportCallbackDataEXT) -> ("pUserData" ::: Ptr ()) -> IO ()
+-- | PFN_vkDeviceMemoryReportCallbackEXT - Application-defined device memory
+-- report callback function
+--
+-- = Description
+--
+-- The callback /must/ not make calls to any Vulkan commands.
+--
+-- = See Also
+--
+-- 'DeviceDeviceMemoryReportCreateInfoEXT'
+type PFN_vkDeviceMemoryReportCallbackEXT = FunPtr FN_vkDeviceMemoryReportCallbackEXT
+
+
+type EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION = 1
+
+-- 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
+
+
+type EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME = "VK_EXT_device_memory_report"
+
+-- No documentation found for TopLevel "VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME"
+pattern EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern 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
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_device_memory_report.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_device_memory_report  ( DeviceDeviceMemoryReportCreateInfoEXT
+                                                      , DeviceMemoryReportCallbackDataEXT
+                                                      , PhysicalDeviceDeviceMemoryReportFeaturesEXT
+                                                      ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DeviceDeviceMemoryReportCreateInfoEXT
+
+instance ToCStruct DeviceDeviceMemoryReportCreateInfoEXT
+instance Show DeviceDeviceMemoryReportCreateInfoEXT
+
+instance FromCStruct DeviceDeviceMemoryReportCreateInfoEXT
+
+
+data DeviceMemoryReportCallbackDataEXT
+
+instance ToCStruct DeviceMemoryReportCallbackDataEXT
+instance Show DeviceMemoryReportCallbackDataEXT
+
+instance FromCStruct DeviceMemoryReportCallbackDataEXT
+
+
+data PhysicalDeviceDeviceMemoryReportFeaturesEXT
+
+instance ToCStruct PhysicalDeviceDeviceMemoryReportFeaturesEXT
+instance Show PhysicalDeviceDeviceMemoryReportFeaturesEXT
+
+instance FromCStruct PhysicalDeviceDeviceMemoryReportFeaturesEXT
+
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
@@ -140,13 +140,13 @@
 -- between the host and the Vulkan implementation. The application /can/
 -- continue to access the memory through the host pointer but it is the
 -- application’s responsibility to synchronize device and non-device access
--- to the underlying memory as defined in
+-- to the payload as defined in
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess Host Access to Device Memory Objects>.
 --
--- Applications /can/ import the same underlying memory into multiple
--- instances of Vulkan and multiple times into a given Vulkan instance.
--- However, implementations /may/ fail to import the same underlying memory
--- multiple times into a given physical device due to platform constraints.
+-- Applications /can/ import the same payload into multiple instances of
+-- Vulkan and multiple times into a given Vulkan instance. However,
+-- implementations /may/ fail to import the same payload multiple times
+-- into a given physical device due to platform constraints.
 --
 -- Importing memory from a particular host pointer /may/ not be possible
 -- due to additional platform-specific restrictions beyond the scope of
@@ -154,8 +154,10 @@
 -- memory import operation with the error code
 -- 'Vulkan.Extensions.VK_KHR_external_memory.ERROR_INVALID_EXTERNAL_HANDLE_KHR'.
 --
--- The application /must/ ensure that the imported memory range remains
--- valid and accessible for the lifetime of the imported memory object.
+-- Whether device memory objects imported from a host pointer hold a
+-- reference to their payload is undefined. As such, the application /must/
+-- ensure that the imported memory range remains valid and accessible for
+-- the lifetime of the imported memory object.
 --
 -- == Valid Usage
 --
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
@@ -75,13 +75,14 @@
 --
 -- = Description
 --
--- Each call to 'getMemoryFdKHR' /must/ create a new file descriptor and
--- transfer ownership of it to the application. To avoid leaking resources,
--- the application /must/ release ownership of the file descriptor using
--- the @close@ system call when it is no longer needed, or by importing a
--- Vulkan memory object from it. Where supported by the operating system,
--- the implementation /must/ set the file descriptor to be closed
--- automatically when an @execve@ system call is made.
+-- Each call to 'getMemoryFdKHR' /must/ create a new file descriptor
+-- holding a reference to the memory object’s payload and transfer
+-- ownership of the file descriptor to the application. To avoid leaking
+-- resources, the application /must/ release ownership of the file
+-- descriptor using the @close@ system call when it is no longer needed, or
+-- by importing a Vulkan memory object from it. Where supported by the
+-- operating system, the implementation /must/ set the file descriptor to
+-- be closed automatically when an @execve@ system call is made.
 --
 -- == Return Codes
 --
@@ -193,13 +194,13 @@
 -- Importing memory from a file descriptor transfers ownership of the file
 -- descriptor from the application to the Vulkan implementation. The
 -- application /must/ not perform any operations on the file descriptor
--- after a successful import.
+-- after a successful import. The imported memory object holds a reference
+-- to its payload.
 --
--- Applications /can/ import the same underlying memory into multiple
--- instances of Vulkan, into the same instance from which it was exported,
--- and multiple times into a given Vulkan instance. In all cases, each
--- import operation /must/ create a distinct
--- 'Vulkan.Core10.Handles.DeviceMemory' object.
+-- Applications /can/ import the same payload into multiple instances of
+-- Vulkan, into the same instance from which it was exported, and multiple
+-- times into a given Vulkan instance. In all cases, each import operation
+-- /must/ create a distinct 'Vulkan.Core10.Handles.DeviceMemory' object.
 --
 -- == Valid Usage
 --
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
@@ -84,10 +84,17 @@
 -- = Description
 --
 -- For handle types defined as NT handles, the handles returned by
--- 'getMemoryWin32HandleKHR' are owned by the application. To avoid leaking
--- resources, the application /must/ release ownership of them using the
--- @CloseHandle@ system call when they are no longer needed.
+-- 'getMemoryWin32HandleKHR' are owned by the application and hold a
+-- reference to their payload. To avoid leaking resources, the application
+-- /must/ release ownership of them using the @CloseHandle@ system call
+-- when they are no longer needed.
 --
+-- Note
+--
+-- Non-NT handle types do not add a reference to their associated payload.
+-- If the original object owning the payload is destroyed, all resources
+-- and handles sharing that payload will become invalid.
+--
 -- == Return Codes
 --
 -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
@@ -194,17 +201,25 @@
 --
 -- = Description
 --
--- Importing memory objects from Windows handles does not transfer
+-- Importing memory object payloads from Windows handles does not transfer
 -- ownership of the handle to the Vulkan implementation. For handle types
--- defined as NT handles, the application /must/ release ownership using
--- the @CloseHandle@ system call when the handle is no longer needed.
+-- defined as NT handles, the application /must/ release handle ownership
+-- using the @CloseHandle@ system call when the handle is no longer needed.
+-- For handle types defined as NT handles, the imported memory object holds
+-- a reference to its payload.
 --
--- Applications /can/ import the same underlying memory into multiple
--- instances of Vulkan, into the same instance from which it was exported,
--- and multiple times into a given Vulkan instance. In all cases, each
--- import operation /must/ create a distinct
--- 'Vulkan.Core10.Handles.DeviceMemory' object.
+-- Note
 --
+-- Non-NT handle import operations do not add a reference to their
+-- associated payload. If the original object owning the payload is
+-- destroyed, all resources and handles sharing that payload will become
+-- invalid.
+--
+-- Applications /can/ import the same payload into multiple instances of
+-- Vulkan, into the same instance from which it was exported, and multiple
+-- times into a given Vulkan instance. In all cases, each import operation
+-- /must/ create a distinct 'Vulkan.Core10.Handles.DeviceMemory' object.
+--
 -- == Valid Usage
 --
 -- -   If @handleType@ is not @0@, it /must/ be supported for import, as
@@ -262,8 +277,8 @@
     handleType :: ExternalMemoryHandleTypeFlagBits
   , -- | @handle@ is the external handle to import, or @NULL@.
     handle :: HANDLE
-  , -- | @name@ is a null-terminated UTF-16 string naming the underlying memory
-    -- resource to import, or @NULL@.
+  , -- | @name@ is a null-terminated UTF-16 string naming the payload to import,
+    -- or @NULL@.
     name :: LPCWSTR
   }
   deriving (Typeable, Eq)
@@ -384,9 +399,8 @@
   , -- | @dwAccess@ is a 'Vulkan.Extensions.VK_NV_external_memory_win32.DWORD'
     -- specifying access rights of the handle.
     dwAccess :: DWORD
-  , -- | @name@ is a null-terminated UTF-16 string to associate with the
-    -- underlying resource referenced by NT handles exported from the created
-    -- memory.
+  , -- | @name@ is a null-terminated UTF-16 string to associate with the payload
+    -- referenced by NT handles exported from the created memory.
     name :: LPCWSTR
   }
   deriving (Typeable, Eq)
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 = 155
+pattern HEADER_VERSION = 156
 
 
 pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 155
+pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 156
 
 
 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: 7d608c680747a39a9b3ffd73be1cba4bb23e9a99063b1885e194f37e934c885d
+-- hash: 4440a5ae30900bab6984276232f3e38c13b7d2ef81d1fb4c2b3e00fee27b1bee
 
 name:           vulkan
-version:        3.6.8
+version:        3.6.9
 synopsis:       Bindings to the Vulkan graphics API.
 category:       Graphics
 homepage:       https://github.com/expipiplus1/vulkan#readme
@@ -287,6 +287,7 @@
       Vulkan.Extensions.VK_EXT_depth_clip_enable
       Vulkan.Extensions.VK_EXT_depth_range_unrestricted
       Vulkan.Extensions.VK_EXT_descriptor_indexing
+      Vulkan.Extensions.VK_EXT_device_memory_report
       Vulkan.Extensions.VK_EXT_direct_mode_display
       Vulkan.Extensions.VK_EXT_directfb_surface
       Vulkan.Extensions.VK_EXT_discard_rectangles
