From fbc4fa5bca8ee4715962bc2bc95546f494b9cd84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sun, 21 Jun 2020 22:59:55 +0200 Subject: [PATCH] Move the responsibility to register the debugutils callback to the VulkanContext. We only use one anyway. --- Common/Vulkan/VulkanContext.cpp | 21 ++++++++++++--------- Common/Vulkan/VulkanContext.h | 5 ++--- Windows/GPU/WindowsVulkanContext.cpp | 5 +---- android/jni/AndroidVulkanContext.cpp | 3 --- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/Common/Vulkan/VulkanContext.cpp b/Common/Vulkan/VulkanContext.cpp index abc16b9e0..96c170423 100644 --- a/Common/Vulkan/VulkanContext.cpp +++ b/Common/Vulkan/VulkanContext.cpp @@ -247,6 +247,11 @@ VkResult VulkanContext::CreateInstance(const CreateInfo &info) { vkGetPhysicalDeviceProperties(physical_devices_[i], &physicalDeviceProperties_[i].properties); } } + + if (extensionsLookup_.EXT_debug_utils) { + InitDebugUtilsCallback(); + } + return VK_SUCCESS; } @@ -255,6 +260,13 @@ VulkanContext::~VulkanContext() { } void VulkanContext::DestroyInstance() { + if (extensionsLookup_.EXT_debug_utils) { + while (utils_callbacks.size() > 0) { + vkDestroyDebugUtilsMessengerEXT(instance_, utils_callbacks.back(), nullptr); + utils_callbacks.pop_back(); + } + } + vkDestroyInstance(instance_, nullptr); VulkanFree(); instance_ = VK_NULL_HANDLE; @@ -687,15 +699,6 @@ VkResult VulkanContext::InitDebugUtilsCallback() { return res; } -void VulkanContext::DestroyDebugUtilsCallback() { - if (extensionsLookup_.EXT_debug_utils) { - while (utils_callbacks.size() > 0) { - vkDestroyDebugUtilsMessengerEXT(instance_, utils_callbacks.back(), nullptr); - utils_callbacks.pop_back(); - } - } -} - VkResult VulkanContext::InitSurface(WindowSystem winsys, void *data1, void *data2) { winsys_ = winsys; winsysData1_ = data1; diff --git a/Common/Vulkan/VulkanContext.h b/Common/Vulkan/VulkanContext.h index 7043438ec..3a8e51938 100644 --- a/Common/Vulkan/VulkanContext.h +++ b/Common/Vulkan/VulkanContext.h @@ -170,9 +170,6 @@ public: bool MemoryTypeFromProperties(uint32_t typeBits, VkFlags requirements_mask, uint32_t *typeIndex); - VkResult InitDebugUtilsCallback(); - void DestroyDebugUtilsCallback(); - VkPhysicalDevice GetPhysicalDevice(int n) const { return physical_devices_[n]; } @@ -276,6 +273,8 @@ public: void GetImageMemoryRequirements(VkImage image, VkMemoryRequirements *mem_reqs, bool *dedicatedAllocation); private: + VkResult InitDebugUtilsCallback(); + // A layer can expose extensions, keep track of those extensions here. struct LayerProperties { VkLayerProperties properties; diff --git a/Windows/GPU/WindowsVulkanContext.cpp b/Windows/GPU/WindowsVulkanContext.cpp index db03b6e80..abdc03e60 100644 --- a/Windows/GPU/WindowsVulkanContext.cpp +++ b/Windows/GPU/WindowsVulkanContext.cpp @@ -127,9 +127,7 @@ bool WindowsVulkanContext::Init(HINSTANCE hInst, HWND hWnd, std::string *error_m g_Vulkan = nullptr; return false; } - if (g_validate_) { - g_Vulkan->InitDebugUtilsCallback(); - } + g_Vulkan->InitSurface(WINDOWSYSTEM_WIN32, (void *)hInst, (void *)hWnd); if (!g_Vulkan->InitObjects()) { *error_message = g_Vulkan->InitError(); @@ -164,7 +162,6 @@ void WindowsVulkanContext::Shutdown() { g_Vulkan->WaitUntilQueueIdle(); g_Vulkan->DestroyObjects(); g_Vulkan->DestroyDevice(); - g_Vulkan->DestroyDebugUtilsCallback(); g_Vulkan->DestroyInstance(); delete g_Vulkan; diff --git a/android/jni/AndroidVulkanContext.cpp b/android/jni/AndroidVulkanContext.cpp index 9ad5aa203..adcf4738a 100644 --- a/android/jni/AndroidVulkanContext.cpp +++ b/android/jni/AndroidVulkanContext.cpp @@ -120,8 +120,6 @@ bool AndroidVulkanContext::InitFromRenderThread(ANativeWindow *wnd, int desiredB if (!success) { g_Vulkan->DestroyObjects(); g_Vulkan->DestroyDevice(); - g_Vulkan->DestroyDebugUtilsCallback(); - g_Vulkan->DestroyInstance(); } return success; @@ -141,7 +139,6 @@ void AndroidVulkanContext::ShutdownFromRenderThread() { void AndroidVulkanContext::Shutdown() { ILOG("Calling NativeShutdownGraphics"); g_Vulkan->DestroyDevice(); - g_Vulkan->DestroyDebugUtilsCallback(); g_Vulkan->DestroyInstance(); // We keep the g_Vulkan context around to avoid invalidating a ton of pointers around the app. finalize_glslang();