From 5dd56847d8db46fa8cf8b9537c02c415f21d324f Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Sat, 20 Feb 2021 20:29:11 +0100 Subject: [PATCH] Fix some issues with resource management --- .../Vulkan/Resources/ManagedResource.hpp | 4 ++-- .../Vulkan/Resources/ResourceManager.cpp | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/openVulkanoCpp/Vulkan/Resources/ManagedResource.hpp b/openVulkanoCpp/Vulkan/Resources/ManagedResource.hpp index 9d25e7e..b239e61 100644 --- a/openVulkanoCpp/Vulkan/Resources/ManagedResource.hpp +++ b/openVulkanoCpp/Vulkan/Resources/ManagedResource.hpp @@ -130,9 +130,9 @@ namespace openVulkanoCpp::Vulkan if (size == VK_WHOLE_SIZE) size = this->size; mapped = allocation->MapChild(this->offset + offset, size); } - - return static_cast(mapped); } + + return static_cast(mapped); } /** diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp index 009c9a2..fa9585d 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp @@ -147,6 +147,18 @@ namespace openVulkanoCpp::Vulkan ManagedBuffer* ResourceManager::CreateSharedMemoryBuffer(const size_t size) { const std::unique_lock lock(mutex); + if (!recycleBuffers.empty()) + { + for(auto buff : recycleBuffers) + { + if (buff->size == size) + { + Logger::DATA->info("Recycle Buffer"); + Utils::Remove(recycleBuffers, buff); + return buff; + } + } + } ManagedBuffer* buffer = CreateBuffer(size, vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eHostCoherent); return buffer; } @@ -158,7 +170,8 @@ namespace openVulkanoCpp::Vulkan void ResourceManager::FreeBuffer(ManagedBuffer* buffer) { - toFree[currentBuffer].push_back(buffer); + if (buffer) + toFree[currentBuffer].push_back(buffer); } void ResourceManager::DoFreeBuffer(ManagedBuffer* buffer) @@ -228,7 +241,7 @@ namespace openVulkanoCpp::Vulkan break; } } - if(!alloc && createIfAllFull) alloc = CreateMemoryAllocation(256 * 1024 * 1024, type, true); + if(!alloc && createIfAllFull) alloc = CreateMemoryAllocation(64 * 1024 * 1024, type, true); if(alloc) lastAllocation = alloc; return alloc; }