diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,9 @@
 
 ## WIP
 
+## [3.11.2] - 2021-07-07
+- Bump API version to v1.2.184
+
 ## [3.11.1] - 2021-06-28
 - Bump API version to v1.2.183
 
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: vulkan
-version: "3.11.1"
+version: "3.11.2"
 synopsis: Bindings to the Vulkan graphics API.
 description: Please see [the readme](https://github.com/expipiplus1/vulkan/#readme)
 category: Graphics
diff --git a/src/Vulkan/CStruct/Extends.hs b/src/Vulkan/CStruct/Extends.hs
--- a/src/Vulkan/CStruct/Extends.hs
+++ b/src/Vulkan/CStruct/Extends.hs
@@ -314,6 +314,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryFdPropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (MemoryGetAndroidHardwareBufferInfoANDROID)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryGetFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_rdma (MemoryGetRemoteAddressInfoNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryGetWin32HandleInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_external_memory (MemoryGetZirconHandleInfoFUCHSIA)
 import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (MemoryHeap)
@@ -382,6 +383,7 @@
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (PhysicalDeviceExternalFenceInfo)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalImageFormatInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_host (PhysicalDeviceExternalMemoryHostPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_rdma (PhysicalDeviceExternalMemoryRDMAFeaturesNV)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (PhysicalDeviceExternalSemaphoreInfo)
 import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
@@ -503,6 +505,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_zero_initialize_workgroup_memory (PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR)
 import {-# SOURCE #-} Vulkan.Core10.PipelineCache (PipelineCacheCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (PipelineCacheHeaderVersionOne)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PipelineColorBlendAdvancedStateCreateInfoEXT)
 import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineColorBlendAttachmentState)
 import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineColorBlendStateCreateInfo)
@@ -901,6 +904,7 @@
   Extends DeviceCreateInfo PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceMutableDescriptorTypeFeaturesVALVE = ()
   Extends DeviceCreateInfo PhysicalDeviceVertexInputDynamicStateFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceExternalMemoryRDMAFeaturesNV = ()
   Extends DeviceCreateInfo PhysicalDeviceColorWriteEnableFeaturesEXT = ()
   Extends DeviceCreateInfo PhysicalDeviceSynchronization2FeaturesKHR = ()
   Extends DeviceCreateInfo PhysicalDeviceInheritedViewportScissorFeaturesNV = ()
@@ -1045,6 +1049,7 @@
   Extends PhysicalDeviceFeatures2 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceMutableDescriptorTypeFeaturesVALVE = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceVertexInputDynamicStateFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceExternalMemoryRDMAFeaturesNV = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceColorWriteEnableFeaturesEXT = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceSynchronization2FeaturesKHR = ()
   Extends PhysicalDeviceFeatures2 PhysicalDeviceInheritedViewportScissorFeaturesNV = ()
@@ -1558,6 +1563,7 @@
   STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE -> go @PhysicalDeviceMutableDescriptorTypeFeaturesVALVE
   STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE -> go @MutableDescriptorTypeCreateInfoVALVE
   STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT -> go @PhysicalDeviceVertexInputDynamicStateFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV -> go @PhysicalDeviceExternalMemoryRDMAFeaturesNV
   STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT -> go @PhysicalDeviceColorWriteEnableFeaturesEXT
   STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT -> go @PipelineColorWriteCreateInfoEXT
   STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR -> go @MemoryBarrier2KHR
@@ -1900,6 +1906,7 @@
 {-# complete (::&) :: PhysicalDeviceMutableDescriptorTypeFeaturesVALVE #-}
 {-# complete (::&) :: MutableDescriptorTypeCreateInfoVALVE #-}
 {-# complete (::&) :: PhysicalDeviceVertexInputDynamicStateFeaturesEXT #-}
+{-# complete (::&) :: PhysicalDeviceExternalMemoryRDMAFeaturesNV #-}
 {-# complete (::&) :: PhysicalDeviceColorWriteEnableFeaturesEXT #-}
 {-# complete (::&) :: PipelineColorWriteCreateInfoEXT #-}
 {-# complete (::&) :: MemoryBarrier2KHR #-}
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
@@ -112,6 +112,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state2 (PhysicalDeviceExtendedDynamicState2FeaturesEXT)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_rdma (PhysicalDeviceExternalMemoryRDMAFeaturesNV)
 import Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map2 (PhysicalDeviceFragmentDensityMap2FeaturesEXT)
@@ -739,6 +740,7 @@
 --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT',
 --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',
+--     'Vulkan.Extensions.VK_NV_external_memory_rdma.PhysicalDeviceExternalMemoryRDMAFeaturesNV',
 --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
 --     'Vulkan.Extensions.VK_EXT_fragment_density_map2.PhysicalDeviceFragmentDensityMap2FeaturesEXT',
 --     'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapFeaturesEXT',
@@ -892,6 +894,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceInheritedViewportScissorFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceSynchronization2FeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceColorWriteEnableFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceExternalMemoryRDMAFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceVertexInputDynamicStateFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceMutableDescriptorTypeFeaturesVALVE = Just f
     | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = Just f
diff --git a/src/Vulkan/Core10/DeviceInitialization.hs b/src/Vulkan/Core10/DeviceInitialization.hs
--- a/src/Vulkan/Core10/DeviceInitialization.hs
+++ b/src/Vulkan/Core10/DeviceInitialization.hs
@@ -1853,6 +1853,10 @@
 --     |
 --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
 --
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV'
+--
 -- There /must/ be at least one memory type with both the
 -- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
 -- and
diff --git a/src/Vulkan/Core10/Enums/ImageViewType.hs b/src/Vulkan/Core10/Enums/ImageViewType.hs
--- a/src/Vulkan/Core10/Enums/ImageViewType.hs
+++ b/src/Vulkan/Core10/Enums/ImageViewType.hs
@@ -21,16 +21,6 @@
 
 -- | VkImageViewType - Image view types
 --
--- = Description
---
--- The exact image view type is partially implicit, based on the image’s
--- type and sample count, as well as the view creation parameters as
--- described in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility image view compatibility table>
--- for 'Vulkan.Core10.ImageView.createImageView'. This table also shows
--- which SPIR-V @OpTypeImage@ @Dim@ and @Arrayed@ parameters correspond to
--- each image view type.
---
 -- = See Also
 --
 -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo',
diff --git a/src/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs b/src/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs
--- a/src/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs
+++ b/src/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs
@@ -6,6 +6,7 @@
                                                                            , MEMORY_PROPERTY_HOST_COHERENT_BIT
                                                                            , MEMORY_PROPERTY_HOST_CACHED_BIT
                                                                            , MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
+                                                                           , MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV
                                                                            , MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
                                                                            , MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
                                                                            , MEMORY_PROPERTY_PROTECTED_BIT
@@ -86,6 +87,9 @@
 -- specified in
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-lazy_allocation Lazily Allocated Memory>.
 pattern MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT    = MemoryPropertyFlagBits 0x00000010
+-- | 'MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV' bit specifies that external
+-- devices can access this memory directly.
+pattern MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV     = MemoryPropertyFlagBits 0x00000100
 -- | 'MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD' bit specifies that memory
 -- allocated with this type is not cached on the device. Uncached device
 -- memory is always device coherent.
@@ -116,6 +120,7 @@
   , (MEMORY_PROPERTY_HOST_COHERENT_BIT      , "HOST_COHERENT_BIT")
   , (MEMORY_PROPERTY_HOST_CACHED_BIT        , "HOST_CACHED_BIT")
   , (MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT   , "LAZILY_ALLOCATED_BIT")
+  , (MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV    , "RDMA_CAPABLE_BIT_NV")
   , (MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD, "DEVICE_UNCACHED_BIT_AMD")
   , (MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD, "DEVICE_COHERENT_BIT_AMD")
   , (MEMORY_PROPERTY_PROTECTED_BIT          , "PROTECTED_BIT")
diff --git a/src/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs b/src/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs
--- a/src/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs
+++ b/src/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs
@@ -17,6 +17,7 @@
 --
 -- = See Also
 --
+-- 'Vulkan.Core10.OtherTypes.PipelineCacheHeaderVersionOne',
 -- 'Vulkan.Core10.PipelineCache.createPipelineCache',
 -- 'Vulkan.Core10.PipelineCache.getPipelineCacheData'
 newtype PipelineCacheHeaderVersion = PipelineCacheHeaderVersion 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
@@ -57,6 +57,8 @@
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT
                                                         , STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX
                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV
+                                                        , STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV
                                                         , STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA
                                                         , STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA
                                                         , STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA
@@ -744,6 +746,7 @@
 -- 'Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryFdPropertiesKHR',
 -- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.MemoryGetAndroidHardwareBufferInfoANDROID',
 -- 'Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_external_memory_rdma.MemoryGetRemoteAddressInfoNV',
 -- 'Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryGetWin32HandleInfoKHR',
 -- 'Vulkan.Extensions.VK_FUCHSIA_external_memory.MemoryGetZirconHandleInfoFUCHSIA',
 -- 'Vulkan.Extensions.VK_EXT_external_memory_host.MemoryHostPointerPropertiesEXT',
@@ -802,6 +805,7 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.PhysicalDeviceExternalFenceInfo',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo',
 -- 'Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
+-- 'Vulkan.Extensions.VK_NV_external_memory_rdma.PhysicalDeviceExternalMemoryRDMAFeaturesNV',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.PhysicalDeviceExternalSemaphoreInfo',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
@@ -1209,6 +1213,10 @@
 pattern STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX            = StructureType 1000378000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT"
 pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = StructureType 1000377000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV = StructureType 1000371001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV"
+pattern STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV         = StructureType 1000371000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA"
 pattern STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA  = StructureType 1000365001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA"
@@ -2182,6 +2190,8 @@
              STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT,
              STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX,
              STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV,
+             STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV,
              STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
              STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA,
              STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
@@ -2710,6 +2720,10 @@
   , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT
     , "PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT"
     )
+  , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV
+    , "PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV"
+    )
+  , (STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV          , "MEMORY_GET_REMOTE_ADDRESS_INFO_NV")
   , (STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA   , "SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA")
   , (STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA, "IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA")
   , (STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA      , "MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA")
diff --git a/src/Vulkan/Core10/FundamentalTypes.hs b/src/Vulkan/Core10/FundamentalTypes.hs
--- a/src/Vulkan/Core10/FundamentalTypes.hs
+++ b/src/Vulkan/Core10/FundamentalTypes.hs
@@ -201,8 +201,8 @@
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoPictureResourceKHR VkVideoPictureResourceKHR>,
 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoSessionCreateInfoKHR VkVideoSessionCreateInfoKHR>,
 -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR',
--- 'Vulkan.Core10.Pass.getRenderAreaGranularity',
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkGetSubpassShadingMaxWorkgroupSizeHUAWEI vkGetSubpassShadingMaxWorkgroupSizeHUAWEI>
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI>,
+-- 'Vulkan.Core10.Pass.getRenderAreaGranularity'
 data Extent2D = Extent2D
   { -- | @width@ is the width of the extent.
     width :: Word32
@@ -436,6 +436,7 @@
 -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
 -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT',
 -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',
+-- 'Vulkan.Extensions.VK_NV_external_memory_rdma.PhysicalDeviceExternalMemoryRDMAFeaturesNV',
 -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures',
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
 -- 'Vulkan.Extensions.VK_EXT_fragment_density_map2.PhysicalDeviceFragmentDensityMap2FeaturesEXT',
diff --git a/src/Vulkan/Core10/Handles.hs b/src/Vulkan/Core10/Handles.hs
--- a/src/Vulkan/Core10/Handles.hs
+++ b/src/Vulkan/Core10/Handles.hs
@@ -348,6 +348,7 @@
 -- 'Vulkan.Core10.DeviceInitialization.getDeviceProcAddr',
 -- 'Vulkan.Core10.Queue.getDeviceQueue',
 -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.getDeviceQueue2',
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI>,
 -- 'Vulkan.Core10.Event.getEventStatus',
 -- 'Vulkan.Extensions.VK_KHR_external_fence_fd.getFenceFdKHR',
 -- 'Vulkan.Core10.Fence.getFenceStatus',
@@ -367,6 +368,7 @@
 -- 'Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdKHR',
 -- 'Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR',
 -- 'Vulkan.Extensions.VK_EXT_external_memory_host.getMemoryHostPointerPropertiesEXT',
+-- 'Vulkan.Extensions.VK_NV_external_memory_rdma.getMemoryRemoteAddressNV',
 -- 'Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandleKHR',
 -- 'Vulkan.Extensions.VK_NV_external_memory_win32.getMemoryWin32HandleNV',
 -- 'Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandlePropertiesKHR',
@@ -666,6 +668,7 @@
 -- 'Vulkan.Core10.Memory.MappedMemoryRange',
 -- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.MemoryGetAndroidHardwareBufferInfoANDROID',
 -- 'Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_external_memory_rdma.MemoryGetRemoteAddressInfoNV',
 -- 'Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryGetWin32HandleInfoKHR',
 -- 'Vulkan.Extensions.VK_FUCHSIA_external_memory.MemoryGetZirconHandleInfoFUCHSIA',
 -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind',
@@ -1144,8 +1147,8 @@
 -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.createRenderPass2',
 -- 'Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR',
 -- 'Vulkan.Core10.Pass.destroyRenderPass',
--- 'Vulkan.Core10.Pass.getRenderAreaGranularity',
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkGetSubpassShadingMaxWorkgroupSizeHUAWEI vkGetSubpassShadingMaxWorkgroupSizeHUAWEI>
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI>,
+-- 'Vulkan.Core10.Pass.getRenderAreaGranularity'
 newtype RenderPass = RenderPass Word64
   deriving newtype (Eq, Ord, Storable, Zero)
   deriving anyclass (IsHandle)
diff --git a/src/Vulkan/Core10/ImageView.hs b/src/Vulkan/Core10/ImageView.hs
--- a/src/Vulkan/Core10/ImageView.hs
+++ b/src/Vulkan/Core10/ImageView.hs
@@ -638,119 +638,34 @@
 -- which chroma reconstruction operations operate on the same (/uplane/,
 -- /vplane/) or (/iplane/, /jplane/) coordinates.
 --
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | Dim,     | Image parameters                                                               | View parameters                                                |
--- | Arrayed, |                                                                                |                                                                |
--- | MS       |                                                                                |                                                                |
--- +==========+================================================================================+================================================================+
--- |          | @imageType@ = ci.@imageType@                                                   | @baseArrayLayer@, @layerCount@, and @levelCount@ are members   |
--- |          | @width@ = ci.@extent.width@                                                    | of the @subresourceRange@ member.                              |
--- |          | @height@ = ci.@extent.height@                                                  |                                                                |
--- |          | @depth@ = ci.@extent.depth@                                                    |                                                                |
--- |          | @arrayLayers@ = ci.@arrayLayers@                                               |                                                                |
--- |          | @samples@ = ci.@samples@                                                       |                                                                |
--- |          | @flags@ = ci.@flags@                                                           |                                                                |
--- |          | where ci is the 'Vulkan.Core10.Image.ImageCreateInfo' used to create @image@.  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __1D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'                    | @viewType@ =                                                   |
--- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D'         |
--- |          | @height@ = 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
--- |          | @depth@ = 1                                                                    | @layerCount@ = 1                                               |
--- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
--- |          | @samples@ = 1                                                                  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __1D, 1, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'                    | @viewType@ =                                                   |
--- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY'   |
--- |          | @height@ = 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
--- |          | @depth@ = 1                                                                    | @layerCount@ ≥ 1                                               |
--- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
--- |          | @samples@ = 1                                                                  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __2D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
--- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         |
--- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
--- |          | @depth@ = 1                                                                    | @layerCount@ = 1                                               |
--- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
--- |          | @samples@ = 1                                                                  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __2D, 1, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
--- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   |
--- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
--- |          | @depth@ = 1                                                                    | @layerCount@ ≥ 1                                               |
--- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
--- |          | @samples@ = 1                                                                  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __2D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
--- | 1__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         |
--- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
--- |          | @depth@ = 1                                                                    | @layerCount@ = 1                                               |
--- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
--- |          | @samples@ > 1                                                                  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __2D, 1, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
--- | 1__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   |
--- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
--- |          | @depth@ = 1                                                                    | @layerCount@ ≥ 1                                               |
--- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
--- |          | @samples@ > 1                                                                  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __CUBE,  | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
--- | 0, 0__   | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE'       |
--- |          | @height@ = @width@                                                             | @baseArrayLayer@ ≥ 0                                           |
--- |          | @depth@ = 1                                                                    | @layerCount@ = 6                                               |
--- |          | @arrayLayers@ ≥ 6                                                              |                                                                |
--- |          | @samples@ = 1                                                                  |                                                                |
--- |          | @flags@ includes                                                               |                                                                |
--- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'     |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __CUBE,  | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
--- | 1, 0__   | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' |
--- |          | @height@ = width                                                               | @baseArrayLayer@ ≥ 0                                           |
--- |          | @depth@ = 1                                                                    | @layerCount@ = 6 × /N/, /N/ ≥ 1                                |
--- |          | /N/ ≥ 1                                                                        |                                                                |
--- |          | @arrayLayers@ ≥ 6 × /N/                                                        |                                                                |
--- |          | @samples@ = 1                                                                  |                                                                |
--- |          | @flags@ includes                                                               |                                                                |
--- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'     |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __3D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'                    | @viewType@ =                                                   |
--- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D'         |
--- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ = 0                                           |
--- |          | @depth@ ≥ 1                                                                    | @layerCount@ = 1                                               |
--- |          | @arrayLayers@ = 1                                                              |                                                                |
--- |          | @samples@ = 1                                                                  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __3D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'                    | @viewType@ =                                                   |
--- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         |
--- |          | @height@ ≥ 1                                                                   | @levelCount@ = 1                                               |
--- |          | @depth@ ≥ 1                                                                    | @baseArrayLayer@ ≥ 0                                           |
--- |          | @arrayLayers@ = 1                                                              | @layerCount@ = 1                                               |
--- |          | @samples@ = 1                                                                  |                                                                |
--- |          | @flags@ includes                                                               |                                                                |
--- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' |                                                                |
--- |          | @flags@ does not include                                                       |                                                                |
--- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',     |                                                                |
--- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',   |                                                                |
--- |          | and 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
--- | __3D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'                    | @viewType@ =                                                   |
--- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   |
--- |          | @height@ ≥ 1                                                                   | @levelCount@ = 1                                               |
--- |          | @depth@ ≥ 1                                                                    | @baseArrayLayer@ ≥ 0                                           |
--- |          | @arrayLayers@ = 1                                                              | @layerCount@ ≥ 1                                               |
--- |          | @samples@ = 1                                                                  |                                                                |
--- |          | @flags@ includes                                                               |                                                                |
--- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' |                                                                |
--- |          | @flags@ does not include                                                       |                                                                |
--- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',     |                                                                |
--- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',   |                                                                |
--- |          | and 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'  |                                                                |
--- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- +----------------------------------------------------------------+-----------------------------------------------+
+-- | Image View Type                                                | Compatible Image Types                        |
+-- +================================================================+===============================================+
+-- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D'         | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' |
+-- +----------------------------------------------------------------+-----------------------------------------------+
+-- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY'   | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' |
+-- +----------------------------------------------------------------+-----------------------------------------------+
+-- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' |
+-- |                                                                | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' |
+-- +----------------------------------------------------------------+-----------------------------------------------+
+-- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' |
+-- |                                                                | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' |
+-- +----------------------------------------------------------------+-----------------------------------------------+
+-- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE'       | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' |
+-- +----------------------------------------------------------------+-----------------------------------------------+
+-- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' |
+-- +----------------------------------------------------------------+-----------------------------------------------+
+-- | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D'         | 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' |
+-- +----------------------------------------------------------------+-----------------------------------------------+
 --
--- Image and image view parameter compatibility requirements
+-- Image type and image view type compatibility requirements
 --
 -- == Valid Usage
 --
+-- -   #VUID-VkImageViewCreateInfo-imageViewType-04969# @imageViewType@
+--     /must/ be compatible with the type of @image@ as shown in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility view type compatibility table>
+--
 -- -   #VUID-VkImageViewCreateInfo-image-01003# If @image@ was not created
 --     with
 --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
@@ -770,6 +685,29 @@
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
 --
+-- -   #VUID-VkImageViewCreateInfo-image-04970# If @image@ was created with
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and @imageViewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' then
+--     @subresourceRange.levelCount@ /must/ be 1
+--
+-- -   #VUID-VkImageViewCreateInfo-image-04971# If @image@ was created with
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and @imageViewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' then
+--     @flags@ /must/ not contain any of
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',
+--     and
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
+--
+-- -   #VUID-VkImageViewCreateInfo-image-04972# If @image@ was created with
+--     a @samples@ value not equal to
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' then
+--     @imageViewType@ /must/ be either
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
+--
 -- -   #VUID-VkImageViewCreateInfo-image-04441# @image@ /must/ have been
 --     created with a @usage@ value containing at least one of the usages
 --     defined in the
@@ -1102,6 +1040,22 @@
 --     structure /must/ not include any bits that were not set in the
 --     @usage@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'
 --     structure used to create @image@
+--
+-- -   #VUID-VkImageViewCreateInfo-imageViewType-04973# If @imageViewType@
+--     is 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D', or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D'; and
+--     @subresourceRange.layerCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then
+--     @subresourceRange.layerCount@ /must/ be 1
+--
+-- -   #VUID-VkImageViewCreateInfo-imageViewType-04974# If @imageViewType@
+--     is 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D', or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D'; and
+--     @subresourceRange.layerCount@ is
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then the
+--     remaining number of layers /must/ be 1
 --
 -- -   #VUID-VkImageViewCreateInfo-viewType-02960# If @viewType@ is
 --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' and
diff --git a/src/Vulkan/Core10/OtherTypes.hs b/src/Vulkan/Core10/OtherTypes.hs
--- a/src/Vulkan/Core10/OtherTypes.hs
+++ b/src/Vulkan/Core10/OtherTypes.hs
@@ -3,6 +3,7 @@
 module Vulkan.Core10.OtherTypes  ( MemoryBarrier(..)
                                  , BufferMemoryBarrier(..)
                                  , ImageMemoryBarrier(..)
+                                 , PipelineCacheHeaderVersionOne(..)
                                  , DrawIndirectCommand(..)
                                  , DrawIndexedIndirectCommand(..)
                                  , DispatchIndirectCommand(..)
@@ -12,6 +13,7 @@
                                  , VendorId(..)
                                  ) where
 
+import Vulkan.CStruct.Utils (FixedArray)
 import Data.Typeable (eqT)
 import Foreign.Marshal.Alloc (allocaBytes)
 import GHC.Ptr (castPtr)
@@ -34,8 +36,12 @@
 import Data.Int (Int32)
 import Foreign.Ptr (Ptr)
 import Data.Word (Word32)
+import Data.Word (Word8)
+import Data.ByteString (ByteString)
 import Data.Kind (Type)
 import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthByteString)
 import Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
 import Vulkan.Core10.Handles (Buffer)
 import Vulkan.CStruct.Extends (Chain)
@@ -48,10 +54,12 @@
 import Vulkan.Core10.ImageView (ImageSubresourceRange)
 import Vulkan.CStruct.Extends (PeekChain)
 import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Enums.PipelineCacheHeaderVersion (PipelineCacheHeaderVersion)
 import Vulkan.CStruct.Extends (PokeChain)
 import Vulkan.CStruct.Extends (PokeChain(..))
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
 import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.APIConstants (UUID_SIZE)
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER))
 import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_BARRIER))
@@ -813,6 +821,111 @@
            zero
            zero
            zero
+
+
+-- | VkPipelineCacheHeaderVersionOne - Structure describing the layout of the
+-- pipeline cache header
+--
+-- = Description
+--
+-- Unlike most structures declared by the Vulkan API, all fields of this
+-- structure are written with the least significant byte first, regardless
+-- of host byte-order.
+--
+-- The C language specification does not define the packing of structure
+-- members. This layout assumes tight structure member packing, with
+-- members laid out in the order listed in the structure, and the intended
+-- size of the structure is 32 bytes. If a compiler produces code that
+-- diverges from that pattern, applications /must/ employ another method to
+-- set values at the correct offsets.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.PipelineCacheHeaderVersion.PipelineCacheHeaderVersion'
+data PipelineCacheHeaderVersionOne = PipelineCacheHeaderVersionOne
+  { -- | @headerSize@ is the length in bytes of the pipeline cache header.
+    --
+    -- #VUID-VkPipelineCacheHeaderVersionOne-headerSize-04967# @headerSize@
+    -- /must/ be 32
+    headerSize :: Word32
+  , -- | @headerVersion@ is a
+    -- 'Vulkan.Core10.Enums.PipelineCacheHeaderVersion.PipelineCacheHeaderVersion'
+    -- enum value specifying the version of the header. A consumer of the
+    -- pipeline cache /should/ use the cache version to interpret the remainder
+    -- of the cache header.
+    --
+    -- #VUID-VkPipelineCacheHeaderVersionOne-headerVersion-04968#
+    -- @headerVersion@ /must/ be
+    -- 'Vulkan.Core10.Enums.PipelineCacheHeaderVersion.PIPELINE_CACHE_HEADER_VERSION_ONE'
+    --
+    -- #VUID-VkPipelineCacheHeaderVersionOne-headerVersion-parameter#
+    -- @headerVersion@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.PipelineCacheHeaderVersion.PipelineCacheHeaderVersion'
+    -- value
+    headerVersion :: PipelineCacheHeaderVersion
+  , -- | @vendorID@ is the
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@vendorID@
+    -- of the implementation.
+    vendorID :: Word32
+  , -- | @deviceID@ is the
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@deviceID@
+    -- of the implementation.
+    deviceID :: Word32
+  , -- | @pipelineCacheUUID@ is the
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@pipelineCacheUUID@
+    -- of the implementation.
+    pipelineCacheUUID :: ByteString
+  }
+  deriving (Typeable)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PipelineCacheHeaderVersionOne)
+#endif
+deriving instance Show PipelineCacheHeaderVersionOne
+
+instance ToCStruct PipelineCacheHeaderVersionOne where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineCacheHeaderVersionOne{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (headerSize)
+    poke ((p `plusPtr` 4 :: Ptr PipelineCacheHeaderVersion)) (headerVersion)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (vendorID)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (deviceID)
+    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (pipelineCacheUUID)
+    f
+  cStructSize = 32
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr PipelineCacheHeaderVersion)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
+    f
+
+instance FromCStruct PipelineCacheHeaderVersionOne where
+  peekCStruct p = do
+    headerSize <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    headerVersion <- peek @PipelineCacheHeaderVersion ((p `plusPtr` 4 :: Ptr PipelineCacheHeaderVersion))
+    vendorID <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    deviceID <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    pipelineCacheUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8)))
+    pure $ PipelineCacheHeaderVersionOne
+             headerSize headerVersion vendorID deviceID pipelineCacheUUID
+
+instance Storable PipelineCacheHeaderVersionOne where
+  sizeOf ~_ = 32
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineCacheHeaderVersionOne where
+  zero = PipelineCacheHeaderVersionOne
+           zero
+           zero
+           zero
+           zero
+           mempty
 
 
 -- | VkDrawIndirectCommand - Structure specifying a indirect drawing command
