From dc503acb73fc47907a7f7150ee57759ccaedaea1 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Tue, 4 Jun 2024 11:30:16 +0200 Subject: [PATCH 1/2] Fix descriptor buffer size discrapency --- openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp index 6cdbf4e..217b474 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp @@ -314,7 +314,7 @@ namespace OpenVulkano::Vulkan uint32_t offset = Utils::Align(allocation->used, memoryRequirements.alignment); device.bindBufferMemory(buffer, allocation->memory, offset); allocation->used += memoryRequirements.size + (offset - allocation->used); - return new ManagedBuffer{ allocation, offset, size, buffer, usage, properties, nullptr }; + return new ManagedBuffer{ allocation, offset, memoryRequirements.size, buffer, usage, properties, nullptr }; } MemoryAllocation* ResourceManager::CreateMemoryAllocation(size_t size, uint32_t type, bool addToCache) From 266b0321d94a01c057824a1e172ccc44ba9e8e01 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Tue, 4 Jun 2024 11:43:19 +0200 Subject: [PATCH 2/2] Resize buffer if size does not match required size --- .../Vulkan/Resources/ResourceManager.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp index 217b474..4da57cd 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp @@ -305,16 +305,23 @@ namespace OpenVulkano::Vulkan ManagedBuffer* ResourceManager::CreateBuffer(vk::DeviceSize size, const vk::BufferUsageFlags& usage, const vk::MemoryPropertyFlags& properties) { size = Utils::Align(size, 16); - const vk::BufferCreateInfo bufferCreateInfo = { {}, size, usage, vk::SharingMode::eExclusive }; + vk::BufferCreateInfo bufferCreateInfo = { {}, size, usage, vk::SharingMode::eExclusive }; vk::Buffer buffer = device.createBuffer(bufferCreateInfo); const vk::MemoryRequirements memoryRequirements = device.getBufferMemoryRequirements(buffer); uint32_t memtype = context->device->GetMemoryType(memoryRequirements.memoryTypeBits, properties); - if (memoryRequirements.size != size) Logger::DATA->debug("Memory Requirement Size ({0}) != Size ({1})", memoryRequirements.size, size); - MemoryAllocation* allocation = GetFreeMemoryAllocation(memoryRequirements.size, memoryRequirements.alignment, memtype); + if (memoryRequirements.size != size) + { + Logger::DATA->debug("Memory Requirement Size ({0}) != Size ({1})", memoryRequirements.size, size); + size = memoryRequirements.size; + device.destroy(buffer); + bufferCreateInfo.size = size; + buffer = device.createBuffer(bufferCreateInfo); + } + MemoryAllocation* allocation = GetFreeMemoryAllocation(size, memoryRequirements.alignment, memtype); uint32_t offset = Utils::Align(allocation->used, memoryRequirements.alignment); device.bindBufferMemory(buffer, allocation->memory, offset); - allocation->used += memoryRequirements.size + (offset - allocation->used); - return new ManagedBuffer{ allocation, offset, memoryRequirements.size, buffer, usage, properties, nullptr }; + allocation->used += size + (offset - allocation->used); + return new ManagedBuffer{ allocation, offset, size, buffer, usage, properties, nullptr }; } MemoryAllocation* ResourceManager::CreateMemoryAllocation(size_t size, uint32_t type, bool addToCache)