diff --git a/src/Ryujinx.Graphics.GAL/IRenderer.cs b/src/Ryujinx.Graphics.GAL/IRenderer.cs index c2fdcbe4b..9d822e7c2 100644 --- a/src/Ryujinx.Graphics.GAL/IRenderer.cs +++ b/src/Ryujinx.Graphics.GAL/IRenderer.cs @@ -1,4 +1,6 @@ using Ryujinx.Common.Configuration; +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL.Multithreading; using System; using System.Threading; @@ -10,6 +12,20 @@ namespace Ryujinx.Graphics.GAL bool PreferThreading { get; } + public IRenderer TryMakeThreaded(BackendThreading backendThreading = BackendThreading.Auto) + { + if (backendThreading is BackendThreading.On || + (backendThreading is BackendThreading.Auto && PreferThreading)) + { + Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({backendThreading}): True"); + return new ThreadedRenderer(this); + } + + Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({backendThreading}): False"); + + return this; + } + IPipeline Pipeline { get; } IWindow Window { get; } diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 95370fdc4..40c54b6f7 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -902,16 +902,6 @@ namespace Ryujinx.Ava _ => new OpenGLRenderer() }; - BackendThreading threadingMode = ConfigurationState.Instance.Graphics.BackendThreading; - - bool isGALThreaded = threadingMode == BackendThreading.On || (threadingMode == BackendThreading.Auto && renderer.PreferThreading); - if (isGALThreaded) - { - renderer = new ThreadedRenderer(renderer); - } - - Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}"); - // Initialize Configuration. Device = new Switch(ConfigurationState.Instance.CreateHleConfiguration() .Configure( @@ -920,7 +910,7 @@ namespace Ryujinx.Ava ContentManager, _accountManager, _userChannelPersistence, - renderer, + renderer.TryMakeThreaded(ConfigurationState.Instance.Graphics.BackendThreading), InitializeAudio(), _viewModel.UiHandler ) diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index f8936efd5..d6a2ed789 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -312,18 +312,8 @@ namespace Ryujinx.Headless return new OpenGLRenderer(); } - private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) - { - BackendThreading threadingMode = options.BackendThreading; - - bool threadedGAL = threadingMode == BackendThreading.On || (threadingMode == BackendThreading.Auto && renderer.PreferThreading); - - if (threadedGAL) - { - renderer = new ThreadedRenderer(renderer); - } - - return new Switch( + private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) => + new( new HleConfiguration( options.DramSize, options.SystemLanguage, @@ -354,11 +344,10 @@ namespace Ryujinx.Headless _contentManager, _accountManager, _userChannelPersistence, - renderer, + renderer.TryMakeThreaded(options.BackendThreading), new SDL2HardwareDeviceDriver(), window ) ); - } } }