diff --git a/src/Vulkan/Core10/OtherTypes.hs-boot b/src/Vulkan/Core10/OtherTypes.hs-boot
--- a/src/Vulkan/Core10/OtherTypes.hs-boot
+++ b/src/Vulkan/Core10/OtherTypes.hs-boot
@@ -6,6 +6,7 @@
                                  , DrawIndirectCommand
                                  , ImageMemoryBarrier
                                  , MemoryBarrier
+                                 , PipelineCacheHeaderVersionOne
                                  ) where
 
 import Vulkan.CStruct (FromCStruct)
@@ -62,4 +63,12 @@
 instance Show MemoryBarrier
 
 instance FromCStruct MemoryBarrier
+
+
+data PipelineCacheHeaderVersionOne
+
+instance ToCStruct PipelineCacheHeaderVersionOne
+instance Show PipelineCacheHeaderVersionOne
+
+instance FromCStruct PipelineCacheHeaderVersionOne
 
diff --git a/src/Vulkan/Core10/SparseResourceMemoryManagement.hs b/src/Vulkan/Core10/SparseResourceMemoryManagement.hs
--- a/src/Vulkan/Core10/SparseResourceMemoryManagement.hs
+++ b/src/Vulkan/Core10/SparseResourceMemoryManagement.hs
@@ -570,7 +570,8 @@
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.SparseImageMemoryRequirements2',
 -- 'getImageSparseMemoryRequirements'
 data SparseImageMemoryRequirements = SparseImageMemoryRequirements
