End empty gl queries before returning them to the pool. (#1806)

This commit is contained in:
riperiperi 2020-12-11 23:31:39 +00:00 committed by GitHub
parent 8a6607540e
commit 06057a99a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 7 deletions

View file

@ -44,15 +44,18 @@ namespace Ryujinx.Graphics.OpenGL.Queries
GL.BeginQuery(_type, Query); GL.BeginQuery(_type, Query);
} }
public unsafe void End() public unsafe void End(bool withResult)
{ {
GL.EndQuery(_type); GL.EndQuery(_type);
if (withResult)
{
GL.BindBuffer(BufferTarget.QueryBuffer, _buffer); GL.BindBuffer(BufferTarget.QueryBuffer, _buffer);
Marshal.WriteInt64(_bufferMap, -1L); Marshal.WriteInt64(_bufferMap, -1L);
GL.GetQueryObject(Query, GetQueryObjectParam.QueryResult, (long*)0); GL.GetQueryObject(Query, GetQueryObjectParam.QueryResult, (long*)0);
} }
}
public bool TryGetResult(out long result) public bool TryGetResult(out long result)
{ {

View file

@ -107,13 +107,14 @@ namespace Ryujinx.Graphics.OpenGL.Queries
if (draws > 0) if (draws > 0)
{ {
_current.Complete(); _current.Complete(true);
_events.Enqueue(_current); _events.Enqueue(_current);
_current.OnResult += resultHandler; _current.OnResult += resultHandler;
} }
else else
{ {
_current.Complete(false);
_current.Dispose(); _current.Dispose();
resultHandler(_current, 0); resultHandler(_current, 0);
} }

View file

@ -41,9 +41,9 @@ namespace Ryujinx.Graphics.OpenGL.Queries
ClearCounter = true; 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) internal bool TryConsume(ref ulong result, bool block, AutoResetEvent wakeSignal = null)