From 5eedd3c0bc630e6873e2f87db1c1539b1537abe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Thu, 28 Jan 2021 15:59:18 +0100 Subject: [PATCH] Renderers: Fix UploadPool --- include/Nazara/VulkanRenderer/VulkanUploadPool.hpp | 2 +- src/Nazara/OpenGLRenderer/OpenGLUploadPool.cpp | 2 ++ src/Nazara/VulkanRenderer/VulkanUploadPool.cpp | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/Nazara/VulkanRenderer/VulkanUploadPool.hpp b/include/Nazara/VulkanRenderer/VulkanUploadPool.hpp index fc8c9daf5..ede6eb297 100644 --- a/include/Nazara/VulkanRenderer/VulkanUploadPool.hpp +++ b/include/Nazara/VulkanRenderer/VulkanUploadPool.hpp @@ -44,7 +44,7 @@ namespace Nz { Vk::DeviceMemory blockMemory; Vk::Buffer buffer; - UInt64 freeOffset; + UInt64 freeOffset = 0; }; UInt64 m_blockSize; diff --git a/src/Nazara/OpenGLRenderer/OpenGLUploadPool.cpp b/src/Nazara/OpenGLRenderer/OpenGLUploadPool.cpp index 54901ee8d..6387f4ca5 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLUploadPool.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLUploadPool.cpp @@ -52,6 +52,8 @@ namespace Nz allocationData.mappedPtr = static_cast(bestBlock.block->memory.data()) + bestBlock.offset; allocationData.size = size; + bestBlock.block->freeOffset += size; + return allocationData; } diff --git a/src/Nazara/VulkanRenderer/VulkanUploadPool.cpp b/src/Nazara/VulkanRenderer/VulkanUploadPool.cpp index cc8a768c0..3949104f4 100644 --- a/src/Nazara/VulkanRenderer/VulkanUploadPool.cpp +++ b/src/Nazara/VulkanRenderer/VulkanUploadPool.cpp @@ -50,7 +50,7 @@ namespace Nz { Block newBlock; if (!newBlock.buffer.Create(m_device, 0U, m_blockSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT)) - throw std::runtime_error("Failed to create block buffer: " + TranslateVulkanError(newBlock.buffer.GetLastErrorCode())); + throw std::runtime_error("failed to create block buffer: " + TranslateVulkanError(newBlock.buffer.GetLastErrorCode())); VkMemoryRequirements requirement = newBlock.buffer.GetMemoryRequirements(); @@ -74,6 +74,8 @@ namespace Nz allocationData.offset = bestBlock.alignedOffset; allocationData.size = size; + bestBlock.block->freeOffset += size; + return allocationData; }