aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/Counters.cs
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2020-05-04 03:24:59 +0100
committerGitHub <noreply@github.com>2020-05-04 12:24:59 +1000
commitcd48576f5846aa89a36bfc833e9de5dde9627aed (patch)
tree5bf04a43725cf7fdc098cde59856798a67b839e0 /Ryujinx.Graphics.OpenGL/Counters.cs
parent651a07c6c2a3e89c059d56e916c45e1881d56abc (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.cs77
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;
- }
- }
-}