diff options
| author | Stenzek <stenzek@gmail.com> | 2016-11-20 02:51:53 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2016-12-04 20:10:13 +1000 |
| commit | a475792163d3383d94e3bd21e4d3c22077ef63ab (patch) | |
| tree | 456a208af9e9df248271cdb58892ef5a914ddec3 /Source/Core/VideoBackends/Vulkan/StateTracker.cpp | |
| parent | 58978c14405ed2e9025987b5cd2496b04334abfd (diff) | |
Vulkan: Fix incorrect logic in readback preemption
This could have been causing a large number of command buffer
submissions per frame, depending on when the readbacks occured.
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/StateTracker.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/StateTracker.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/StateTracker.cpp b/Source/Core/VideoBackends/Vulkan/StateTracker.cpp index ef2343564d..34ea98f41b 100644 --- a/Source/Core/VideoBackends/Vulkan/StateTracker.cpp +++ b/Source/Core/VideoBackends/Vulkan/StateTracker.cpp @@ -792,7 +792,12 @@ void StateTracker::OnEndFrame() u32 interval = static_cast<u32>(g_ActiveConfig.iCommandBufferExecuteInterval); for (u32 draw_counter : m_cpu_accesses_this_frame) { + // We don't want to waste executing command buffers for only a few draws, so set a minimum. + // Leave last_draw_counter as-is, so we get the correct number of draws between submissions. u32 draw_count = draw_counter - last_draw_counter; + if (draw_count < MINIMUM_DRAW_CALLS_PER_COMMAND_BUFFER_FOR_READBACK) + continue; + if (draw_count <= interval) { u32 mid_point = draw_count / 2; @@ -807,6 +812,8 @@ void StateTracker::OnEndFrame() counter += interval; } } + + last_draw_counter = draw_counter; } } |