-  { -- No documentation found for Nested "VkSparseImageMemoryRequirements" "formatProperties"
+  { -- | @formatProperties@ is a 'SparseImageFormatProperties' structure
+    -- specifying properties of the image format.
     formatProperties :: SparseImageFormatProperties
   , -- | @imageMipTailFirstLod@ is the first mip level at which image
     -- subresources are included in the mip tail region.
diff --git a/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs b/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs
--- a/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs
+++ b/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs
@@ -8,6 +8,7 @@
                                                                                                , EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
                                                                                                , EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
                                                                                                , EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV
                                                                                                , EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA
                                                                                                , EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
                                                                                                , EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
@@ -66,6 +67,8 @@
 -- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
 -- | 'EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA'              | No restriction                                                                                             | No restriction                                                                                             |
 -- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV'                 | No restriction                                                                                             | No restriction                                                                                             |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
 --
 -- External memory handle types compatibility
 --
@@ -98,6 +101,7 @@
 -- 'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR',
 -- 'Vulkan.Extensions.VK_FUCHSIA_external_memory.ImportMemoryZirconHandleInfoFUCHSIA',
 -- 'Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_external_memory_rdma.MemoryGetRemoteAddressInfoNV',
 -- 'Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryGetWin32HandleInfoKHR',
 -- 'Vulkan.Extensions.VK_FUCHSIA_external_memory.MemoryGetZirconHandleInfoFUCHSIA',
 -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalBufferInfo',
@@ -153,6 +157,10 @@
 -- 12 committed resource. It owns a reference to the memory used by the
 -- Direct3D resource.
 pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT                  = ExternalMemoryHandleTypeFlagBits 0x00000040
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV' is a handle to an
+-- allocation accessible by remote devices. It owns a reference to the
+-- underlying memory resource represented by its Vulkan memory object.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV                 = ExternalMemoryHandleTypeFlagBits 0x00001000
 -- | 'EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA' is a Zircon handle
 -- to a virtual memory object.
 pattern EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA              = ExternalMemoryHandleTypeFlagBits 0x00000800
@@ -194,6 +202,7 @@
   , (EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT              , "D3D11_TEXTURE_KMT_BIT")
   , (EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT                     , "D3D12_HEAP_BIT")
   , (EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT                 , "D3D12_RESOURCE_BIT")
+  , (EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV                , "RDMA_ADDRESS_BIT_NV")
   , (EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA             , "ZIRCON_VMO_BIT_FUCHSIA")
   , (EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT , "HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT")
   , (EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT            , "HOST_ALLOCATION_BIT_EXT")
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
@@ -127,6 +127,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT)
 import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalImageFormatInfo)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_host (PhysicalDeviceExternalMemoryHostPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_rdma (PhysicalDeviceExternalMemoryRDMAFeaturesNV)
 import Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
 import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls (PhysicalDeviceFloatControlsProperties)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map2 (PhysicalDeviceFragmentDensityMap2FeaturesEXT)
@@ -692,6 +693,7 @@
     | Just Refl <- eqT @e @PhysicalDeviceInheritedViewportScissorFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceSynchronization2FeaturesKHR = Just f
     | Just Refl <- eqT @e @PhysicalDeviceColorWriteEnableFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceExternalMemoryRDMAFeaturesNV = Just f
     | Just Refl <- eqT @e @PhysicalDeviceVertexInputDynamicStateFeaturesEXT = Just f
     | Just Refl <- eqT @e @PhysicalDeviceMutableDescriptorTypeFeaturesVALVE = Just f
     | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = Just f
diff --git a/src/Vulkan/Dynamic.hs b/src/Vulkan/Dynamic.hs
--- a/src/Vulkan/Dynamic.hs
+++ b/src/Vulkan/Dynamic.hs
@@ -224,6 +224,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryFdPropertiesKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (MemoryGetAndroidHardwareBufferInfoANDROID)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryGetFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_rdma (MemoryGetRemoteAddressInfoNV)
 import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryGetWin32HandleInfoKHR)
 import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_external_memory (MemoryGetZirconHandleInfoFUCHSIA)
 import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_host (MemoryHostPointerPropertiesEXT)
