Dummy out gl queries with 0 draws, remove glFlush call (#1773)
This commit is contained in:
parent
2c39a4f15d
commit
c00d39b675
6 changed files with 31 additions and 11 deletions
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue