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  }