diff --git a/system/vulkan_enc/func_table.cpp b/system/vulkan_enc/func_table.cpp
index 4e17d42..fc65f0a 100644
--- a/system/vulkan_enc/func_table.cpp
+++ b/system/vulkan_enc/func_table.cpp
@@ -1651,20 +1651,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetDeviceMask(commandBuffer, deviceMask, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetDeviceMask(
-    VkCommandBuffer commandBuffer,
-    uint32_t deviceMask)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);
-    if (resources->getApiVersionFromDevice(device) < VK_API_VERSION_1_1)
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetDeviceMask", "VK_VERSION_1_1");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetDeviceMask");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetDeviceMask(commandBuffer, deviceMask, true /* do lock */);
-}
 static void entry_vkCmdDispatchBase(
     VkCommandBuffer commandBuffer,
     uint32_t baseGroupX,
@@ -1678,25 +1664,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDispatchBase(
-    VkCommandBuffer commandBuffer,
-    uint32_t baseGroupX,
-    uint32_t baseGroupY,
-    uint32_t baseGroupZ,
-    uint32_t groupCountX,
-    uint32_t groupCountY,
-    uint32_t groupCountZ)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);
-    if (resources->getApiVersionFromDevice(device) < VK_API_VERSION_1_1)
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDispatchBase", "VK_VERSION_1_1");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDispatchBase");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ, true /* do lock */);
-}
 static VkResult entry_vkEnumeratePhysicalDeviceGroups(
     VkInstance instance,
     uint32_t* pPhysicalDeviceGroupCount,
@@ -2089,25 +2056,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawIndirectCount(
-    VkCommandBuffer commandBuffer,
-    VkBuffer buffer,
-    VkDeviceSize offset,
-    VkBuffer countBuffer,
-    VkDeviceSize countBufferOffset,
-    uint32_t maxDrawCount,
-    uint32_t stride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_VERSION_1_2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawIndirectCount", "VK_VERSION_1_2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawIndirectCount");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
-}
 static void entry_vkCmdDrawIndexedIndirectCount(
     VkCommandBuffer commandBuffer,
     VkBuffer buffer,
@@ -2121,25 +2069,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawIndexedIndirectCount(
-    VkCommandBuffer commandBuffer,
-    VkBuffer buffer,
-    VkDeviceSize offset,
-    VkBuffer countBuffer,
-    VkDeviceSize countBufferOffset,
-    uint32_t maxDrawCount,
-    uint32_t stride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_VERSION_1_2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawIndexedIndirectCount", "VK_VERSION_1_2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCount");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
-}
 static VkResult entry_vkCreateRenderPass2(
     VkDevice device,
     const VkRenderPassCreateInfo2* pCreateInfo,
@@ -2178,21 +2107,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBeginRenderPass2(
-    VkCommandBuffer commandBuffer,
-    const VkRenderPassBeginInfo* pRenderPassBegin,
-    const VkSubpassBeginInfo* pSubpassBeginInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_VERSION_1_2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBeginRenderPass2", "VK_VERSION_1_2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBeginRenderPass2");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo, true /* do lock */);
-}
 static void entry_vkCmdNextSubpass2(
     VkCommandBuffer commandBuffer,
     const VkSubpassBeginInfo* pSubpassBeginInfo,
@@ -2202,21 +2116,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdNextSubpass2(
-    VkCommandBuffer commandBuffer,
-    const VkSubpassBeginInfo* pSubpassBeginInfo,
-    const VkSubpassEndInfo* pSubpassEndInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_VERSION_1_2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdNextSubpass2", "VK_VERSION_1_2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdNextSubpass2");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo, true /* do lock */);
-}
 static void entry_vkCmdEndRenderPass2(
     VkCommandBuffer commandBuffer,
     const VkSubpassEndInfo* pSubpassEndInfo)
@@ -2225,20 +2124,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdEndRenderPass2(commandBuffer, pSubpassEndInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdEndRenderPass2(
-    VkCommandBuffer commandBuffer,
-    const VkSubpassEndInfo* pSubpassEndInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_VERSION_1_2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdEndRenderPass2", "VK_VERSION_1_2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdEndRenderPass2");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdEndRenderPass2(commandBuffer, pSubpassEndInfo, true /* do lock */);
-}
 static void entry_vkResetQueryPool(
     VkDevice device,
     VkQueryPool queryPool,
@@ -3150,20 +3035,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBeginVideoCodingKHR(commandBuffer, pBeginInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBeginVideoCodingKHR(
-    VkCommandBuffer commandBuffer,
-    const VkVideoBeginCodingInfoKHR* pBeginInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBeginVideoCodingKHR", "VK_KHR_video_queue");
-    }
-    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)
@@ -3172,20 +3043,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdEndVideoCodingKHR(commandBuffer, pEndCodingInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdEndVideoCodingKHR(
-    VkCommandBuffer commandBuffer,
-    const VkVideoEndCodingInfoKHR* pEndCodingInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdEndVideoCodingKHR", "VK_KHR_video_queue");
-    }
-    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)
@@ -3194,20 +3051,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdControlVideoCodingKHR(commandBuffer, pCodingControlInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdControlVideoCodingKHR(
-    VkCommandBuffer commandBuffer,
-    const VkVideoCodingControlInfoKHR* pCodingControlInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_video_queue"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdControlVideoCodingKHR", "VK_KHR_video_queue");
-    }
-    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(
@@ -3218,20 +3061,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDecodeVideoKHR(commandBuffer, pFrameInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDecodeVideoKHR(
-    VkCommandBuffer commandBuffer,
-    const VkVideoDecodeInfoKHR* pFrameInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_video_decode_queue"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDecodeVideoKHR", "VK_KHR_video_decode_queue");
-    }
-    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(
@@ -3242,20 +3071,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBeginRenderingKHR(commandBuffer, pRenderingInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBeginRenderingKHR(
-    VkCommandBuffer commandBuffer,
-    const VkRenderingInfoKHR* pRenderingInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_dynamic_rendering"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBeginRenderingKHR", "VK_KHR_dynamic_rendering");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBeginRenderingKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBeginRenderingKHR(commandBuffer, pRenderingInfo, true /* do lock */);
-}
 static void entry_vkCmdEndRenderingKHR(
     VkCommandBuffer commandBuffer)
 {
@@ -3263,19 +3078,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdEndRenderingKHR(commandBuffer, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdEndRenderingKHR(
-    VkCommandBuffer commandBuffer)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_dynamic_rendering"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdEndRenderingKHR", "VK_KHR_dynamic_rendering");
-    }
-    AEMU_SCOPED_TRACE("vkCmdEndRenderingKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdEndRenderingKHR(commandBuffer, true /* do lock */);
-}
 #endif
 #ifdef VK_KHR_multiview
 #endif
@@ -3381,20 +3183,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetDeviceMaskKHR(commandBuffer, deviceMask, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetDeviceMaskKHR(
-    VkCommandBuffer commandBuffer,
-    uint32_t deviceMask)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_device_group"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetDeviceMaskKHR", "VK_KHR_device_group");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetDeviceMaskKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetDeviceMaskKHR(commandBuffer, deviceMask, true /* do lock */);
-}
 static void entry_vkCmdDispatchBaseKHR(
     VkCommandBuffer commandBuffer,
     uint32_t baseGroupX,
@@ -3408,25 +3196,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDispatchBaseKHR(
-    VkCommandBuffer commandBuffer,
-    uint32_t baseGroupX,
-    uint32_t baseGroupY,
-    uint32_t baseGroupZ,
-    uint32_t groupCountX,
-    uint32_t groupCountY,
-    uint32_t groupCountZ)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_device_group"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDispatchBaseKHR", "VK_KHR_device_group");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDispatchBaseKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ, true /* do lock */);
-}
 #endif
 #ifdef VK_KHR_shader_draw_parameters
 #endif
@@ -3735,24 +3504,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdPushDescriptorSetKHR(
-    VkCommandBuffer commandBuffer,
-    VkPipelineBindPoint pipelineBindPoint,
-    VkPipelineLayout layout,
-    uint32_t set,
-    uint32_t descriptorWriteCount,
-    const VkWriteDescriptorSet* pDescriptorWrites)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_push_descriptor"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdPushDescriptorSetKHR", "VK_KHR_push_descriptor");
-    }
-    AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites, true /* do lock */);
-}
 static void entry_vkCmdPushDescriptorSetWithTemplateKHR(
     VkCommandBuffer commandBuffer,
     VkDescriptorUpdateTemplate descriptorUpdateTemplate,
@@ -3764,23 +3515,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdPushDescriptorSetWithTemplateKHR(
-    VkCommandBuffer commandBuffer,
-    VkDescriptorUpdateTemplate descriptorUpdateTemplate,
-    VkPipelineLayout layout,
-    uint32_t set,
-    const void* pData)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_push_descriptor"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdPushDescriptorSetWithTemplateKHR", "VK_KHR_push_descriptor");
-    }
-    AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetWithTemplateKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData, true /* do lock */);
-}
 #endif
 #ifdef VK_KHR_shader_float16_int8
 #endif
@@ -3908,21 +3642,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBeginRenderPass2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkRenderPassBeginInfo* pRenderPassBegin,
-    const VkSubpassBeginInfo* pSubpassBeginInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_create_renderpass2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBeginRenderPass2KHR", "VK_KHR_create_renderpass2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBeginRenderPass2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo, true /* do lock */);
-}
 static void entry_vkCmdNextSubpass2KHR(
     VkCommandBuffer commandBuffer,
     const VkSubpassBeginInfo* pSubpassBeginInfo,
@@ -3932,21 +3651,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdNextSubpass2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkSubpassBeginInfo* pSubpassBeginInfo,
-    const VkSubpassEndInfo* pSubpassEndInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_create_renderpass2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdNextSubpass2KHR", "VK_KHR_create_renderpass2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdNextSubpass2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo, true /* do lock */);
-}
 static void entry_vkCmdEndRenderPass2KHR(
     VkCommandBuffer commandBuffer,
     const VkSubpassEndInfo* pSubpassEndInfo)
@@ -3955,20 +3659,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdEndRenderPass2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkSubpassEndInfo* pSubpassEndInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_create_renderpass2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdEndRenderPass2KHR", "VK_KHR_create_renderpass2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdEndRenderPass2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo, true /* do lock */);
-}
 #endif
 #ifdef VK_KHR_shared_presentable_image
 static VkResult entry_vkGetSwapchainStatusKHR(
@@ -4503,25 +4193,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawIndirectCountKHR(
-    VkCommandBuffer commandBuffer,
-    VkBuffer buffer,
-    VkDeviceSize offset,
-    VkBuffer countBuffer,
-    VkDeviceSize countBufferOffset,
-    uint32_t maxDrawCount,
-    uint32_t stride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_draw_indirect_count"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawIndirectCountKHR", "VK_KHR_draw_indirect_count");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
-}
 static void entry_vkCmdDrawIndexedIndirectCountKHR(
     VkCommandBuffer commandBuffer,
     VkBuffer buffer,
@@ -4535,25 +4206,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawIndexedIndirectCountKHR(
-    VkCommandBuffer commandBuffer,
-    VkBuffer buffer,
-    VkDeviceSize offset,
-    VkBuffer countBuffer,
-    VkDeviceSize countBufferOffset,
-    uint32_t maxDrawCount,
-    uint32_t stride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_draw_indirect_count"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawIndexedIndirectCountKHR", "VK_KHR_draw_indirect_count");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
-}
 #endif
 #ifdef VK_KHR_shader_subgroup_extended_types
 #endif
@@ -4677,21 +4329,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetFragmentShadingRateKHR(
-    VkCommandBuffer commandBuffer,
-    const VkExtent2D* pFragmentSize,
-    const VkFragmentShadingRateCombinerOpKHR combinerOps[2])
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_fragment_shading_rate"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetFragmentShadingRateKHR", "VK_KHR_fragment_shading_rate");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetFragmentShadingRateKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps, true /* do lock */);
-}
 #endif
 #ifdef VK_KHR_spirv_1_4
 #endif
