Reland vulkan-198[G3]: guest codegen

Bug: 187216205
Change-Id: I516bb11a92385806f0d9028a3ae948a05023de4c
diff --git a/system/vulkan_enc/func_table.cpp b/system/vulkan_enc/func_table.cpp
index a27e40f..d19f969 100644
--- a/system/vulkan_enc/func_table.cpp
+++ b/system/vulkan_enc/func_table.cpp
@@ -2812,6 +2812,271 @@
 #endif
 #ifdef VK_KHR_sampler_mirror_clamp_to_edge
 #endif
+#ifdef VK_KHR_video_queue
+static VkResult entry_vkGetPhysicalDeviceVideoCapabilitiesKHR(
+    VkPhysicalDevice physicalDevice,
+    const VkVideoProfileKHR* pVideoProfile,
+    VkVideoCapabilitiesKHR* pCapabilities)
+{
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceVideoCapabilitiesKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetPhysicalDeviceVideoCapabilitiesKHR_VkResult_return = (VkResult)0;
+    vkGetPhysicalDeviceVideoCapabilitiesKHR_VkResult_return = vkEnc->vkGetPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, pVideoProfile, pCapabilities, true /* do lock */);
+    return vkGetPhysicalDeviceVideoCapabilitiesKHR_VkResult_return;
+}
+static VkResult entry_vkGetPhysicalDeviceVideoFormatPropertiesKHR(
+    VkPhysicalDevice physicalDevice,
+    const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo,
+    uint32_t* pVideoFormatPropertyCount,
+    VkVideoFormatPropertiesKHR* pVideoFormatProperties)
+{
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceVideoFormatPropertiesKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetPhysicalDeviceVideoFormatPropertiesKHR_VkResult_return = (VkResult)0;
+    vkGetPhysicalDeviceVideoFormatPropertiesKHR_VkResult_return = vkEnc->vkGetPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties, true /* do lock */);
+    return vkGetPhysicalDeviceVideoFormatPropertiesKHR_VkResult_return;
+}
+static VkResult entry_vkCreateVideoSessionKHR(
+    VkDevice device,
+    const VkVideoSessionCreateInfoKHR* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkVideoSessionKHR* pVideoSession)
+{
+    AEMU_SCOPED_TRACE("vkCreateVideoSessionKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateVideoSessionKHR_VkResult_return = (VkResult)0;
+    vkCreateVideoSessionKHR_VkResult_return = vkEnc->vkCreateVideoSessionKHR(device, pCreateInfo, pAllocator, pVideoSession, true /* do lock */);
+    return vkCreateVideoSessionKHR_VkResult_return;
+}
+static VkResult dynCheck_entry_vkCreateVideoSessionKHR(
+    VkDevice device,
+    const VkVideoSessionCreateInfoKHR* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkVideoSessionKHR* pVideoSession)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkCreateVideoSessionKHR", "VK_KHR_video_queue");
+    }
+    AEMU_SCOPED_TRACE("vkCreateVideoSessionKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateVideoSessionKHR_VkResult_return = (VkResult)0;
+    vkCreateVideoSessionKHR_VkResult_return = vkEnc->vkCreateVideoSessionKHR(device, pCreateInfo, pAllocator, pVideoSession, true /* do lock */);
+    return vkCreateVideoSessionKHR_VkResult_return;
+}
+static void entry_vkDestroyVideoSessionKHR(
+    VkDevice device,
+    VkVideoSessionKHR videoSession,
+    const VkAllocationCallbacks* pAllocator)
+{
+    AEMU_SCOPED_TRACE("vkDestroyVideoSessionKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyVideoSessionKHR(device, videoSession, pAllocator, true /* do lock */);
+}
+static void dynCheck_entry_vkDestroyVideoSessionKHR(
+    VkDevice device,
+    VkVideoSessionKHR videoSession,
+    const VkAllocationCallbacks* pAllocator)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkDestroyVideoSessionKHR", "VK_KHR_video_queue");
+    }
+    AEMU_SCOPED_TRACE("vkDestroyVideoSessionKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyVideoSessionKHR(device, videoSession, pAllocator, true /* do lock */);
+}
+static VkResult entry_vkGetVideoSessionMemoryRequirementsKHR(
+    VkDevice device,
+    VkVideoSessionKHR videoSession,
+    uint32_t* pVideoSessionMemoryRequirementsCount,
+    VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements)
+{
+    AEMU_SCOPED_TRACE("vkGetVideoSessionMemoryRequirementsKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetVideoSessionMemoryRequirementsKHR_VkResult_return = (VkResult)0;
+    vkGetVideoSessionMemoryRequirementsKHR_VkResult_return = vkEnc->vkGetVideoSessionMemoryRequirementsKHR(device, videoSession, pVideoSessionMemoryRequirementsCount, pVideoSessionMemoryRequirements, true /* do lock */);
+    return vkGetVideoSessionMemoryRequirementsKHR_VkResult_return;
+}
+static VkResult dynCheck_entry_vkGetVideoSessionMemoryRequirementsKHR(
+    VkDevice device,
+    VkVideoSessionKHR videoSession,
+    uint32_t* pVideoSessionMemoryRequirementsCount,
+    VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetVideoSessionMemoryRequirementsKHR", "VK_KHR_video_queue");
+    }
+    AEMU_SCOPED_TRACE("vkGetVideoSessionMemoryRequirementsKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetVideoSessionMemoryRequirementsKHR_VkResult_return = (VkResult)0;
+    vkGetVideoSessionMemoryRequirementsKHR_VkResult_return = vkEnc->vkGetVideoSessionMemoryRequirementsKHR(device, videoSession, pVideoSessionMemoryRequirementsCount, pVideoSessionMemoryRequirements, true /* do lock */);
+    return vkGetVideoSessionMemoryRequirementsKHR_VkResult_return;
+}
+static VkResult entry_vkBindVideoSessionMemoryKHR(
+    VkDevice device,
+    VkVideoSessionKHR videoSession,
+    uint32_t videoSessionBindMemoryCount,
+    const VkVideoBindMemoryKHR* pVideoSessionBindMemories)
+{
+    AEMU_SCOPED_TRACE("vkBindVideoSessionMemoryKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkBindVideoSessionMemoryKHR_VkResult_return = (VkResult)0;
+    vkBindVideoSessionMemoryKHR_VkResult_return = vkEnc->vkBindVideoSessionMemoryKHR(device, videoSession, videoSessionBindMemoryCount, pVideoSessionBindMemories, true /* do lock */);
+    return vkBindVideoSessionMemoryKHR_VkResult_return;
+}
+static VkResult dynCheck_entry_vkBindVideoSessionMemoryKHR(
+    VkDevice device,
+    VkVideoSessionKHR videoSession,
+    uint32_t videoSessionBindMemoryCount,
+    const VkVideoBindMemoryKHR* pVideoSessionBindMemories)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkBindVideoSessionMemoryKHR", "VK_KHR_video_queue");
+    }
+    AEMU_SCOPED_TRACE("vkBindVideoSessionMemoryKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkBindVideoSessionMemoryKHR_VkResult_return = (VkResult)0;
+    vkBindVideoSessionMemoryKHR_VkResult_return = vkEnc->vkBindVideoSessionMemoryKHR(device, videoSession, videoSessionBindMemoryCount, pVideoSessionBindMemories, true /* do lock */);
+    return vkBindVideoSessionMemoryKHR_VkResult_return;
+}
+static VkResult entry_vkCreateVideoSessionParametersKHR(
+    VkDevice device,
+    const VkVideoSessionParametersCreateInfoKHR* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkVideoSessionParametersKHR* pVideoSessionParameters)
+{
+    AEMU_SCOPED_TRACE("vkCreateVideoSessionParametersKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateVideoSessionParametersKHR_VkResult_return = (VkResult)0;
+    vkCreateVideoSessionParametersKHR_VkResult_return = vkEnc->vkCreateVideoSessionParametersKHR(device, pCreateInfo, pAllocator, pVideoSessionParameters, true /* do lock */);
+    return vkCreateVideoSessionParametersKHR_VkResult_return;
+}
+static VkResult dynCheck_entry_vkCreateVideoSessionParametersKHR(
+    VkDevice device,
+    const VkVideoSessionParametersCreateInfoKHR* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkVideoSessionParametersKHR* pVideoSessionParameters)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkCreateVideoSessionParametersKHR", "VK_KHR_video_queue");
+    }
+    AEMU_SCOPED_TRACE("vkCreateVideoSessionParametersKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateVideoSessionParametersKHR_VkResult_return = (VkResult)0;
+    vkCreateVideoSessionParametersKHR_VkResult_return = vkEnc->vkCreateVideoSessionParametersKHR(device, pCreateInfo, pAllocator, pVideoSessionParameters, true /* do lock */);
+    return vkCreateVideoSessionParametersKHR_VkResult_return;
+}
+static VkResult entry_vkUpdateVideoSessionParametersKHR(
+    VkDevice device,
+    VkVideoSessionParametersKHR videoSessionParameters,
+    const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo)
+{
+    AEMU_SCOPED_TRACE("vkUpdateVideoSessionParametersKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkUpdateVideoSessionParametersKHR_VkResult_return = (VkResult)0;
+    vkUpdateVideoSessionParametersKHR_VkResult_return = vkEnc->vkUpdateVideoSessionParametersKHR(device, videoSessionParameters, pUpdateInfo, true /* do lock */);
+    return vkUpdateVideoSessionParametersKHR_VkResult_return;
+}
+static VkResult dynCheck_entry_vkUpdateVideoSessionParametersKHR(
+    VkDevice device,
+    VkVideoSessionParametersKHR videoSessionParameters,
+    const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkUpdateVideoSessionParametersKHR", "VK_KHR_video_queue");
+    }
+    AEMU_SCOPED_TRACE("vkUpdateVideoSessionParametersKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkUpdateVideoSessionParametersKHR_VkResult_return = (VkResult)0;
+    vkUpdateVideoSessionParametersKHR_VkResult_return = vkEnc->vkUpdateVideoSessionParametersKHR(device, videoSessionParameters, pUpdateInfo, true /* do lock */);
+    return vkUpdateVideoSessionParametersKHR_VkResult_return;
+}
+static void entry_vkDestroyVideoSessionParametersKHR(
+    VkDevice device,
+    VkVideoSessionParametersKHR videoSessionParameters,
+    const VkAllocationCallbacks* pAllocator)
+{
+    AEMU_SCOPED_TRACE("vkDestroyVideoSessionParametersKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyVideoSessionParametersKHR(device, videoSessionParameters, pAllocator, true /* do lock */);
+}
+static void dynCheck_entry_vkDestroyVideoSessionParametersKHR(
+    VkDevice device,
+    VkVideoSessionParametersKHR videoSessionParameters,
+    const VkAllocationCallbacks* pAllocator)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkDestroyVideoSessionParametersKHR", "VK_KHR_video_queue");
+    }
+    AEMU_SCOPED_TRACE("vkDestroyVideoSessionParametersKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyVideoSessionParametersKHR(device, videoSessionParameters, pAllocator, true /* do lock */);
+}
+static void entry_vkCmdBeginVideoCodingKHR(
+    VkCommandBuffer commandBuffer,
+    const VkVideoBeginCodingInfoKHR* pBeginInfo)
+{
+    AEMU_SCOPED_TRACE("vkCmdBeginVideoCodingKHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdBeginVideoCodingKHR(commandBuffer, pBeginInfo, true /* do lock */);
+}
+static void entry_vkCmdEndVideoCodingKHR(
+    VkCommandBuffer commandBuffer,
+    const VkVideoEndCodingInfoKHR* pEndCodingInfo)
+{
+    AEMU_SCOPED_TRACE("vkCmdEndVideoCodingKHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdEndVideoCodingKHR(commandBuffer, pEndCodingInfo, true /* do lock */);
+}
+static void entry_vkCmdControlVideoCodingKHR(
+    VkCommandBuffer commandBuffer,
+    const VkVideoCodingControlInfoKHR* pCodingControlInfo)
+{
+    AEMU_SCOPED_TRACE("vkCmdControlVideoCodingKHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdControlVideoCodingKHR(commandBuffer, pCodingControlInfo, true /* do lock */);
+}
+#endif
+#ifdef VK_KHR_video_decode_queue
+static void entry_vkCmdDecodeVideoKHR(
+    VkCommandBuffer commandBuffer,
+    const VkVideoDecodeInfoKHR* pFrameInfo)
+{
+    AEMU_SCOPED_TRACE("vkCmdDecodeVideoKHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdDecodeVideoKHR(commandBuffer, pFrameInfo, true /* do lock */);
+}
+#endif
+#ifdef VK_KHR_dynamic_rendering
+static void entry_vkCmdBeginRenderingKHR(
+    VkCommandBuffer commandBuffer,
+    const VkRenderingInfoKHR* pRenderingInfo)
+{
+    AEMU_SCOPED_TRACE("vkCmdBeginRenderingKHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdBeginRenderingKHR(commandBuffer, pRenderingInfo, true /* do lock */);
+}
+static void entry_vkCmdEndRenderingKHR(
+    VkCommandBuffer commandBuffer)
+{
+    AEMU_SCOPED_TRACE("vkCmdEndRenderingKHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdEndRenderingKHR(commandBuffer, true /* do lock */);
+}
+#endif
 #ifdef VK_KHR_multiview
 #endif
 #ifdef VK_KHR_get_physical_device_properties2
@@ -4069,6 +4334,37 @@
 #endif
 #ifdef VK_KHR_separate_depth_stencil_layouts
 #endif
+#ifdef VK_KHR_present_wait
+static VkResult entry_vkWaitForPresentKHR(
+    VkDevice device,
+    VkSwapchainKHR swapchain,
+    uint64_t presentId,
+    uint64_t timeout)
+{
+    AEMU_SCOPED_TRACE("vkWaitForPresentKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkWaitForPresentKHR_VkResult_return = (VkResult)0;
+    vkWaitForPresentKHR_VkResult_return = vkEnc->vkWaitForPresentKHR(device, swapchain, presentId, timeout, true /* do lock */);
+    return vkWaitForPresentKHR_VkResult_return;
+}
+static VkResult dynCheck_entry_vkWaitForPresentKHR(
+    VkDevice device,
+    VkSwapchainKHR swapchain,
+    uint64_t presentId,
+    uint64_t timeout)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_present_wait"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkWaitForPresentKHR", "VK_KHR_present_wait");
+    }
+    AEMU_SCOPED_TRACE("vkWaitForPresentKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkWaitForPresentKHR_VkResult_return = (VkResult)0;
+    vkWaitForPresentKHR_VkResult_return = vkEnc->vkWaitForPresentKHR(device, swapchain, presentId, timeout, true /* do lock */);
+    return vkWaitForPresentKHR_VkResult_return;
+}
+#endif
 #ifdef VK_KHR_uniform_buffer_standard_layout
 #endif
 #ifdef VK_KHR_buffer_device_address
@@ -4364,10 +4660,110 @@
     return vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return;
 }
 #endif
+#ifdef VK_KHR_shader_integer_dot_product
+#endif
 #ifdef VK_KHR_pipeline_library
 #endif
 #ifdef VK_KHR_shader_non_semantic_info
 #endif
+#ifdef VK_KHR_present_id
+#endif
+#ifdef VK_KHR_video_encode_queue
+static void entry_vkCmdEncodeVideoKHR(
+    VkCommandBuffer commandBuffer,
+    const VkVideoEncodeInfoKHR* pEncodeInfo)
+{
+    AEMU_SCOPED_TRACE("vkCmdEncodeVideoKHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdEncodeVideoKHR(commandBuffer, pEncodeInfo, true /* do lock */);
+}
+#endif
+#ifdef VK_KHR_synchronization2
+static void entry_vkCmdSetEvent2KHR(
+    VkCommandBuffer commandBuffer,
+    VkEvent event,
+    const VkDependencyInfoKHR* pDependencyInfo)
+{
+    AEMU_SCOPED_TRACE("vkCmdSetEvent2KHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdSetEvent2KHR(commandBuffer, event, pDependencyInfo, true /* do lock */);
+}
+static void entry_vkCmdResetEvent2KHR(
+    VkCommandBuffer commandBuffer,
+    VkEvent event,
+    VkPipelineStageFlags2KHR stageMask)
+{
+    AEMU_SCOPED_TRACE("vkCmdResetEvent2KHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdResetEvent2KHR(commandBuffer, event, stageMask, true /* do lock */);
+}
+static void entry_vkCmdWaitEvents2KHR(
+    VkCommandBuffer commandBuffer,
+    uint32_t eventCount,
+    const VkEvent* pEvents,
+    const VkDependencyInfoKHR* pDependencyInfos)
+{
+    AEMU_SCOPED_TRACE("vkCmdWaitEvents2KHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdWaitEvents2KHR(commandBuffer, eventCount, pEvents, pDependencyInfos, true /* do lock */);
+}
+static void entry_vkCmdPipelineBarrier2KHR(
+    VkCommandBuffer commandBuffer,
+    const VkDependencyInfoKHR* pDependencyInfo)
+{
+    AEMU_SCOPED_TRACE("vkCmdPipelineBarrier2KHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdPipelineBarrier2KHR(commandBuffer, pDependencyInfo, true /* do lock */);
+}
+static void entry_vkCmdWriteTimestamp2KHR(
+    VkCommandBuffer commandBuffer,
+    VkPipelineStageFlags2KHR stage,
+    VkQueryPool queryPool,
+    uint32_t query)
+{
+    AEMU_SCOPED_TRACE("vkCmdWriteTimestamp2KHR");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdWriteTimestamp2KHR(commandBuffer, stage, queryPool, query, true /* do lock */);
+}
+static VkResult entry_vkQueueSubmit2KHR(
+    VkQueue queue,
+    uint32_t submitCount,
+    const VkSubmitInfo2KHR* pSubmits,
+    VkFence fence)
+{
+    AEMU_SCOPED_TRACE("vkQueueSubmit2KHR");
+    auto vkEnc = ResourceTracker::getQueueEncoder(queue);
+    VkResult vkQueueSubmit2KHR_VkResult_return = (VkResult)0;
+    vkQueueSubmit2KHR_VkResult_return = vkEnc->vkQueueSubmit2KHR(queue, submitCount, pSubmits, fence, true /* do lock */);
+    return vkQueueSubmit2KHR_VkResult_return;
+}
+static void entry_vkCmdWriteBufferMarker2AMD(
+    VkCommandBuffer commandBuffer,
+    VkPipelineStageFlags2KHR stage,
+    VkBuffer dstBuffer,
+    VkDeviceSize dstOffset,
+    uint32_t marker)
+{
+    AEMU_SCOPED_TRACE("vkCmdWriteBufferMarker2AMD");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdWriteBufferMarker2AMD(commandBuffer, stage, dstBuffer, dstOffset, marker, true /* do lock */);
+}
+static void entry_vkGetQueueCheckpointData2NV(
+    VkQueue queue,
+    uint32_t* pCheckpointDataCount,
+    VkCheckpointData2NV* pCheckpointData)
+{
+    AEMU_SCOPED_TRACE("vkGetQueueCheckpointData2NV");
+    auto vkEnc = ResourceTracker::getQueueEncoder(queue);
+    vkEnc->vkGetQueueCheckpointData2NV(queue, pCheckpointDataCount, pCheckpointData, true /* do lock */);
+}
+#endif
+#ifdef VK_KHR_shader_subgroup_uniform_control_flow
+#endif
+#ifdef VK_KHR_zero_initialize_workgroup_memory
+#endif
+#ifdef VK_KHR_workgroup_memory_explicit_layout
+#endif
 #ifdef VK_KHR_copy_commands2
 static void entry_vkCmdCopyBuffer2KHR(
     VkCommandBuffer commandBuffer,
@@ -4418,6 +4814,81 @@
     vkEnc->vkCmdResolveImage2KHR(commandBuffer, pResolveImageInfo, true /* do lock */);
 }
 #endif
+#ifdef VK_KHR_format_feature_flags2
+#endif
+#ifdef VK_KHR_maintenance4
+static void entry_vkGetDeviceBufferMemoryRequirementsKHR(
+    VkDevice device,
+    const VkDeviceBufferMemoryRequirementsKHR* pInfo,
+    VkMemoryRequirements2* pMemoryRequirements)
+{
+    AEMU_SCOPED_TRACE("vkGetDeviceBufferMemoryRequirementsKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkGetDeviceBufferMemoryRequirementsKHR(device, pInfo, pMemoryRequirements, true /* do lock */);
+}
+static void dynCheck_entry_vkGetDeviceBufferMemoryRequirementsKHR(
+    VkDevice device,
+    const VkDeviceBufferMemoryRequirementsKHR* pInfo,
+    VkMemoryRequirements2* pMemoryRequirements)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_maintenance4"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetDeviceBufferMemoryRequirementsKHR", "VK_KHR_maintenance4");
+    }
+    AEMU_SCOPED_TRACE("vkGetDeviceBufferMemoryRequirementsKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkGetDeviceBufferMemoryRequirementsKHR(device, pInfo, pMemoryRequirements, true /* do lock */);
+}
+static void entry_vkGetDeviceImageMemoryRequirementsKHR(
+    VkDevice device,
+    const VkDeviceImageMemoryRequirementsKHR* pInfo,
+    VkMemoryRequirements2* pMemoryRequirements)
+{
+    AEMU_SCOPED_TRACE("vkGetDeviceImageMemoryRequirementsKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkGetDeviceImageMemoryRequirementsKHR(device, pInfo, pMemoryRequirements, true /* do lock */);
+}
+static void dynCheck_entry_vkGetDeviceImageMemoryRequirementsKHR(
+    VkDevice device,
+    const VkDeviceImageMemoryRequirementsKHR* pInfo,
+    VkMemoryRequirements2* pMemoryRequirements)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_maintenance4"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetDeviceImageMemoryRequirementsKHR", "VK_KHR_maintenance4");
+    }
+    AEMU_SCOPED_TRACE("vkGetDeviceImageMemoryRequirementsKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkGetDeviceImageMemoryRequirementsKHR(device, pInfo, pMemoryRequirements, true /* do lock */);
+}
+static void entry_vkGetDeviceImageSparseMemoryRequirementsKHR(
+    VkDevice device,
+    const VkDeviceImageMemoryRequirementsKHR* pInfo,
+    uint32_t* pSparseMemoryRequirementCount,
+    VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
+{
+    AEMU_SCOPED_TRACE("vkGetDeviceImageSparseMemoryRequirementsKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkGetDeviceImageSparseMemoryRequirementsKHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements, true /* do lock */);
+}
+static void dynCheck_entry_vkGetDeviceImageSparseMemoryRequirementsKHR(
+    VkDevice device,
+    const VkDeviceImageMemoryRequirementsKHR* pInfo,
+    uint32_t* pSparseMemoryRequirementCount,
+    VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_KHR_maintenance4"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetDeviceImageSparseMemoryRequirementsKHR", "VK_KHR_maintenance4");
+    }
+    AEMU_SCOPED_TRACE("vkGetDeviceImageSparseMemoryRequirementsKHR");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkGetDeviceImageSparseMemoryRequirementsKHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements, true /* do lock */);
+}
+#endif
 #ifdef VK_ANDROID_native_buffer
 static VkResult entry_vkGetSwapchainGrallocUsageANDROID(
     VkDevice device,
@@ -4692,6 +5163,120 @@
     vkEnc->vkCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride, true /* do lock */);
 }
 #endif
+#ifdef VK_NVX_binary_import
+static VkResult entry_vkCreateCuModuleNVX(
+    VkDevice device,
+    const VkCuModuleCreateInfoNVX* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkCuModuleNVX* pModule)
+{
+    AEMU_SCOPED_TRACE("vkCreateCuModuleNVX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateCuModuleNVX_VkResult_return = (VkResult)0;
+    vkCreateCuModuleNVX_VkResult_return = vkEnc->vkCreateCuModuleNVX(device, pCreateInfo, pAllocator, pModule, true /* do lock */);
+    return vkCreateCuModuleNVX_VkResult_return;
+}
+static VkResult dynCheck_entry_vkCreateCuModuleNVX(
+    VkDevice device,
+    const VkCuModuleCreateInfoNVX* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkCuModuleNVX* pModule)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_NVX_binary_import"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkCreateCuModuleNVX", "VK_NVX_binary_import");
+    }
+    AEMU_SCOPED_TRACE("vkCreateCuModuleNVX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateCuModuleNVX_VkResult_return = (VkResult)0;
+    vkCreateCuModuleNVX_VkResult_return = vkEnc->vkCreateCuModuleNVX(device, pCreateInfo, pAllocator, pModule, true /* do lock */);
+    return vkCreateCuModuleNVX_VkResult_return;
+}
+static VkResult entry_vkCreateCuFunctionNVX(
+    VkDevice device,
+    const VkCuFunctionCreateInfoNVX* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkCuFunctionNVX* pFunction)
+{
+    AEMU_SCOPED_TRACE("vkCreateCuFunctionNVX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateCuFunctionNVX_VkResult_return = (VkResult)0;
+    vkCreateCuFunctionNVX_VkResult_return = vkEnc->vkCreateCuFunctionNVX(device, pCreateInfo, pAllocator, pFunction, true /* do lock */);
+    return vkCreateCuFunctionNVX_VkResult_return;
+}
+static VkResult dynCheck_entry_vkCreateCuFunctionNVX(
+    VkDevice device,
+    const VkCuFunctionCreateInfoNVX* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkCuFunctionNVX* pFunction)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_NVX_binary_import"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkCreateCuFunctionNVX", "VK_NVX_binary_import");
+    }
+    AEMU_SCOPED_TRACE("vkCreateCuFunctionNVX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateCuFunctionNVX_VkResult_return = (VkResult)0;
+    vkCreateCuFunctionNVX_VkResult_return = vkEnc->vkCreateCuFunctionNVX(device, pCreateInfo, pAllocator, pFunction, true /* do lock */);
+    return vkCreateCuFunctionNVX_VkResult_return;
+}
+static void entry_vkDestroyCuModuleNVX(
+    VkDevice device,
+    VkCuModuleNVX module,
+    const VkAllocationCallbacks* pAllocator)
+{
+    AEMU_SCOPED_TRACE("vkDestroyCuModuleNVX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyCuModuleNVX(device, module, pAllocator, true /* do lock */);
+}
+static void dynCheck_entry_vkDestroyCuModuleNVX(
+    VkDevice device,
+    VkCuModuleNVX module,
+    const VkAllocationCallbacks* pAllocator)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_NVX_binary_import"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkDestroyCuModuleNVX", "VK_NVX_binary_import");
+    }
+    AEMU_SCOPED_TRACE("vkDestroyCuModuleNVX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyCuModuleNVX(device, module, pAllocator, true /* do lock */);
+}
+static void entry_vkDestroyCuFunctionNVX(
+    VkDevice device,
+    VkCuFunctionNVX function,
+    const VkAllocationCallbacks* pAllocator)
+{
+    AEMU_SCOPED_TRACE("vkDestroyCuFunctionNVX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyCuFunctionNVX(device, function, pAllocator, true /* do lock */);
+}
+static void dynCheck_entry_vkDestroyCuFunctionNVX(
+    VkDevice device,
+    VkCuFunctionNVX function,
+    const VkAllocationCallbacks* pAllocator)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_NVX_binary_import"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkDestroyCuFunctionNVX", "VK_NVX_binary_import");
+    }
+    AEMU_SCOPED_TRACE("vkDestroyCuFunctionNVX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyCuFunctionNVX(device, function, pAllocator, true /* do lock */);
+}
+static void entry_vkCmdCuLaunchKernelNVX(
+    VkCommandBuffer commandBuffer,
+    const VkCuLaunchInfoNVX* pLaunchInfo)
+{
+    AEMU_SCOPED_TRACE("vkCmdCuLaunchKernelNVX");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdCuLaunchKernelNVX(commandBuffer, pLaunchInfo, true /* do lock */);
+}
+#endif
 #ifdef VK_NVX_image_view_handle
 static uint32_t entry_vkGetImageViewHandleNVX(
     VkDevice device,
@@ -4780,6 +5365,12 @@
 #endif
 #ifdef VK_AMD_shader_ballot
 #endif
+#ifdef VK_EXT_video_encode_h264
+#endif
+#ifdef VK_EXT_video_encode_h265
+#endif
+#ifdef VK_EXT_video_decode_h264
+#endif
 #ifdef VK_AMD_texture_gather_bias_lod
 #endif
 #ifdef VK_AMD_shader_info
@@ -6133,6 +6724,8 @@
 #endif
 #ifdef VK_AMD_shader_core_properties
 #endif
+#ifdef VK_EXT_video_decode_h265
+#endif
 #ifdef VK_AMD_memory_overallocation_behavior
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
@@ -6533,6 +7126,8 @@
 #endif
 #ifdef VK_EXT_ycbcr_image_arrays
 #endif
+#ifdef VK_EXT_provoking_vertex
+#endif
 #ifdef VK_EXT_full_screen_exclusive
 static VkResult entry_vkGetPhysicalDeviceSurfacePresentModes2EXT(
     VkPhysicalDevice physicalDevice,
@@ -6789,6 +7384,8 @@
     vkEnc->vkCmdSetStencilOpEXT(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp, true /* do lock */);
 }
 #endif
+#ifdef VK_EXT_shader_atomic_float2
+#endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
 #endif
 #ifdef VK_NV_device_generated_commands
@@ -6895,12 +7492,39 @@
     vkEnc->vkDestroyIndirectCommandsLayoutNV(device, indirectCommandsLayout, pAllocator, true /* do lock */);
 }
 #endif
+#ifdef VK_NV_inherited_viewport_scissor
+#endif
 #ifdef VK_EXT_texel_buffer_alignment
 #endif
 #ifdef VK_QCOM_render_pass_transform
 #endif
 #ifdef VK_EXT_device_memory_report
 #endif
+#ifdef VK_EXT_acquire_drm_display
+static VkResult entry_vkAcquireDrmDisplayEXT(
+    VkPhysicalDevice physicalDevice,
+    int32_t drmFd,
+    VkDisplayKHR display)
+{
+    AEMU_SCOPED_TRACE("vkAcquireDrmDisplayEXT");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkAcquireDrmDisplayEXT_VkResult_return = (VkResult)0;
+    vkAcquireDrmDisplayEXT_VkResult_return = vkEnc->vkAcquireDrmDisplayEXT(physicalDevice, drmFd, display, true /* do lock */);
+    return vkAcquireDrmDisplayEXT_VkResult_return;
+}
+static VkResult entry_vkGetDrmDisplayEXT(
+    VkPhysicalDevice physicalDevice,
+    int32_t drmFd,
+    uint32_t connectorId,
+    VkDisplayKHR* display)
+{
+    AEMU_SCOPED_TRACE("vkGetDrmDisplayEXT");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetDrmDisplayEXT_VkResult_return = (VkResult)0;
+    vkGetDrmDisplayEXT_VkResult_return = vkEnc->vkGetDrmDisplayEXT(physicalDevice, drmFd, connectorId, display, true /* do lock */);
+    return vkGetDrmDisplayEXT_VkResult_return;
+}
+#endif
 #ifdef VK_EXT_robustness2
 #endif
 #ifdef VK_EXT_custom_border_color
@@ -7036,6 +7660,10 @@
     vkEnc->vkCmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps, true /* do lock */);
 }
 #endif
+#ifdef VK_NV_ray_tracing_motion_blur
+#endif
+#ifdef VK_EXT_ycbcr_2plane_444_formats
+#endif
 #ifdef VK_EXT_fragment_density_map2
 #endif
 #ifdef VK_QCOM_rotated_copy_commands
@@ -7044,6 +7672,31 @@
 #endif
 #ifdef VK_EXT_4444_formats
 #endif
+#ifdef VK_EXT_rgba10x6_formats
+#endif
+#ifdef VK_NV_acquire_winrt_display
+static VkResult entry_vkAcquireWinrtDisplayNV(
+    VkPhysicalDevice physicalDevice,
+    VkDisplayKHR display)
+{
+    AEMU_SCOPED_TRACE("vkAcquireWinrtDisplayNV");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkAcquireWinrtDisplayNV_VkResult_return = (VkResult)0;
+    vkAcquireWinrtDisplayNV_VkResult_return = vkEnc->vkAcquireWinrtDisplayNV(physicalDevice, display, true /* do lock */);
+    return vkAcquireWinrtDisplayNV_VkResult_return;
+}
+static VkResult entry_vkGetWinrtDisplayNV(
+    VkPhysicalDevice physicalDevice,
+    uint32_t deviceRelativeId,
+    VkDisplayKHR* pDisplay)
+{
+    AEMU_SCOPED_TRACE("vkGetWinrtDisplayNV");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetWinrtDisplayNV_VkResult_return = (VkResult)0;
+    vkGetWinrtDisplayNV_VkResult_return = vkEnc->vkGetWinrtDisplayNV(physicalDevice, deviceRelativeId, pDisplay, true /* do lock */);
+    return vkGetWinrtDisplayNV_VkResult_return;
+}
+#endif
 #ifdef VK_EXT_directfb_surface
 static VkResult entry_vkCreateDirectFBSurfaceEXT(
     VkInstance instance,
@@ -7069,6 +7722,426 @@
     return vkGetPhysicalDeviceDirectFBPresentationSupportEXT_VkBool32_return;
 }
 #endif
+#ifdef VK_VALVE_mutable_descriptor_type
+#endif
+#ifdef VK_EXT_vertex_input_dynamic_state
+static void entry_vkCmdSetVertexInputEXT(
+    VkCommandBuffer commandBuffer,
+    uint32_t vertexBindingDescriptionCount,
+    const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions,
+    uint32_t vertexAttributeDescriptionCount,
+    const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions)
+{
+    AEMU_SCOPED_TRACE("vkCmdSetVertexInputEXT");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions, true /* do lock */);
+}
+#endif
+#ifdef VK_EXT_physical_device_drm
+#endif
+#ifdef VK_EXT_primitive_topology_list_restart
+#endif
+#ifdef VK_FUCHSIA_external_memory
+static VkResult entry_vkGetMemoryZirconHandleFUCHSIA(
+    VkDevice device,
+    const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
+    zx_handle_t* pZirconHandle)
+{
+    AEMU_SCOPED_TRACE("vkGetMemoryZirconHandleFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetMemoryZirconHandleFUCHSIA_VkResult_return = (VkResult)0;
+    vkGetMemoryZirconHandleFUCHSIA_VkResult_return = vkEnc->vkGetMemoryZirconHandleFUCHSIA(device, pGetZirconHandleInfo, pZirconHandle, true /* do lock */);
+    return vkGetMemoryZirconHandleFUCHSIA_VkResult_return;
+}
+static VkResult dynCheck_entry_vkGetMemoryZirconHandleFUCHSIA(
+    VkDevice device,
+    const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
+    zx_handle_t* pZirconHandle)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_FUCHSIA_external_memory"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetMemoryZirconHandleFUCHSIA", "VK_FUCHSIA_external_memory");
+    }
+    AEMU_SCOPED_TRACE("vkGetMemoryZirconHandleFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetMemoryZirconHandleFUCHSIA_VkResult_return = (VkResult)0;
+    vkGetMemoryZirconHandleFUCHSIA_VkResult_return = vkEnc->vkGetMemoryZirconHandleFUCHSIA(device, pGetZirconHandleInfo, pZirconHandle, true /* do lock */);
+    return vkGetMemoryZirconHandleFUCHSIA_VkResult_return;
+}
+static VkResult entry_vkGetMemoryZirconHandlePropertiesFUCHSIA(
+    VkDevice device,
+    VkExternalMemoryHandleTypeFlagBits handleType,
+    zx_handle_t zirconHandle,
+    VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties)
+{
+    AEMU_SCOPED_TRACE("vkGetMemoryZirconHandlePropertiesFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return = (VkResult)0;
+    vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return = vkEnc->vkGetMemoryZirconHandlePropertiesFUCHSIA(device, handleType, zirconHandle, pMemoryZirconHandleProperties, true /* do lock */);
+    return vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return;
+}
+static VkResult dynCheck_entry_vkGetMemoryZirconHandlePropertiesFUCHSIA(
+    VkDevice device,
+    VkExternalMemoryHandleTypeFlagBits handleType,
+    zx_handle_t zirconHandle,
+    VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_FUCHSIA_external_memory"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetMemoryZirconHandlePropertiesFUCHSIA", "VK_FUCHSIA_external_memory");
+    }
+    AEMU_SCOPED_TRACE("vkGetMemoryZirconHandlePropertiesFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return = (VkResult)0;
+    vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return = vkEnc->vkGetMemoryZirconHandlePropertiesFUCHSIA(device, handleType, zirconHandle, pMemoryZirconHandleProperties, true /* do lock */);
+    return vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return;
+}
+#endif
+#ifdef VK_FUCHSIA_external_semaphore
+static VkResult entry_vkImportSemaphoreZirconHandleFUCHSIA(
+    VkDevice device,
+    const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo)
+{
+    AEMU_SCOPED_TRACE("vkImportSemaphoreZirconHandleFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return = (VkResult)0;
+    vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return = vkEnc->vkImportSemaphoreZirconHandleFUCHSIA(device, pImportSemaphoreZirconHandleInfo, true /* do lock */);
+    return vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return;
+}
+static VkResult dynCheck_entry_vkImportSemaphoreZirconHandleFUCHSIA(
+    VkDevice device,
+    const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_FUCHSIA_external_semaphore"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkImportSemaphoreZirconHandleFUCHSIA", "VK_FUCHSIA_external_semaphore");
+    }
+    AEMU_SCOPED_TRACE("vkImportSemaphoreZirconHandleFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return = (VkResult)0;
+    vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return = vkEnc->vkImportSemaphoreZirconHandleFUCHSIA(device, pImportSemaphoreZirconHandleInfo, true /* do lock */);
+    return vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return;
+}
+static VkResult entry_vkGetSemaphoreZirconHandleFUCHSIA(
+    VkDevice device,
+    const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
+    zx_handle_t* pZirconHandle)
+{
+    AEMU_SCOPED_TRACE("vkGetSemaphoreZirconHandleFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return = (VkResult)0;
+    vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return = vkEnc->vkGetSemaphoreZirconHandleFUCHSIA(device, pGetZirconHandleInfo, pZirconHandle, true /* do lock */);
+    return vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return;
+}
+static VkResult dynCheck_entry_vkGetSemaphoreZirconHandleFUCHSIA(
+    VkDevice device,
+    const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
+    zx_handle_t* pZirconHandle)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_FUCHSIA_external_semaphore"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetSemaphoreZirconHandleFUCHSIA", "VK_FUCHSIA_external_semaphore");
+    }
+    AEMU_SCOPED_TRACE("vkGetSemaphoreZirconHandleFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return = (VkResult)0;
+    vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return = vkEnc->vkGetSemaphoreZirconHandleFUCHSIA(device, pGetZirconHandleInfo, pZirconHandle, true /* do lock */);
+    return vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return;
+}
+#endif
+#ifdef VK_FUCHSIA_buffer_collection
+static VkResult entry_vkCreateBufferCollectionFUCHSIA(
+    VkDevice device,
+    const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkBufferCollectionFUCHSIA* pCollection)
+{
+    AEMU_SCOPED_TRACE("vkCreateBufferCollectionFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateBufferCollectionFUCHSIA_VkResult_return = (VkResult)0;
+    vkCreateBufferCollectionFUCHSIA_VkResult_return = vkEnc->vkCreateBufferCollectionFUCHSIA(device, pCreateInfo, pAllocator, pCollection, true /* do lock */);
+    return vkCreateBufferCollectionFUCHSIA_VkResult_return;
+}
+static VkResult dynCheck_entry_vkCreateBufferCollectionFUCHSIA(
+    VkDevice device,
+    const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkBufferCollectionFUCHSIA* pCollection)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkCreateBufferCollectionFUCHSIA", "VK_FUCHSIA_buffer_collection");
+    }
+    AEMU_SCOPED_TRACE("vkCreateBufferCollectionFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateBufferCollectionFUCHSIA_VkResult_return = (VkResult)0;
+    vkCreateBufferCollectionFUCHSIA_VkResult_return = vkEnc->vkCreateBufferCollectionFUCHSIA(device, pCreateInfo, pAllocator, pCollection, true /* do lock */);
+    return vkCreateBufferCollectionFUCHSIA_VkResult_return;
+}
+static VkResult entry_vkSetBufferCollectionImageConstraintsFUCHSIA(
+    VkDevice device,
+    VkBufferCollectionFUCHSIA collection,
+    const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo)
+{
+    AEMU_SCOPED_TRACE("vkSetBufferCollectionImageConstraintsFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return = (VkResult)0;
+    vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return = vkEnc->vkSetBufferCollectionImageConstraintsFUCHSIA(device, collection, pImageConstraintsInfo, true /* do lock */);
+    return vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return;
+}
+static VkResult dynCheck_entry_vkSetBufferCollectionImageConstraintsFUCHSIA(
+    VkDevice device,
+    VkBufferCollectionFUCHSIA collection,
+    const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkSetBufferCollectionImageConstraintsFUCHSIA", "VK_FUCHSIA_buffer_collection");
+    }
+    AEMU_SCOPED_TRACE("vkSetBufferCollectionImageConstraintsFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return = (VkResult)0;
+    vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return = vkEnc->vkSetBufferCollectionImageConstraintsFUCHSIA(device, collection, pImageConstraintsInfo, true /* do lock */);
+    return vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return;
+}
+static VkResult entry_vkSetBufferCollectionBufferConstraintsFUCHSIA(
+    VkDevice device,
+    VkBufferCollectionFUCHSIA collection,
+    const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo)
+{
+    AEMU_SCOPED_TRACE("vkSetBufferCollectionBufferConstraintsFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return = (VkResult)0;
+    vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return = vkEnc->vkSetBufferCollectionBufferConstraintsFUCHSIA(device, collection, pBufferConstraintsInfo, true /* do lock */);
+    return vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return;
+}
+static VkResult dynCheck_entry_vkSetBufferCollectionBufferConstraintsFUCHSIA(
+    VkDevice device,
+    VkBufferCollectionFUCHSIA collection,
+    const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkSetBufferCollectionBufferConstraintsFUCHSIA", "VK_FUCHSIA_buffer_collection");
+    }
+    AEMU_SCOPED_TRACE("vkSetBufferCollectionBufferConstraintsFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return = (VkResult)0;
+    vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return = vkEnc->vkSetBufferCollectionBufferConstraintsFUCHSIA(device, collection, pBufferConstraintsInfo, true /* do lock */);
+    return vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return;
+}
+static void entry_vkDestroyBufferCollectionFUCHSIA(
+    VkDevice device,
+    VkBufferCollectionFUCHSIA collection,
+    const VkAllocationCallbacks* pAllocator)
+{
+    AEMU_SCOPED_TRACE("vkDestroyBufferCollectionFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyBufferCollectionFUCHSIA(device, collection, pAllocator, true /* do lock */);
+}
+static void dynCheck_entry_vkDestroyBufferCollectionFUCHSIA(
+    VkDevice device,
+    VkBufferCollectionFUCHSIA collection,
+    const VkAllocationCallbacks* pAllocator)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkDestroyBufferCollectionFUCHSIA", "VK_FUCHSIA_buffer_collection");
+    }
+    AEMU_SCOPED_TRACE("vkDestroyBufferCollectionFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkDestroyBufferCollectionFUCHSIA(device, collection, pAllocator, true /* do lock */);
+}
+static VkResult entry_vkGetBufferCollectionPropertiesFUCHSIA(
+    VkDevice device,
+    VkBufferCollectionFUCHSIA collection,
+    VkBufferCollectionPropertiesFUCHSIA* pProperties)
+{
+    AEMU_SCOPED_TRACE("vkGetBufferCollectionPropertiesFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return = (VkResult)0;
+    vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return = vkEnc->vkGetBufferCollectionPropertiesFUCHSIA(device, collection, pProperties, true /* do lock */);
+    return vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return;
+}
+static VkResult dynCheck_entry_vkGetBufferCollectionPropertiesFUCHSIA(
+    VkDevice device,
+    VkBufferCollectionFUCHSIA collection,
+    VkBufferCollectionPropertiesFUCHSIA* pProperties)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetBufferCollectionPropertiesFUCHSIA", "VK_FUCHSIA_buffer_collection");
+    }
+    AEMU_SCOPED_TRACE("vkGetBufferCollectionPropertiesFUCHSIA");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return = (VkResult)0;
+    vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return = vkEnc->vkGetBufferCollectionPropertiesFUCHSIA(device, collection, pProperties, true /* do lock */);
+    return vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return;
+}
+#endif
+#ifdef VK_HUAWEI_subpass_shading
+static VkResult entry_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(
+    VkDevice device,
+    VkRenderPass renderpass,
+    VkExtent2D* pMaxWorkgroupSize)
+{
+    AEMU_SCOPED_TRACE("vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return = (VkResult)0;
+    vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return = vkEnc->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(device, renderpass, pMaxWorkgroupSize, true /* do lock */);
+    return vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return;
+}
+static VkResult dynCheck_entry_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(
+    VkDevice device,
+    VkRenderPass renderpass,
+    VkExtent2D* pMaxWorkgroupSize)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_HUAWEI_subpass_shading"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI", "VK_HUAWEI_subpass_shading");
+    }
+    AEMU_SCOPED_TRACE("vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return = (VkResult)0;
+    vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return = vkEnc->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(device, renderpass, pMaxWorkgroupSize, true /* do lock */);
+    return vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return;
+}
+static void entry_vkCmdSubpassShadingHUAWEI(
+    VkCommandBuffer commandBuffer)
+{
+    AEMU_SCOPED_TRACE("vkCmdSubpassShadingHUAWEI");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdSubpassShadingHUAWEI(commandBuffer, true /* do lock */);
+}
+#endif
+#ifdef VK_HUAWEI_invocation_mask
+static void entry_vkCmdBindInvocationMaskHUAWEI(
+    VkCommandBuffer commandBuffer,
+    VkImageView imageView,
+    VkImageLayout imageLayout)
+{
+    AEMU_SCOPED_TRACE("vkCmdBindInvocationMaskHUAWEI");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdBindInvocationMaskHUAWEI(commandBuffer, imageView, imageLayout, true /* do lock */);
+}
+#endif
+#ifdef VK_NV_external_memory_rdma
+static VkResult entry_vkGetMemoryRemoteAddressNV(
+    VkDevice device,
+    const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo,
+    VkRemoteAddressNV* pAddress)
+{
+    AEMU_SCOPED_TRACE("vkGetMemoryRemoteAddressNV");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetMemoryRemoteAddressNV_VkResult_return = (VkResult)0;
+    vkGetMemoryRemoteAddressNV_VkResult_return = vkEnc->vkGetMemoryRemoteAddressNV(device, pMemoryGetRemoteAddressInfo, pAddress, true /* do lock */);
+    return vkGetMemoryRemoteAddressNV_VkResult_return;
+}
+static VkResult dynCheck_entry_vkGetMemoryRemoteAddressNV(
+    VkDevice device,
+    const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo,
+    VkRemoteAddressNV* pAddress)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_NV_external_memory_rdma"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkGetMemoryRemoteAddressNV", "VK_NV_external_memory_rdma");
+    }
+    AEMU_SCOPED_TRACE("vkGetMemoryRemoteAddressNV");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkGetMemoryRemoteAddressNV_VkResult_return = (VkResult)0;
+    vkGetMemoryRemoteAddressNV_VkResult_return = vkEnc->vkGetMemoryRemoteAddressNV(device, pMemoryGetRemoteAddressInfo, pAddress, true /* do lock */);
+    return vkGetMemoryRemoteAddressNV_VkResult_return;
+}
+#endif
+#ifdef VK_EXT_extended_dynamic_state2
+static void entry_vkCmdSetPatchControlPointsEXT(
+    VkCommandBuffer commandBuffer,
+    uint32_t patchControlPoints)
+{
+    AEMU_SCOPED_TRACE("vkCmdSetPatchControlPointsEXT");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints, true /* do lock */);
+}
+static void entry_vkCmdSetRasterizerDiscardEnableEXT(
+    VkCommandBuffer commandBuffer,
+    VkBool32 rasterizerDiscardEnable)
+{
+    AEMU_SCOPED_TRACE("vkCmdSetRasterizerDiscardEnableEXT");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdSetRasterizerDiscardEnableEXT(commandBuffer, rasterizerDiscardEnable, true /* do lock */);
+}
+static void entry_vkCmdSetDepthBiasEnableEXT(
+    VkCommandBuffer commandBuffer,
+    VkBool32 depthBiasEnable)
+{
+    AEMU_SCOPED_TRACE("vkCmdSetDepthBiasEnableEXT");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdSetDepthBiasEnableEXT(commandBuffer, depthBiasEnable, true /* do lock */);
+}
+static void entry_vkCmdSetLogicOpEXT(
+    VkCommandBuffer commandBuffer,
+    VkLogicOp logicOp)
+{
+    AEMU_SCOPED_TRACE("vkCmdSetLogicOpEXT");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdSetLogicOpEXT(commandBuffer, logicOp, true /* do lock */);
+}
+static void entry_vkCmdSetPrimitiveRestartEnableEXT(
+    VkCommandBuffer commandBuffer,
+    VkBool32 primitiveRestartEnable)
+{
+    AEMU_SCOPED_TRACE("vkCmdSetPrimitiveRestartEnableEXT");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdSetPrimitiveRestartEnableEXT(commandBuffer, primitiveRestartEnable, true /* do lock */);
+}
+#endif
+#ifdef VK_QNX_screen_surface
+static VkResult entry_vkCreateScreenSurfaceQNX(
+    VkInstance instance,
+    const VkScreenSurfaceCreateInfoQNX* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkSurfaceKHR* pSurface)
+{
+    AEMU_SCOPED_TRACE("vkCreateScreenSurfaceQNX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkCreateScreenSurfaceQNX_VkResult_return = (VkResult)0;
+    vkCreateScreenSurfaceQNX_VkResult_return = vkEnc->vkCreateScreenSurfaceQNX(instance, pCreateInfo, pAllocator, pSurface, true /* do lock */);
+    return vkCreateScreenSurfaceQNX_VkResult_return;
+}
+static VkBool32 entry_vkGetPhysicalDeviceScreenPresentationSupportQNX(
+    VkPhysicalDevice physicalDevice,
+    uint32_t queueFamilyIndex,
+    _screen_window* window)
+{
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceScreenPresentationSupportQNX");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkBool32 vkGetPhysicalDeviceScreenPresentationSupportQNX_VkBool32_return = (VkBool32)0;
+    vkGetPhysicalDeviceScreenPresentationSupportQNX_VkBool32_return = vkEnc->vkGetPhysicalDeviceScreenPresentationSupportQNX(physicalDevice, queueFamilyIndex, window, true /* do lock */);
+    return vkGetPhysicalDeviceScreenPresentationSupportQNX_VkBool32_return;
+}
+#endif
+#ifdef VK_EXT_color_write_enable
+static void entry_vkCmdSetColorWriteEnableEXT(
+    VkCommandBuffer commandBuffer,
+    uint32_t attachmentCount,
+    const VkBool32* pColorWriteEnables)
+{
+    AEMU_SCOPED_TRACE("vkCmdSetColorWriteEnableEXT");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables, true /* do lock */);
+}
+#endif
 #ifdef VK_GOOGLE_gfxstream
 static VkResult entry_vkRegisterImageColorBufferGOOGLE(
     VkDevice device,
@@ -7468,6 +8541,64 @@
     vkEnc->vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(queue, waitSemaphoreCount, pWaitSemaphores, image, true /* do lock */);
 }
 #endif
