forked from Mirror/Ryujinx
7fea26e97e
* Introduce new IGALCommand<T> interface and use it * Remove use of reflection on GAL multithreading * Unmanaged constraint
25 lines
800 B
C#
25 lines
800 B
C#
using Ryujinx.Graphics.GAL.Multithreading.Model;
|
|
using Ryujinx.Graphics.GAL.Multithreading.Resources;
|
|
|
|
namespace Ryujinx.Graphics.GAL.Multithreading.Commands
|
|
{
|
|
struct SetProgramCommand : IGALCommand, IGALCommand<SetProgramCommand>
|
|
{
|
|
public CommandType CommandType => CommandType.SetProgram;
|
|
private TableRef<IProgram> _program;
|
|
|
|
public void Set(TableRef<IProgram> program)
|
|
{
|
|
_program = program;
|
|
}
|
|
|
|
public static void Run(ref SetProgramCommand command, ThreadedRenderer threaded, IRenderer renderer)
|
|
{
|
|
ThreadedProgram program = command._program.GetAs<ThreadedProgram>(threaded);
|
|
|
|
threaded.Programs.WaitForProgram(program);
|
|
|
|
renderer.Pipeline.SetProgram(program.Base);
|
|
}
|
|
}
|
|
}
|