@@ -5042,20 +4679,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdEncodeVideoKHR(commandBuffer, pEncodeInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdEncodeVideoKHR(
-    VkCommandBuffer commandBuffer,
-    const VkVideoEncodeInfoKHR* pEncodeInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_video_encode_queue"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdEncodeVideoKHR", "VK_KHR_video_encode_queue");
-    }
-    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(
@@ -5067,21 +4690,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetEvent2KHR(commandBuffer, event, pDependencyInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetEvent2KHR(
-    VkCommandBuffer commandBuffer,
-    VkEvent event,
-    const VkDependencyInfoKHR* pDependencyInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_synchronization2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetEvent2KHR", "VK_KHR_synchronization2");
-    }
-    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,
@@ -5091,21 +4699,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdResetEvent2KHR(commandBuffer, event, stageMask, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdResetEvent2KHR(
-    VkCommandBuffer commandBuffer,
-    VkEvent event,
-    VkPipelineStageFlags2KHR stageMask)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_synchronization2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdResetEvent2KHR", "VK_KHR_synchronization2");
-    }
-    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,
@@ -5116,22 +4709,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdWaitEvents2KHR(commandBuffer, eventCount, pEvents, pDependencyInfos, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdWaitEvents2KHR(
-    VkCommandBuffer commandBuffer,
-    uint32_t eventCount,
-    const VkEvent* pEvents,
-    const VkDependencyInfoKHR* pDependencyInfos)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_synchronization2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdWaitEvents2KHR", "VK_KHR_synchronization2");
-    }
-    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)
@@ -5140,20 +4717,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdPipelineBarrier2KHR(commandBuffer, pDependencyInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdPipelineBarrier2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkDependencyInfoKHR* pDependencyInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_synchronization2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdPipelineBarrier2KHR", "VK_KHR_synchronization2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdPipelineBarrier2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdPipelineBarrier2KHR(commandBuffer, pDependencyInfo, true /* do lock */);
-}
 static void entry_vkCmdWriteTimestamp2KHR(
     VkCommandBuffer commandBuffer,
     VkPipelineStageFlags2KHR stage,
@@ -5164,22 +4727,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdWriteTimestamp2KHR(commandBuffer, stage, queryPool, query, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdWriteTimestamp2KHR(
-    VkCommandBuffer commandBuffer,
-    VkPipelineStageFlags2KHR stage,
-    VkQueryPool queryPool,
-    uint32_t query)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_synchronization2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdWriteTimestamp2KHR", "VK_KHR_synchronization2");
-    }
-    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,
@@ -5203,23 +4750,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdWriteBufferMarker2AMD(commandBuffer, stage, dstBuffer, dstOffset, marker, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdWriteBufferMarker2AMD(
-    VkCommandBuffer commandBuffer,
-    VkPipelineStageFlags2KHR stage,
-    VkBuffer dstBuffer,
-    VkDeviceSize dstOffset,
-    uint32_t marker)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_synchronization2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdWriteBufferMarker2AMD", "VK_KHR_synchronization2");
-    }
-    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,
@@ -5245,20 +4775,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdCopyBuffer2KHR(commandBuffer, pCopyBufferInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdCopyBuffer2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkCopyBufferInfo2KHR* pCopyBufferInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_copy_commands2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdCopyBuffer2KHR", "VK_KHR_copy_commands2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdCopyBuffer2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdCopyBuffer2KHR(commandBuffer, pCopyBufferInfo, true /* do lock */);
-}
 static void entry_vkCmdCopyImage2KHR(
     VkCommandBuffer commandBuffer,
     const VkCopyImageInfo2KHR* pCopyImageInfo)
@@ -5267,20 +4783,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdCopyImage2KHR(commandBuffer, pCopyImageInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdCopyImage2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkCopyImageInfo2KHR* pCopyImageInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_copy_commands2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdCopyImage2KHR", "VK_KHR_copy_commands2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdCopyImage2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdCopyImage2KHR(commandBuffer, pCopyImageInfo, true /* do lock */);
-}
 static void entry_vkCmdCopyBufferToImage2KHR(
     VkCommandBuffer commandBuffer,
     const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo)
@@ -5289,20 +4791,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdCopyBufferToImage2KHR(commandBuffer, pCopyBufferToImageInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdCopyBufferToImage2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_copy_commands2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdCopyBufferToImage2KHR", "VK_KHR_copy_commands2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdCopyBufferToImage2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdCopyBufferToImage2KHR(commandBuffer, pCopyBufferToImageInfo, true /* do lock */);
-}
 static void entry_vkCmdCopyImageToBuffer2KHR(
     VkCommandBuffer commandBuffer,
     const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo)
@@ -5311,20 +4799,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdCopyImageToBuffer2KHR(commandBuffer, pCopyImageToBufferInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdCopyImageToBuffer2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_copy_commands2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdCopyImageToBuffer2KHR", "VK_KHR_copy_commands2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdCopyImageToBuffer2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdCopyImageToBuffer2KHR(commandBuffer, pCopyImageToBufferInfo, true /* do lock */);
-}
 static void entry_vkCmdBlitImage2KHR(
     VkCommandBuffer commandBuffer,
     const VkBlitImageInfo2KHR* pBlitImageInfo)
@@ -5333,20 +4807,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBlitImage2KHR(commandBuffer, pBlitImageInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBlitImage2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkBlitImageInfo2KHR* pBlitImageInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_copy_commands2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBlitImage2KHR", "VK_KHR_copy_commands2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBlitImage2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBlitImage2KHR(commandBuffer, pBlitImageInfo, true /* do lock */);
-}
 static void entry_vkCmdResolveImage2KHR(
     VkCommandBuffer commandBuffer,
     const VkResolveImageInfo2KHR* pResolveImageInfo)
@@ -5355,20 +4815,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdResolveImage2KHR(commandBuffer, pResolveImageInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdResolveImage2KHR(
-    VkCommandBuffer commandBuffer,
-    const VkResolveImageInfo2KHR* pResolveImageInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_copy_commands2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdResolveImage2KHR", "VK_KHR_copy_commands2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdResolveImage2KHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdResolveImage2KHR(commandBuffer, pResolveImageInfo, true /* do lock */);
-}
 #endif
 #ifdef VK_KHR_format_feature_flags2
 #endif
@@ -5629,20 +5075,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDebugMarkerBeginEXT(
-    VkCommandBuffer commandBuffer,
-    const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_debug_marker"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDebugMarkerBeginEXT", "VK_EXT_debug_marker");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDebugMarkerBeginEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo, true /* do lock */);
-}
 static void entry_vkCmdDebugMarkerEndEXT(
     VkCommandBuffer commandBuffer)
 {
@@ -5650,19 +5082,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDebugMarkerEndEXT(commandBuffer, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDebugMarkerEndEXT(
-    VkCommandBuffer commandBuffer)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_debug_marker"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDebugMarkerEndEXT", "VK_EXT_debug_marker");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDebugMarkerEndEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDebugMarkerEndEXT(commandBuffer, true /* do lock */);
-}
 static void entry_vkCmdDebugMarkerInsertEXT(
     VkCommandBuffer commandBuffer,
     const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
@@ -5671,20 +5090,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDebugMarkerInsertEXT(
-    VkCommandBuffer commandBuffer,
-    const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_debug_marker"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDebugMarkerInsertEXT", "VK_EXT_debug_marker");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDebugMarkerInsertEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo, true /* do lock */);
-}
 #endif
 #ifdef VK_AMD_gcn_shader
 #endif
@@ -5703,24 +5108,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBindTransformFeedbackBuffersEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t firstBinding,
-    uint32_t bindingCount,
-    const VkBuffer* pBuffers,
-    const VkDeviceSize* pOffsets,
-    const VkDeviceSize* pSizes)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_transform_feedback"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBindTransformFeedbackBuffersEXT", "VK_EXT_transform_feedback");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBindTransformFeedbackBuffersEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, true /* do lock */);
-}
 static void entry_vkCmdBeginTransformFeedbackEXT(
     VkCommandBuffer commandBuffer,
     uint32_t firstCounterBuffer,
@@ -5732,23 +5119,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBeginTransformFeedbackEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t firstCounterBuffer,
-    uint32_t counterBufferCount,
-    const VkBuffer* pCounterBuffers,
-    const VkDeviceSize* pCounterBufferOffsets)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_transform_feedback"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBeginTransformFeedbackEXT", "VK_EXT_transform_feedback");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBeginTransformFeedbackEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets, true /* do lock */);
-}
 static void entry_vkCmdEndTransformFeedbackEXT(
     VkCommandBuffer commandBuffer,
     uint32_t firstCounterBuffer,
@@ -5760,23 +5130,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdEndTransformFeedbackEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t firstCounterBuffer,
-    uint32_t counterBufferCount,
-    const VkBuffer* pCounterBuffers,
-    const VkDeviceSize* pCounterBufferOffsets)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_transform_feedback"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdEndTransformFeedbackEXT", "VK_EXT_transform_feedback");
-    }
-    AEMU_SCOPED_TRACE("vkCmdEndTransformFeedbackEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets, true /* do lock */);
-}
 static void entry_vkCmdBeginQueryIndexedEXT(
     VkCommandBuffer commandBuffer,
     VkQueryPool queryPool,
@@ -5788,23 +5141,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBeginQueryIndexedEXT(
-    VkCommandBuffer commandBuffer,
-    VkQueryPool queryPool,
-    uint32_t query,
-    VkQueryControlFlags flags,
-    uint32_t index)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_transform_feedback"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBeginQueryIndexedEXT", "VK_EXT_transform_feedback");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBeginQueryIndexedEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index, true /* do lock */);
-}
 static void entry_vkCmdEndQueryIndexedEXT(
     VkCommandBuffer commandBuffer,
     VkQueryPool queryPool,
@@ -5815,22 +5151,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdEndQueryIndexedEXT(
-    VkCommandBuffer commandBuffer,
-    VkQueryPool queryPool,
-    uint32_t query,
-    uint32_t index)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_transform_feedback"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdEndQueryIndexedEXT", "VK_EXT_transform_feedback");
-    }
-    AEMU_SCOPED_TRACE("vkCmdEndQueryIndexedEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index, true /* do lock */);
-}
 static void entry_vkCmdDrawIndirectByteCountEXT(
     VkCommandBuffer commandBuffer,
     uint32_t instanceCount,
@@ -5844,25 +5164,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawIndirectByteCountEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t instanceCount,
-    uint32_t firstInstance,
-    VkBuffer counterBuffer,
-    VkDeviceSize counterBufferOffset,
-    uint32_t counterOffset,
-    uint32_t vertexStride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_transform_feedback"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawIndirectByteCountEXT", "VK_EXT_transform_feedback");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawIndirectByteCountEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride, true /* do lock */);
-}
 #endif
 #ifdef VK_NVX_binary_import
 static VkResult entry_vkCreateCuModuleNVX(
@@ -5977,20 +5278,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdCuLaunchKernelNVX(commandBuffer, pLaunchInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdCuLaunchKernelNVX(
-    VkCommandBuffer commandBuffer,
-    const VkCuLaunchInfoNVX* pLaunchInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NVX_binary_import"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdCuLaunchKernelNVX", "VK_NVX_binary_import");
-    }
-    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(
@@ -6060,25 +5347,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawIndirectCountAMD(
-    VkCommandBuffer commandBuffer,
-    VkBuffer buffer,
-    VkDeviceSize offset,
-    VkBuffer countBuffer,
-    VkDeviceSize countBufferOffset,
-    uint32_t maxDrawCount,
-    uint32_t stride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_AMD_draw_indirect_count"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawIndirectCountAMD", "VK_AMD_draw_indirect_count");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountAMD");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
-}
 static void entry_vkCmdDrawIndexedIndirectCountAMD(
     VkCommandBuffer commandBuffer,
     VkBuffer buffer,
@@ -6092,25 +5360,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawIndexedIndirectCountAMD(
-    VkCommandBuffer commandBuffer,
-    VkBuffer buffer,
-    VkDeviceSize offset,
-    VkBuffer countBuffer,
-    VkDeviceSize countBufferOffset,
-    uint32_t maxDrawCount,
-    uint32_t stride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_AMD_draw_indirect_count"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawIndexedIndirectCountAMD", "VK_AMD_draw_indirect_count");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountAMD");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
-}
 #endif
 #ifdef VK_AMD_negative_viewport_height
 #endif
@@ -6267,20 +5516,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBeginConditionalRenderingEXT(
-    VkCommandBuffer commandBuffer,
-    const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_conditional_rendering"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBeginConditionalRenderingEXT", "VK_EXT_conditional_rendering");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBeginConditionalRenderingEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin, true /* do lock */);
-}
 static void entry_vkCmdEndConditionalRenderingEXT(
     VkCommandBuffer commandBuffer)
 {
@@ -6288,19 +5523,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdEndConditionalRenderingEXT(commandBuffer, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdEndConditionalRenderingEXT(
-    VkCommandBuffer commandBuffer)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_conditional_rendering"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdEndConditionalRenderingEXT", "VK_EXT_conditional_rendering");
-    }
-    AEMU_SCOPED_TRACE("vkCmdEndConditionalRenderingEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdEndConditionalRenderingEXT(commandBuffer, true /* do lock */);
-}
 #endif
 #ifdef VK_NV_clip_space_w_scaling
 static void entry_vkCmdSetViewportWScalingNV(
@@ -6313,22 +5535,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetViewportWScalingNV(
-    VkCommandBuffer commandBuffer,
-    uint32_t firstViewport,
-    uint32_t viewportCount,
-    const VkViewportWScalingNV* pViewportWScalings)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_clip_space_w_scaling"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetViewportWScalingNV", "VK_NV_clip_space_w_scaling");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetViewportWScalingNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings, true /* do lock */);
-}
 #endif
 #ifdef VK_EXT_direct_mode_display
 static VkResult entry_vkReleaseDisplayEXT(
@@ -6577,22 +5783,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetDiscardRectangleEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t firstDiscardRectangle,
-    uint32_t discardRectangleCount,
-    const VkRect2D* pDiscardRectangles)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_discard_rectangles"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetDiscardRectangleEXT", "VK_EXT_discard_rectangles");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetDiscardRectangleEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles, true /* do lock */);
-}
 #endif
 #ifdef VK_EXT_conservative_rasterization
 #endif
