diff options
| author | riperiperi <rhy3756547@hotmail.com> | 2020-05-04 03:24:59 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-04 12:24:59 +1000 |
| commit | cd48576f5846aa89a36bfc833e9de5dde9627aed (patch) | |
| tree | 5bf04a43725cf7fdc098cde59856798a67b839e0 /Ryujinx.Graphics.OpenGL/Counters.cs | |
| parent | 651a07c6c2a3e89c059d56e916c45e1881d56abc (diff) | |
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.
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Counters.cs')
| -rw-r--r-- | Ryujinx.Graphics.OpenGL/Counters.cs | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Counters.cs b/Ryujinx.Graphics.OpenGL/Counters.cs deleted file mode 100644 index e82a040f..00000000 --- a/Ryujinx.Graphics.OpenGL/Counters.cs +++ /dev/null @@ -1,77 +0,0 @@ -using OpenTK.Graphics.OpenGL; -using Ryujinx.Graphics.GAL; -using System; - -namespace Ryujinx.Graphics.OpenGL -{ - class Counters - { - private int[] _queryObjects; - - private ulong[] _accumulatedCounters; - - public Counters() - { - int count = Enum.GetNames(typeof(CounterType)).Length; - - _queryObjects = new int[count]; - - _accumulatedCounters = new ulong[count]; - } - - public void Initialize() - { - for (int index = 0; index < _queryObjects.Length; index++) - { - int handle = GL.GenQuery(); - - _queryObjects[index] = handle; - - CounterType type = (CounterType)index; - - GL.BeginQuery(GetTarget(type), handle); - } - } - - public ulong GetCounter(CounterType type) - { - UpdateAccumulatedCounter(type); - - return _accumulatedCounters[(int)type]; - } - - public void ResetCounter(CounterType type) - { - UpdateAccumulatedCounter(type); - - _accumulatedCounters[(int)type] = 0; - } - - private void UpdateAccumulatedCounter(CounterType type) - { - int handle = _queryObjects[(int)type]; - - QueryTarget target = GetTarget(type); - - GL.EndQuery(target); - - GL.GetQueryObject(handle, GetQueryObjectParam.QueryResult, out long result); - - _accumulatedCounters[(int)type] += (ulong)result; - - GL.BeginQuery(target, handle); - } - - private static QueryTarget GetTarget(CounterType type) - { - switch (type) - { - case CounterType.SamplesPassed: return QueryTarget.SamplesPassed; - case CounterType.PrimitivesGenerated: return QueryTarget.PrimitivesGenerated; - case CounterType.TransformFeedbackPrimitivesWritten: return QueryTarget.TransformFeedbackPrimitivesWritten; - } - - return QueryTarget.SamplesPassed; - } - } -} |
