aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs')
-rw-r--r--Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs32
1 files changed, 32 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs b/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs
new file mode 100644
index 00000000..d40ce6a4
--- /dev/null
+++ b/Ryujinx.Graphics.GAL/Multithreading/Resources/Programs/SourceProgramRequest.cs
@@ -0,0 +1,32 @@
+using System.Linq;
+
+namespace Ryujinx.Graphics.GAL.Multithreading.Resources.Programs
+{
+ class SourceProgramRequest : IProgramRequest
+ {
+ public ThreadedProgram Threaded { get; set; }
+
+ private IShader[] _shaders;
+ private TransformFeedbackDescriptor[] _transformFeedbackDescriptors;
+
+ public SourceProgramRequest(ThreadedProgram program, IShader[] shaders, TransformFeedbackDescriptor[] transformFeedbackDescriptors)
+ {
+ Threaded = program;
+
+ _shaders = shaders;
+ _transformFeedbackDescriptors = transformFeedbackDescriptors;
+ }
+
+ public IProgram Create(IRenderer renderer)
+ {
+ IShader[] shaders = _shaders.Select(shader =>
+ {
+ var threaded = (ThreadedShader)shader;
+ threaded?.EnsureCreated();
+ return threaded?.Base;
+ }).ToArray();
+
+ return renderer.CreateProgram(shaders, _transformFeedbackDescriptors);
+ }
+ }
+}