@@ -6795,20 +5985,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBeginDebugUtilsLabelEXT(
-    VkCommandBuffer commandBuffer,
-    const VkDebugUtilsLabelEXT* pLabelInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_debug_utils"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBeginDebugUtilsLabelEXT", "VK_EXT_debug_utils");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBeginDebugUtilsLabelEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo, true /* do lock */);
-}
 static void entry_vkCmdEndDebugUtilsLabelEXT(
     VkCommandBuffer commandBuffer)
 {
@@ -6816,19 +5992,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdEndDebugUtilsLabelEXT(commandBuffer, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdEndDebugUtilsLabelEXT(
-    VkCommandBuffer commandBuffer)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_debug_utils"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdEndDebugUtilsLabelEXT", "VK_EXT_debug_utils");
-    }
-    AEMU_SCOPED_TRACE("vkCmdEndDebugUtilsLabelEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdEndDebugUtilsLabelEXT(commandBuffer, true /* do lock */);
-}
 static void entry_vkCmdInsertDebugUtilsLabelEXT(
     VkCommandBuffer commandBuffer,
     const VkDebugUtilsLabelEXT* pLabelInfo)
@@ -6837,20 +6000,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdInsertDebugUtilsLabelEXT(
-    VkCommandBuffer commandBuffer,
-    const VkDebugUtilsLabelEXT* pLabelInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_debug_utils"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdInsertDebugUtilsLabelEXT", "VK_EXT_debug_utils");
-    }
-    AEMU_SCOPED_TRACE("vkCmdInsertDebugUtilsLabelEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo, true /* do lock */);
-}
 static VkResult entry_vkCreateDebugUtilsMessengerEXT(
     VkInstance instance,
     const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
@@ -6962,20 +6111,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetSampleLocationsEXT(
-    VkCommandBuffer commandBuffer,
-    const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_sample_locations"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetSampleLocationsEXT", "VK_EXT_sample_locations");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetSampleLocationsEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo, true /* do lock */);
-}
 static void entry_vkGetPhysicalDeviceMultisamplePropertiesEXT(
     VkPhysicalDevice physicalDevice,
     VkSampleCountFlagBits samples,
@@ -7153,21 +6288,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBindShadingRateImageNV(
-    VkCommandBuffer commandBuffer,
-    VkImageView imageView,
-    VkImageLayout imageLayout)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_shading_rate_image"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBindShadingRateImageNV", "VK_NV_shading_rate_image");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBindShadingRateImageNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout, true /* do lock */);
-}
 static void entry_vkCmdSetViewportShadingRatePaletteNV(
     VkCommandBuffer commandBuffer,
     uint32_t firstViewport,
@@ -7178,22 +6298,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetViewportShadingRatePaletteNV(
-    VkCommandBuffer commandBuffer,
-    uint32_t firstViewport,
-    uint32_t viewportCount,
-    const VkShadingRatePaletteNV* pShadingRatePalettes)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_shading_rate_image"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetViewportShadingRatePaletteNV", "VK_NV_shading_rate_image");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetViewportShadingRatePaletteNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes, true /* do lock */);
-}
 static void entry_vkCmdSetCoarseSampleOrderNV(
     VkCommandBuffer commandBuffer,
     VkCoarseSampleOrderTypeNV sampleOrderType,
@@ -7204,22 +6308,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetCoarseSampleOrderNV(
-    VkCommandBuffer commandBuffer,
-    VkCoarseSampleOrderTypeNV sampleOrderType,
-    uint32_t customSampleOrderCount,
-    const VkCoarseSampleOrderCustomNV* pCustomSampleOrders)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_shading_rate_image"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetCoarseSampleOrderNV", "VK_NV_shading_rate_image");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetCoarseSampleOrderNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders, true /* do lock */);
-}
 #endif
 #ifdef VK_NV_ray_tracing
 static VkResult entry_vkCreateAccelerationStructureNV(
@@ -7339,27 +6427,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBuildAccelerationStructureNV(
-    VkCommandBuffer commandBuffer,
-    const VkAccelerationStructureInfoNV* pInfo,
-    VkBuffer instanceData,
-    VkDeviceSize instanceOffset,
-    VkBool32 update,
-    VkAccelerationStructureNV dst,
-    VkAccelerationStructureNV src,
-    VkBuffer scratch,
-    VkDeviceSize scratchOffset)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_ray_tracing"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBuildAccelerationStructureNV", "VK_NV_ray_tracing");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBuildAccelerationStructureNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset, true /* do lock */);
-}
 static void entry_vkCmdCopyAccelerationStructureNV(
     VkCommandBuffer commandBuffer,
     VkAccelerationStructureNV dst,
@@ -7370,22 +6437,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdCopyAccelerationStructureNV(
-    VkCommandBuffer commandBuffer,
-    VkAccelerationStructureNV dst,
-    VkAccelerationStructureNV src,
-    VkCopyAccelerationStructureModeKHR mode)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_ray_tracing"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdCopyAccelerationStructureNV", "VK_NV_ray_tracing");
-    }
-    AEMU_SCOPED_TRACE("vkCmdCopyAccelerationStructureNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode, true /* do lock */);
-}
 static void entry_vkCmdTraceRaysNV(
     VkCommandBuffer commandBuffer,
     VkBuffer raygenShaderBindingTableBuffer,
@@ -7407,33 +6458,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdTraceRaysNV(
-    VkCommandBuffer commandBuffer,
-    VkBuffer raygenShaderBindingTableBuffer,
-    VkDeviceSize raygenShaderBindingOffset,
-    VkBuffer missShaderBindingTableBuffer,
-    VkDeviceSize missShaderBindingOffset,
-    VkDeviceSize missShaderBindingStride,
-    VkBuffer hitShaderBindingTableBuffer,
-    VkDeviceSize hitShaderBindingOffset,
-    VkDeviceSize hitShaderBindingStride,
-    VkBuffer callableShaderBindingTableBuffer,
-    VkDeviceSize callableShaderBindingOffset,
-    VkDeviceSize callableShaderBindingStride,
-    uint32_t width,
-    uint32_t height,
-    uint32_t depth)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_ray_tracing"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdTraceRaysNV", "VK_NV_ray_tracing");
-    }
-    AEMU_SCOPED_TRACE("vkCmdTraceRaysNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth, true /* do lock */);
-}
 static VkResult entry_vkCreateRayTracingPipelinesNV(
     VkDevice device,
     VkPipelineCache pipelineCache,
@@ -7574,24 +6598,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdWriteAccelerationStructuresPropertiesNV(
-    VkCommandBuffer commandBuffer,
-    uint32_t accelerationStructureCount,
-    const VkAccelerationStructureNV* pAccelerationStructures,
-    VkQueryType queryType,
-    VkQueryPool queryPool,
-    uint32_t firstQuery)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_ray_tracing"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdWriteAccelerationStructuresPropertiesNV", "VK_NV_ray_tracing");
-    }
-    AEMU_SCOPED_TRACE("vkCmdWriteAccelerationStructuresPropertiesNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery, true /* do lock */);
-}
 static VkResult entry_vkCompileDeferredNV(
     VkDevice device,
     VkPipeline pipeline,
@@ -7671,23 +6677,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdWriteBufferMarkerAMD(
-    VkCommandBuffer commandBuffer,
-    VkPipelineStageFlagBits pipelineStage,
-    VkBuffer dstBuffer,
-    VkDeviceSize dstOffset,
-    uint32_t marker)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_AMD_buffer_marker"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdWriteBufferMarkerAMD", "VK_AMD_buffer_marker");
-    }
-    AEMU_SCOPED_TRACE("vkCmdWriteBufferMarkerAMD");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker, true /* do lock */);
-}
 #endif
 #ifdef VK_AMD_pipeline_compiler_control
 #endif
@@ -7761,21 +6750,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawMeshTasksNV(
-    VkCommandBuffer commandBuffer,
-    uint32_t taskCount,
-    uint32_t firstTask)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_mesh_shader"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawMeshTasksNV", "VK_NV_mesh_shader");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawMeshTasksNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask, true /* do lock */);
-}
 static void entry_vkCmdDrawMeshTasksIndirectNV(
     VkCommandBuffer commandBuffer,
     VkBuffer buffer,
@@ -7787,23 +6761,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawMeshTasksIndirectNV(
-    VkCommandBuffer commandBuffer,
-    VkBuffer buffer,
-    VkDeviceSize offset,
-    uint32_t drawCount,
-    uint32_t stride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_mesh_shader"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawMeshTasksIndirectNV", "VK_NV_mesh_shader");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawMeshTasksIndirectNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride, true /* do lock */);
-}
 static void entry_vkCmdDrawMeshTasksIndirectCountNV(
     VkCommandBuffer commandBuffer,
     VkBuffer buffer,
@@ -7817,25 +6774,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawMeshTasksIndirectCountNV(
-    VkCommandBuffer commandBuffer,
-    VkBuffer buffer,
-    VkDeviceSize offset,
-    VkBuffer countBuffer,
-    VkDeviceSize countBufferOffset,
-    uint32_t maxDrawCount,
-    uint32_t stride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_mesh_shader"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawMeshTasksIndirectCountNV", "VK_NV_mesh_shader");
-    }
-    AEMU_SCOPED_TRACE("vkCmdDrawMeshTasksIndirectCountNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride, true /* do lock */);
-}
 #endif
 #ifdef VK_NV_fragment_shader_barycentric
 #endif
