aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Translation
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation')
-rw-r--r--Ryujinx.Graphics.Shader/Translation/Translator.cs19
-rw-r--r--Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs36
2 files changed, 11 insertions, 44 deletions
diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs
index e52c1ccf..0d64bccc 100644
--- a/Ryujinx.Graphics.Shader/Translation/Translator.cs
+++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs
@@ -36,22 +36,7 @@ namespace Ryujinx.Graphics.Shader.Translation
return new TranslatorContext(address, cfg, config);
}
- public static TranslatorContext CreateContext(
- ulong addressA,
- ulong addressB,
- IGpuAccessor gpuAccessor,
- TranslationFlags flags,
- TranslationCounts counts = null)
- {
- counts ??= new TranslationCounts();
-
- Block[][] cfgA = DecodeShader(addressA, gpuAccessor, flags | TranslationFlags.VertexA, counts, out ShaderConfig configA);
- Block[][] cfgB = DecodeShader(addressB, gpuAccessor, flags, counts, out ShaderConfig configB);
-
- return new TranslatorContext(addressA, addressB, cfgA, cfgB, configA, configB);
- }
-
- internal static ShaderProgram Translate(FunctionCode[] functions, ShaderConfig config, out ShaderProgramInfo shaderProgramInfo, int sizeA = 0)
+ internal static ShaderProgram Translate(FunctionCode[] functions, ShaderConfig config, out ShaderProgramInfo shaderProgramInfo)
{
var cfgs = new ControlFlowGraph[functions.Length];
var frus = new RegisterUsage.FunctionRegisterUsage[functions.Length];
@@ -113,7 +98,7 @@ namespace Ryujinx.Graphics.Shader.Translation
string glslCode = program.Code;
- return new ShaderProgram(config.Stage, glslCode, config.Size, sizeA);
+ return new ShaderProgram(config.Stage, glslCode);
}
private static Block[][] DecodeShader(
diff --git a/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs b/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs
index 3092e077..501f7880 100644
--- a/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs
+++ b/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs
@@ -10,16 +10,12 @@ namespace Ryujinx.Graphics.Shader.Translation
public class TranslatorContext
{
private readonly Block[][] _cfg;
- private readonly Block[][] _cfgA;
private ShaderConfig _config;
- private ShaderConfig _configA;
public ulong Address { get; }
- public ulong AddressA { get; }
public ShaderStage Stage => _config.Stage;
public int Size => _config.Size;
- public int SizeA => _configA != null ? _configA.Size : 0;
public HashSet<int> TextureHandlesForCache => _config.TextureHandlesForCache;
@@ -27,22 +23,9 @@ namespace Ryujinx.Graphics.Shader.Translation
internal TranslatorContext(ulong address, Block[][] cfg, ShaderConfig config)
{
- Address = address;
- AddressA = 0;
- _config = config;
- _configA = null;
- _cfg = cfg;
- _cfgA = null;
- }
-
- internal TranslatorContext(ulong addressA, ulong addressB, Block[][] cfgA, Block[][] cfgB, ShaderConfig configA, ShaderConfig configB)
- {
- Address = addressB;
- AddressA = addressA;
- _config = configB;
- _configA = configA;
- _cfg = cfgB;
- _cfgA = cfgA;
+ Address = address;
+ _config = config;
+ _cfg = cfg;
}
private static bool IsUserAttribute(Operand operand)
@@ -141,20 +124,19 @@ namespace Ryujinx.Graphics.Shader.Translation
return output;
}
- public ShaderProgram Translate(out ShaderProgramInfo shaderProgramInfo)
+ public ShaderProgram Translate(out ShaderProgramInfo shaderProgramInfo, TranslatorContext other = null)
{
FunctionCode[] code = EmitShader(_cfg, _config);
- if (_configA != null)
+ if (other != null)
{
- FunctionCode[] codeA = EmitShader(_cfgA, _configA);
-
- _config.SetUsedFeature(_configA.UsedFeatures);
+ _config.SetUsedFeature(other._config.UsedFeatures);
+ TextureHandlesForCache.UnionWith(other.TextureHandlesForCache);
- code = Combine(codeA, code);
+ code = Combine(EmitShader(other._cfg, other._config), code);
}
- return Translator.Translate(code, _config, out shaderProgramInfo, SizeA);
+ return Translator.Translate(code, _config, out shaderProgramInfo);
}
}
}