@@ -299,6 +300,7 @@
 import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (RayTracingPipelineCreateInfoNV)
 import {-# SOURCE #-} Vulkan.Core10.FundamentalTypes (Rect2D)
 import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (RefreshCycleDurationGOOGLE)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_rdma (RemoteAddressNV)
 import {-# SOURCE #-} Vulkan.Core10.Handles (RenderPass)
 import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
 import {-# SOURCE #-} Vulkan.Core10.Pass (RenderPassCreateInfo)
@@ -823,6 +825,7 @@
   , pVkGetMemoryFdPropertiesKHR :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: CInt) -> ("pMemoryFdProperties" ::: Ptr MemoryFdPropertiesKHR) -> IO Result)
   , pVkGetMemoryZirconHandleFUCHSIA :: FunPtr (Ptr Device_T -> ("pGetZirconHandleInfo" ::: Ptr MemoryGetZirconHandleInfoFUCHSIA) -> ("pZirconHandle" ::: Ptr Zx_handle_t) -> IO Result)
   , pVkGetMemoryZirconHandlePropertiesFUCHSIA :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("zirconHandle" ::: Zx_handle_t) -> ("pMemoryZirconHandleProperties" ::: Ptr MemoryZirconHandlePropertiesFUCHSIA) -> IO Result)
