From cd48576f5846aa89a36bfc833e9de5dde9627aed Mon Sep 17 00:00:00 2001 From: riperiperi Date: Mon, 4 May 2020 03:24:59 +0100 Subject: 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. --- Ryujinx.Graphics.OpenGL/Counters.cs | 77 ------------------------------------- 1 file changed, 77 deletions(-) delete mode 100644 Ryujinx.Graphics.OpenGL/Counters.cs (limited to 'Ryujinx.Graphics.OpenGL/Counters.cs') 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; - } - } -} -- cgit v1.2.3