From 01c78d72389150dc63783193c76ae8013b01e373 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Fri, 1 Mar 2019 19:15:52 +0100 Subject: [PATCH] - add a bit of bounds checking just to be safe --- .../vulkan/renderer/vk_renderstate.cpp | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/rendering/vulkan/renderer/vk_renderstate.cpp b/src/rendering/vulkan/renderer/vk_renderstate.cpp index 10bf944bd8..c9502ed980 100644 --- a/src/rendering/vulkan/renderer/vk_renderstate.cpp +++ b/src/rendering/vulkan/renderer/vk_renderstate.cpp @@ -334,13 +334,23 @@ void VkRenderState::Apply(int dt) mPushConstants.uLightIndex = screen->mLights->BindUBO(mLightIndex); - mMatricesOffset += UniformBufferAlignment(); - mColorsOffset += UniformBufferAlignment(); - mGlowingWallsOffset += UniformBufferAlignment(); + if (mMatricesOffset + UniformBufferAlignment() < fb->MatricesUBO->Size()) + { + mMatricesOffset += UniformBufferAlignment(); + memcpy(static_cast(fb->MatricesUBO->Memory()) + mMatricesOffset, &mMatrices, sizeof(MatricesUBO)); + } - memcpy(static_cast(fb->MatricesUBO->Memory()) + mMatricesOffset, &mMatrices, sizeof(MatricesUBO)); - memcpy(static_cast(fb->ColorsUBO->Memory()) + mColorsOffset, &mColors, sizeof(ColorsUBO)); - memcpy(static_cast(fb->GlowingWallsUBO->Memory()) + mGlowingWallsOffset, &mGlowingWalls, sizeof(GlowingWallsUBO)); + if (mColorsOffset + UniformBufferAlignment() < fb->ColorsUBO->Size()) + { + mColorsOffset += UniformBufferAlignment(); + memcpy(static_cast(fb->ColorsUBO->Memory()) + mColorsOffset, &mColors, sizeof(ColorsUBO)); + } + + if (mColorsOffset + UniformBufferAlignment() < fb->GlowingWallsUBO->Size()) + { + mGlowingWallsOffset += UniformBufferAlignment(); + memcpy(static_cast(fb->GlowingWallsUBO->Memory()) + mGlowingWallsOffset, &mGlowingWalls, sizeof(GlowingWallsUBO)); + } mCommandBuffer->pushConstants(passManager->PipelineLayout.get(), VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, (uint32_t)sizeof(PushConstants), &mPushConstants); @@ -348,7 +358,8 @@ void VkRenderState::Apply(int dt) VkDeviceSize offsets[] = { 0 }; mCommandBuffer->bindVertexBuffers(0, 1, vertexBuffers, offsets); - mCommandBuffer->bindIndexBuffer(static_cast(mIndexBuffer)->mBuffer->buffer, 0, VK_INDEX_TYPE_UINT32); + if (mIndexBuffer) + mCommandBuffer->bindIndexBuffer(static_cast(mIndexBuffer)->mBuffer->buffer, 0, VK_INDEX_TYPE_UINT32); BindDescriptorSets();