From 114222f0eb37fc521b91bcc32bdf17ae7b1ec230 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 3 Aug 2026 10:40:00 +0100 Subject: [PATCH] Check for extensions function pointers provided by layers. Closes #3877 --- renderdoc/driver/vulkan/vk_dispatchtables.cpp | 1 + .../driver/vulkan/wrappers/vk_device_funcs.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/renderdoc/driver/vulkan/vk_dispatchtables.cpp b/renderdoc/driver/vulkan/vk_dispatchtables.cpp index 68b7c9572..1c823a9ca 100644 --- a/renderdoc/driver/vulkan/vk_dispatchtables.cpp +++ b/renderdoc/driver/vulkan/vk_dispatchtables.cpp @@ -125,6 +125,7 @@ void InitInstanceExtensionTables(VkInstance instance, InstanceDeviceInfo *info) DeclExts(); CheckInstanceExts(); + CheckDeviceExts(); InstanceGPA(EnumerateDeviceExtensionProperties); InstanceGPA(EnumerateDeviceLayerProperties); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 774417eb4..c65982294 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -876,6 +876,21 @@ VkResult WrappedVulkan::vkCreateInstance(const VkInstanceCreateInfo *pCreateInfo { availablePhysDeviceFunctions.insert(e.extensionName); } + + for(uint32_t i = 0; i < modifiedCreateInfo.enabledLayerCount; i++) + { + ObjDisp(m_Instance) + ->EnumerateDeviceExtensionProperties(p, modifiedCreateInfo.ppEnabledLayerNames[i], + &count, NULL); + + exts.resize(count); + ObjDisp(m_Instance)->EnumerateDeviceExtensionProperties(p, NULL, &count, exts.data()); + + for(const VkExtensionProperties &e : exts) + { + availablePhysDeviceFunctions.insert(e.extensionName); + } + } } // we don't bother wrapping these, they're temporary handles } @@ -892,6 +907,7 @@ VkResult WrappedVulkan::vkCreateInstance(const VkInstanceCreateInfo *pCreateInfo record->instDevInfo->ext_##name = true; \ } CheckInstanceExts(); + CheckDeviceExts(); #undef CheckExt #define CheckExt(name, ver) \ if(!strcmp(modifiedCreateInfo.ppEnabledExtensionNames[i], "VK_" #name)) \