ThreadedProgram.cs
1 using Ryujinx.Graphics.GAL.Multithreading.Commands.Program; 2 using Ryujinx.Graphics.GAL.Multithreading.Model; 3 4 namespace Ryujinx.Graphics.GAL.Multithreading.Resources 5 { 6 class ThreadedProgram : IProgram 7 { 8 private readonly ThreadedRenderer _renderer; 9 10 public IProgram Base; 11 12 internal bool Compiled; 13 14 public ThreadedProgram(ThreadedRenderer renderer) 15 { 16 _renderer = renderer; 17 } 18 19 private TableRef<T> Ref<T>(T reference) 20 { 21 return new TableRef<T>(_renderer, reference); 22 } 23 24 public void Dispose() 25 { 26 _renderer.New<ProgramDisposeCommand>().Set(Ref(this)); 27 _renderer.QueueCommand(); 28 } 29 30 public byte[] GetBinary() 31 { 32 ResultBox<byte[]> box = new(); 33 _renderer.New<ProgramGetBinaryCommand>().Set(Ref(this), Ref(box)); 34 _renderer.InvokeCommand(); 35 36 return box.Result; 37 } 38 39 public ProgramLinkStatus CheckProgramLink(bool blocking) 40 { 41 ResultBox<ProgramLinkStatus> box = new(); 42 _renderer.New<ProgramCheckLinkCommand>().Set(Ref(this), blocking, Ref(box)); 43 _renderer.InvokeCommand(); 44 45 return box.Result; 46 } 47 } 48 }