From ab809dfa87d0bc1b4d5e2f2a09b87431c28044a7 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 10 Dec 2015 21:40:33 +0100 Subject: [PATCH] Fixes for layer handling --- renderdoc/driver/vulkan/vk_dispatchtables.cpp | 4 ++++ renderdoc/driver/vulkan/vk_tracelayer.cpp | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_dispatchtables.cpp b/renderdoc/driver/vulkan/vk_dispatchtables.cpp index 23280eb5e..f8bd6d176 100644 --- a/renderdoc/driver/vulkan/vk_dispatchtables.cpp +++ b/renderdoc/driver/vulkan/vk_dispatchtables.cpp @@ -162,6 +162,10 @@ void InitInstanceTable(const VkBaseLayerObject *obj) #define HookInit(name) if(table->name == NULL) table->name = (CONCAT(PFN_vk, name))obj->pGPA((VkInstance)obj->baseObject, STRINGIZE(CONCAT(vk, name))) HookInitVulkanInstance(); + + // we also need these functions for layer handling + HookInit(EnumerateDeviceExtensionProperties); + HookInit(EnumerateDeviceLayerProperties); } VkLayerDispatchTable *GetDeviceDispatchTable(void *device) diff --git a/renderdoc/driver/vulkan/vk_tracelayer.cpp b/renderdoc/driver/vulkan/vk_tracelayer.cpp index 566da7649..49fe3d598 100644 --- a/renderdoc/driver/vulkan/vk_tracelayer.cpp +++ b/renderdoc/driver/vulkan/vk_tracelayer.cpp @@ -158,6 +158,11 @@ VK_LAYER_EXPORT VkResult VKAPI_CALL RenderDocEnumerateDeviceExtensionProperties( uint32_t *pPropertyCount, VkExtensionProperties *pProperties) { + // if pLayerName is NULL we're calling down through the layer chain to the ICD. + // This is our chance to filter out any reported extensions that we don't support + if(pLayerName == NULL) + return ObjDisp(physicalDevice)->EnumerateDeviceExtensionProperties(Unwrap(physicalDevice), pLayerName, pPropertyCount, pProperties); + return getProps(pPropertyCount, pProperties, ARRAY_COUNT(physExts), (void *)physExts, sizeof(VkExtensionProperties)); } @@ -200,9 +205,9 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI_CALL RenderDoc_GetInstanceProcAddr(VkIn return (PFN_vkVoidFunction) &RenderDoc_GetInstanceProcAddr; } - if (!strcmp("vkGetPhysicalDeviceLayerProperties", pName)) + if (!strcmp("vkEnumerateDeviceLayerProperties", pName)) return (PFN_vkVoidFunction) &RenderDocEnumerateDeviceLayerProperties; - if (!strcmp("vkGetPhysicalDeviceExtensionProperties", pName)) + if (!strcmp("vkEnumerateDeviceExtensionProperties", pName)) return (PFN_vkVoidFunction) &RenderDocEnumerateDeviceExtensionProperties; HookInitVulkanInstance();