diff options
author | riperiperi <rhy3756547@hotmail.com> | 2020-12-03 18:42:59 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-03 19:42:59 +0100 |
commit | c00d39b675d0ebf7ebf5be1135addbbee2510d93 (patch) | |
tree | 8e94755778ec6261fd08e270e8d6fff1f01f5e6a /Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs | |
parent | 2c39a4f15d44156779c6c926d8feda26a4a24605 (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.cs | 25 |
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(); |