aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Shader')
-rw-r--r--Ryujinx.Graphics.Shader/ShaderProgram.cs14
-rw-r--r--Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs3
-rw-r--r--Ryujinx.Graphics.Shader/Translation/Translator.cs14
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(