From 279a827c73df03c0b029aebca5e65b9a1628909f Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 11 Apr 2023 12:36:46 +0100 Subject: [PATCH] Add a function to reset memory blocks without freeing them * This can be used only when all resources are safely freed, but means the memory can be re-used. --- renderdoc/driver/vulkan/vk_core.h | 1 + renderdoc/driver/vulkan/vk_memory.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index efb915027..419a67c26 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -590,6 +590,7 @@ private: VkDeviceSize m_MemoryBlockSize[arraydim()] = {}; void FreeAllMemory(MemoryScope scope); + void ResetMemoryBlocks(MemoryScope scope); void FreeMemoryAllocation(MemoryAllocation alloc); // internal implementation - call one of the functions above diff --git a/renderdoc/driver/vulkan/vk_memory.cpp b/renderdoc/driver/vulkan/vk_memory.cpp index b48aadd5c..95ca16661 100644 --- a/renderdoc/driver/vulkan/vk_memory.cpp +++ b/renderdoc/driver/vulkan/vk_memory.cpp @@ -432,6 +432,17 @@ void WrappedVulkan::FreeAllMemory(MemoryScope scope) }); } +void WrappedVulkan::ResetMemoryBlocks(MemoryScope scope) +{ + rdcarray &allocList = m_MemoryBlocks[(size_t)scope]; + + if(allocList.empty()) + return; + + for(MemoryAllocation &alloc : allocList) + alloc.offs = 0; +} + void WrappedVulkan::FreeMemoryAllocation(MemoryAllocation alloc) { // don't do anything at the moment, we only support freeing the whole scope at once.