@@ -7852,22 +6790,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetExclusiveScissorNV(
-    VkCommandBuffer commandBuffer,
-    uint32_t firstExclusiveScissor,
-    uint32_t exclusiveScissorCount,
-    const VkRect2D* pExclusiveScissors)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_scissor_exclusive"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetExclusiveScissorNV", "VK_NV_scissor_exclusive");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetExclusiveScissorNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors, true /* do lock */);
-}
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
 static void entry_vkCmdSetCheckpointNV(
@@ -7878,20 +6800,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetCheckpointNV(commandBuffer, pCheckpointMarker, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetCheckpointNV(
-    VkCommandBuffer commandBuffer,
-    const void* pCheckpointMarker)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_device_diagnostic_checkpoints"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetCheckpointNV", "VK_NV_device_diagnostic_checkpoints");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetCheckpointNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetCheckpointNV(commandBuffer, pCheckpointMarker, true /* do lock */);
-}
 static void entry_vkGetQueueCheckpointDataNV(
     VkQueue queue,
     uint32_t* pCheckpointDataCount,
@@ -7959,22 +6867,6 @@
     vkCmdSetPerformanceMarkerINTEL_VkResult_return = vkEnc->vkCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo, true /* do lock */);
     return vkCmdSetPerformanceMarkerINTEL_VkResult_return;
 }
-static VkResult dynCheck_entry_vkCmdSetPerformanceMarkerINTEL(
-    VkCommandBuffer commandBuffer,
-    const VkPerformanceMarkerInfoINTEL* pMarkerInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_INTEL_performance_query"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetPerformanceMarkerINTEL", "VK_INTEL_performance_query");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetPerformanceMarkerINTEL");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    VkResult vkCmdSetPerformanceMarkerINTEL_VkResult_return = (VkResult)0;
-    vkCmdSetPerformanceMarkerINTEL_VkResult_return = vkEnc->vkCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo, true /* do lock */);
-    return vkCmdSetPerformanceMarkerINTEL_VkResult_return;
-}
 static VkResult entry_vkCmdSetPerformanceStreamMarkerINTEL(
     VkCommandBuffer commandBuffer,
     const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo)
@@ -7985,22 +6877,6 @@
     vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return = vkEnc->vkCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo, true /* do lock */);
     return vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return;
 }
-static VkResult dynCheck_entry_vkCmdSetPerformanceStreamMarkerINTEL(
-    VkCommandBuffer commandBuffer,
-    const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_INTEL_performance_query"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetPerformanceStreamMarkerINTEL", "VK_INTEL_performance_query");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetPerformanceStreamMarkerINTEL");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    VkResult vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return = (VkResult)0;
-    vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return = vkEnc->vkCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo, true /* do lock */);
-    return vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return;
-}
 static VkResult entry_vkCmdSetPerformanceOverrideINTEL(
     VkCommandBuffer commandBuffer,
     const VkPerformanceOverrideInfoINTEL* pOverrideInfo)
@@ -8011,22 +6887,6 @@
     vkCmdSetPerformanceOverrideINTEL_VkResult_return = vkEnc->vkCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo, true /* do lock */);
     return vkCmdSetPerformanceOverrideINTEL_VkResult_return;
 }
-static VkResult dynCheck_entry_vkCmdSetPerformanceOverrideINTEL(
-    VkCommandBuffer commandBuffer,
-    const VkPerformanceOverrideInfoINTEL* pOverrideInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_INTEL_performance_query"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetPerformanceOverrideINTEL", "VK_INTEL_performance_query");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetPerformanceOverrideINTEL");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    VkResult vkCmdSetPerformanceOverrideINTEL_VkResult_return = (VkResult)0;
-    vkCmdSetPerformanceOverrideINTEL_VkResult_return = vkEnc->vkCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo, true /* do lock */);
-    return vkCmdSetPerformanceOverrideINTEL_VkResult_return;
-}
 static VkResult entry_vkAcquirePerformanceConfigurationINTEL(
     VkDevice device,
     const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
@@ -8385,21 +7245,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetLineStippleEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t lineStippleFactor,
-    uint16_t lineStipplePattern)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_line_rasterization"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetLineStippleEXT", "VK_EXT_line_rasterization");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetLineStippleEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern, true /* do lock */);
-}
 #endif
 #ifdef VK_EXT_shader_atomic_float
 #endif
@@ -8441,20 +7286,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetCullModeEXT(commandBuffer, cullMode, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetCullModeEXT(
-    VkCommandBuffer commandBuffer,
-    VkCullModeFlags cullMode)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetCullModeEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetCullModeEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetCullModeEXT(commandBuffer, cullMode, true /* do lock */);
-}
 static void entry_vkCmdSetFrontFaceEXT(
     VkCommandBuffer commandBuffer,
     VkFrontFace frontFace)
@@ -8463,20 +7294,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetFrontFaceEXT(commandBuffer, frontFace, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetFrontFaceEXT(
-    VkCommandBuffer commandBuffer,
-    VkFrontFace frontFace)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetFrontFaceEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetFrontFaceEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetFrontFaceEXT(commandBuffer, frontFace, true /* do lock */);
-}
 static void entry_vkCmdSetPrimitiveTopologyEXT(
     VkCommandBuffer commandBuffer,
     VkPrimitiveTopology primitiveTopology)
@@ -8485,20 +7302,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetPrimitiveTopologyEXT(commandBuffer, primitiveTopology, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetPrimitiveTopologyEXT(
-    VkCommandBuffer commandBuffer,
-    VkPrimitiveTopology primitiveTopology)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetPrimitiveTopologyEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetPrimitiveTopologyEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetPrimitiveTopologyEXT(commandBuffer, primitiveTopology, true /* do lock */);
-}
 static void entry_vkCmdSetViewportWithCountEXT(
     VkCommandBuffer commandBuffer,
     uint32_t viewportCount,
@@ -8508,21 +7311,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetViewportWithCountEXT(commandBuffer, viewportCount, pViewports, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetViewportWithCountEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t viewportCount,
-    const VkViewport* pViewports)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetViewportWithCountEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetViewportWithCountEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetViewportWithCountEXT(commandBuffer, viewportCount, pViewports, true /* do lock */);
-}
 static void entry_vkCmdSetScissorWithCountEXT(
     VkCommandBuffer commandBuffer,
     uint32_t scissorCount,
@@ -8532,21 +7320,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetScissorWithCountEXT(commandBuffer, scissorCount, pScissors, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetScissorWithCountEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t scissorCount,
-    const VkRect2D* pScissors)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetScissorWithCountEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetScissorWithCountEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetScissorWithCountEXT(commandBuffer, scissorCount, pScissors, true /* do lock */);
-}
 static void entry_vkCmdBindVertexBuffers2EXT(
     VkCommandBuffer commandBuffer,
     uint32_t firstBinding,
@@ -8560,25 +7333,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBindVertexBuffers2EXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBindVertexBuffers2EXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t firstBinding,
-    uint32_t bindingCount,
-    const VkBuffer* pBuffers,
-    const VkDeviceSize* pOffsets,
-    const VkDeviceSize* pSizes,
-    const VkDeviceSize* pStrides)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBindVertexBuffers2EXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBindVertexBuffers2EXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBindVertexBuffers2EXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides, true /* do lock */);
-}
 static void entry_vkCmdSetDepthTestEnableEXT(
     VkCommandBuffer commandBuffer,
     VkBool32 depthTestEnable)
@@ -8587,20 +7341,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetDepthTestEnableEXT(commandBuffer, depthTestEnable, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetDepthTestEnableEXT(
-    VkCommandBuffer commandBuffer,
-    VkBool32 depthTestEnable)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetDepthTestEnableEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetDepthTestEnableEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetDepthTestEnableEXT(commandBuffer, depthTestEnable, true /* do lock */);
-}
 static void entry_vkCmdSetDepthWriteEnableEXT(
     VkCommandBuffer commandBuffer,
     VkBool32 depthWriteEnable)
@@ -8609,20 +7349,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetDepthWriteEnableEXT(commandBuffer, depthWriteEnable, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetDepthWriteEnableEXT(
-    VkCommandBuffer commandBuffer,
-    VkBool32 depthWriteEnable)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetDepthWriteEnableEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetDepthWriteEnableEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetDepthWriteEnableEXT(commandBuffer, depthWriteEnable, true /* do lock */);
-}
 static void entry_vkCmdSetDepthCompareOpEXT(
     VkCommandBuffer commandBuffer,
     VkCompareOp depthCompareOp)
@@ -8631,20 +7357,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetDepthCompareOpEXT(commandBuffer, depthCompareOp, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetDepthCompareOpEXT(
-    VkCommandBuffer commandBuffer,
-    VkCompareOp depthCompareOp)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetDepthCompareOpEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetDepthCompareOpEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetDepthCompareOpEXT(commandBuffer, depthCompareOp, true /* do lock */);
-}
 static void entry_vkCmdSetDepthBoundsTestEnableEXT(
     VkCommandBuffer commandBuffer,
     VkBool32 depthBoundsTestEnable)
@@ -8653,20 +7365,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetDepthBoundsTestEnableEXT(commandBuffer, depthBoundsTestEnable, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetDepthBoundsTestEnableEXT(
-    VkCommandBuffer commandBuffer,
-    VkBool32 depthBoundsTestEnable)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetDepthBoundsTestEnableEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetDepthBoundsTestEnableEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetDepthBoundsTestEnableEXT(commandBuffer, depthBoundsTestEnable, true /* do lock */);
-}
 static void entry_vkCmdSetStencilTestEnableEXT(
     VkCommandBuffer commandBuffer,
     VkBool32 stencilTestEnable)
