Vulkan: Fix case where a draw's vertices could be overwritten
This could happen because the vertex memory was already committed, if a uniform buffer allocation failed and caused a command buffer to be executed, it would be associated with the previous command buffer rather than the buffer containing the draw that consumed these vertices.
This commit is contained in:
parent
37550501cc
commit
4c11735bd5
|
@ -130,9 +130,6 @@ void VertexManager::vFlush(bool use_dst_alpha)
|
|||
static_cast<VertexFormat*>(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();
|
||||
|
|
Loading…
Reference in New Issue