From 2c9a1cbab783a14d1343207487a0a9113962eca8 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sat, 6 May 2023 06:14:15 +0200 Subject: [PATCH] Fix offset bug when using more than 1024 lights in a scene --- src/common/rendering/vulkan/vk_renderstate.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/rendering/vulkan/vk_renderstate.cpp b/src/common/rendering/vulkan/vk_renderstate.cpp index 450ea20871..430ec51585 100644 --- a/src/common/rendering/vulkan/vk_renderstate.cpp +++ b/src/common/rendering/vulkan/vk_renderstate.cpp @@ -468,7 +468,7 @@ void VkRenderState::ApplyHWBufferSet() { uint32_t matrixOffset = mMatrixBufferWriter.Offset(); uint32_t streamDataOffset = mStreamBufferWriter.StreamDataOffset(); - uint32_t lightsOffset = mLightIndex >= 0 ? (uint32_t)(mLightIndex / MAX_LIGHT_DATA) * sizeof(FVector4) : mLastLightsOffset; + uint32_t lightsOffset = mLightIndex >= 0 ? (uint32_t)(mLightIndex / MAX_LIGHT_DATA) * sizeof(LightBufferUBO) : mLastLightsOffset; if (mViewpointOffset != mLastViewpointOffset || matrixOffset != mLastMatricesOffset || streamDataOffset != mLastStreamDataOffset || lightsOffset != mLastLightsOffset) { auto passManager = fb->GetRenderPassManager(); @@ -563,7 +563,7 @@ int VkRenderState::UploadLights(const FDynLightData& data) // Make sure the light list doesn't cross a page boundary if (buffers->Lightbuffer.UploadIndex % MAX_LIGHT_DATA + totalsize > MAX_LIGHT_DATA) - buffers->Lightbuffer.UploadIndex = buffers->Lightbuffer.UploadIndex / MAX_LIGHT_DATA * MAX_LIGHT_DATA + 1; + buffers->Lightbuffer.UploadIndex = (buffers->Lightbuffer.UploadIndex / MAX_LIGHT_DATA + 1) * MAX_LIGHT_DATA; int thisindex = buffers->Lightbuffer.UploadIndex; if (thisindex + totalsize <= buffers->Lightbuffer.Count)