diff --git a/Ryujinx.Graphics.OpenGL/Queries/BufferedQuery.cs b/Ryujinx.Graphics.OpenGL/Queries/BufferedQuery.cs index b4c5259c1..a87655bec 100644 --- a/Ryujinx.Graphics.OpenGL/Queries/BufferedQuery.cs +++ b/Ryujinx.Graphics.OpenGL/Queries/BufferedQuery.cs @@ -44,14 +44,17 @@ namespace Ryujinx.Graphics.OpenGL.Queries GL.BeginQuery(_type, Query); } - public unsafe void End() + public unsafe void End(bool withResult) { GL.EndQuery(_type); - GL.BindBuffer(BufferTarget.QueryBuffer, _buffer); + if (withResult) + { + GL.BindBuffer(BufferTarget.QueryBuffer, _buffer); - Marshal.WriteInt64(_bufferMap, -1L); - GL.GetQueryObject(Query, GetQueryObjectParam.QueryResult, (long*)0); + Marshal.WriteInt64(_bufferMap, -1L); + GL.GetQueryObject(Query, GetQueryObjectParam.QueryResult, (long*)0); + } } public bool TryGetResult(out long result) diff --git a/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs b/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs index a864a2003..5984a7ca0 100644 --- a/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs +++ b/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs @@ -107,13 +107,14 @@ namespace Ryujinx.Graphics.OpenGL.Queries if (draws > 0) { - _current.Complete(); + _current.Complete(true); _events.Enqueue(_current); _current.OnResult += resultHandler; } else { + _current.Complete(false); _current.Dispose(); resultHandler(_current, 0); } diff --git a/Ryujinx.Graphics.OpenGL/Queries/CounterQueueEvent.cs b/Ryujinx.Graphics.OpenGL/Queries/CounterQueueEvent.cs index e21ce55d2..0e1025afd 100644 --- a/Ryujinx.Graphics.OpenGL/Queries/CounterQueueEvent.cs +++ b/Ryujinx.Graphics.OpenGL/Queries/CounterQueueEvent.cs @@ -41,9 +41,9 @@ namespace Ryujinx.Graphics.OpenGL.Queries ClearCounter = true; } - internal void Complete() + internal void Complete(bool withResult) { - _counter.End(); + _counter.End(withResult); } internal bool TryConsume(ref ulong result, bool block, AutoResetEvent wakeSignal = null)