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,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)

View file

@ -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);
}

View file

@ -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)