using Ryujinx.Common.Logging; using Ryujinx.Graphics.Device; 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. /// /// The call argument, or 0 if the FIFO is empty public int FetchParam() { if (!Fifo.TryDequeue(out var value)) { Logger.Warning?.Print(LogClass.Gpu, "Macro attempted to fetch an inexistent argument."); return 0; } return value.Word; } /// /// Reads data from a GPU register. /// /// Current GPU state /// Register offset to read /// GPU register value public static int Read(IDeviceState state, int reg) { return state.Read(reg * 4); } /// /// Performs a GPU method call. /// /// Call argument /// Current GPU state /// Address, in words, of the method public static void Send(int value, IDeviceState state, int methAddr) { state.Write(methAddr * 4, value); } } }