using Ryujinx.Common.Logging; using Ryujinx.Graphics.Gpu.State; using System.Collections.Generic; namespace Ryujinx.Graphics.Gpu.Engine.MME { /// /// Represents a Macro Just-in-Time compiler execution context. /// class MacroJitContext { /// /// Arguments FIFO. /// public Queue Fifo { get; } = new Queue(); /// /// Fetches a arguments from the arguments FIFO. /// /// public int FetchParam() { if (!Fifo.TryDequeue(out int value)) { Logger.Warning?.Print(LogClass.Gpu, "Macro attempted to fetch an inexistent argument."); return 0; } return value; } /// /// Reads data from a GPU register. /// /// Current GPU state /// Register offset to read /// GPU register value public static int Read(GpuState state, int reg) { return state.Read(reg); } /// /// Performs a GPU method call. /// /// Call argument /// Current GPU state /// Address, in words, of the method public static void Send(int value, GpuState state, int methAddr) { MethodParams meth = new MethodParams(methAddr, value); state.CallMethod(meth); } } }