+  , pVkGetMemoryRemoteAddressNV :: FunPtr (Ptr Device_T -> ("getMemoryRemoteAddressInfo" ::: Ptr MemoryGetRemoteAddressInfoNV) -> ("pAddress" ::: Ptr RemoteAddressNV) -> IO Result)
   , pVkGetSemaphoreWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr SemaphoreGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
   , pVkImportSemaphoreWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pImportSemaphoreWin32HandleInfo" ::: Ptr ImportSemaphoreWin32HandleInfoKHR) -> IO Result)
   , pVkGetSemaphoreFdKHR :: FunPtr (Ptr Device_T -> ("pGetFdInfo" ::: Ptr SemaphoreGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result)
@@ -1061,7 +1064,7 @@
     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
 
 foreign import ccall
 #if !defined(SAFE_FOREIGN_CALLS)
@@ -1234,6 +1237,7 @@
   vkGetMemoryFdPropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkGetMemoryFdPropertiesKHR"#)
   vkGetMemoryZirconHandleFUCHSIA <- getDeviceProcAddr' handle (Ptr "vkGetMemoryZirconHandleFUCHSIA"#)
   vkGetMemoryZirconHandlePropertiesFUCHSIA <- getDeviceProcAddr' handle (Ptr "vkGetMemoryZirconHandlePropertiesFUCHSIA"#)
+  vkGetMemoryRemoteAddressNV <- getDeviceProcAddr' handle (Ptr "vkGetMemoryRemoteAddressNV"#)
   vkGetSemaphoreWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkGetSemaphoreWin32HandleKHR"#)
   vkImportSemaphoreWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkImportSemaphoreWin32HandleKHR"#)
   vkGetSemaphoreFdKHR <- getDeviceProcAddr' handle (Ptr "vkGetSemaphoreFdKHR"#)
@@ -1577,6 +1581,7 @@
     (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: CInt) -> ("pMemoryFdProperties" ::: Ptr MemoryFdPropertiesKHR) -> IO Result) vkGetMemoryFdPropertiesKHR)
     (castFunPtr @_ @(Ptr Device_T -> ("pGetZirconHandleInfo" ::: Ptr MemoryGetZirconHandleInfoFUCHSIA) -> ("pZirconHandle" ::: Ptr Zx_handle_t) -> IO Result) vkGetMemoryZirconHandleFUCHSIA)
     (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("zirconHandle" ::: Zx_handle_t) -> ("pMemoryZirconHandleProperties" ::: Ptr MemoryZirconHandlePropertiesFUCHSIA) -> IO Result) vkGetMemoryZirconHandlePropertiesFUCHSIA)
