Browse Source

vulkan: fix incorrect uniform values

niki 2 years ago
parent
commit
1ab0d819ff

+ 2 - 2
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{};

+ 2 - 3
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;
 }
 

+ 0 - 1
src/modules/graphics/vulkan/StreamBuffer.h

@@ -61,7 +61,6 @@ private:
 	VmaAllocation allocation;
 	VmaAllocationInfo allocInfo;
 	VkBuffer buffer = VK_NULL_HANDLE;
-	int frameIndex = 0;
 
 };