From 25e23d6ac5711d219824fdb57c7bd382e53be168 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Thu, 9 May 2019 22:41:47 +0200 Subject: [PATCH] - add vk_debug_callstack for getting the location where a vulkan warning or error happens --- src/rendering/vulkan/system/vk_device.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/rendering/vulkan/system/vk_device.cpp b/src/rendering/vulkan/system/vk_device.cpp index 06dff224c..08393a032 100644 --- a/src/rendering/vulkan/system/vk_device.cpp +++ b/src/rendering/vulkan/system/vk_device.cpp @@ -47,6 +47,8 @@ bool I_GetVulkanPlatformExtensions(unsigned int *count, const char **names); bool I_CreateVulkanSurface(VkInstance instance, VkSurfaceKHR *surface); +FString JitCaptureStackTrace(int framesToSkip, bool includeNativeFrames); + // Physical device info static std::vector AvailableDevices; static std::vector SupportedDevices; @@ -56,6 +58,8 @@ CUSTOM_CVAR(Bool, vk_debug, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINI Printf("This won't take effect until " GAMENAME " is restarted.\n"); } +CVAR(Bool, vk_debug_callstack, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) + CUSTOM_CVAR(Int, vk_device, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { Printf("This won't take effect until " GAMENAME " is restarted.\n"); @@ -398,6 +402,13 @@ VkBool32 VulkanDevice::DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT mess Printf("\n"); Printf(TEXTCOLOR_RED "[%s] ", typestr); Printf(TEXTCOLOR_WHITE "%s\n", msg.GetChars()); + + if (vk_debug_callstack) + { + FString callstack = JitCaptureStackTrace(0, true); + if (!callstack.IsEmpty()) + Printf("%s\n", callstack.GetChars()); + } } }