Implement Counter Queue and Partial Host Conditional Rendering (#1167)

* Implementation of query queue and host conditional rendering

* Resolve some comments.

* Use overloads instead of passing object.

* Wake the consumer threads when incrementing syncpoints.

Also, do a busy loop when awaiting the counter for a blocking flush, rather than potentially sleeping the thread.

* Ensure there's a command between begin and end query.
This commit is contained in:
riperiperi 2020-05-04 03:24:59 +01:00 committed by GitHub
parent 651a07c6c2
commit cd48576f58
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 724 additions and 136 deletions

View file

@ -1,7 +1,9 @@
using OpenTK.Graphics.OpenGL;
using Ryujinx.Common.Logging;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.OpenGL.Queries;
using Ryujinx.Graphics.Shader;
using System;
namespace Ryujinx.Graphics.OpenGL
{
@ -66,9 +68,14 @@ namespace Ryujinx.Graphics.OpenGL
HwCapabilities.MaxSupportedAnisotropy);
}
public ulong GetCounter(CounterType type)
public void UpdateCounters()
{
return _counters.GetCounter(type);
_counters.Update();
}
public ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler)
{
return _counters.QueueReport(type, resultHandler);
}
public void Initialize()
@ -89,7 +96,7 @@ namespace Ryujinx.Graphics.OpenGL
public void ResetCounter(CounterType type)
{
_counters.ResetCounter(type);
_counters.QueueReset(type);
}
public void Dispose()
@ -97,6 +104,7 @@ namespace Ryujinx.Graphics.OpenGL
TextureCopy.Dispose();
_pipeline.Dispose();
_window.Dispose();
_counters.Dispose();
}
}
}