Fix memory leak and validaiton errors caused by Vulkan::Program 74/321474/4
authorRichard Huang <r.huang@samsung.com>
Fri, 21 Mar 2025 15:55:24 +0000 (15:55 +0000)
committerRichard Huang <r.huang@samsung.com>
Tue, 29 Apr 2025 12:49:39 +0000 (13:49 +0100)
Change-Id: I6d0e609f80ab7dec342c696e6093f50963bff664

dali/internal/graphics/vulkan-impl/vulkan-program-impl.cpp
dali/internal/graphics/vulkan-impl/vulkan-program.cpp

index af01d72f2ecef45be385cedd9d5a2122e6733b09..ad0e70a6e96e59974d63e97b2f573a94031030ac 100644 (file)
@@ -53,6 +53,19 @@ struct ProgramImpl::Impl
 
   ~Impl()
   {
+    // Tear down all VkDescriptorPool handles we ever created
+    auto& gfxDevice = controller.GetGraphicsDevice();
+    auto  vkDevice  = gfxDevice.GetLogicalDevice();
+    auto& allocator = gfxDevice.GetAllocator();
+
+    for(auto& descriptorPool : poolList)
+    {
+      if(descriptorPool.vkPool) // valid handle?
+      {
+        vkDevice.destroyDescriptorPool(descriptorPool.vkPool, &allocator);
+      }
+    }
+
     delete createInfo.shaderState;
   }
 
@@ -129,6 +142,7 @@ ProgramImpl::~ProgramImpl() = default;
 
 bool ProgramImpl::Destroy()
 {
+  mImpl.reset();
   return false;
 }
 
index d5eda21ea2de1c737498bad52ceccea8ab5f57bd..383182c1f9637a8c43550a0a066a8a4951d09b79 100644 (file)
@@ -34,6 +34,7 @@ namespace Dali::Graphics::Vulkan
 Program::Program(const Graphics::ProgramCreateInfo& createInfo, VulkanGraphicsController& controller)
 {
   mProgram = new ProgramImpl(createInfo, controller);
+  mProgram->Retain();
 }
 
 Program::~Program()