aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2020-12-03 18:42:59 +0000
committerGitHub <noreply@github.com>2020-12-03 19:42:59 +0100
commitc00d39b675d0ebf7ebf5be1135addbbee2510d93 (patch)
tree8e94755778ec6261fd08e270e8d6fff1f01f5e6a /Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs
parent2c39a4f15d44156779c6c926d8feda26a4a24605 (diff)
Dummy out gl queries with 0 draws, remove glFlush call (#1773)
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs')
-rw-r--r--Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs25
1 files changed, 19 insertions, 6 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs b/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs
index f34bc86d..a864a200 100644
--- a/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs
+++ b/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs
@@ -38,7 +38,7 @@ namespace Ryujinx.Graphics.OpenGL.Queries
_queryPool.Enqueue(new BufferedQuery(glType));
}
- _current = new CounterQueueEvent(this, glType);
+ _current = new CounterQueueEvent(this, glType, 0);
_consumerThread = new Thread(EventConsumer);
_consumerThread.Start();
@@ -95,19 +95,32 @@ namespace Ryujinx.Graphics.OpenGL.Queries
}
}
- public CounterQueueEvent QueueReport(EventHandler<ulong> resultHandler)
+ public CounterQueueEvent QueueReport(EventHandler<ulong> resultHandler, ulong lastDrawIndex)
{
CounterQueueEvent result;
+ ulong draws = lastDrawIndex - _current.DrawIndex;
lock (_lock)
{
- _current.Complete();
- _events.Enqueue(_current);
+ // A query's result only matters if more than one draw was performed during it.
+ // Otherwise, dummy it out and return 0 immediately.
+
+ if (draws > 0)
+ {
+ _current.Complete();
+ _events.Enqueue(_current);
+
+ _current.OnResult += resultHandler;
+ }
+ else
+ {
+ _current.Dispose();
+ resultHandler(_current, 0);
+ }
result = _current;
- result.OnResult += resultHandler;
- _current = new CounterQueueEvent(this, GetTarget(Type));
+ _current = new CounterQueueEvent(this, GetTarget(Type), lastDrawIndex);
}
_queuedEvent.Set();