diff --git a/Source/Core/VideoBackends/Vulkan/VertexManager.cpp b/Source/Core/VideoBackends/Vulkan/VertexManager.cpp index 8300fb5fdd..f3116a8cb6 100644 --- a/Source/Core/VideoBackends/Vulkan/VertexManager.cpp +++ b/Source/Core/VideoBackends/Vulkan/VertexManager.cpp @@ -130,9 +130,6 @@ void VertexManager::vFlush(bool use_dst_alpha) static_cast(VertexLoaderManager::GetCurrentVertexFormat()); u32 vertex_stride = vertex_format->GetVertexStride(); - // Commit memory to device - PrepareDrawBuffers(vertex_stride); - // Figure out the number of indices to draw u32 index_count = IndexGenerator::GetIndexLen(); @@ -169,6 +166,12 @@ void VertexManager::vFlush(bool use_dst_alpha) StateTracker::GetInstance()->UpdateGeometryShaderConstants(); StateTracker::GetInstance()->UpdatePixelShaderConstants(); + // Commit memory to device. + // NOTE: This must be done after constant upload, as a constant buffer overrun can cause + // the current command buffer to be executed, and we want the buffer space to be associated + // with the command buffer that has the corresponding draw. + PrepareDrawBuffers(vertex_stride); + // Flush all EFB pokes and invalidate the peek cache. FramebufferManager::GetInstance()->InvalidatePeekCache(); FramebufferManager::GetInstance()->FlushEFBPokes();