Fix some issues with resource management
This commit is contained in:
@@ -130,9 +130,9 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
if (size == VK_WHOLE_SIZE) size = this->size;
|
if (size == VK_WHOLE_SIZE) size = this->size;
|
||||||
mapped = allocation->MapChild(this->offset + offset, size);
|
mapped = allocation->MapChild(this->offset + offset, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
return static_cast<T*>(mapped);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return static_cast<T*>(mapped);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -147,6 +147,18 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
ManagedBuffer* ResourceManager::CreateSharedMemoryBuffer(const size_t size)
|
ManagedBuffer* ResourceManager::CreateSharedMemoryBuffer(const size_t size)
|
||||||
{
|
{
|
||||||
const std::unique_lock lock(mutex);
|
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);
|
ManagedBuffer* buffer = CreateBuffer(size, vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eHostCoherent);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
@@ -158,7 +170,8 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
|
|
||||||
void ResourceManager::FreeBuffer(ManagedBuffer* buffer)
|
void ResourceManager::FreeBuffer(ManagedBuffer* buffer)
|
||||||
{
|
{
|
||||||
toFree[currentBuffer].push_back(buffer);
|
if (buffer)
|
||||||
|
toFree[currentBuffer].push_back(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResourceManager::DoFreeBuffer(ManagedBuffer* buffer)
|
void ResourceManager::DoFreeBuffer(ManagedBuffer* buffer)
|
||||||
@@ -228,7 +241,7 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
break;
|
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;
|
if(alloc) lastAllocation = alloc;
|
||||||
return alloc;
|
return alloc;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user