+#ifdef VK_EXT_global_priority_query
+#endif
+#ifdef VK_EXT_multi_draw
+static void entry_vkCmdDrawMultiEXT(
+    VkCommandBuffer commandBuffer,
+    uint32_t drawCount,
+    const VkMultiDrawInfoEXT* pVertexInfo,
+    uint32_t instanceCount,
+    uint32_t firstInstance,
+    uint32_t stride)
+{
+    AEMU_SCOPED_TRACE("vkCmdDrawMultiEXT");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdDrawMultiEXT(commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride, true /* do lock */);
+}
+static void entry_vkCmdDrawMultiIndexedEXT(
+    VkCommandBuffer commandBuffer,
+    uint32_t drawCount,
+    const VkMultiDrawIndexedInfoEXT* pIndexInfo,
+    uint32_t instanceCount,
+    uint32_t firstInstance,
+    uint32_t stride,
+    const int32_t* pVertexOffset)
+{
+    AEMU_SCOPED_TRACE("vkCmdDrawMultiIndexedEXT");
+    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
+    vkEnc->vkCmdDrawMultiIndexedEXT(commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset, true /* do lock */);
+}
+#endif
+#ifdef VK_EXT_load_store_op_none
+#endif
+#ifdef VK_EXT_border_color_swizzle
+#endif
+#ifdef VK_EXT_pageable_device_local_memory
+static void entry_vkSetDeviceMemoryPriorityEXT(
+    VkDevice device,
+    VkDeviceMemory memory,
+    float priority)
+{
+    AEMU_SCOPED_TRACE("vkSetDeviceMemoryPriorityEXT");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkSetDeviceMemoryPriorityEXT(device, memory, priority, true /* do lock */);
+}
+static void dynCheck_entry_vkSetDeviceMemoryPriorityEXT(
+    VkDevice device,
+    VkDeviceMemory memory,
+    float priority)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_EXT_pageable_device_local_memory"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkSetDeviceMemoryPriorityEXT", "VK_EXT_pageable_device_local_memory");
+    }
+    AEMU_SCOPED_TRACE("vkSetDeviceMemoryPriorityEXT");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    vkEnc->vkSetDeviceMemoryPriorityEXT(device, memory, priority, true /* do lock */);
+}
+#endif
 #ifdef VK_KHR_acceleration_structure
 static VkResult entry_vkCreateAccelerationStructureKHR(
     VkDevice device,
@@ -8798,6 +9929,72 @@
         return nullptr;
     }
 #endif
