diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2020-08-02 22:36:57 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-03 03:36:57 +0200 |
| commit | 60db4c353099e8656a330ede03fdbe57a421fa47 (patch) | |
| tree | 0b04b6fff7c892b7ae9f1d417293d4f81b27a60a /Ryujinx.Graphics.Gpu/Engine/MME/Macro.cs | |
| parent | c11855565e0ce2bac228610cbaa92c8c7f082c70 (diff) | |
Implement a Macro JIT (#1445)
* Implement a Macro JIT
* Nit: space
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/MME/Macro.cs')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/MME/Macro.cs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/MME/Macro.cs b/Ryujinx.Graphics.Gpu/Engine/MME/Macro.cs index 10127d11..9847f4c0 100644 --- a/Ryujinx.Graphics.Gpu/Engine/MME/Macro.cs +++ b/Ryujinx.Graphics.Gpu/Engine/MME/Macro.cs @@ -1,4 +1,5 @@ using Ryujinx.Graphics.Gpu.State; +using System; namespace Ryujinx.Graphics.Gpu.Engine.MME { @@ -15,7 +16,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME private bool _executionPending; private int _argument; - private readonly MacroInterpreter _interpreter; + private readonly IMacroEE _executionEngine; /// <summary> /// Creates a new instance of the GPU cached macro program. @@ -28,7 +29,14 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME _executionPending = false; _argument = 0; - _interpreter = new MacroInterpreter(); + if (GraphicsConfig.EnableMacroJit) + { + _executionEngine = new MacroJit(); + } + else + { + _executionEngine = new MacroInterpreter(); + } } /// <summary> @@ -45,15 +53,15 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// <summary> /// Starts executing the macro program code. /// </summary> - /// <param name="mme">Program code</param> + /// <param name="code">Program code</param> /// <param name="state">Current GPU state</param> - public void Execute(int[] mme, ShadowRamControl shadowCtrl, GpuState state) + public void Execute(ReadOnlySpan<int> code, GpuState state) { if (_executionPending) { _executionPending = false; - _interpreter?.Execute(mme, Position, _argument, shadowCtrl, state); + _executionEngine?.Execute(code.Slice(Position), state, _argument); } } @@ -63,7 +71,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// <param name="argument">Argument to be pushed</param> public void PushArgument(int argument) { - _interpreter?.Fifo.Enqueue(argument); + _executionEngine?.Fifo.Enqueue(argument); } } } |
