diff --git a/src/rendering/vulkan/renderer/vk_renderpass.cpp b/src/rendering/vulkan/renderer/vk_renderpass.cpp index 0c6adbc61..7972cf0f5 100644 --- a/src/rendering/vulkan/renderer/vk_renderpass.cpp +++ b/src/rendering/vulkan/renderer/vk_renderpass.cpp @@ -33,6 +33,15 @@ void VkRenderPassManager::RenderBuffersReset() void VkRenderPassManager::TextureSetPoolReset() { + if (auto fb = GetVulkanFrameBuffer()) + { + auto &deleteList = fb->FrameDeleteList; + + for (auto &desc : TextureDescriptorPools) + { + deleteList.DescriptorPools.push_back(std::move(desc)); + } + } TextureDescriptorPools.clear(); TextureDescriptorSetsLeft = 0; TextureDescriptorsLeft = 0; diff --git a/src/rendering/vulkan/system/vk_framebuffer.cpp b/src/rendering/vulkan/system/vk_framebuffer.cpp index e24a6e654..2c765bc46 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.cpp +++ b/src/rendering/vulkan/system/vk_framebuffer.cpp @@ -188,6 +188,7 @@ void VulkanFrameBuffer::DeleteFrameObjects() FrameDeleteList.ImageViews.clear(); FrameDeleteList.Buffers.clear(); FrameDeleteList.Descriptors.clear(); + FrameDeleteList.DescriptorPools.clear(); FrameDeleteList.CommandBuffers.clear(); } diff --git a/src/rendering/vulkan/system/vk_framebuffer.h b/src/rendering/vulkan/system/vk_framebuffer.h index 0051abbaa..2a239c3d3 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.h +++ b/src/rendering/vulkan/system/vk_framebuffer.h @@ -59,6 +59,7 @@ public: std::vector> ImageViews; std::vector> Buffers; std::vector> Descriptors; + std::vector> DescriptorPools; std::vector> CommandBuffers; } FrameDeleteList; diff --git a/src/rendering/vulkan/textures/vk_hwtexture.cpp b/src/rendering/vulkan/textures/vk_hwtexture.cpp index 13148eca1..8c0af229d 100644 --- a/src/rendering/vulkan/textures/vk_hwtexture.cpp +++ b/src/rendering/vulkan/textures/vk_hwtexture.cpp @@ -53,32 +53,34 @@ VkHardwareTexture::~VkHardwareTexture() if (Prev) Prev->Next = Next; else First = Next; - auto fb = GetVulkanFrameBuffer(); - if (fb) + Reset(); +} + +void VkHardwareTexture::Reset() +{ + if (auto fb = GetVulkanFrameBuffer()) { + ResetDescriptors(); + auto &deleteList = fb->FrameDeleteList; - for (auto &it : mDescriptorSets) - { - deleteList.Descriptors.push_back(std::move(it.descriptor)); - it.descriptor = nullptr; - } - mDescriptorSets.clear(); if (mImage) deleteList.Images.push_back(std::move(mImage)); if (mImageView) deleteList.ImageViews.push_back(std::move(mImageView)); if (mStagingBuffer) deleteList.Buffers.push_back(std::move(mStagingBuffer)); } } -void VkHardwareTexture::Reset() -{ - mDescriptorSets.clear(); - mImage.reset(); - mImageView.reset(); - mStagingBuffer.reset(); -} - void VkHardwareTexture::ResetDescriptors() { + if (auto fb = GetVulkanFrameBuffer()) + { + auto &deleteList = fb->FrameDeleteList; + + for (auto &it : mDescriptorSets) + { + deleteList.Descriptors.push_back(std::move(it.descriptor)); + } + } + mDescriptorSets.clear(); }