From 88ad5de2ab0887580c97122c07a350191e58d92a Mon Sep 17 00:00:00 2001 From: FlightlessMango Date: Tue, 10 Mar 2020 08:27:27 +0100 Subject: [PATCH] Fix so preloading doesn't break vulkan layer --- src/mangohud.json | 4 ++++ src/overlay.cpp | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/mangohud.json b/src/mangohud.json index a2fa3184..38e8ed61 100644 --- a/src/mangohud.json +++ b/src/mangohud.json @@ -7,6 +7,10 @@ "library_path": "libMangoHud.so", "implementation_version": "1", "description": "Vulkan Hud Overlay", + "functions": { + "vkGetInstanceProcAddr": "overlay_GetInstanceProcAddr", + "vkGetDeviceProcAddr": "overlay_GetDeviceProcAddr" + }, "enable_environment": { "MANGOHUD": "1" }, diff --git a/src/overlay.cpp b/src/overlay.cpp index 9398e48f..2443bbf4 100644 --- a/src/overlay.cpp +++ b/src/overlay.cpp @@ -2638,11 +2638,13 @@ static void overlay_DestroyInstance( destroy_instance_data(instance_data); } +extern "C" VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL overlay_GetDeviceProcAddr(VkDevice dev, + const char *funcName); static const struct { const char *name; void *ptr; } name_to_funcptr_map[] = { - { "vkGetDeviceProcAddr", (void *) vkGetDeviceProcAddr }, + { "vkGetDeviceProcAddr", (void *) overlay_GetDeviceProcAddr }, #define ADD_HOOK(fn) { "vk" # fn, (void *) overlay_ ## fn } #define ADD_ALIAS_HOOK(alias, fn) { "vk" # alias, (void *) overlay_ ## fn } ADD_HOOK(AllocateCommandBuffers), @@ -2676,7 +2678,7 @@ static void *find_ptr(const char *name) return NULL; } -VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice dev, +extern "C" VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL overlay_GetDeviceProcAddr(VkDevice dev, const char *funcName) { void *ptr = find_ptr(funcName); @@ -2689,7 +2691,7 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkD return device_data->vtable.GetDeviceProcAddr(dev, funcName); } -VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, +extern "C" VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL overlay_GetInstanceProcAddr(VkInstance instance, const char *funcName) { void *ptr = find_ptr(funcName);