From 1ab0d819ff19af26e87e862bbe5f3404e9838c92 Mon Sep 17 00:00:00 2001 From: niki Date: Wed, 5 Oct 2022 15:18:27 +0200 Subject: [PATCH] vulkan: fix incorrect uniform values --- src/modules/graphics/vulkan/Shader.cpp | 4 ++-- src/modules/graphics/vulkan/StreamBuffer.cpp | 5 ++--- src/modules/graphics/vulkan/StreamBuffer.h | 1 - 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/modules/graphics/vulkan/Shader.cpp b/src/modules/graphics/vulkan/Shader.cpp index dcbc7be4e..d8b75c122 100644 --- a/src/modules/graphics/vulkan/Shader.cpp +++ b/src/modules/graphics/vulkan/Shader.cpp @@ -325,12 +325,12 @@ void Shader::cmdPushDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBind auto mapInfo = currentStreamBuffer->map(uniformBufferSizeAligned); memcpy(mapInfo.data, localUniformData.data(), localUniformData.size()); - currentStreamBuffer->unmap(uniformBufferSizeAligned); + auto offset = currentStreamBuffer->unmap(uniformBufferSizeAligned); currentStreamBuffer->markUsed(uniformBufferSizeAligned); VkDescriptorBufferInfo bufferInfo{}; bufferInfo.buffer = (VkBuffer)currentStreamBuffer->getHandle(); - bufferInfo.offset = currentUsedUniformStreamBuffersCount * uniformBufferSizeAligned; + bufferInfo.offset = offset; bufferInfo.range = localUniformData.size(); VkWriteDescriptorSet uniformWrite{}; diff --git a/src/modules/graphics/vulkan/StreamBuffer.cpp b/src/modules/graphics/vulkan/StreamBuffer.cpp index 3e87ecdea..b94892f12 100644 --- a/src/modules/graphics/vulkan/StreamBuffer.cpp +++ b/src/modules/graphics/vulkan/StreamBuffer.cpp @@ -95,13 +95,13 @@ love::graphics::StreamBuffer::MapInfo StreamBuffer::map(size_t /*minsize*/) MapInfo info; info.size = bufferSize - frameGPUReadOffset; - info.data = (uint8*)allocInfo.pMappedData + (frameIndex * bufferSize) + frameGPUReadOffset; + info.data = (uint8*)allocInfo.pMappedData + (vgfx->getFrameIndex() * bufferSize) + frameGPUReadOffset; return info; } size_t StreamBuffer::unmap(size_t /*usedSize*/) { - size_t offset = (frameIndex * bufferSize) + frameGPUReadOffset; + size_t offset = (vgfx->getFrameIndex() * bufferSize) + frameGPUReadOffset; return offset; } @@ -112,7 +112,6 @@ void StreamBuffer::markUsed(size_t usedSize) void StreamBuffer::nextFrame() { - frameIndex = (frameIndex + 1) % MAX_FRAMES_IN_FLIGHT; frameGPUReadOffset = 0; } diff --git a/src/modules/graphics/vulkan/StreamBuffer.h b/src/modules/graphics/vulkan/StreamBuffer.h index b86548066..1dadf6a5c 100644 --- a/src/modules/graphics/vulkan/StreamBuffer.h +++ b/src/modules/graphics/vulkan/StreamBuffer.h @@ -61,7 +61,6 @@ private: VmaAllocation allocation; VmaAllocationInfo allocInfo; VkBuffer buffer = VK_NULL_HANDLE; - int frameIndex = 0; };