@@ -8675,20 +7373,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetStencilTestEnableEXT(commandBuffer, stencilTestEnable, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetStencilTestEnableEXT(
-    VkCommandBuffer commandBuffer,
-    VkBool32 stencilTestEnable)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetStencilTestEnableEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetStencilTestEnableEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetStencilTestEnableEXT(commandBuffer, stencilTestEnable, true /* do lock */);
-}
 static void entry_vkCmdSetStencilOpEXT(
     VkCommandBuffer commandBuffer,
     VkStencilFaceFlags faceMask,
@@ -8701,24 +7385,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetStencilOpEXT(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetStencilOpEXT(
-    VkCommandBuffer commandBuffer,
-    VkStencilFaceFlags faceMask,
-    VkStencilOp failOp,
-    VkStencilOp passOp,
-    VkStencilOp depthFailOp,
-    VkCompareOp compareOp)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetStencilOpEXT", "VK_EXT_extended_dynamic_state");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetStencilOpEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetStencilOpEXT(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp, true /* do lock */);
-}
 #endif
 #ifdef VK_EXT_shader_atomic_float2
 #endif
@@ -8756,20 +7422,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdPreprocessGeneratedCommandsNV(commandBuffer, pGeneratedCommandsInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdPreprocessGeneratedCommandsNV(
-    VkCommandBuffer commandBuffer,
-    const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_device_generated_commands"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdPreprocessGeneratedCommandsNV", "VK_NV_device_generated_commands");
-    }
-    AEMU_SCOPED_TRACE("vkCmdPreprocessGeneratedCommandsNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdPreprocessGeneratedCommandsNV(commandBuffer, pGeneratedCommandsInfo, true /* do lock */);
-}
 static void entry_vkCmdExecuteGeneratedCommandsNV(
     VkCommandBuffer commandBuffer,
     VkBool32 isPreprocessed,
@@ -8779,21 +7431,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdExecuteGeneratedCommandsNV(commandBuffer, isPreprocessed, pGeneratedCommandsInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdExecuteGeneratedCommandsNV(
-    VkCommandBuffer commandBuffer,
-    VkBool32 isPreprocessed,
-    const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_device_generated_commands"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdExecuteGeneratedCommandsNV", "VK_NV_device_generated_commands");
-    }
-    AEMU_SCOPED_TRACE("vkCmdExecuteGeneratedCommandsNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdExecuteGeneratedCommandsNV(commandBuffer, isPreprocessed, pGeneratedCommandsInfo, true /* do lock */);
-}
 static void entry_vkCmdBindPipelineShaderGroupNV(
     VkCommandBuffer commandBuffer,
     VkPipelineBindPoint pipelineBindPoint,
@@ -8804,22 +7441,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBindPipelineShaderGroupNV(commandBuffer, pipelineBindPoint, pipeline, groupIndex, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBindPipelineShaderGroupNV(
-    VkCommandBuffer commandBuffer,
-    VkPipelineBindPoint pipelineBindPoint,
-    VkPipeline pipeline,
-    uint32_t groupIndex)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_device_generated_commands"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBindPipelineShaderGroupNV", "VK_NV_device_generated_commands");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBindPipelineShaderGroupNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBindPipelineShaderGroupNV(commandBuffer, pipelineBindPoint, pipeline, groupIndex, true /* do lock */);
-}
 static VkResult entry_vkCreateIndirectCommandsLayoutNV(
     VkDevice device,
     const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo,
@@ -9040,21 +7661,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetFragmentShadingRateEnumNV(
-    VkCommandBuffer commandBuffer,
-    VkFragmentShadingRateNV shadingRate,
-    const VkFragmentShadingRateCombinerOpKHR combinerOps[2])
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_NV_fragment_shading_rate_enums"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetFragmentShadingRateEnumNV", "VK_NV_fragment_shading_rate_enums");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetFragmentShadingRateEnumNV");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps, true /* do lock */);
-}
 #endif
 #ifdef VK_NV_ray_tracing_motion_blur
 #endif
@@ -9132,23 +7738,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetVertexInputEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t vertexBindingDescriptionCount,
-    const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions,
-    uint32_t vertexAttributeDescriptionCount,
-    const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_vertex_input_dynamic_state"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetVertexInputEXT", "VK_EXT_vertex_input_dynamic_state");
-    }
-    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
@@ -9436,19 +8025,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSubpassShadingHUAWEI(commandBuffer, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSubpassShadingHUAWEI(
-    VkCommandBuffer commandBuffer)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_HUAWEI_subpass_shading"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSubpassShadingHUAWEI", "VK_HUAWEI_subpass_shading");
-    }
-    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(
@@ -9460,21 +8036,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBindInvocationMaskHUAWEI(commandBuffer, imageView, imageLayout, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBindInvocationMaskHUAWEI(
-    VkCommandBuffer commandBuffer,
-    VkImageView imageView,
-    VkImageLayout imageLayout)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_HUAWEI_invocation_mask"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBindInvocationMaskHUAWEI", "VK_HUAWEI_invocation_mask");
-    }
-    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(
@@ -9514,20 +8075,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetPatchControlPointsEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t patchControlPoints)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetPatchControlPointsEXT", "VK_EXT_extended_dynamic_state2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetPatchControlPointsEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints, true /* do lock */);
-}
 static void entry_vkCmdSetRasterizerDiscardEnableEXT(
     VkCommandBuffer commandBuffer,
     VkBool32 rasterizerDiscardEnable)
@@ -9536,20 +8083,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetRasterizerDiscardEnableEXT(commandBuffer, rasterizerDiscardEnable, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetRasterizerDiscardEnableEXT(
-    VkCommandBuffer commandBuffer,
-    VkBool32 rasterizerDiscardEnable)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetRasterizerDiscardEnableEXT", "VK_EXT_extended_dynamic_state2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetRasterizerDiscardEnableEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetRasterizerDiscardEnableEXT(commandBuffer, rasterizerDiscardEnable, true /* do lock */);
-}
 static void entry_vkCmdSetDepthBiasEnableEXT(
     VkCommandBuffer commandBuffer,
     VkBool32 depthBiasEnable)
@@ -9558,20 +8091,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetDepthBiasEnableEXT(commandBuffer, depthBiasEnable, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetDepthBiasEnableEXT(
-    VkCommandBuffer commandBuffer,
-    VkBool32 depthBiasEnable)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetDepthBiasEnableEXT", "VK_EXT_extended_dynamic_state2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetDepthBiasEnableEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetDepthBiasEnableEXT(commandBuffer, depthBiasEnable, true /* do lock */);
-}
 static void entry_vkCmdSetLogicOpEXT(
     VkCommandBuffer commandBuffer,
     VkLogicOp logicOp)
@@ -9580,20 +8099,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetLogicOpEXT(commandBuffer, logicOp, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetLogicOpEXT(
-    VkCommandBuffer commandBuffer,
-    VkLogicOp logicOp)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetLogicOpEXT", "VK_EXT_extended_dynamic_state2");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetLogicOpEXT");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetLogicOpEXT(commandBuffer, logicOp, true /* do lock */);
-}
 static void entry_vkCmdSetPrimitiveRestartEnableEXT(
     VkCommandBuffer commandBuffer,
     VkBool32 primitiveRestartEnable)
@@ -9602,20 +8107,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetPrimitiveRestartEnableEXT(commandBuffer, primitiveRestartEnable, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetPrimitiveRestartEnableEXT(
-    VkCommandBuffer commandBuffer,
-    VkBool32 primitiveRestartEnable)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_extended_dynamic_state2"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetPrimitiveRestartEnableEXT", "VK_EXT_extended_dynamic_state2");
-    }
-    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(
@@ -9652,21 +8143,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetColorWriteEnableEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t attachmentCount,
-    const VkBool32* pColorWriteEnables)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_color_write_enable"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetColorWriteEnableEXT", "VK_EXT_color_write_enable");
-    }
-    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(
@@ -9799,20 +8275,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkBeginCommandBufferAsyncGOOGLE(commandBuffer, pBeginInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkBeginCommandBufferAsyncGOOGLE(
-    VkCommandBuffer commandBuffer,
-    const VkCommandBufferBeginInfo* pBeginInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkBeginCommandBufferAsyncGOOGLE", "VK_GOOGLE_gfxstream");
-    }
-    AEMU_SCOPED_TRACE("vkBeginCommandBufferAsyncGOOGLE");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkBeginCommandBufferAsyncGOOGLE(commandBuffer, pBeginInfo, true /* do lock */);
-}
 static void entry_vkEndCommandBufferAsyncGOOGLE(
     VkCommandBuffer commandBuffer)
 {
@@ -9820,19 +8282,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkEndCommandBufferAsyncGOOGLE(commandBuffer, true /* do lock */);
 }
-static void dynCheck_entry_vkEndCommandBufferAsyncGOOGLE(
-    VkCommandBuffer commandBuffer)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkEndCommandBufferAsyncGOOGLE", "VK_GOOGLE_gfxstream");
-    }
-    AEMU_SCOPED_TRACE("vkEndCommandBufferAsyncGOOGLE");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkEndCommandBufferAsyncGOOGLE(commandBuffer, true /* do lock */);
-}
 static void entry_vkResetCommandBufferAsyncGOOGLE(
     VkCommandBuffer commandBuffer,
     VkCommandBufferResetFlags flags)
@@ -9841,20 +8290,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkResetCommandBufferAsyncGOOGLE(commandBuffer, flags, true /* do lock */);
 }
-static void dynCheck_entry_vkResetCommandBufferAsyncGOOGLE(
-    VkCommandBuffer commandBuffer,
-    VkCommandBufferResetFlags flags)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkResetCommandBufferAsyncGOOGLE", "VK_GOOGLE_gfxstream");
-    }
-    AEMU_SCOPED_TRACE("vkResetCommandBufferAsyncGOOGLE");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkResetCommandBufferAsyncGOOGLE(commandBuffer, flags, true /* do lock */);
-}
 static void entry_vkCommandBufferHostSyncGOOGLE(
     VkCommandBuffer commandBuffer,
     uint32_t needHostSync,
@@ -9864,21 +8299,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCommandBufferHostSyncGOOGLE(commandBuffer, needHostSync, sequenceNumber, true /* do lock */);
 }
