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.GAL/ICounterEvent.cs | 11 +++++++++++ Ryujinx.Graphics.GAL/IPipeline.cs | 4 ++++ Ryujinx.Graphics.GAL/IRenderer.cs | 6 ++++-- 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 Ryujinx.Graphics.GAL/ICounterEvent.cs (limited to 'Ryujinx.Graphics.GAL') diff --git a/Ryujinx.Graphics.GAL/ICounterEvent.cs b/Ryujinx.Graphics.GAL/ICounterEvent.cs new file mode 100644 index 00000000..dfabec61 --- /dev/null +++ b/Ryujinx.Graphics.GAL/ICounterEvent.cs @@ -0,0 +1,11 @@ +using System; + +namespace Ryujinx.Graphics.GAL +{ + public interface ICounterEvent : IDisposable + { + bool Invalid { get; set; } + + void Flush(); + } +} diff --git a/Ryujinx.Graphics.GAL/IPipeline.cs b/Ryujinx.Graphics.GAL/IPipeline.cs index 290462fa..3bf7ab93 100644 --- a/Ryujinx.Graphics.GAL/IPipeline.cs +++ b/Ryujinx.Graphics.GAL/IPipeline.cs @@ -75,5 +75,9 @@ namespace Ryujinx.Graphics.GAL void TextureBarrier(); void TextureBarrierTiled(); + + bool TryHostConditionalRendering(ICounterEvent value, ulong compare, bool isEqual); + bool TryHostConditionalRendering(ICounterEvent value, ICounterEvent compare, bool isEqual); + void EndHostConditionalRendering(); } } diff --git a/Ryujinx.Graphics.GAL/IRenderer.cs b/Ryujinx.Graphics.GAL/IRenderer.cs index 56856b23..4a45f5cb 100644 --- a/Ryujinx.Graphics.GAL/IRenderer.cs +++ b/Ryujinx.Graphics.GAL/IRenderer.cs @@ -20,10 +20,12 @@ namespace Ryujinx.Graphics.GAL Capabilities GetCapabilities(); - ulong GetCounter(CounterType type); + void UpdateCounters(); - void Initialize(); + ICounterEvent ReportCounter(CounterType type, EventHandler resultHandler); void ResetCounter(CounterType type); + + void Initialize(); } } -- cgit v1.2.3