From cee712105850ac3385cd0091a923438167433f9f Mon Sep 17 00:00:00 2001
From: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
Date: Sat, 8 Apr 2023 01:22:00 +0200
Subject: Move solution and projects to src
---
.../Shader/CachedShaderProgram.cs | 56 ++++++++++++++++++++++
1 file changed, 56 insertions(+)
create mode 100644 src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs
(limited to 'src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs')
diff --git a/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs
new file mode 100644
index 00000000..ff9c39a1
--- /dev/null
+++ b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs
@@ -0,0 +1,56 @@
+using Ryujinx.Graphics.GAL;
+using System;
+
+namespace Ryujinx.Graphics.Gpu.Shader
+{
+ ///
+ /// Represents a program composed of one or more shader stages (for graphics shaders),
+ /// or a single shader (for compute shaders).
+ ///
+ class CachedShaderProgram : IDisposable
+ {
+ ///
+ /// Host shader program object.
+ ///
+ public IProgram HostProgram { get; }
+
+ ///
+ /// GPU state used to create this version of the shader.
+ ///
+ public ShaderSpecializationState SpecializationState { get; }
+
+ ///
+ /// Compiled shader for each shader stage.
+ ///
+ public CachedShaderStage[] Shaders { get; }
+
+ ///
+ /// Cached shader bindings, ready for placing into the bindings manager.
+ ///
+ public CachedShaderBindings Bindings { get; }
+
+ ///
+ /// Creates a new instance of the shader bundle.
+ ///
+ /// Host program with all the shader stages
+ /// GPU state used to create this version of the shader
+ /// Shaders
+ public CachedShaderProgram(IProgram hostProgram, ShaderSpecializationState specializationState, params CachedShaderStage[] shaders)
+ {
+ HostProgram = hostProgram;
+ SpecializationState = specializationState;
+ Shaders = shaders;
+
+ SpecializationState.Prepare(shaders);
+ Bindings = new CachedShaderBindings(shaders.Length == 1, shaders);
+ }
+
+ ///
+ /// Dispose of the host shader resources.
+ ///
+ public void Dispose()
+ {
+ HostProgram.Dispose();
+ }
+ }
+}
--
cgit v1.2.3