-static void dynCheck_entry_vkCommandBufferHostSyncGOOGLE(
-    VkCommandBuffer commandBuffer,
-    uint32_t needHostSync,
-    uint32_t sequenceNumber)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCommandBufferHostSyncGOOGLE", "VK_GOOGLE_gfxstream");
-    }
-    AEMU_SCOPED_TRACE("vkCommandBufferHostSyncGOOGLE");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCommandBufferHostSyncGOOGLE(commandBuffer, needHostSync, sequenceNumber, true /* do lock */);
-}
 static VkResult entry_vkCreateImageWithRequirementsGOOGLE(
     VkDevice device,
     const VkImageCreateInfo* pCreateInfo,
@@ -10163,24 +8583,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawMultiEXT(commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawMultiEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t drawCount,
-    const VkMultiDrawInfoEXT* pVertexInfo,
-    uint32_t instanceCount,
-    uint32_t firstInstance,
-    uint32_t stride)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_multi_draw"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawMultiEXT", "VK_EXT_multi_draw");
-    }
-    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,
@@ -10194,25 +8596,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdDrawMultiIndexedEXT(commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdDrawMultiIndexedEXT(
-    VkCommandBuffer commandBuffer,
-    uint32_t drawCount,
-    const VkMultiDrawIndexedInfoEXT* pIndexInfo,
-    uint32_t instanceCount,
-    uint32_t firstInstance,
-    uint32_t stride,
-    const int32_t* pVertexOffset)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_EXT_multi_draw"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdDrawMultiIndexedEXT", "VK_EXT_multi_draw");
-    }
-    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
@@ -10306,22 +8689,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBuildAccelerationStructuresKHR(commandBuffer, infoCount, pInfos, ppBuildRangeInfos, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBuildAccelerationStructuresKHR(
-    VkCommandBuffer commandBuffer,
-    uint32_t infoCount,
-    const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
-    const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_acceleration_structure"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBuildAccelerationStructuresKHR", "VK_KHR_acceleration_structure");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBuildAccelerationStructuresKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBuildAccelerationStructuresKHR(commandBuffer, infoCount, pInfos, ppBuildRangeInfos, true /* do lock */);
-}
 static void entry_vkCmdBuildAccelerationStructuresIndirectKHR(
     VkCommandBuffer commandBuffer,
     uint32_t infoCount,
@@ -10334,24 +8701,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdBuildAccelerationStructuresIndirectKHR(commandBuffer, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdBuildAccelerationStructuresIndirectKHR(
-    VkCommandBuffer commandBuffer,
-    uint32_t infoCount,
-    const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
-    const VkDeviceAddress* pIndirectDeviceAddresses,
-    const uint32_t* pIndirectStrides,
-    const uint32_t* const* ppMaxPrimitiveCounts)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_acceleration_structure"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdBuildAccelerationStructuresIndirectKHR", "VK_KHR_acceleration_structure");
-    }
-    AEMU_SCOPED_TRACE("vkCmdBuildAccelerationStructuresIndirectKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdBuildAccelerationStructuresIndirectKHR(commandBuffer, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts, true /* do lock */);
-}
 static VkResult entry_vkBuildAccelerationStructuresKHR(
     VkDevice device,
     VkDeferredOperationKHR deferredOperation,
@@ -10507,20 +8856,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdCopyAccelerationStructureKHR(commandBuffer, pInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdCopyAccelerationStructureKHR(
-    VkCommandBuffer commandBuffer,
-    const VkCopyAccelerationStructureInfoKHR* pInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_acceleration_structure"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdCopyAccelerationStructureKHR", "VK_KHR_acceleration_structure");
-    }
-    AEMU_SCOPED_TRACE("vkCmdCopyAccelerationStructureKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdCopyAccelerationStructureKHR(commandBuffer, pInfo, true /* do lock */);
-}
 static void entry_vkCmdCopyAccelerationStructureToMemoryKHR(
     VkCommandBuffer commandBuffer,
     const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
@@ -10529,20 +8864,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdCopyAccelerationStructureToMemoryKHR(commandBuffer, pInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdCopyAccelerationStructureToMemoryKHR(
-    VkCommandBuffer commandBuffer,
-    const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_acceleration_structure"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdCopyAccelerationStructureToMemoryKHR", "VK_KHR_acceleration_structure");
-    }
-    AEMU_SCOPED_TRACE("vkCmdCopyAccelerationStructureToMemoryKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdCopyAccelerationStructureToMemoryKHR(commandBuffer, pInfo, true /* do lock */);
-}
 static void entry_vkCmdCopyMemoryToAccelerationStructureKHR(
     VkCommandBuffer commandBuffer,
     const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
@@ -10551,20 +8872,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdCopyMemoryToAccelerationStructureKHR(commandBuffer, pInfo, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdCopyMemoryToAccelerationStructureKHR(
-    VkCommandBuffer commandBuffer,
-    const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_acceleration_structure"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdCopyMemoryToAccelerationStructureKHR", "VK_KHR_acceleration_structure");
-    }
-    AEMU_SCOPED_TRACE("vkCmdCopyMemoryToAccelerationStructureKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdCopyMemoryToAccelerationStructureKHR(commandBuffer, pInfo, true /* do lock */);
-}
 static VkDeviceAddress entry_vkGetAccelerationStructureDeviceAddressKHR(
     VkDevice device,
     const VkAccelerationStructureDeviceAddressInfoKHR* pInfo)
@@ -10602,24 +8909,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdWriteAccelerationStructuresPropertiesKHR(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdWriteAccelerationStructuresPropertiesKHR(
-    VkCommandBuffer commandBuffer,
-    uint32_t accelerationStructureCount,
-    const VkAccelerationStructureKHR* pAccelerationStructures,
-    VkQueryType queryType,
-    VkQueryPool queryPool,
-    uint32_t firstQuery)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_acceleration_structure"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdWriteAccelerationStructuresPropertiesKHR", "VK_KHR_acceleration_structure");
-    }
-    AEMU_SCOPED_TRACE("vkCmdWriteAccelerationStructuresPropertiesKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdWriteAccelerationStructuresPropertiesKHR(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery, true /* do lock */);
-}
 static void entry_vkGetDeviceAccelerationStructureCompatibilityKHR(
     VkDevice device,
     const VkAccelerationStructureVersionInfoKHR* pVersionInfo,
@@ -10686,26 +8975,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdTraceRaysKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdTraceRaysKHR(
-    VkCommandBuffer commandBuffer,
-    const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
-    uint32_t width,
-    uint32_t height,
-    uint32_t depth)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_ray_tracing_pipeline"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdTraceRaysKHR", "VK_KHR_ray_tracing_pipeline");
-    }
-    AEMU_SCOPED_TRACE("vkCmdTraceRaysKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdTraceRaysKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth, true /* do lock */);
-}
 static VkResult entry_vkCreateRayTracingPipelinesKHR(
     VkDevice device,
     VkDeferredOperationKHR deferredOperation,
@@ -10786,24 +9055,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdTraceRaysIndirectKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdTraceRaysIndirectKHR(
-    VkCommandBuffer commandBuffer,
-    const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
-    VkDeviceAddress indirectDeviceAddress)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_ray_tracing_pipeline"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdTraceRaysIndirectKHR", "VK_KHR_ray_tracing_pipeline");
-    }
-    AEMU_SCOPED_TRACE("vkCmdTraceRaysIndirectKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdTraceRaysIndirectKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress, true /* do lock */);
-}
 static VkDeviceSize entry_vkGetRayTracingShaderGroupStackSizeKHR(
     VkDevice device,
     VkPipeline pipeline,
@@ -10841,20 +9092,6 @@
     auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
     vkEnc->vkCmdSetRayTracingPipelineStackSizeKHR(commandBuffer, pipelineStackSize, true /* do lock */);
 }
-static void dynCheck_entry_vkCmdSetRayTracingPipelineStackSizeKHR(
-    VkCommandBuffer commandBuffer,
-    uint32_t pipelineStackSize)
-{
-    auto resources = ResourceTracker::get();
-    VkDevice device = resources->getDevice(commandBuffer);;
-    if (!resources->hasDeviceExtension(device, "VK_KHR_ray_tracing_pipeline"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkCmdSetRayTracingPipelineStackSizeKHR", "VK_KHR_ray_tracing_pipeline");
-    }
-    AEMU_SCOPED_TRACE("vkCmdSetRayTracingPipelineStackSizeKHR");
-    auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer);
-    vkEnc->vkCmdSetRayTracingPipelineStackSizeKHR(commandBuffer, pipelineStackSize, true /* do lock */);
-}
 #endif
 #ifdef VK_KHR_ray_query
 #endif