+#ifdef VK_KHR_video_queue
+    if (!strcmp(name, "vkGetPhysicalDeviceVideoCapabilitiesKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetPhysicalDeviceVideoFormatPropertiesKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCreateVideoSessionKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkDestroyVideoSessionKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetVideoSessionMemoryRequirementsKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkBindVideoSessionMemoryKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCreateVideoSessionParametersKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkUpdateVideoSessionParametersKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkDestroyVideoSessionParametersKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdBeginVideoCodingKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdEndVideoCodingKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdControlVideoCodingKHR"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_KHR_video_decode_queue
+    if (!strcmp(name, "vkCmdDecodeVideoKHR"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_KHR_dynamic_rendering
+    if (!strcmp(name, "vkCmdBeginRenderingKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdEndRenderingKHR"))
+    {
+        return nullptr;
+    }
+#endif
 #ifdef VK_KHR_get_physical_device_properties2
     if (!strcmp(name, "vkGetPhysicalDeviceFeatures2KHR"))
     {
@@ -9100,6 +10297,12 @@
         return nullptr;
     }
 #endif
+#ifdef VK_KHR_present_wait
+    if (!strcmp(name, "vkWaitForPresentKHR"))
+    {
+        return nullptr;
+    }
+#endif
 #ifdef VK_KHR_buffer_device_address
     if (!strcmp(name, "vkGetBufferDeviceAddressKHR"))
     {
@@ -9150,6 +10353,46 @@
         return nullptr;
     }
 #endif
+#ifdef VK_KHR_video_encode_queue
+    if (!strcmp(name, "vkCmdEncodeVideoKHR"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_KHR_synchronization2
+    if (!strcmp(name, "vkCmdSetEvent2KHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdResetEvent2KHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdWaitEvents2KHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdPipelineBarrier2KHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdWriteTimestamp2KHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkQueueSubmit2KHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdWriteBufferMarker2AMD"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetQueueCheckpointData2NV"))
+    {
+        return nullptr;
+    }
+#endif
 #ifdef VK_KHR_copy_commands2
     if (!strcmp(name, "vkCmdCopyBuffer2KHR"))
     {
@@ -9176,6 +10419,20 @@
         return nullptr;
     }
 #endif
+#ifdef VK_KHR_maintenance4
+    if (!strcmp(name, "vkGetDeviceBufferMemoryRequirementsKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetDeviceImageMemoryRequirementsKHR"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetDeviceImageSparseMemoryRequirementsKHR"))
+    {
+        return nullptr;
+    }
+#endif
 #ifdef VK_ANDROID_native_buffer
     if (!strcmp(name, "vkGetSwapchainGrallocUsageANDROID"))
     {
@@ -9252,6 +10509,28 @@
         return nullptr;
     }
 #endif
+#ifdef VK_NVX_binary_import
+    if (!strcmp(name, "vkCreateCuModuleNVX"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCreateCuFunctionNVX"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkDestroyCuModuleNVX"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkDestroyCuFunctionNVX"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdCuLaunchKernelNVX"))
+    {
+        return nullptr;
+    }
+#endif
 #ifdef VK_NVX_image_view_handle
     if (!strcmp(name, "vkGetImageViewHandleNVX"))
     {
@@ -9820,6 +11099,16 @@
         return nullptr;
     }
 #endif
+#ifdef VK_EXT_acquire_drm_display
+    if (!strcmp(name, "vkAcquireDrmDisplayEXT"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetDrmDisplayEXT"))
+    {
+        return nullptr;
+    }
+#endif
 #ifdef VK_EXT_private_data
     if (!strcmp(name, "vkCreatePrivateDataSlotEXT"))
     {
@@ -9844,6 +11133,16 @@
         return nullptr;
     }
 #endif
+#ifdef VK_NV_acquire_winrt_display
+    if (!strcmp(name, "vkAcquireWinrtDisplayNV"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetWinrtDisplayNV"))
+    {
+        return nullptr;
+    }
+#endif
 #ifdef VK_EXT_directfb_surface
     if (!strcmp(name, "vkCreateDirectFBSurfaceEXT"))
     {
@@ -9854,6 +11153,114 @@
         return nullptr;
     }
 #endif
+#ifdef VK_EXT_vertex_input_dynamic_state
+    if (!strcmp(name, "vkCmdSetVertexInputEXT"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_FUCHSIA_external_memory
+    if (!strcmp(name, "vkGetMemoryZirconHandleFUCHSIA"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetMemoryZirconHandlePropertiesFUCHSIA"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_FUCHSIA_external_semaphore
+    if (!strcmp(name, "vkImportSemaphoreZirconHandleFUCHSIA"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetSemaphoreZirconHandleFUCHSIA"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_FUCHSIA_buffer_collection
+    if (!strcmp(name, "vkCreateBufferCollectionFUCHSIA"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkSetBufferCollectionImageConstraintsFUCHSIA"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkSetBufferCollectionBufferConstraintsFUCHSIA"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkDestroyBufferCollectionFUCHSIA"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetBufferCollectionPropertiesFUCHSIA"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_HUAWEI_subpass_shading
+    if (!strcmp(name, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdSubpassShadingHUAWEI"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_HUAWEI_invocation_mask
+    if (!strcmp(name, "vkCmdBindInvocationMaskHUAWEI"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_NV_external_memory_rdma
+    if (!strcmp(name, "vkGetMemoryRemoteAddressNV"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_EXT_extended_dynamic_state2
+    if (!strcmp(name, "vkCmdSetPatchControlPointsEXT"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetRasterizerDiscardEnableEXT"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetDepthBiasEnableEXT"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetLogicOpEXT"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetPrimitiveRestartEnableEXT"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_QNX_screen_surface
+    if (!strcmp(name, "vkCreateScreenSurfaceQNX"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkGetPhysicalDeviceScreenPresentationSupportQNX"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_EXT_color_write_enable
+    if (!strcmp(name, "vkCmdSetColorWriteEnableEXT"))
+    {
+        return nullptr;
+    }
+#endif
 #ifdef VK_GOOGLE_gfxstream
     if (!strcmp(name, "vkRegisterImageColorBufferGOOGLE"))
     {
@@ -9940,6 +11347,22 @@
         return nullptr;
     }
 #endif
+#ifdef VK_EXT_multi_draw
+    if (!strcmp(name, "vkCmdDrawMultiEXT"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkCmdDrawMultiIndexedEXT"))
+    {
+        return nullptr;
+    }
+#endif
+#ifdef VK_EXT_pageable_device_local_memory
+    if (!strcmp(name, "vkSetDeviceMemoryPriorityEXT"))
+    {
+        return nullptr;
+    }
+#endif
 #ifdef VK_KHR_acceleration_structure
     if (!strcmp(name, "vkCreateAccelerationStructureKHR"))
     {
@@ -10925,6 +12348,80 @@
         return hasExt ? (void*)entry_vkGetPhysicalDeviceWin32PresentationSupportKHR : nullptr;
     }
 #endif
+#ifdef VK_KHR_video_queue
+    if (!strcmp(name, "vkGetPhysicalDeviceVideoCapabilitiesKHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkGetPhysicalDeviceVideoCapabilitiesKHR : nullptr;
+    }
+    if (!strcmp(name, "vkGetPhysicalDeviceVideoFormatPropertiesKHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkGetPhysicalDeviceVideoFormatPropertiesKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCreateVideoSessionKHR"))
+    {
+        return (void*)dynCheck_entry_vkCreateVideoSessionKHR;
+    }
+    if (!strcmp(name, "vkDestroyVideoSessionKHR"))
+    {
+        return (void*)dynCheck_entry_vkDestroyVideoSessionKHR;
+    }
+    if (!strcmp(name, "vkGetVideoSessionMemoryRequirementsKHR"))
+    {
+        return (void*)dynCheck_entry_vkGetVideoSessionMemoryRequirementsKHR;
+    }
+    if (!strcmp(name, "vkBindVideoSessionMemoryKHR"))
+    {
+        return (void*)dynCheck_entry_vkBindVideoSessionMemoryKHR;
+    }
+    if (!strcmp(name, "vkCreateVideoSessionParametersKHR"))
+    {
+        return (void*)dynCheck_entry_vkCreateVideoSessionParametersKHR;
+    }
+    if (!strcmp(name, "vkUpdateVideoSessionParametersKHR"))
+    {
+        return (void*)dynCheck_entry_vkUpdateVideoSessionParametersKHR;
+    }
+    if (!strcmp(name, "vkDestroyVideoSessionParametersKHR"))
+    {
+        return (void*)dynCheck_entry_vkDestroyVideoSessionParametersKHR;
+    }
+    if (!strcmp(name, "vkCmdBeginVideoCodingKHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCmdBeginVideoCodingKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdEndVideoCodingKHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCmdEndVideoCodingKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdControlVideoCodingKHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCmdControlVideoCodingKHR : nullptr;
+    }
+#endif
+#ifdef VK_KHR_video_decode_queue
+    if (!strcmp(name, "vkCmdDecodeVideoKHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_video_decode_queue");
+        return hasExt ? (void*)entry_vkCmdDecodeVideoKHR : nullptr;
+    }
+#endif
+#ifdef VK_KHR_dynamic_rendering
+    if (!strcmp(name, "vkCmdBeginRenderingKHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_dynamic_rendering");
+        return hasExt ? (void*)entry_vkCmdBeginRenderingKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdEndRenderingKHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_dynamic_rendering");
+        return hasExt ? (void*)entry_vkCmdEndRenderingKHR : nullptr;
+    }
+#endif
 #ifdef VK_KHR_get_physical_device_properties2
     if (!strcmp(name, "vkGetPhysicalDeviceFeatures2KHR"))
     {
@@ -11257,6 +12754,12 @@
         return hasExt ? (void*)entry_vkCmdSetFragmentShadingRateKHR : nullptr;
     }
 #endif
+#ifdef VK_KHR_present_wait
+    if (!strcmp(name, "vkWaitForPresentKHR"))
+    {
+        return (void*)dynCheck_entry_vkWaitForPresentKHR;
+    }
+#endif
 #ifdef VK_KHR_buffer_device_address
     if (!strcmp(name, "vkGetBufferDeviceAddressKHR"))
     {
@@ -11307,6 +12810,55 @@
         return (void*)dynCheck_entry_vkGetPipelineExecutableInternalRepresentationsKHR;
     }
 #endif
+#ifdef VK_KHR_video_encode_queue
+    if (!strcmp(name, "vkCmdEncodeVideoKHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_video_encode_queue");
+        return hasExt ? (void*)entry_vkCmdEncodeVideoKHR : nullptr;
+    }
+#endif
+#ifdef VK_KHR_synchronization2
+    if (!strcmp(name, "vkCmdSetEvent2KHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdSetEvent2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdResetEvent2KHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdResetEvent2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdWaitEvents2KHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdWaitEvents2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdPipelineBarrier2KHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdPipelineBarrier2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdWriteTimestamp2KHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdWriteTimestamp2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkQueueSubmit2KHR"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkQueueSubmit2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdWriteBufferMarker2AMD"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdWriteBufferMarker2AMD : nullptr;
+    }
+    if (!strcmp(name, "vkGetQueueCheckpointData2NV"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkGetQueueCheckpointData2NV : nullptr;
+    }
+#endif
 #ifdef VK_KHR_copy_commands2
     if (!strcmp(name, "vkCmdCopyBuffer2KHR"))
     {
@@ -11339,6 +12891,20 @@
         return hasExt ? (void*)entry_vkCmdResolveImage2KHR : nullptr;
     }
 #endif
+#ifdef VK_KHR_maintenance4
+    if (!strcmp(name, "vkGetDeviceBufferMemoryRequirementsKHR"))
+    {
+        return (void*)dynCheck_entry_vkGetDeviceBufferMemoryRequirementsKHR;
+    }
+    if (!strcmp(name, "vkGetDeviceImageMemoryRequirementsKHR"))
+    {
+        return (void*)dynCheck_entry_vkGetDeviceImageMemoryRequirementsKHR;
+    }
+    if (!strcmp(name, "vkGetDeviceImageSparseMemoryRequirementsKHR"))
+    {
+        return (void*)dynCheck_entry_vkGetDeviceImageSparseMemoryRequirementsKHR;
+    }
+#endif
 #ifdef VK_ANDROID_native_buffer
     if (!strcmp(name, "vkGetSwapchainGrallocUsageANDROID"))
     {
@@ -11428,6 +12994,29 @@
         return hasExt ? (void*)entry_vkCmdDrawIndirectByteCountEXT : nullptr;
     }
 #endif
+#ifdef VK_NVX_binary_import
+    if (!strcmp(name, "vkCreateCuModuleNVX"))
+    {
+        return (void*)dynCheck_entry_vkCreateCuModuleNVX;
+    }
+    if (!strcmp(name, "vkCreateCuFunctionNVX"))
+    {
+        return (void*)dynCheck_entry_vkCreateCuFunctionNVX;
+    }
+    if (!strcmp(name, "vkDestroyCuModuleNVX"))
+    {
+        return (void*)dynCheck_entry_vkDestroyCuModuleNVX;
+    }
+    if (!strcmp(name, "vkDestroyCuFunctionNVX"))
+    {
+        return (void*)dynCheck_entry_vkDestroyCuFunctionNVX;
+    }
+    if (!strcmp(name, "vkCmdCuLaunchKernelNVX"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NVX_binary_import");
+        return hasExt ? (void*)entry_vkCmdCuLaunchKernelNVX : nullptr;
+    }
+#endif
 #ifdef VK_NVX_image_view_handle
     if (!strcmp(name, "vkGetImageViewHandleNVX"))
     {
@@ -12070,6 +13659,18 @@
         return (void*)dynCheck_entry_vkDestroyIndirectCommandsLayoutNV;
     }
 #endif
+#ifdef VK_EXT_acquire_drm_display
+    if (!strcmp(name, "vkAcquireDrmDisplayEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_acquire_drm_display");
+        return hasExt ? (void*)entry_vkAcquireDrmDisplayEXT : nullptr;
+    }
+    if (!strcmp(name, "vkGetDrmDisplayEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_acquire_drm_display");
+        return hasExt ? (void*)entry_vkGetDrmDisplayEXT : nullptr;
+    }
+#endif
 #ifdef VK_EXT_private_data
     if (!strcmp(name, "vkCreatePrivateDataSlotEXT"))
     {
@@ -12095,6 +13696,18 @@
         return hasExt ? (void*)entry_vkCmdSetFragmentShadingRateEnumNV : nullptr;
     }
 #endif
+#ifdef VK_NV_acquire_winrt_display
+    if (!strcmp(name, "vkAcquireWinrtDisplayNV"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_acquire_winrt_display");
+        return hasExt ? (void*)entry_vkAcquireWinrtDisplayNV : nullptr;
+    }
+    if (!strcmp(name, "vkGetWinrtDisplayNV"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_acquire_winrt_display");
+        return hasExt ? (void*)entry_vkGetWinrtDisplayNV : nullptr;
+    }
+#endif
 #ifdef VK_EXT_directfb_surface
     if (!strcmp(name, "vkCreateDirectFBSurfaceEXT"))
     {
@@ -12107,6 +13720,125 @@
         return hasExt ? (void*)entry_vkGetPhysicalDeviceDirectFBPresentationSupportEXT : nullptr;
     }
 #endif
+#ifdef VK_EXT_vertex_input_dynamic_state
+    if (!strcmp(name, "vkCmdSetVertexInputEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_vertex_input_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetVertexInputEXT : nullptr;
+    }
+#endif
+#ifdef VK_FUCHSIA_external_memory
+    if (!strcmp(name, "vkGetMemoryZirconHandleFUCHSIA"))
+    {
+        return (void*)dynCheck_entry_vkGetMemoryZirconHandleFUCHSIA;
+    }
+    if (!strcmp(name, "vkGetMemoryZirconHandlePropertiesFUCHSIA"))
+    {
+        return (void*)dynCheck_entry_vkGetMemoryZirconHandlePropertiesFUCHSIA;
+    }
+#endif
+#ifdef VK_FUCHSIA_external_semaphore
+    if (!strcmp(name, "vkImportSemaphoreZirconHandleFUCHSIA"))
+    {
+        return (void*)dynCheck_entry_vkImportSemaphoreZirconHandleFUCHSIA;
+    }
+    if (!strcmp(name, "vkGetSemaphoreZirconHandleFUCHSIA"))
+    {
+        return (void*)dynCheck_entry_vkGetSemaphoreZirconHandleFUCHSIA;
+    }
+#endif
+#ifdef VK_FUCHSIA_buffer_collection
+    if (!strcmp(name, "vkCreateBufferCollectionFUCHSIA"))
+    {
+        return (void*)dynCheck_entry_vkCreateBufferCollectionFUCHSIA;
+    }
+    if (!strcmp(name, "vkSetBufferCollectionImageConstraintsFUCHSIA"))
+    {
+        return (void*)dynCheck_entry_vkSetBufferCollectionImageConstraintsFUCHSIA;
+    }
+    if (!strcmp(name, "vkSetBufferCollectionBufferConstraintsFUCHSIA"))
+    {
+        return (void*)dynCheck_entry_vkSetBufferCollectionBufferConstraintsFUCHSIA;
+    }
+    if (!strcmp(name, "vkDestroyBufferCollectionFUCHSIA"))
+    {
+        return (void*)dynCheck_entry_vkDestroyBufferCollectionFUCHSIA;
+    }
+    if (!strcmp(name, "vkGetBufferCollectionPropertiesFUCHSIA"))
+    {
+        return (void*)dynCheck_entry_vkGetBufferCollectionPropertiesFUCHSIA;
+    }
+#endif
+#ifdef VK_HUAWEI_subpass_shading
+    if (!strcmp(name, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI"))
+    {
+        return (void*)dynCheck_entry_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI;
+    }
+    if (!strcmp(name, "vkCmdSubpassShadingHUAWEI"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_HUAWEI_subpass_shading");
+        return hasExt ? (void*)entry_vkCmdSubpassShadingHUAWEI : nullptr;
+    }
+#endif
+#ifdef VK_HUAWEI_invocation_mask
+    if (!strcmp(name, "vkCmdBindInvocationMaskHUAWEI"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_HUAWEI_invocation_mask");
+        return hasExt ? (void*)entry_vkCmdBindInvocationMaskHUAWEI : nullptr;
+    }
+#endif
+#ifdef VK_NV_external_memory_rdma
+    if (!strcmp(name, "vkGetMemoryRemoteAddressNV"))
+    {
+        return (void*)dynCheck_entry_vkGetMemoryRemoteAddressNV;
+    }
+#endif
+#ifdef VK_EXT_extended_dynamic_state2
+    if (!strcmp(name, "vkCmdSetPatchControlPointsEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetPatchControlPointsEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetRasterizerDiscardEnableEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetRasterizerDiscardEnableEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetDepthBiasEnableEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetDepthBiasEnableEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetLogicOpEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetLogicOpEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetPrimitiveRestartEnableEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetPrimitiveRestartEnableEXT : nullptr;
+    }
+#endif
+#ifdef VK_QNX_screen_surface
+    if (!strcmp(name, "vkCreateScreenSurfaceQNX"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_QNX_screen_surface");
+        return hasExt ? (void*)entry_vkCreateScreenSurfaceQNX : nullptr;
+    }
+    if (!strcmp(name, "vkGetPhysicalDeviceScreenPresentationSupportQNX"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_QNX_screen_surface");
+        return hasExt ? (void*)entry_vkGetPhysicalDeviceScreenPresentationSupportQNX : nullptr;
+    }
+#endif
+#ifdef VK_EXT_color_write_enable
+    if (!strcmp(name, "vkCmdSetColorWriteEnableEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_color_write_enable");
+        return hasExt ? (void*)entry_vkCmdSetColorWriteEnableEXT : nullptr;
+    }
+#endif
 #ifdef VK_GOOGLE_gfxstream
     if (!strcmp(name, "vkRegisterImageColorBufferGOOGLE"))
     {
@@ -12204,6 +13936,24 @@
         return hasExt ? (void*)entry_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE : nullptr;
     }
 #endif
+#ifdef VK_EXT_multi_draw
+    if (!strcmp(name, "vkCmdDrawMultiEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_multi_draw");
+        return hasExt ? (void*)entry_vkCmdDrawMultiEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdDrawMultiIndexedEXT"))
+    {
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_multi_draw");
+        return hasExt ? (void*)entry_vkCmdDrawMultiIndexedEXT : nullptr;
+    }
+#endif
+#ifdef VK_EXT_pageable_device_local_memory
+    if (!strcmp(name, "vkSetDeviceMemoryPriorityEXT"))
+    {
+        return (void*)dynCheck_entry_vkSetDeviceMemoryPriorityEXT;
+    }
+#endif
 #ifdef VK_KHR_acceleration_structure
     if (!strcmp(name, "vkCreateAccelerationStructureKHR"))
     {
@@ -13214,6 +14964,87 @@
         return hasExt ? (void*)entry_vkGetPhysicalDeviceWin32PresentationSupportKHR : nullptr;
     }
 #endif
+#ifdef VK_KHR_video_queue
+    if (!strcmp(name, "vkGetPhysicalDeviceVideoCapabilitiesKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkGetPhysicalDeviceVideoCapabilitiesKHR : nullptr;
+    }
+    if (!strcmp(name, "vkGetPhysicalDeviceVideoFormatPropertiesKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkGetPhysicalDeviceVideoFormatPropertiesKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCreateVideoSessionKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCreateVideoSessionKHR : nullptr;
+    }
+    if (!strcmp(name, "vkDestroyVideoSessionKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkDestroyVideoSessionKHR : nullptr;
+    }
+    if (!strcmp(name, "vkGetVideoSessionMemoryRequirementsKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkGetVideoSessionMemoryRequirementsKHR : nullptr;
+    }
+    if (!strcmp(name, "vkBindVideoSessionMemoryKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkBindVideoSessionMemoryKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCreateVideoSessionParametersKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCreateVideoSessionParametersKHR : nullptr;
+    }
+    if (!strcmp(name, "vkUpdateVideoSessionParametersKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkUpdateVideoSessionParametersKHR : nullptr;
+    }
+    if (!strcmp(name, "vkDestroyVideoSessionParametersKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkDestroyVideoSessionParametersKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdBeginVideoCodingKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCmdBeginVideoCodingKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdEndVideoCodingKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCmdEndVideoCodingKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdControlVideoCodingKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCmdControlVideoCodingKHR : nullptr;
+    }
+#endif
+#ifdef VK_KHR_video_decode_queue
+    if (!strcmp(name, "vkCmdDecodeVideoKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_decode_queue");
+        return hasExt ? (void*)entry_vkCmdDecodeVideoKHR : nullptr;
+    }
+#endif
+#ifdef VK_KHR_dynamic_rendering
+    if (!strcmp(name, "vkCmdBeginRenderingKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_dynamic_rendering");
+        return hasExt ? (void*)entry_vkCmdBeginRenderingKHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdEndRenderingKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_dynamic_rendering");
+        return hasExt ? (void*)entry_vkCmdEndRenderingKHR : nullptr;
+    }
+#endif
 #ifdef VK_KHR_get_physical_device_properties2
     if (!strcmp(name, "vkGetPhysicalDeviceFeatures2KHR"))
     {
@@ -13578,6 +15409,13 @@
         return hasExt ? (void*)entry_vkCmdSetFragmentShadingRateKHR : nullptr;
     }
 #endif
+#ifdef VK_KHR_present_wait
+    if (!strcmp(name, "vkWaitForPresentKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_present_wait");
+        return hasExt ? (void*)entry_vkWaitForPresentKHR : nullptr;
+    }
+#endif
 #ifdef VK_KHR_buffer_device_address
     if (!strcmp(name, "vkGetBufferDeviceAddressKHR"))
     {
@@ -13639,6 +15477,55 @@
         return hasExt ? (void*)entry_vkGetPipelineExecutableInternalRepresentationsKHR : nullptr;
     }
 #endif
+#ifdef VK_KHR_video_encode_queue
+    if (!strcmp(name, "vkCmdEncodeVideoKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_video_encode_queue");
+        return hasExt ? (void*)entry_vkCmdEncodeVideoKHR : nullptr;
+    }
+#endif
+#ifdef VK_KHR_synchronization2
+    if (!strcmp(name, "vkCmdSetEvent2KHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdSetEvent2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdResetEvent2KHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdResetEvent2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdWaitEvents2KHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdWaitEvents2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdPipelineBarrier2KHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdPipelineBarrier2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdWriteTimestamp2KHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdWriteTimestamp2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkQueueSubmit2KHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkQueueSubmit2KHR : nullptr;
+    }
+    if (!strcmp(name, "vkCmdWriteBufferMarker2AMD"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdWriteBufferMarker2AMD : nullptr;
+    }
+    if (!strcmp(name, "vkGetQueueCheckpointData2NV"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkGetQueueCheckpointData2NV : nullptr;
+    }
+#endif
 #ifdef VK_KHR_copy_commands2
     if (!strcmp(name, "vkCmdCopyBuffer2KHR"))
     {
@@ -13671,6 +15558,23 @@
         return hasExt ? (void*)entry_vkCmdResolveImage2KHR : nullptr;
     }
 #endif
+#ifdef VK_KHR_maintenance4
+    if (!strcmp(name, "vkGetDeviceBufferMemoryRequirementsKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_maintenance4");
+        return hasExt ? (void*)entry_vkGetDeviceBufferMemoryRequirementsKHR : nullptr;
+    }
+    if (!strcmp(name, "vkGetDeviceImageMemoryRequirementsKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_maintenance4");
+        return hasExt ? (void*)entry_vkGetDeviceImageMemoryRequirementsKHR : nullptr;
+    }
+    if (!strcmp(name, "vkGetDeviceImageSparseMemoryRequirementsKHR"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_KHR_maintenance4");
+        return hasExt ? (void*)entry_vkGetDeviceImageSparseMemoryRequirementsKHR : nullptr;
+    }
+#endif
 #ifdef VK_ANDROID_native_buffer
     if (!strcmp(name, "vkGetSwapchainGrallocUsageANDROID"))
     {
@@ -13764,6 +15668,33 @@
         return hasExt ? (void*)entry_vkCmdDrawIndirectByteCountEXT : nullptr;
     }
 #endif
+#ifdef VK_NVX_binary_import
+    if (!strcmp(name, "vkCreateCuModuleNVX"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_NVX_binary_import");
+        return hasExt ? (void*)entry_vkCreateCuModuleNVX : nullptr;
+    }
+    if (!strcmp(name, "vkCreateCuFunctionNVX"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_NVX_binary_import");
+        return hasExt ? (void*)entry_vkCreateCuFunctionNVX : nullptr;
+    }
+    if (!strcmp(name, "vkDestroyCuModuleNVX"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_NVX_binary_import");
+        return hasExt ? (void*)entry_vkDestroyCuModuleNVX : nullptr;
+    }
+    if (!strcmp(name, "vkDestroyCuFunctionNVX"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_NVX_binary_import");
+        return hasExt ? (void*)entry_vkDestroyCuFunctionNVX : nullptr;
+    }
+    if (!strcmp(name, "vkCmdCuLaunchKernelNVX"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_NVX_binary_import");
+        return hasExt ? (void*)entry_vkCmdCuLaunchKernelNVX : nullptr;
+    }
+#endif
 #ifdef VK_NVX_image_view_handle
     if (!strcmp(name, "vkGetImageViewHandleNVX"))
     {
@@ -14451,6 +16382,18 @@
         return hasExt ? (void*)entry_vkDestroyIndirectCommandsLayoutNV : nullptr;
     }
 #endif
+#ifdef VK_EXT_acquire_drm_display
+    if (!strcmp(name, "vkAcquireDrmDisplayEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_acquire_drm_display");
+        return hasExt ? (void*)entry_vkAcquireDrmDisplayEXT : nullptr;
+    }
+    if (!strcmp(name, "vkGetDrmDisplayEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_acquire_drm_display");
+        return hasExt ? (void*)entry_vkGetDrmDisplayEXT : nullptr;
+    }
+#endif
 #ifdef VK_EXT_private_data
     if (!strcmp(name, "vkCreatePrivateDataSlotEXT"))
     {
@@ -14480,6 +16423,18 @@
         return hasExt ? (void*)entry_vkCmdSetFragmentShadingRateEnumNV : nullptr;
     }
 #endif
+#ifdef VK_NV_acquire_winrt_display
+    if (!strcmp(name, "vkAcquireWinrtDisplayNV"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_NV_acquire_winrt_display");
+        return hasExt ? (void*)entry_vkAcquireWinrtDisplayNV : nullptr;
+    }
+    if (!strcmp(name, "vkGetWinrtDisplayNV"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_NV_acquire_winrt_display");
+        return hasExt ? (void*)entry_vkGetWinrtDisplayNV : nullptr;
+    }
+#endif
 #ifdef VK_EXT_directfb_surface
     if (!strcmp(name, "vkCreateDirectFBSurfaceEXT"))
     {
@@ -14492,6 +16447,136 @@
         return hasExt ? (void*)entry_vkGetPhysicalDeviceDirectFBPresentationSupportEXT : nullptr;
     }
 #endif
+#ifdef VK_EXT_vertex_input_dynamic_state
+    if (!strcmp(name, "vkCmdSetVertexInputEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_vertex_input_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetVertexInputEXT : nullptr;
+    }
+#endif
+#ifdef VK_FUCHSIA_external_memory
+    if (!strcmp(name, "vkGetMemoryZirconHandleFUCHSIA"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_FUCHSIA_external_memory");
+        return hasExt ? (void*)entry_vkGetMemoryZirconHandleFUCHSIA : nullptr;
+    }
+    if (!strcmp(name, "vkGetMemoryZirconHandlePropertiesFUCHSIA"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_FUCHSIA_external_memory");
+        return hasExt ? (void*)entry_vkGetMemoryZirconHandlePropertiesFUCHSIA : nullptr;
+    }
+#endif
+#ifdef VK_FUCHSIA_external_semaphore
+    if (!strcmp(name, "vkImportSemaphoreZirconHandleFUCHSIA"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_FUCHSIA_external_semaphore");
+        return hasExt ? (void*)entry_vkImportSemaphoreZirconHandleFUCHSIA : nullptr;
+    }
+    if (!strcmp(name, "vkGetSemaphoreZirconHandleFUCHSIA"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_FUCHSIA_external_semaphore");
+        return hasExt ? (void*)entry_vkGetSemaphoreZirconHandleFUCHSIA : nullptr;
+    }
+#endif
+#ifdef VK_FUCHSIA_buffer_collection
+    if (!strcmp(name, "vkCreateBufferCollectionFUCHSIA"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection");
+        return hasExt ? (void*)entry_vkCreateBufferCollectionFUCHSIA : nullptr;
+    }
+    if (!strcmp(name, "vkSetBufferCollectionImageConstraintsFUCHSIA"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection");
+        return hasExt ? (void*)entry_vkSetBufferCollectionImageConstraintsFUCHSIA : nullptr;
+    }
+    if (!strcmp(name, "vkSetBufferCollectionBufferConstraintsFUCHSIA"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection");
+        return hasExt ? (void*)entry_vkSetBufferCollectionBufferConstraintsFUCHSIA : nullptr;
+    }
+    if (!strcmp(name, "vkDestroyBufferCollectionFUCHSIA"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection");
+        return hasExt ? (void*)entry_vkDestroyBufferCollectionFUCHSIA : nullptr;
+    }
+    if (!strcmp(name, "vkGetBufferCollectionPropertiesFUCHSIA"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_FUCHSIA_buffer_collection");
+        return hasExt ? (void*)entry_vkGetBufferCollectionPropertiesFUCHSIA : nullptr;
+    }
+#endif
+#ifdef VK_HUAWEI_subpass_shading
+    if (!strcmp(name, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_HUAWEI_subpass_shading");
+        return hasExt ? (void*)entry_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI : nullptr;
+    }
+    if (!strcmp(name, "vkCmdSubpassShadingHUAWEI"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_HUAWEI_subpass_shading");
+        return hasExt ? (void*)entry_vkCmdSubpassShadingHUAWEI : nullptr;
+    }
+#endif
+#ifdef VK_HUAWEI_invocation_mask
+    if (!strcmp(name, "vkCmdBindInvocationMaskHUAWEI"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_HUAWEI_invocation_mask");
+        return hasExt ? (void*)entry_vkCmdBindInvocationMaskHUAWEI : nullptr;
+    }
+#endif
+#ifdef VK_NV_external_memory_rdma
+    if (!strcmp(name, "vkGetMemoryRemoteAddressNV"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_NV_external_memory_rdma");
+        return hasExt ? (void*)entry_vkGetMemoryRemoteAddressNV : nullptr;
+    }
+#endif
+#ifdef VK_EXT_extended_dynamic_state2
+    if (!strcmp(name, "vkCmdSetPatchControlPointsEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetPatchControlPointsEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetRasterizerDiscardEnableEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetRasterizerDiscardEnableEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetDepthBiasEnableEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetDepthBiasEnableEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetLogicOpEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetLogicOpEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdSetPrimitiveRestartEnableEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetPrimitiveRestartEnableEXT : nullptr;
+    }
+#endif
+#ifdef VK_QNX_screen_surface
+    if (!strcmp(name, "vkCreateScreenSurfaceQNX"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_QNX_screen_surface");
+        return hasExt ? (void*)entry_vkCreateScreenSurfaceQNX : nullptr;
+    }
+    if (!strcmp(name, "vkGetPhysicalDeviceScreenPresentationSupportQNX"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_QNX_screen_surface");
+        return hasExt ? (void*)entry_vkGetPhysicalDeviceScreenPresentationSupportQNX : nullptr;
+    }
+#endif
+#ifdef VK_EXT_color_write_enable
+    if (!strcmp(name, "vkCmdSetColorWriteEnableEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_color_write_enable");
+        return hasExt ? (void*)entry_vkCmdSetColorWriteEnableEXT : nullptr;
+    }
+#endif
 #ifdef VK_GOOGLE_gfxstream
     if (!strcmp(name, "vkRegisterImageColorBufferGOOGLE"))
     {
@@ -14599,6 +16684,25 @@
         return hasExt ? (void*)entry_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE : nullptr;
     }
 #endif
+#ifdef VK_EXT_multi_draw
+    if (!strcmp(name, "vkCmdDrawMultiEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_multi_draw");
+        return hasExt ? (void*)entry_vkCmdDrawMultiEXT : nullptr;
+    }
+    if (!strcmp(name, "vkCmdDrawMultiIndexedEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_multi_draw");
+        return hasExt ? (void*)entry_vkCmdDrawMultiIndexedEXT : nullptr;
+    }
+#endif
+#ifdef VK_EXT_pageable_device_local_memory
+    if (!strcmp(name, "vkSetDeviceMemoryPriorityEXT"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_EXT_pageable_device_local_memory");
+        return hasExt ? (void*)entry_vkSetDeviceMemoryPriorityEXT : nullptr;
+    }
+#endif
 #ifdef VK_KHR_acceleration_structure
     if (!strcmp(name, "vkCreateAccelerationStructureKHR"))
     {