summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorMai M <mathew1800@gmail.com>2021-05-21 10:14:51 -0400
committerGitHub <noreply@github.com>2021-05-21 10:14:51 -0400
commitbc89df897e9f33afb0f2360b0236cf9eb2a698f3 (patch)
tree15714ead604e16661fda31e52675731b85d12170 /Source
parent0a2fde73a274fda20fa81b046291da35c9a93726 (diff)
parent1d3b9fdec2c8ed73ec9af95e390a6b86a699cf6f (diff)
Merge pull request #9731 from JosJuice/perf-queries-slow
Fix perf query regression
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/VideoBackends/D3D/D3DPerfQuery.cpp6
-rw-r--r--Source/Core/VideoBackends/OGL/OGLPerfQuery.cpp13
2 files changed, 16 insertions, 3 deletions
diff --git a/Source/Core/VideoBackends/D3D/D3DPerfQuery.cpp b/Source/Core/VideoBackends/D3D/D3DPerfQuery.cpp
index cf0e66aed5..84f341ab7a 100644
--- a/Source/Core/VideoBackends/D3D/D3DPerfQuery.cpp
+++ b/Source/Core/VideoBackends/D3D/D3DPerfQuery.cpp
@@ -27,16 +27,20 @@ PerfQuery::~PerfQuery() = default;
void PerfQuery::EnableQuery(PerfQueryGroup type)
{
- const u32 query_count = m_query_count.load(std::memory_order_relaxed);
+ u32 query_count = m_query_count.load(std::memory_order_relaxed);
// Is this sane?
if (query_count > m_query_buffer.size() / 2)
+ {
WeakFlush();
+ query_count = m_query_count.load(std::memory_order_relaxed);
+ }
if (m_query_buffer.size() == query_count)
{
// TODO
FlushOne();
+ query_count = m_query_count.load(std::memory_order_relaxed);
ERROR_LOG_FMT(VIDEO, "Flushed query buffer early!");
}
diff --git a/Source/Core/VideoBackends/OGL/OGLPerfQuery.cpp b/Source/Core/VideoBackends/OGL/OGLPerfQuery.cpp
index 2718dd49af..12d28082c6 100644
--- a/Source/Core/VideoBackends/OGL/OGLPerfQuery.cpp
+++ b/Source/Core/VideoBackends/OGL/OGLPerfQuery.cpp
@@ -99,15 +99,19 @@ PerfQueryGL::~PerfQueryGL()
void PerfQueryGL::EnableQuery(PerfQueryGroup type)
{
- const u32 query_count = m_query_count.load(std::memory_order_relaxed);
+ u32 query_count = m_query_count.load(std::memory_order_relaxed);
// Is this sane?
if (query_count > m_query_buffer.size() / 2)
+ {
WeakFlush();
+ query_count = m_query_count.load(std::memory_order_relaxed);
+ }
if (m_query_buffer.size() == query_count)
{
FlushOne();
+ query_count = m_query_count.load(std::memory_order_relaxed);
// ERROR_LOG_FMT(VIDEO, "Flushed query buffer early!");
}
@@ -195,14 +199,19 @@ PerfQueryGLESNV::~PerfQueryGLESNV()
void PerfQueryGLESNV::EnableQuery(PerfQueryGroup type)
{
- const u32 query_count = m_query_count.load(std::memory_order_relaxed);
+ u32 query_count = m_query_count.load(std::memory_order_relaxed);
+
// Is this sane?
if (query_count > m_query_buffer.size() / 2)
+ {
WeakFlush();
+ query_count = m_query_count.load(std::memory_order_relaxed);
+ }
if (m_query_buffer.size() == query_count)
{
FlushOne();
+ query_count = m_query_count.load(std::memory_order_relaxed);
// ERROR_LOG_FMT(VIDEO, "Flushed query buffer early!");
}