@@ -13823,11 +12060,11 @@
     }
     if (!strcmp(name, "vkCmdSetDeviceMask"))
     {
-        return (void*)dynCheck_entry_vkCmdSetDeviceMask;
+        return has1_1OrHigher ? (void*)entry_vkCmdSetDeviceMask : nullptr;
     }
     if (!strcmp(name, "vkCmdDispatchBase"))
     {
-        return (void*)dynCheck_entry_vkCmdDispatchBase;
+        return has1_1OrHigher ? (void*)entry_vkCmdDispatchBase : nullptr;
     }
     if (!strcmp(name, "vkEnumeratePhysicalDeviceGroups"))
     {
@@ -13921,11 +12158,13 @@
 #ifdef VK_VERSION_1_2
     if (!strcmp(name, "vkCmdDrawIndirectCount"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawIndirectCount;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_VERSION_1_2");
+        return hasExt ? (void*)entry_vkCmdDrawIndirectCount : nullptr;
     }
     if (!strcmp(name, "vkCmdDrawIndexedIndirectCount"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawIndexedIndirectCount;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_VERSION_1_2");
+        return hasExt ? (void*)entry_vkCmdDrawIndexedIndirectCount : nullptr;
     }
     if (!strcmp(name, "vkCreateRenderPass2"))
     {
@@ -13933,15 +12172,18 @@
     }
     if (!strcmp(name, "vkCmdBeginRenderPass2"))
     {
-        return (void*)dynCheck_entry_vkCmdBeginRenderPass2;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_VERSION_1_2");
+        return hasExt ? (void*)entry_vkCmdBeginRenderPass2 : nullptr;
     }
     if (!strcmp(name, "vkCmdNextSubpass2"))
     {
-        return (void*)dynCheck_entry_vkCmdNextSubpass2;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_VERSION_1_2");
+        return hasExt ? (void*)entry_vkCmdNextSubpass2 : nullptr;
     }
     if (!strcmp(name, "vkCmdEndRenderPass2"))
     {
-        return (void*)dynCheck_entry_vkCmdEndRenderPass2;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_VERSION_1_2");
+        return hasExt ? (void*)entry_vkCmdEndRenderPass2 : nullptr;
     }
     if (!strcmp(name, "vkResetQueryPool"))
     {
@@ -14178,31 +12420,37 @@
     }
     if (!strcmp(name, "vkCmdBeginVideoCodingKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdBeginVideoCodingKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCmdBeginVideoCodingKHR : nullptr;
     }
     if (!strcmp(name, "vkCmdEndVideoCodingKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdEndVideoCodingKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_video_queue");
+        return hasExt ? (void*)entry_vkCmdEndVideoCodingKHR : nullptr;
     }
     if (!strcmp(name, "vkCmdControlVideoCodingKHR"))
     {
-        return (void*)dynCheck_entry_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"))
     {
-        return (void*)dynCheck_entry_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"))
     {
-        return (void*)dynCheck_entry_vkCmdBeginRenderingKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_dynamic_rendering");
+        return hasExt ? (void*)entry_vkCmdBeginRenderingKHR : nullptr;
     }
     if (!strcmp(name, "vkCmdEndRenderingKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdEndRenderingKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_dynamic_rendering");
+        return hasExt ? (void*)entry_vkCmdEndRenderingKHR : nullptr;
     }
 #endif
 #ifdef VK_KHR_get_physical_device_properties2
@@ -14249,11 +12497,13 @@
     }
     if (!strcmp(name, "vkCmdSetDeviceMaskKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdSetDeviceMaskKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_device_group");
+        return hasExt ? (void*)entry_vkCmdSetDeviceMaskKHR : nullptr;
     }
     if (!strcmp(name, "vkCmdDispatchBaseKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdDispatchBaseKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_device_group");
+        return hasExt ? (void*)entry_vkCmdDispatchBaseKHR : nullptr;
     }
 #endif
 #ifdef VK_KHR_maintenance1
@@ -14326,11 +12576,13 @@
 #ifdef VK_KHR_push_descriptor
     if (!strcmp(name, "vkCmdPushDescriptorSetKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdPushDescriptorSetKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_push_descriptor");
+        return hasExt ? (void*)entry_vkCmdPushDescriptorSetKHR : nullptr;
     }
     if (!strcmp(name, "vkCmdPushDescriptorSetWithTemplateKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdPushDescriptorSetWithTemplateKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_push_descriptor");
+        return hasExt ? (void*)entry_vkCmdPushDescriptorSetWithTemplateKHR : nullptr;
     }
 #endif
 #ifdef VK_KHR_descriptor_update_template
@@ -14354,15 +12606,18 @@
     }
     if (!strcmp(name, "vkCmdBeginRenderPass2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdBeginRenderPass2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_create_renderpass2");
+        return hasExt ? (void*)entry_vkCmdBeginRenderPass2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdNextSubpass2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdNextSubpass2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_create_renderpass2");
+        return hasExt ? (void*)entry_vkCmdNextSubpass2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdEndRenderPass2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdEndRenderPass2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_create_renderpass2");
+        return hasExt ? (void*)entry_vkCmdEndRenderPass2KHR : nullptr;
     }
 #endif
 #ifdef VK_KHR_shared_presentable_image
@@ -14495,11 +12750,13 @@
 #ifdef VK_KHR_draw_indirect_count
     if (!strcmp(name, "vkCmdDrawIndirectCountKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawIndirectCountKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_draw_indirect_count");
+        return hasExt ? (void*)entry_vkCmdDrawIndirectCountKHR : nullptr;
     }
     if (!strcmp(name, "vkCmdDrawIndexedIndirectCountKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawIndexedIndirectCountKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_draw_indirect_count");
+        return hasExt ? (void*)entry_vkCmdDrawIndexedIndirectCountKHR : nullptr;
     }
 #endif
 #ifdef VK_KHR_timeline_semaphore
@@ -14524,7 +12781,8 @@
     }
     if (!strcmp(name, "vkCmdSetFragmentShadingRateKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdSetFragmentShadingRateKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_fragment_shading_rate");
+        return hasExt ? (void*)entry_vkCmdSetFragmentShadingRateKHR : nullptr;
     }
 #endif
 #ifdef VK_KHR_present_wait
@@ -14586,29 +12844,35 @@
 #ifdef VK_KHR_video_encode_queue
     if (!strcmp(name, "vkCmdEncodeVideoKHR"))
     {
-        return (void*)dynCheck_entry_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"))
     {
-        return (void*)dynCheck_entry_vkCmdSetEvent2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdSetEvent2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdResetEvent2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdResetEvent2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdResetEvent2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdWaitEvents2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdWaitEvents2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdWaitEvents2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdPipelineBarrier2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdPipelineBarrier2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdPipelineBarrier2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdWriteTimestamp2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdWriteTimestamp2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdWriteTimestamp2KHR : nullptr;
     }
     if (!strcmp(name, "vkQueueSubmit2KHR"))
     {
@@ -14617,7 +12881,8 @@
     }
     if (!strcmp(name, "vkCmdWriteBufferMarker2AMD"))
     {
-        return (void*)dynCheck_entry_vkCmdWriteBufferMarker2AMD;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_synchronization2");
+        return hasExt ? (void*)entry_vkCmdWriteBufferMarker2AMD : nullptr;
     }
     if (!strcmp(name, "vkGetQueueCheckpointData2NV"))
     {
@@ -14628,27 +12893,33 @@
 #ifdef VK_KHR_copy_commands2
     if (!strcmp(name, "vkCmdCopyBuffer2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdCopyBuffer2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_copy_commands2");
+        return hasExt ? (void*)entry_vkCmdCopyBuffer2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdCopyImage2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdCopyImage2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_copy_commands2");
+        return hasExt ? (void*)entry_vkCmdCopyImage2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdCopyBufferToImage2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdCopyBufferToImage2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_copy_commands2");
+        return hasExt ? (void*)entry_vkCmdCopyBufferToImage2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdCopyImageToBuffer2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdCopyImageToBuffer2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_copy_commands2");
+        return hasExt ? (void*)entry_vkCmdCopyImageToBuffer2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdBlitImage2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdBlitImage2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_copy_commands2");
+        return hasExt ? (void*)entry_vkCmdBlitImage2KHR : nullptr;
     }
     if (!strcmp(name, "vkCmdResolveImage2KHR"))
     {
-        return (void*)dynCheck_entry_vkCmdResolveImage2KHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_copy_commands2");
+        return hasExt ? (void*)entry_vkCmdResolveImage2KHR : nullptr;
     }
 #endif
 #ifdef VK_KHR_maintenance4
@@ -14708,41 +12979,50 @@
     }
     if (!strcmp(name, "vkCmdDebugMarkerBeginEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdDebugMarkerBeginEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_debug_marker");
+        return hasExt ? (void*)entry_vkCmdDebugMarkerBeginEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdDebugMarkerEndEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdDebugMarkerEndEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_debug_marker");
+        return hasExt ? (void*)entry_vkCmdDebugMarkerEndEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdDebugMarkerInsertEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdDebugMarkerInsertEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_debug_marker");
+        return hasExt ? (void*)entry_vkCmdDebugMarkerInsertEXT : nullptr;
     }
 #endif
 #ifdef VK_EXT_transform_feedback
     if (!strcmp(name, "vkCmdBindTransformFeedbackBuffersEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdBindTransformFeedbackBuffersEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_transform_feedback");
+        return hasExt ? (void*)entry_vkCmdBindTransformFeedbackBuffersEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdBeginTransformFeedbackEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdBeginTransformFeedbackEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_transform_feedback");
+        return hasExt ? (void*)entry_vkCmdBeginTransformFeedbackEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdEndTransformFeedbackEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdEndTransformFeedbackEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_transform_feedback");
+        return hasExt ? (void*)entry_vkCmdEndTransformFeedbackEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdBeginQueryIndexedEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdBeginQueryIndexedEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_transform_feedback");
+        return hasExt ? (void*)entry_vkCmdBeginQueryIndexedEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdEndQueryIndexedEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdEndQueryIndexedEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_transform_feedback");
+        return hasExt ? (void*)entry_vkCmdEndQueryIndexedEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdDrawIndirectByteCountEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawIndirectByteCountEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_transform_feedback");
+        return hasExt ? (void*)entry_vkCmdDrawIndirectByteCountEXT : nullptr;
     }
 #endif
 #ifdef VK_NVX_binary_import
@@ -14764,7 +13044,8 @@
     }
     if (!strcmp(name, "vkCmdCuLaunchKernelNVX"))
     {
-        return (void*)dynCheck_entry_vkCmdCuLaunchKernelNVX;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NVX_binary_import");
+        return hasExt ? (void*)entry_vkCmdCuLaunchKernelNVX : nullptr;
     }
 #endif
 #ifdef VK_NVX_image_view_handle
@@ -14780,11 +13061,13 @@
 #ifdef VK_AMD_draw_indirect_count
     if (!strcmp(name, "vkCmdDrawIndirectCountAMD"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawIndirectCountAMD;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_AMD_draw_indirect_count");
+        return hasExt ? (void*)entry_vkCmdDrawIndirectCountAMD : nullptr;
     }
     if (!strcmp(name, "vkCmdDrawIndexedIndirectCountAMD"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawIndexedIndirectCountAMD;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_AMD_draw_indirect_count");
+        return hasExt ? (void*)entry_vkCmdDrawIndexedIndirectCountAMD : nullptr;
     }
 #endif
 #ifdef VK_AMD_shader_info
@@ -14823,17 +13106,20 @@
 #ifdef VK_EXT_conditional_rendering
     if (!strcmp(name, "vkCmdBeginConditionalRenderingEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdBeginConditionalRenderingEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_conditional_rendering");
+        return hasExt ? (void*)entry_vkCmdBeginConditionalRenderingEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdEndConditionalRenderingEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdEndConditionalRenderingEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_conditional_rendering");
+        return hasExt ? (void*)entry_vkCmdEndConditionalRenderingEXT : nullptr;
     }
 #endif
 #ifdef VK_NV_clip_space_w_scaling
     if (!strcmp(name, "vkCmdSetViewportWScalingNV"))
     {
-        return (void*)dynCheck_entry_vkCmdSetViewportWScalingNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_clip_space_w_scaling");
+        return hasExt ? (void*)entry_vkCmdSetViewportWScalingNV : nullptr;
     }
 #endif
 #ifdef VK_EXT_direct_mode_display
@@ -14893,7 +13179,8 @@
 #ifdef VK_EXT_discard_rectangles
     if (!strcmp(name, "vkCmdSetDiscardRectangleEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetDiscardRectangleEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_discard_rectangles");
+        return hasExt ? (void*)entry_vkCmdSetDiscardRectangleEXT : nullptr;
     }
 #endif
 #ifdef VK_EXT_hdr_metadata
@@ -14974,15 +13261,18 @@
     }
     if (!strcmp(name, "vkCmdBeginDebugUtilsLabelEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdBeginDebugUtilsLabelEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_debug_utils");
+        return hasExt ? (void*)entry_vkCmdBeginDebugUtilsLabelEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdEndDebugUtilsLabelEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdEndDebugUtilsLabelEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_debug_utils");
+        return hasExt ? (void*)entry_vkCmdEndDebugUtilsLabelEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdInsertDebugUtilsLabelEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdInsertDebugUtilsLabelEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_debug_utils");
+        return hasExt ? (void*)entry_vkCmdInsertDebugUtilsLabelEXT : nullptr;
     }
     if (!strcmp(name, "vkCreateDebugUtilsMessengerEXT"))
     {
@@ -15013,7 +13303,8 @@
 #ifdef VK_EXT_sample_locations
     if (!strcmp(name, "vkCmdSetSampleLocationsEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetSampleLocationsEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_sample_locations");
+        return hasExt ? (void*)entry_vkCmdSetSampleLocationsEXT : nullptr;
     }
     if (!strcmp(name, "vkGetPhysicalDeviceMultisamplePropertiesEXT"))
     {
@@ -15048,15 +13339,18 @@
 #ifdef VK_NV_shading_rate_image
     if (!strcmp(name, "vkCmdBindShadingRateImageNV"))
     {
-        return (void*)dynCheck_entry_vkCmdBindShadingRateImageNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_shading_rate_image");
+        return hasExt ? (void*)entry_vkCmdBindShadingRateImageNV : nullptr;
     }
     if (!strcmp(name, "vkCmdSetViewportShadingRatePaletteNV"))
     {
-        return (void*)dynCheck_entry_vkCmdSetViewportShadingRatePaletteNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_shading_rate_image");
+        return hasExt ? (void*)entry_vkCmdSetViewportShadingRatePaletteNV : nullptr;
     }
     if (!strcmp(name, "vkCmdSetCoarseSampleOrderNV"))
     {
-        return (void*)dynCheck_entry_vkCmdSetCoarseSampleOrderNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_shading_rate_image");
+        return hasExt ? (void*)entry_vkCmdSetCoarseSampleOrderNV : nullptr;
     }
 #endif
 #ifdef VK_NV_ray_tracing
@@ -15078,15 +13372,18 @@
     }
     if (!strcmp(name, "vkCmdBuildAccelerationStructureNV"))
     {
-        return (void*)dynCheck_entry_vkCmdBuildAccelerationStructureNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_ray_tracing");
+        return hasExt ? (void*)entry_vkCmdBuildAccelerationStructureNV : nullptr;
     }
     if (!strcmp(name, "vkCmdCopyAccelerationStructureNV"))
     {
-        return (void*)dynCheck_entry_vkCmdCopyAccelerationStructureNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_ray_tracing");
+        return hasExt ? (void*)entry_vkCmdCopyAccelerationStructureNV : nullptr;
     }
     if (!strcmp(name, "vkCmdTraceRaysNV"))
     {
-        return (void*)dynCheck_entry_vkCmdTraceRaysNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_ray_tracing");
+        return hasExt ? (void*)entry_vkCmdTraceRaysNV : nullptr;
     }
     if (!strcmp(name, "vkCreateRayTracingPipelinesNV"))
     {
@@ -15106,7 +13403,8 @@
     }
     if (!strcmp(name, "vkCmdWriteAccelerationStructuresPropertiesNV"))
     {
-        return (void*)dynCheck_entry_vkCmdWriteAccelerationStructuresPropertiesNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_ray_tracing");
+        return hasExt ? (void*)entry_vkCmdWriteAccelerationStructuresPropertiesNV : nullptr;
     }
     if (!strcmp(name, "vkCompileDeferredNV"))
     {
@@ -15122,7 +13420,8 @@
 #ifdef VK_AMD_buffer_marker
     if (!strcmp(name, "vkCmdWriteBufferMarkerAMD"))
     {
-        return (void*)dynCheck_entry_vkCmdWriteBufferMarkerAMD;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_AMD_buffer_marker");
+        return hasExt ? (void*)entry_vkCmdWriteBufferMarkerAMD : nullptr;
     }
 #endif
 #ifdef VK_EXT_calibrated_timestamps
@@ -15139,27 +13438,32 @@
 #ifdef VK_NV_mesh_shader
     if (!strcmp(name, "vkCmdDrawMeshTasksNV"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawMeshTasksNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_mesh_shader");
+        return hasExt ? (void*)entry_vkCmdDrawMeshTasksNV : nullptr;
     }
     if (!strcmp(name, "vkCmdDrawMeshTasksIndirectNV"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawMeshTasksIndirectNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_mesh_shader");
+        return hasExt ? (void*)entry_vkCmdDrawMeshTasksIndirectNV : nullptr;
     }
     if (!strcmp(name, "vkCmdDrawMeshTasksIndirectCountNV"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawMeshTasksIndirectCountNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_mesh_shader");
+        return hasExt ? (void*)entry_vkCmdDrawMeshTasksIndirectCountNV : nullptr;
     }
 #endif
 #ifdef VK_NV_scissor_exclusive
     if (!strcmp(name, "vkCmdSetExclusiveScissorNV"))
     {
-        return (void*)dynCheck_entry_vkCmdSetExclusiveScissorNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_scissor_exclusive");
+        return hasExt ? (void*)entry_vkCmdSetExclusiveScissorNV : nullptr;
     }
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
     if (!strcmp(name, "vkCmdSetCheckpointNV"))
     {
-        return (void*)dynCheck_entry_vkCmdSetCheckpointNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_device_diagnostic_checkpoints");
+        return hasExt ? (void*)entry_vkCmdSetCheckpointNV : nullptr;
     }
     if (!strcmp(name, "vkGetQueueCheckpointDataNV"))
     {
@@ -15178,15 +13482,18 @@
     }
     if (!strcmp(name, "vkCmdSetPerformanceMarkerINTEL"))
     {
-        return (void*)dynCheck_entry_vkCmdSetPerformanceMarkerINTEL;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_INTEL_performance_query");
+        return hasExt ? (void*)entry_vkCmdSetPerformanceMarkerINTEL : nullptr;
     }
     if (!strcmp(name, "vkCmdSetPerformanceStreamMarkerINTEL"))
     {
-        return (void*)dynCheck_entry_vkCmdSetPerformanceStreamMarkerINTEL;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_INTEL_performance_query");
+        return hasExt ? (void*)entry_vkCmdSetPerformanceStreamMarkerINTEL : nullptr;
     }
     if (!strcmp(name, "vkCmdSetPerformanceOverrideINTEL"))
     {
-        return (void*)dynCheck_entry_vkCmdSetPerformanceOverrideINTEL;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_INTEL_performance_query");
+        return hasExt ? (void*)entry_vkCmdSetPerformanceOverrideINTEL : nullptr;
     }
     if (!strcmp(name, "vkAcquirePerformanceConfigurationINTEL"))
     {
@@ -15282,7 +13589,8 @@
 #ifdef VK_EXT_line_rasterization
     if (!strcmp(name, "vkCmdSetLineStippleEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetLineStippleEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_line_rasterization");
+        return hasExt ? (void*)entry_vkCmdSetLineStippleEXT : nullptr;
     }
 #endif
 #ifdef VK_EXT_host_query_reset
@@ -15294,51 +13602,63 @@
 #ifdef VK_EXT_extended_dynamic_state
     if (!strcmp(name, "vkCmdSetCullModeEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetCullModeEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetCullModeEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetFrontFaceEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetFrontFaceEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetFrontFaceEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetPrimitiveTopologyEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetPrimitiveTopologyEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetPrimitiveTopologyEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetViewportWithCountEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetViewportWithCountEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetViewportWithCountEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetScissorWithCountEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetScissorWithCountEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetScissorWithCountEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdBindVertexBuffers2EXT"))
     {
-        return (void*)dynCheck_entry_vkCmdBindVertexBuffers2EXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdBindVertexBuffers2EXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetDepthTestEnableEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetDepthTestEnableEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetDepthTestEnableEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetDepthWriteEnableEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetDepthWriteEnableEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetDepthWriteEnableEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetDepthCompareOpEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetDepthCompareOpEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetDepthCompareOpEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetDepthBoundsTestEnableEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetDepthBoundsTestEnableEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetDepthBoundsTestEnableEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetStencilTestEnableEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetStencilTestEnableEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetStencilTestEnableEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetStencilOpEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetStencilOpEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetStencilOpEXT : nullptr;
     }
 #endif
 #ifdef VK_NV_device_generated_commands
@@ -15348,15 +13668,18 @@
     }
     if (!strcmp(name, "vkCmdPreprocessGeneratedCommandsNV"))
     {
-        return (void*)dynCheck_entry_vkCmdPreprocessGeneratedCommandsNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_device_generated_commands");
+        return hasExt ? (void*)entry_vkCmdPreprocessGeneratedCommandsNV : nullptr;
     }
     if (!strcmp(name, "vkCmdExecuteGeneratedCommandsNV"))
     {
-        return (void*)dynCheck_entry_vkCmdExecuteGeneratedCommandsNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_device_generated_commands");
+        return hasExt ? (void*)entry_vkCmdExecuteGeneratedCommandsNV : nullptr;
     }
     if (!strcmp(name, "vkCmdBindPipelineShaderGroupNV"))
     {
-        return (void*)dynCheck_entry_vkCmdBindPipelineShaderGroupNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_device_generated_commands");
+        return hasExt ? (void*)entry_vkCmdBindPipelineShaderGroupNV : nullptr;
     }
     if (!strcmp(name, "vkCreateIndirectCommandsLayoutNV"))
     {
@@ -15400,7 +13723,8 @@
 #ifdef VK_NV_fragment_shading_rate_enums
     if (!strcmp(name, "vkCmdSetFragmentShadingRateEnumNV"))
     {
-        return (void*)dynCheck_entry_vkCmdSetFragmentShadingRateEnumNV;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_NV_fragment_shading_rate_enums");
+        return hasExt ? (void*)entry_vkCmdSetFragmentShadingRateEnumNV : nullptr;
     }
 #endif
 #ifdef VK_NV_acquire_winrt_display
@@ -15430,7 +13754,8 @@
 #ifdef VK_EXT_vertex_input_dynamic_state
     if (!strcmp(name, "vkCmdSetVertexInputEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetVertexInputEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_vertex_input_dynamic_state");
+        return hasExt ? (void*)entry_vkCmdSetVertexInputEXT : nullptr;
     }
 #endif
 #ifdef VK_FUCHSIA_external_memory
@@ -15482,13 +13807,15 @@
     }
     if (!strcmp(name, "vkCmdSubpassShadingHUAWEI"))
     {
-        return (void*)dynCheck_entry_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"))
     {
-        return (void*)dynCheck_entry_vkCmdBindInvocationMaskHUAWEI;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_HUAWEI_invocation_mask");
+        return hasExt ? (void*)entry_vkCmdBindInvocationMaskHUAWEI : nullptr;
     }
 #endif
 #ifdef VK_NV_external_memory_rdma
@@ -15500,23 +13827,28 @@
 #ifdef VK_EXT_extended_dynamic_state2
     if (!strcmp(name, "vkCmdSetPatchControlPointsEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetPatchControlPointsEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetPatchControlPointsEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetRasterizerDiscardEnableEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetRasterizerDiscardEnableEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetRasterizerDiscardEnableEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetDepthBiasEnableEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetDepthBiasEnableEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetDepthBiasEnableEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetLogicOpEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetLogicOpEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetLogicOpEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdSetPrimitiveRestartEnableEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetPrimitiveRestartEnableEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_extended_dynamic_state2");
+        return hasExt ? (void*)entry_vkCmdSetPrimitiveRestartEnableEXT : nullptr;
     }
 #endif
 #ifdef VK_QNX_screen_surface
@@ -15534,7 +13866,8 @@
 #ifdef VK_EXT_color_write_enable
     if (!strcmp(name, "vkCmdSetColorWriteEnableEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdSetColorWriteEnableEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_color_write_enable");
+        return hasExt ? (void*)entry_vkCmdSetColorWriteEnableEXT : nullptr;
     }
 #endif
 #ifdef VK_GOOGLE_gfxstream
@@ -15556,19 +13889,23 @@
     }
     if (!strcmp(name, "vkBeginCommandBufferAsyncGOOGLE"))
     {
-        return (void*)dynCheck_entry_vkBeginCommandBufferAsyncGOOGLE;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_GOOGLE_gfxstream");
+        return hasExt ? (void*)entry_vkBeginCommandBufferAsyncGOOGLE : nullptr;
     }
     if (!strcmp(name, "vkEndCommandBufferAsyncGOOGLE"))
     {
-        return (void*)dynCheck_entry_vkEndCommandBufferAsyncGOOGLE;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_GOOGLE_gfxstream");
+        return hasExt ? (void*)entry_vkEndCommandBufferAsyncGOOGLE : nullptr;
     }
     if (!strcmp(name, "vkResetCommandBufferAsyncGOOGLE"))
     {
-        return (void*)dynCheck_entry_vkResetCommandBufferAsyncGOOGLE;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_GOOGLE_gfxstream");
+        return hasExt ? (void*)entry_vkResetCommandBufferAsyncGOOGLE : nullptr;
     }
     if (!strcmp(name, "vkCommandBufferHostSyncGOOGLE"))
     {
-        return (void*)dynCheck_entry_vkCommandBufferHostSyncGOOGLE;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_GOOGLE_gfxstream");
+        return hasExt ? (void*)entry_vkCommandBufferHostSyncGOOGLE : nullptr;
     }
     if (!strcmp(name, "vkCreateImageWithRequirementsGOOGLE"))
     {
@@ -15637,11 +13974,13 @@
 #ifdef VK_EXT_multi_draw
     if (!strcmp(name, "vkCmdDrawMultiEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawMultiEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_multi_draw");
+        return hasExt ? (void*)entry_vkCmdDrawMultiEXT : nullptr;
     }
     if (!strcmp(name, "vkCmdDrawMultiIndexedEXT"))
     {
-        return (void*)dynCheck_entry_vkCmdDrawMultiIndexedEXT;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_EXT_multi_draw");
+        return hasExt ? (void*)entry_vkCmdDrawMultiIndexedEXT : nullptr;
     }
 #endif
 #ifdef VK_EXT_pageable_device_local_memory
@@ -15661,11 +14000,13 @@
     }
     if (!strcmp(name, "vkCmdBuildAccelerationStructuresKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdBuildAccelerationStructuresKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_acceleration_structure");
+        return hasExt ? (void*)entry_vkCmdBuildAccelerationStructuresKHR : nullptr;
     }
     if (!strcmp(name, "vkCmdBuildAccelerationStructuresIndirectKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdBuildAccelerationStructuresIndirectKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_acceleration_structure");
+        return hasExt ? (void*)entry_vkCmdBuildAccelerationStructuresIndirectKHR : nullptr;
     }
     if (!strcmp(name, "vkBuildAccelerationStructuresKHR"))
     {
@@ -15689,15 +14030,18 @@
     }
     if (!strcmp(name, "vkCmdCopyAccelerationStructureKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdCopyAccelerationStructureKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_acceleration_structure");
+        return hasExt ? (void*)entry_vkCmdCopyAccelerationStructureKHR : nullptr;
     }
     if (!strcmp(name, "vkCmdCopyAccelerationStructureToMemoryKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdCopyAccelerationStructureToMemoryKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_acceleration_structure");
+        return hasExt ? (void*)entry_vkCmdCopyAccelerationStructureToMemoryKHR : nullptr;
     }
     if (!strcmp(name, "vkCmdCopyMemoryToAccelerationStructureKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdCopyMemoryToAccelerationStructureKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_acceleration_structure");
+        return hasExt ? (void*)entry_vkCmdCopyMemoryToAccelerationStructureKHR : nullptr;
     }
     if (!strcmp(name, "vkGetAccelerationStructureDeviceAddressKHR"))
     {
@@ -15705,7 +14049,8 @@
     }
     if (!strcmp(name, "vkCmdWriteAccelerationStructuresPropertiesKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdWriteAccelerationStructuresPropertiesKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_acceleration_structure");
+        return hasExt ? (void*)entry_vkCmdWriteAccelerationStructuresPropertiesKHR : nullptr;
     }
     if (!strcmp(name, "vkGetDeviceAccelerationStructureCompatibilityKHR"))
     {
@@ -15719,7 +14064,8 @@
 #ifdef VK_KHR_ray_tracing_pipeline
     if (!strcmp(name, "vkCmdTraceRaysKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdTraceRaysKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_ray_tracing_pipeline");
+        return hasExt ? (void*)entry_vkCmdTraceRaysKHR : nullptr;
     }
     if (!strcmp(name, "vkCreateRayTracingPipelinesKHR"))
     {
@@ -15731,7 +14077,8 @@
     }
     if (!strcmp(name, "vkCmdTraceRaysIndirectKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdTraceRaysIndirectKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_ray_tracing_pipeline");
+        return hasExt ? (void*)entry_vkCmdTraceRaysIndirectKHR : nullptr;
     }
     if (!strcmp(name, "vkGetRayTracingShaderGroupStackSizeKHR"))
     {
@@ -15739,7 +14086,8 @@
     }
     if (!strcmp(name, "vkCmdSetRayTracingPipelineStackSizeKHR"))
     {
-        return (void*)dynCheck_entry_vkCmdSetRayTracingPipelineStackSizeKHR;
+        bool hasExt = resources->hasInstanceExtension(instance, "VK_KHR_ray_tracing_pipeline");
+        return hasExt ? (void*)entry_vkCmdSetRayTracingPipelineStackSizeKHR : nullptr;
     }
 #endif
     return nullptr;