+    (castFunPtr @_ @(Ptr Device_T -> ("getMemoryRemoteAddressInfo" ::: Ptr MemoryGetRemoteAddressInfoNV) -> ("pAddress" ::: Ptr RemoteAddressNV) -> IO Result) vkGetMemoryRemoteAddressNV)
     (castFunPtr @_ @(Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr SemaphoreGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetSemaphoreWin32HandleKHR)
     (castFunPtr @_ @(Ptr Device_T -> ("pImportSemaphoreWin32HandleInfo" ::: Ptr ImportSemaphoreWin32HandleInfoKHR) -> IO Result) vkImportSemaphoreWin32HandleKHR)
     (castFunPtr @_ @(Ptr Device_T -> ("pGetFdInfo" ::: Ptr SemaphoreGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result) vkGetSemaphoreFdKHR)
diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs
--- a/src/Vulkan/Extensions.hs
+++ b/src/Vulkan/Extensions.hs
@@ -216,6 +216,7 @@
                           , module Vulkan.Extensions.VK_NV_device_generated_commands
                           , module Vulkan.Extensions.VK_NV_external_memory
                           , module Vulkan.Extensions.VK_NV_external_memory_capabilities
+                          , module Vulkan.Extensions.VK_NV_external_memory_rdma
                           , module Vulkan.Extensions.VK_NV_external_memory_win32
                           , module Vulkan.Extensions.VK_NV_fill_rectangle
                           , module Vulkan.Extensions.VK_NV_fragment_coverage_to_color
@@ -461,6 +462,7 @@
 import Vulkan.Extensions.VK_NV_device_generated_commands
 import Vulkan.Extensions.VK_NV_external_memory
 import Vulkan.Extensions.VK_NV_external_memory_capabilities
+import Vulkan.Extensions.VK_NV_external_memory_rdma
 import Vulkan.Extensions.VK_NV_external_memory_win32
 import Vulkan.Extensions.VK_NV_fill_rectangle
 import Vulkan.Extensions.VK_NV_fragment_coverage_to_color
diff --git a/src/Vulkan/Extensions/Dependencies.hs b/src/Vulkan/Extensions/Dependencies.hs
--- a/src/Vulkan/Extensions/Dependencies.hs
+++ b/src/Vulkan/Extensions/Dependencies.hs
@@ -164,6 +164,7 @@
 import Vulkan.Extensions.VK_NV_device_generated_commands (pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_external_memory_capabilities (pattern NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_external_memory (pattern NV_EXTERNAL_MEMORY_EXTENSION_NAME)
+import Vulkan.Extensions.VK_NV_external_memory_rdma (pattern NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_external_memory_win32 (pattern NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_fragment_shader_barycentric (pattern NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME)
 import Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (pattern NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME)
@@ -521,6 +522,11 @@
   FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME ->
     [ KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME
     , KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME
+    , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+    ]
+  NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME ->
+    [ KHR_EXTERNAL_MEMORY_EXTENSION_NAME
+    , KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
     , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
     ]
   EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
diff --git a/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs b/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs
@@ -0,0 +1,449 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_NV_external_memory_rdma - device extension
+--
+-- == VK_NV_external_memory_rdma
+--
+-- [__Name String__]
+--     @VK_NV_external_memory_rdma@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     372
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_external_memory@
+--
+-- [__Contact__]
+--
+--     -   Carsten Rohde
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_NV_external_memory_rdma:%20&body=@crohde%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-04-19
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Carsten Rohde, NVIDIA
+--
+-- == Description
+--
+-- This extension adds support for allocating memory which can be used for
+-- remote direct memory access (RDMA) from other devices.
+--
+-- == New Base Types
+--
+-- -   'RemoteAddressNV'
+--
+-- == New Commands
+--
+-- -   'getMemoryRemoteAddressNV'
+--
+-- == New Structures
+--
+-- -   'MemoryGetRemoteAddressInfoNV'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceExternalMemoryRDMAFeaturesNV'
+--
+-- == New Enum Constants
+--
+-- -   'NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME'
+--
+-- -   'NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION'
+--
+-- -   Extending
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits':
+--
+--     -   'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV'
+--
+-- == Examples
+--
+-- > VkPhysicalDeviceMemoryBudgetPropertiesEXT memoryBudgetProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT };
+-- > VkPhysicalDeviceMemoryProperties2 memoryProperties2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, &memoryBudgetProperties };
+-- > vkGetPhysicalDeviceMemoryProperties2(physicalDevice, &memoryProperties2);
+-- > uint32_t heapIndex = (uint32_t)-1;
+-- > for (uint32_t memoryType = 0; memoryType < memoryProperties2.memoryProperties.memoryTypeCount; memoryType++) {
+-- >     if (memoryProperties2.memoryProperties.memoryTypes[memoryType].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV) {
+-- >         heapIndex = memoryProperties2.memoryProperties.memoryTypes[memoryType].heapIndex;
+-- >         break;
+-- >     }
+-- > }
+-- > if ((heapIndex == (uint32_t)-1) ||
+-- >     (memoryBudgetProperties.heapBudget[heapIndex] < size)) {
+-- >     return;
+-- > }
+-- >
+-- > VkPhysicalDeviceExternalBufferInfo externalBufferInfo = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO };
+-- > externalBufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+-- > externalBufferInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+-- >
+-- > VkExternalBufferProperties externalBufferProperties = { VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES };
+-- > vkGetPhysicalDeviceExternalBufferProperties(physicalDevice, &externalBufferInfo, &externalBufferProperties);
+-- >
+-- > if (!(externalBufferProperties.externalMemoryProperties.externalMemoryFeatures & VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)) {
+-- >     return;
+-- > }
+-- >
+-- > VkExternalMemoryBufferCreateInfo externalMemoryBufferCreateInfo = { VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO };
+-- > externalMemoryBufferCreateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+-- >
+-- > VkBufferCreateInfo bufferCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, &externalMemoryBufferCreateInfo };
+-- > bufferCreateInfo.size = size;
+-- > bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+-- >
+-- > VkMemoryRequirements mem_reqs;
+-- > vkCreateBuffer(device, &bufferCreateInfo, NULL, &buffer);
+-- > vkGetBufferMemoryRequirements(device, buffer, &mem_reqs);
+-- >
+-- > VkExportMemoryAllocateInfo exportMemoryAllocateInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO };
+-- > exportMemoryAllocateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+-- >
+-- > // Find memory type index
+-- > uint32_t i = 0;
+-- > for (; i < VK_MAX_MEMORY_TYPES; i++) {
+-- >     if ((mem_reqs.memoryTypeBits & (1 << i)) &&
+-- >         (memoryProperties.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV)) {
+-- >         break;
+-- >     }
+-- > }
+-- >
+-- > VkMemoryAllocateInfo memAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, &exportMemoryAllocateInfo };
+-- > memAllocInfo.allocationSize = mem_reqs.size;
+-- > memAllocInfo.memoryTypeIndex = i;
+-- >
+-- > vkAllocateMemory(device, &memAllocInfo, NULL, &mem);
+-- > vkBindBufferMemory(device, buffer, mem, 0);
+-- >
+-- > VkMemoryGetRemoteAddressInfoNV getMemoryRemoteAddressInfo = { VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV };
+-- > getMemoryRemoteAddressInfo.memory = mem;
+-- > getMemoryRemoteAddressInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+-- >
+-- > VkRemoteAddressNV rdmaAddress;
+-- > vkGetMemoryRemoteAddressNV(device, &getMemoryRemoteAddressInfo, &rdmaAddress);
+-- > // address returned in 'rdmaAddress' can be used by external devices to initiate RDMA transfers
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-12-15 (Carsten Rohde)
+--
+--     -   Internal revisions
+--
+-- = See Also
+--
+-- 'MemoryGetRemoteAddressInfoNV',
+-- 'PhysicalDeviceExternalMemoryRDMAFeaturesNV', 'RemoteAddressNV',
+-- 'getMemoryRemoteAddressNV'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_external_memory_rdma Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_NV_external_memory_rdma  ( getMemoryRemoteAddressNV
+                                                     , PhysicalDeviceExternalMemoryRDMAFeaturesNV(..)
+                                                     , MemoryGetRemoteAddressInfoNV(..)
+                                                     , NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION
+                                                     , pattern NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION
+                                                     , NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME
+                                                     , pattern NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME
+                                                     , RemoteAddressNV
+                                                     ) where
+
+import Vulkan.Internal.Utils (traceAroundEvent)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytes)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.Generics (Generic)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.FundamentalTypes (bool32ToBool)
+import Vulkan.Core10.FundamentalTypes (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.FundamentalTypes (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetMemoryRemoteAddressNV))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetMemoryRemoteAddressNV
+  :: FunPtr (Ptr Device_T -> Ptr MemoryGetRemoteAddressInfoNV -> Ptr RemoteAddressNV -> IO Result) -> Ptr Device_T -> Ptr MemoryGetRemoteAddressInfoNV -> Ptr RemoteAddressNV -> IO Result
+
+-- | vkGetMemoryRemoteAddressNV - Get an address for a memory object
+-- accessible by remote devices
+--
+-- = Description
+--
+-- More communication may be required between the kernel-mode drivers of
+-- the devices involved. This information is out of scope of this
+-- documentation and should be requested from the vendors of the devices.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'MemoryGetRemoteAddressInfoNV',
+-- 'RemoteAddressNV'
+getMemoryRemoteAddressNV :: forall io
+                          . (MonadIO io)
+                         => -- | @device@ is the logical device that created the device memory being
+                            -- exported.
+                            --
+                            -- #VUID-vkGetMemoryRemoteAddressNV-device-parameter# @device@ /must/ be a
+                            -- valid 'Vulkan.Core10.Handles.Device' handle
+                            Device
+                         -> -- | #VUID-vkGetMemoryRemoteAddressNV-getMemoryRemoteAddressInfo-parameter#
+                            -- @getMemoryRemoteAddressInfo@ /must/ be a valid pointer to a valid
+                            -- 'MemoryGetRemoteAddressInfoNV' structure
+                            ("getMemoryRemoteAddressInfo" ::: MemoryGetRemoteAddressInfoNV)
+                         -> io (RemoteAddressNV)
+getMemoryRemoteAddressNV device getMemoryRemoteAddressInfo = liftIO . evalContT $ do
+  let vkGetMemoryRemoteAddressNVPtr = pVkGetMemoryRemoteAddressNV (deviceCmds (device :: Device))
+  lift $ unless (vkGetMemoryRemoteAddressNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetMemoryRemoteAddressNV is null" Nothing Nothing
+  let vkGetMemoryRemoteAddressNV' = mkVkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNVPtr
+  getMemoryRemoteAddressInfo' <- ContT $ withCStruct (getMemoryRemoteAddressInfo)
+  pPAddress <- ContT $ bracket (callocBytes @RemoteAddressNV 8) free
+  r <- lift $ traceAroundEvent "vkGetMemoryRemoteAddressNV" (vkGetMemoryRemoteAddressNV' (deviceHandle (device)) getMemoryRemoteAddressInfo' (pPAddress))
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pAddress <- lift $ peek @RemoteAddressNV pPAddress
+  pure $ (pAddress)
+
+
+-- | VkPhysicalDeviceExternalMemoryRDMAFeaturesNV - Structure describing the
+-- external memory RDMA features supported by the implementation
+--
+-- = Members
+--
+-- This structure describes the following feature:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceExternalMemoryRDMAFeaturesNV' structure is
+-- included in the @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
+-- structure passed to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
+-- it is filled in to indicate whether each corresponding feature is
+-- supported. 'PhysicalDeviceExternalMemoryRDMAFeaturesNV' /can/ also be
+-- used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- selectively enable these features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FundamentalTypes.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceExternalMemoryRDMAFeaturesNV = PhysicalDeviceExternalMemoryRDMAFeaturesNV
+  { -- | #features-externalMemoryRDMA# @externalMemoryRDMA@ indicates whether the
+    -- implementation has support for the
+    -- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV'
+    -- memory property and the
+    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV'
+    -- external memory handle type.
+    externalMemoryRDMA :: Bool }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (PhysicalDeviceExternalMemoryRDMAFeaturesNV)
+#endif
+deriving instance Show PhysicalDeviceExternalMemoryRDMAFeaturesNV
+
+instance ToCStruct PhysicalDeviceExternalMemoryRDMAFeaturesNV where
+  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceExternalMemoryRDMAFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (externalMemoryRDMA))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceExternalMemoryRDMAFeaturesNV where
+  peekCStruct p = do
+    externalMemoryRDMA <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceExternalMemoryRDMAFeaturesNV
+             (bool32ToBool externalMemoryRDMA)
+
+instance Storable PhysicalDeviceExternalMemoryRDMAFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceExternalMemoryRDMAFeaturesNV where
+  zero = PhysicalDeviceExternalMemoryRDMAFeaturesNV
+           zero
+
+
+-- | VkMemoryGetRemoteAddressInfoNV - Structure describing a remote
+-- accessible address export operation
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getMemoryRemoteAddressNV'
+data MemoryGetRemoteAddressInfoNV = MemoryGetRemoteAddressInfoNV
+  { -- | @memory@ is the memory object from which the remote accessible address
+    -- will be exported.
+    --
+    -- #VUID-VkMemoryGetRemoteAddressInfoNV-memory-parameter# @memory@ /must/
+    -- be a valid 'Vulkan.Core10.Handles.DeviceMemory' handle
+    memory :: DeviceMemory
+  , -- | @handleType@ is the type of handle requested.
+    --
+    -- #VUID-VkMemoryGetRemoteAddressInfoNV-handleType-04966# @handleType@
+    -- /must/ have been included in
+    -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+    -- when @memory@ was created
+    --
+    -- #VUID-VkMemoryGetRemoteAddressInfoNV-handleType-parameter# @handleType@
+    -- /must/ be a valid
+    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+    -- value
+    handleType :: ExternalMemoryHandleTypeFlagBits
+  }
+  deriving (Typeable, Eq)
+#if defined(GENERIC_INSTANCES)
+deriving instance Generic (MemoryGetRemoteAddressInfoNV)
+#endif
+deriving instance Show MemoryGetRemoteAddressInfoNV
+
+instance ToCStruct MemoryGetRemoteAddressInfoNV where
+  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryGetRemoteAddressInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
+    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (zero)
+    f
+
+instance FromCStruct MemoryGetRemoteAddressInfoNV where
+  peekCStruct p = do
+    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
+    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits))
+    pure $ MemoryGetRemoteAddressInfoNV
+             memory handleType
+
+instance Storable MemoryGetRemoteAddressInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryGetRemoteAddressInfoNV where
+  zero = MemoryGetRemoteAddressInfoNV
+           zero
+           zero
+
+
+type NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION"
+pattern NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION = 1
+
+
+type NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME = "VK_NV_external_memory_rdma"
+
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME"
+pattern NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME = "VK_NV_external_memory_rdma"
+
+
+-- No documentation found for TopLevel "VkRemoteAddressNV"
+type RemoteAddressNV = Ptr ()
+
diff --git a/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs-boot b/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_external_memory_rdma.hs-boot
@@ -0,0 +1,201 @@
+{-# language CPP #-}
+-- | = Name
+--
+-- VK_NV_external_memory_rdma - device extension
+--
+-- == VK_NV_external_memory_rdma
+--
+-- [__Name String__]
+--     @VK_NV_external_memory_rdma@
+--
+-- [__Extension Type__]
+--     Device extension
+--
+-- [__Registered Extension Number__]
+--     372
+--
+-- [__Revision__]
+--     1
+--
+-- [__Extension and Version Dependencies__]
+--
+--     -   Requires Vulkan 1.0
+--
+--     -   Requires @VK_KHR_external_memory@
+--
+-- [__Contact__]
+--
+--     -   Carsten Rohde
+--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_NV_external_memory_rdma:%20&body=@crohde%20 >
+--
+-- == Other Extension Metadata
+--
+-- [__Last Modified Date__]
+--     2021-04-19
+--
+-- [__IP Status__]
+--     No known IP claims.
+--
+-- [__Contributors__]
+--
+--     -   Carsten Rohde, NVIDIA
+--
+-- == Description
+--
+-- This extension adds support for allocating memory which can be used for
+-- remote direct memory access (RDMA) from other devices.
+--
+-- == New Base Types
+--
+-- -   'RemoteAddressNV'
+--
+-- == New Commands
+--
+-- -   'getMemoryRemoteAddressNV'
+--
+-- == New Structures
+--
+-- -   'MemoryGetRemoteAddressInfoNV'
+--
+-- -   Extending
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Core10.Device.DeviceCreateInfo':
+--
+--     -   'PhysicalDeviceExternalMemoryRDMAFeaturesNV'
+--
+-- == New Enum Constants
+--
+-- -   'NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME'
+--
+-- -   'NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION'
+--
+-- -   Extending
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits':
+--
+--     -   'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV'
+--
+-- -   Extending
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlagBits':
+--
+--     -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV'
+--
+-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV'
+--
+--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV'
+--
+-- == Examples
+--
+-- > VkPhysicalDeviceMemoryBudgetPropertiesEXT memoryBudgetProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT };
+-- > VkPhysicalDeviceMemoryProperties2 memoryProperties2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, &memoryBudgetProperties };
+-- > vkGetPhysicalDeviceMemoryProperties2(physicalDevice, &memoryProperties2);
+-- > uint32_t heapIndex = (uint32_t)-1;
+-- > for (uint32_t memoryType = 0; memoryType < memoryProperties2.memoryProperties.memoryTypeCount; memoryType++) {
+-- >     if (memoryProperties2.memoryProperties.memoryTypes[memoryType].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV) {
+-- >         heapIndex = memoryProperties2.memoryProperties.memoryTypes[memoryType].heapIndex;
+-- >         break;
+-- >     }
+-- > }
+-- > if ((heapIndex == (uint32_t)-1) ||
+-- >     (memoryBudgetProperties.heapBudget[heapIndex] < size)) {
+-- >     return;
+-- > }
+-- >
+-- > VkPhysicalDeviceExternalBufferInfo externalBufferInfo = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO };
+-- > externalBufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+-- > externalBufferInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+-- >
+-- > VkExternalBufferProperties externalBufferProperties = { VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES };
+-- > vkGetPhysicalDeviceExternalBufferProperties(physicalDevice, &externalBufferInfo, &externalBufferProperties);
+-- >
+-- > if (!(externalBufferProperties.externalMemoryProperties.externalMemoryFeatures & VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)) {
+-- >     return;
+-- > }
+-- >
+-- > VkExternalMemoryBufferCreateInfo externalMemoryBufferCreateInfo = { VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO };
+-- > externalMemoryBufferCreateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+-- >
+-- > VkBufferCreateInfo bufferCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, &externalMemoryBufferCreateInfo };
+-- > bufferCreateInfo.size = size;
+-- > bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+-- >
+-- > VkMemoryRequirements mem_reqs;
+-- > vkCreateBuffer(device, &bufferCreateInfo, NULL, &buffer);
+-- > vkGetBufferMemoryRequirements(device, buffer, &mem_reqs);
+-- >
+-- > VkExportMemoryAllocateInfo exportMemoryAllocateInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO };
+-- > exportMemoryAllocateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+-- >
+-- > // Find memory type index
+-- > uint32_t i = 0;
+-- > for (; i < VK_MAX_MEMORY_TYPES; i++) {
+-- >     if ((mem_reqs.memoryTypeBits & (1 << i)) &&
+-- >         (memoryProperties.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV)) {
+-- >         break;
+-- >     }
+-- > }
+-- >
+-- > VkMemoryAllocateInfo memAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, &exportMemoryAllocateInfo };
+-- > memAllocInfo.allocationSize = mem_reqs.size;
+-- > memAllocInfo.memoryTypeIndex = i;
+-- >
+-- > vkAllocateMemory(device, &memAllocInfo, NULL, &mem);
+-- > vkBindBufferMemory(device, buffer, mem, 0);
+-- >
+-- > VkMemoryGetRemoteAddressInfoNV getMemoryRemoteAddressInfo = { VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV };
+-- > getMemoryRemoteAddressInfo.memory = mem;
+-- > getMemoryRemoteAddressInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+-- >
+-- > VkRemoteAddressNV rdmaAddress;
+-- > vkGetMemoryRemoteAddressNV(device, &getMemoryRemoteAddressInfo, &rdmaAddress);
+-- > // address returned in 'rdmaAddress' can be used by external devices to initiate RDMA transfers
+--
+-- == Version History
+--
+-- -   Revision 1, 2020-12-15 (Carsten Rohde)
+--
+--     -   Internal revisions
+--
+-- = See Also
+--
+-- 'MemoryGetRemoteAddressInfoNV',
+-- 'PhysicalDeviceExternalMemoryRDMAFeaturesNV', 'RemoteAddressNV',
+-- 'getMemoryRemoteAddressNV'
+--
+-- = Document Notes
+--
+-- For more information, see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_external_memory_rdma Vulkan Specification>
+--
+-- This page is a generated document. Fixes and changes should be made to
+-- the generator scripts, not directly.
+module Vulkan.Extensions.VK_NV_external_memory_rdma  ( MemoryGetRemoteAddressInfoNV
+                                                     , PhysicalDeviceExternalMemoryRDMAFeaturesNV
+                                                     , RemoteAddressNV
+                                                     ) where
+
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+
+data MemoryGetRemoteAddressInfoNV
+
+instance ToCStruct MemoryGetRemoteAddressInfoNV
+instance Show MemoryGetRemoteAddressInfoNV
+
+instance FromCStruct MemoryGetRemoteAddressInfoNV
+
+
+data PhysicalDeviceExternalMemoryRDMAFeaturesNV
+
+instance ToCStruct PhysicalDeviceExternalMemoryRDMAFeaturesNV
+instance Show PhysicalDeviceExternalMemoryRDMAFeaturesNV
+
+instance FromCStruct PhysicalDeviceExternalMemoryRDMAFeaturesNV
+
+
+-- No documentation found for TopLevel "VkRemoteAddressNV"
+type RemoteAddressNV = Ptr ()
+
diff --git a/src/Vulkan/SPIRVRequirements.hs b/src/Vulkan/SPIRVRequirements.hs
--- a/src/Vulkan/SPIRVRequirements.hs
+++ b/src/Vulkan/SPIRVRequirements.hs
@@ -665,32 +665,36 @@
   "DerivativeControl" ->
     (,) [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0] [RequireDeviceVersion $ MAKE_API_VERSION 1 0 0]
   "Geometry" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "geometryShader"
                            , checkFeature  = geometryShader :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { geometryShader = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "Tessellation" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "tessellationShader"
                            , checkFeature  = tessellationShader :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { tessellationShader = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "Float64" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderFloat64"
                            , checkFeature  = shaderFloat64 :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderFloat64 = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "Int64" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderInt64"
                            , checkFeature  = shaderInt64 :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderInt64 = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "Int64Atomics" -> (,)
     [ RequireInstanceVersion $ MAKE_API_VERSION 1 2 0
@@ -759,161 +763,182 @@
                              }
     ]
   "Int16" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderInt16"
                            , checkFeature  = shaderInt16 :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderInt16 = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "TessellationPointSize" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature
-        { featureName   = "shaderTessellationAndGeometryPointSize"
-        , checkFeature  = shaderTessellationAndGeometryPointSize :: PhysicalDeviceFeatures -> Bool
-        , enableFeature = \f -> f { shaderTessellationAndGeometryPointSize = True } :: PhysicalDeviceFeatures
-        }
+      { featureName   = "shaderTessellationAndGeometryPointSize"
+      , checkFeature  = shaderTessellationAndGeometryPointSize :: PhysicalDeviceFeatures -> Bool
+      , enableFeature = \f -> f { shaderTessellationAndGeometryPointSize = True } :: PhysicalDeviceFeatures
+      }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "GeometryPointSize" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature
-        { featureName   = "shaderTessellationAndGeometryPointSize"
-        , checkFeature  = shaderTessellationAndGeometryPointSize :: PhysicalDeviceFeatures -> Bool
-        , enableFeature = \f -> f { shaderTessellationAndGeometryPointSize = True } :: PhysicalDeviceFeatures
-        }
+      { featureName   = "shaderTessellationAndGeometryPointSize"
+      , checkFeature  = shaderTessellationAndGeometryPointSize :: PhysicalDeviceFeatures -> Bool
+      , enableFeature = \f -> f { shaderTessellationAndGeometryPointSize = True } :: PhysicalDeviceFeatures
+      }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "ImageGatherExtended" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderImageGatherExtended"
                            , checkFeature  = shaderImageGatherExtended :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderImageGatherExtended = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "StorageImageMultisample" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderStorageImageMultisample"
                            , checkFeature  = shaderStorageImageMultisample :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderStorageImageMultisample = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "UniformBufferArrayDynamicIndexing" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature
-        { featureName   = "shaderUniformBufferArrayDynamicIndexing"
-        , checkFeature  = shaderUniformBufferArrayDynamicIndexing :: PhysicalDeviceFeatures -> Bool
-        , enableFeature = \f -> f { shaderUniformBufferArrayDynamicIndexing = True } :: PhysicalDeviceFeatures
-        }
+      { featureName   = "shaderUniformBufferArrayDynamicIndexing"
+      , checkFeature  = shaderUniformBufferArrayDynamicIndexing :: PhysicalDeviceFeatures -> Bool
+      , enableFeature = \f -> f { shaderUniformBufferArrayDynamicIndexing = True } :: PhysicalDeviceFeatures
+      }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "SampledImageArrayDynamicIndexing" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature
-        { featureName   = "shaderSampledImageArrayDynamicIndexing"
-        , checkFeature  = shaderSampledImageArrayDynamicIndexing :: PhysicalDeviceFeatures -> Bool
-        , enableFeature = \f -> f { shaderSampledImageArrayDynamicIndexing = True } :: PhysicalDeviceFeatures
-        }
+      { featureName   = "shaderSampledImageArrayDynamicIndexing"
+      , checkFeature  = shaderSampledImageArrayDynamicIndexing :: PhysicalDeviceFeatures -> Bool
+      , enableFeature = \f -> f { shaderSampledImageArrayDynamicIndexing = True } :: PhysicalDeviceFeatures
+      }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "StorageBufferArrayDynamicIndexing" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature
-        { featureName   = "shaderStorageBufferArrayDynamicIndexing"
-        , checkFeature  = shaderStorageBufferArrayDynamicIndexing :: PhysicalDeviceFeatures -> Bool
-        , enableFeature = \f -> f { shaderStorageBufferArrayDynamicIndexing = True } :: PhysicalDeviceFeatures
-        }
+      { featureName   = "shaderStorageBufferArrayDynamicIndexing"
+      , checkFeature  = shaderStorageBufferArrayDynamicIndexing :: PhysicalDeviceFeatures -> Bool
+      , enableFeature = \f -> f { shaderStorageBufferArrayDynamicIndexing = True } :: PhysicalDeviceFeatures
+      }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "StorageImageArrayDynamicIndexing" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature
-        { featureName   = "shaderStorageImageArrayDynamicIndexing"
-        , checkFeature  = shaderStorageImageArrayDynamicIndexing :: PhysicalDeviceFeatures -> Bool
-        , enableFeature = \f -> f { shaderStorageImageArrayDynamicIndexing = True } :: PhysicalDeviceFeatures
-        }
+      { featureName   = "shaderStorageImageArrayDynamicIndexing"
+      , checkFeature  = shaderStorageImageArrayDynamicIndexing :: PhysicalDeviceFeatures -> Bool
+      , enableFeature = \f -> f { shaderStorageImageArrayDynamicIndexing = True } :: PhysicalDeviceFeatures
+      }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "ClipDistance" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderClipDistance"
                            , checkFeature  = shaderClipDistance :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderClipDistance = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "CullDistance" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderCullDistance"
                            , checkFeature  = shaderCullDistance :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderCullDistance = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "ImageCubeArray" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "imageCubeArray"
                            , checkFeature  = imageCubeArray :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { imageCubeArray = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "SampleRateShading" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "sampleRateShading"
                            , checkFeature  = sampleRateShading :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { sampleRateShading = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "SparseResidency" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderResourceResidency"
                            , checkFeature  = shaderResourceResidency :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderResourceResidency = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "MinLod" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderResourceMinLod"
                            , checkFeature  = shaderResourceMinLod :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderResourceMinLod = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "SampledCubeArray" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "imageCubeArray"
                            , checkFeature  = imageCubeArray :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { imageCubeArray = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "ImageMSArray" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "shaderStorageImageMultisample"
                            , checkFeature  = shaderStorageImageMultisample :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { shaderStorageImageMultisample = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "StorageImageExtendedFormats" ->
     (,) [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0] [RequireDeviceVersion $ MAKE_API_VERSION 1 0 0]
   "InterpolationFunction" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "sampleRateShading"
                            , checkFeature  = sampleRateShading :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { sampleRateShading = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "StorageImageReadWithoutFormat" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature
-        { featureName   = "shaderStorageImageReadWithoutFormat"
-        , checkFeature  = shaderStorageImageReadWithoutFormat :: PhysicalDeviceFeatures -> Bool
-        , enableFeature = \f -> f { shaderStorageImageReadWithoutFormat = True } :: PhysicalDeviceFeatures
-        }
+      { featureName   = "shaderStorageImageReadWithoutFormat"
+      , checkFeature  = shaderStorageImageReadWithoutFormat :: PhysicalDeviceFeatures -> Bool
+      , enableFeature = \f -> f { shaderStorageImageReadWithoutFormat = True } :: PhysicalDeviceFeatures
+      }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "StorageImageWriteWithoutFormat" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature
-        { featureName   = "shaderStorageImageWriteWithoutFormat"
-        , checkFeature  = shaderStorageImageWriteWithoutFormat :: PhysicalDeviceFeatures -> Bool
-        , enableFeature = \f -> f { shaderStorageImageWriteWithoutFormat = True } :: PhysicalDeviceFeatures
-        }
+      { featureName   = "shaderStorageImageWriteWithoutFormat"
+      , checkFeature  = shaderStorageImageWriteWithoutFormat :: PhysicalDeviceFeatures -> Bool
+      , enableFeature = \f -> f { shaderStorageImageWriteWithoutFormat = True } :: PhysicalDeviceFeatures
+      }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "MultiViewport" -> (,)
-    []
+    [RequireInstanceVersion $ MAKE_API_VERSION 1 0 0]
     [ RequireDeviceFeature { featureName   = "multiViewport"
                            , checkFeature  = multiViewport :: PhysicalDeviceFeatures -> Bool
                            , enableFeature = \f -> f { multiViewport = True } :: PhysicalDeviceFeatures
                            }
+    , RequireDeviceVersion $ MAKE_API_VERSION 1 0 0
     ]
   "DrawParameters" -> (,)
     [RequireInstanceVersion $ MAKE_API_VERSION 1 2 0]
diff --git a/src/Vulkan/Version.hs b/src/Vulkan/Version.hs
--- a/src/Vulkan/Version.hs
+++ b/src/Vulkan/Version.hs
@@ -19,11 +19,11 @@
 import Data.Word (Word32)
 
 pattern HEADER_VERSION :: Word32
-pattern HEADER_VERSION = 183
+pattern HEADER_VERSION = 184
 
 
 pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 183
+pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 184
 
 
 pattern MAKE_API_VERSION :: Word32 -> Word32 -> Word32 -> Word32
diff --git a/vulkan.cabal b/vulkan.cabal
--- a/vulkan.cabal
+++ b/vulkan.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           vulkan
-version:        3.11.1
+version:        3.11.2
 synopsis:       Bindings to the Vulkan graphics API.
 description:    Please see [the readme](https://github.com/expipiplus1/vulkan/#readme)
 category:       Graphics
@@ -465,6 +465,7 @@
       Vulkan.Extensions.VK_NV_device_generated_commands
       Vulkan.Extensions.VK_NV_external_memory
       Vulkan.Extensions.VK_NV_external_memory_capabilities
+      Vulkan.Extensions.VK_NV_external_memory_rdma
       Vulkan.Extensions.VK_NV_external_memory_win32
       Vulkan.Extensions.VK_NV_fill_rectangle
       Vulkan.Extensions.VK_NV_fragment_coverage_to_color
