aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedShader.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedShader.cs')
-rw-r--r--Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedShader.cs38
1 files changed, 38 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedShader.cs b/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedShader.cs
new file mode 100644
index 00000000..dcbecf38
--- /dev/null
+++ b/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedShader.cs
@@ -0,0 +1,38 @@
+using Ryujinx.Graphics.GAL.Multithreading.Commands.Shader;
+using Ryujinx.Graphics.GAL.Multithreading.Model;
+using Ryujinx.Graphics.Shader;
+
+namespace Ryujinx.Graphics.GAL.Multithreading.Resources
+{
+ class ThreadedShader : IShader
+ {
+ private ThreadedRenderer _renderer;
+ private ShaderStage _stage;
+ private string _code;
+
+ public IShader Base;
+
+ public ThreadedShader(ThreadedRenderer renderer, ShaderStage stage, string code)
+ {
+ _renderer = renderer;
+
+ _stage = stage;
+ _code = code;
+ }
+
+ internal void EnsureCreated()
+ {
+ if (_code != null && Base == null)
+ {
+ Base = _renderer.BaseRenderer.CompileShader(_stage, _code);
+ _code = null;
+ }
+ }
+
+ public void Dispose()
+ {
+ _renderer.New<ShaderDisposeCommand>().Set(new TableRef<ThreadedShader>(_renderer, this));
+ _renderer.QueueCommand();
+ }
+ }
+}