From ac4f52c4f7ffb84408f3ca677cebd74ee5a9be52 Mon Sep 17 00:00:00 2001 From: Steven Noonan Date: Thu, 22 Jun 2023 01:47:33 -0700 Subject: [PATCH] Vulkan: release all resources on RendererVk destroy The most important part of this is unloading the libvulkan handle. We open the handle in ::initialize but we were previously only unloading it in ::~RendererVk[1]. Since a DisplayVk (and RendererVk) are not destructed in between context creations, this meant that the libvulkan library handle reference count only increased, never decreased. [1] Which, incidentally, never gets invoked, ever. We create Display instances and they live forever in a static structure and we only ::initialize/::terminate them. Bug: angleproject:8225 Change-Id: I03da9b19f0c4ae3b5efacd07880aadb7ee77ebf5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4636882 Reviewed-by: Charlie Lao Commit-Queue: Shahbaz Youssefi Reviewed-by: Shahbaz Youssefi --- src/libANGLE/renderer/vulkan/RendererVk.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp index 9487ee845..3e1b72782 100644 --- a/src/libANGLE/renderer/vulkan/RendererVk.cpp +++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp @@ -1412,17 +1412,7 @@ RendererVk::RendererVk() ASSERT(IsLittleEndian()); } -RendererVk::~RendererVk() -{ - mAllocator.release(); - mPipelineCache.release(); - ASSERT(!hasSharedGarbage()); - - if (mLibVulkanLibrary) - { - angle::CloseSystemLibrary(mLibVulkanLibrary); - } -} +RendererVk::~RendererVk() {} bool RendererVk::hasSharedGarbage() { @@ -1496,6 +1486,14 @@ void RendererVk::onDestroy(vk::Context *context) mEnabledInstanceExtensions.clear(); mEnabledDeviceExtensions.clear(); + + ASSERT(!hasSharedGarbage()); + + if (mLibVulkanLibrary) + { + angle::CloseSystemLibrary(mLibVulkanLibrary); + mLibVulkanLibrary = nullptr; + } } void RendererVk::notifyDeviceLost()