Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #10777 from tellowkrinkle/EFBFlush
VideoCommon: Remember to flush command buffers after multiple EFB copies
  • Loading branch information
JMC47 committed Jul 13, 2022
2 parents 5663a44 + 3ee4b89 commit e237aa1
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
16 changes: 16 additions & 0 deletions Source/Core/VideoCommon/VertexManagerBase.cpp
Expand Up @@ -789,6 +789,16 @@ void VertexManagerBase::OnDraw()
{
m_draw_counter++;

// If the last efb copy was too close to the one before it, don't forget about it until the next
// efb copy happens (which might not be for a long time)
u32 diff = m_draw_counter - m_last_efb_copy_draw_counter;
if (m_unflushed_efb_copy && diff > MINIMUM_DRAW_CALLS_PER_COMMAND_BUFFER_FOR_READBACK)
{
g_renderer->Flush();
m_unflushed_efb_copy = false;
m_last_efb_copy_draw_counter = m_draw_counter;
}

// If we didn't have any CPU access last frame, do nothing.
if (m_scheduled_command_buffer_kicks.empty() || !m_allow_background_execution)
return;
Expand All @@ -800,6 +810,8 @@ void VertexManagerBase::OnDraw()
{
// Kick a command buffer on the background thread.
g_renderer->Flush();
m_unflushed_efb_copy = false;
m_last_efb_copy_draw_counter = m_draw_counter;
}
}

Expand All @@ -826,8 +838,12 @@ void VertexManagerBase::OnEFBCopyToRAM()
const u32 diff = m_draw_counter - m_last_efb_copy_draw_counter;
m_last_efb_copy_draw_counter = m_draw_counter;
if (diff < MINIMUM_DRAW_CALLS_PER_COMMAND_BUFFER_FOR_READBACK)
{
m_unflushed_efb_copy = true;
return;
}

m_unflushed_efb_copy = false;
g_renderer->Flush();
}

Expand Down
1 change: 1 addition & 0 deletions Source/Core/VideoCommon/VertexManagerBase.h
Expand Up @@ -212,6 +212,7 @@ class VertexManagerBase
// CPU access tracking
u32 m_draw_counter = 0;
u32 m_last_efb_copy_draw_counter = 0;
bool m_unflushed_efb_copy = false;
std::vector<u32> m_cpu_accesses_this_frame;
std::vector<u32> m_scheduled_command_buffer_kicks;
bool m_allow_background_execution = true;
Expand Down

0 comments on commit e237aa1

Please sign in to comment.