using Ryujinx.Graphics.GAL.Multithreading.Commands.Program; using Ryujinx.Graphics.GAL.Multithreading.Model; namespace Ryujinx.Graphics.GAL.Multithreading.Resources { class ThreadedProgram : IProgram { private readonly ThreadedRenderer _renderer; public IProgram Base; internal bool Compiled; public ThreadedProgram(ThreadedRenderer renderer) { _renderer = renderer; } private TableRef Ref(T reference) { return new TableRef(_renderer, reference); } public unsafe void Dispose() { _renderer.New()->Set(Ref(this)); _renderer.QueueCommand(); } public unsafe byte[] GetBinary() { ResultBox box = new(); _renderer.New()->Set(Ref(this), Ref(box)); _renderer.InvokeCommand(); return box.Result; } public unsafe ProgramLinkStatus CheckProgramLink(bool blocking) { ResultBox box = new(); _renderer.New()->Set(Ref(this), blocking, Ref(box)); _renderer.InvokeCommand(); return box.Result; } } }