diff options
Diffstat (limited to 'Ryujinx.Graphics.Shader')
| -rw-r--r-- | Ryujinx.Graphics.Shader/ShaderProgram.cs | 14 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs | 3 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/Translator.cs | 14 |
3 files changed, 26 insertions, 5 deletions
diff --git a/Ryujinx.Graphics.Shader/ShaderProgram.cs b/Ryujinx.Graphics.Shader/ShaderProgram.cs index 4a6bfea9..dd87b67d 100644 --- a/Ryujinx.Graphics.Shader/ShaderProgram.cs +++ b/Ryujinx.Graphics.Shader/ShaderProgram.cs @@ -7,11 +7,21 @@ namespace Ryujinx.Graphics.Shader public ShaderStage Stage { get; } public string Code { get; private set; } + public byte[] BinaryCode { get; } - public ShaderProgram(ShaderStage stage, string code) + private ShaderProgram(ShaderStage stage) { Stage = stage; - Code = code; + } + + public ShaderProgram(ShaderStage stage, string code) : this(stage) + { + Code = code; + } + + public ShaderProgram(ShaderStage stage, byte[] binaryCode) : this(stage) + { + BinaryCode = binaryCode; } public void Prepend(string line) diff --git a/Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs b/Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs index db839e94..8314b223 100644 --- a/Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs +++ b/Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs @@ -3,6 +3,7 @@ namespace Ryujinx.Graphics.Shader.Translation public enum TargetLanguage { Glsl, - Spirv + Spirv, + Arb } } diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs index 0f71b599..685b6a20 100644 --- a/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -3,6 +3,7 @@ using Ryujinx.Graphics.Shader.Decoders; using Ryujinx.Graphics.Shader.IntermediateRepresentation; using Ryujinx.Graphics.Shader.StructuredIr; using Ryujinx.Graphics.Shader.Translation.Optimizations; +using System; using System.Collections.Generic; using static Ryujinx.Graphics.Shader.IntermediateRepresentation.OperandHelper; @@ -87,7 +88,16 @@ namespace Ryujinx.Graphics.Shader.Translation StructuredProgramInfo sInfo = StructuredProgram.MakeStructuredProgram(funcs, config); - string glslCode = GlslGenerator.Generate(sInfo, config); + ShaderProgram program; + + switch (config.Options.TargetLanguage) + { + case TargetLanguage.Glsl: + program = new ShaderProgram(config.Stage, GlslGenerator.Generate(sInfo, config)); + break; + default: + throw new NotImplementedException(config.Options.TargetLanguage.ToString()); + } shaderProgramInfo = new ShaderProgramInfo( config.GetConstantBufferDescriptors(), @@ -97,7 +107,7 @@ namespace Ryujinx.Graphics.Shader.Translation config.UsedFeatures.HasFlag(FeatureFlags.InstanceId), config.ClipDistancesWritten); - return new ShaderProgram(config.Stage, glslCode); + return program; } private static Block[][] DecodeShader( |
