mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-07 23:41:18 +12:00
Vulkan: Properly free TextureChunkedHeaps
This commit is contained in:
parent
f2096a61cc
commit
95c9701dbf
2 changed files with 12 additions and 2 deletions
|
@ -177,6 +177,14 @@ void VKRSynchronizedRingAllocator::GetStats(uint32& numBuffers, size_t& totalBuf
|
||||||
|
|
||||||
/* VkTextureChunkedHeap */
|
/* VkTextureChunkedHeap */
|
||||||
|
|
||||||
|
VkTextureChunkedHeap::~VkTextureChunkedHeap()
|
||||||
|
{
|
||||||
|
for (auto& i : m_list_chunkInfo)
|
||||||
|
{
|
||||||
|
vkFreeMemory(m_device, i.mem, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint32 VkTextureChunkedHeap::allocateNewChunk(uint32 chunkIndex, uint32 minimumAllocationSize)
|
uint32 VkTextureChunkedHeap::allocateNewChunk(uint32 chunkIndex, uint32 minimumAllocationSize)
|
||||||
{
|
{
|
||||||
cemu_assert_debug(m_list_chunkInfo.size() == chunkIndex);
|
cemu_assert_debug(m_list_chunkInfo.size() == chunkIndex);
|
||||||
|
@ -481,7 +489,7 @@ VkImageMemAllocation* VKRMemoryManager::imageMemoryAllocate(VkImage image)
|
||||||
map_textureHeap.emplace(typeFilter, texHeap);
|
map_textureHeap.emplace(typeFilter, texHeap);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
texHeap = it->second;
|
texHeap = it->second.get();
|
||||||
|
|
||||||
// alloc mem from heap
|
// alloc mem from heap
|
||||||
uint32 allocationSize = (uint32)memRequirements.size;
|
uint32 allocationSize = (uint32)memRequirements.size;
|
||||||
|
|
|
@ -18,6 +18,7 @@ class VkTextureChunkedHeap : private ChunkedHeap
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VkTextureChunkedHeap(class VKRMemoryManager* memoryManager, uint32 typeFilter, VkDevice device) : m_vkrMemoryManager(memoryManager), m_typeFilter(typeFilter), m_device(device) { };
|
VkTextureChunkedHeap(class VKRMemoryManager* memoryManager, uint32 typeFilter, VkDevice device) : m_vkrMemoryManager(memoryManager), m_typeFilter(typeFilter), m_device(device) { };
|
||||||
|
~VkTextureChunkedHeap();
|
||||||
|
|
||||||
struct ChunkInfo
|
struct ChunkInfo
|
||||||
{
|
{
|
||||||
|
@ -80,6 +81,7 @@ public:
|
||||||
|
|
||||||
VKRSynchronizedRingAllocator(class VulkanRenderer* vkRenderer, class VKRMemoryManager* vkMemoryManager, BUFFER_TYPE bufferType, uint32 minimumBufferAllocSize) : m_vkr(vkRenderer), m_vkrMemMgr(vkMemoryManager), m_bufferType(bufferType), m_minimumBufferAllocSize(minimumBufferAllocSize) {};
|
VKRSynchronizedRingAllocator(class VulkanRenderer* vkRenderer, class VKRMemoryManager* vkMemoryManager, BUFFER_TYPE bufferType, uint32 minimumBufferAllocSize) : m_vkr(vkRenderer), m_vkrMemMgr(vkMemoryManager), m_bufferType(bufferType), m_minimumBufferAllocSize(minimumBufferAllocSize) {};
|
||||||
VKRSynchronizedRingAllocator(const VKRSynchronizedRingAllocator&) = delete; // disallow copy
|
VKRSynchronizedRingAllocator(const VKRSynchronizedRingAllocator&) = delete; // disallow copy
|
||||||
|
~VKRSynchronizedRingAllocator();
|
||||||
|
|
||||||
struct BufferSyncPoint_t
|
struct BufferSyncPoint_t
|
||||||
{
|
{
|
||||||
|
@ -148,7 +150,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// texture memory management
|
// texture memory management
|
||||||
std::unordered_map<uint32, VkTextureChunkedHeap*> map_textureHeap; // one heap per memory type
|
std::unordered_map<uint32, std::unique_ptr<VkTextureChunkedHeap>> map_textureHeap; // one heap per memory type
|
||||||
std::vector<uint8> m_textureUploadBuffer;
|
std::vector<uint8> m_textureUploadBuffer;
|
||||||
|
|
||||||
// texture upload buffer
|
// texture upload buffer
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue