From 1ad36f2ea881ded594107bb33b74d1da4d893680 Mon Sep 17 00:00:00 2001 From: Varnill Date: Sun, 28 Sep 2025 23:35:04 +0300 Subject: [PATCH] fix: memory leak Add dtors for ComputePipeline and MaterialPipeline --- src/include/graphics/vulkan/ComputePipeline.h | 4 +++- src/include/graphics/vulkan/vk_types.h | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/include/graphics/vulkan/ComputePipeline.h b/src/include/graphics/vulkan/ComputePipeline.h index a88fe15c..924023d2 100644 --- a/src/include/graphics/vulkan/ComputePipeline.h +++ b/src/include/graphics/vulkan/ComputePipeline.h @@ -20,7 +20,9 @@ class ComputePipeline : public IPipeline { void init(VkDevice device) override; void bind(VkCommandBuffer cmd) override; void destroy() override; - + ~ComputePipeline() override { + ComputePipeline::destroy(); + } VkPipeline getPipeline() const override { return _pipeline; } VkPipelineLayout getLayout() const override { return _pipelineLayout; } diff --git a/src/include/graphics/vulkan/vk_types.h b/src/include/graphics/vulkan/vk_types.h index 172f637e..fd2b490a 100644 --- a/src/include/graphics/vulkan/vk_types.h +++ b/src/include/graphics/vulkan/vk_types.h @@ -65,6 +65,15 @@ enum class MaterialPass : uint8_t { MainColor, Transparent, Other }; struct MaterialPipeline { VkPipeline pipeline; VkPipelineLayout layout; + VkDevice _device = VK_NULL_HANDLE; + ~MaterialPipeline() { + if (_device != VK_NULL_HANDLE) { + vkDestroyPipelineLayout(_device, layout, nullptr); + vkDestroyPipeline(_device, pipeline, nullptr); + pipeline = VK_NULL_HANDLE; + layout = VK_NULL_HANDLE; + } + } }; struct MaterialInstance {