summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Vulkan/StateTracker.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2016-11-20 02:51:53 +1000
committerStenzek <stenzek@gmail.com>2016-12-04 20:10:13 +1000
commita475792163d3383d94e3bd21e4d3c22077ef63ab (patch)
tree456a208af9e9df248271cdb58892ef5a914ddec3 /Source/Core/VideoBackends/Vulkan/StateTracker.cpp
parent58978c14405ed2e9025987b5cd2496b04334abfd (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.cpp7
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;
}
}