diff options
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation')
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/Translator.cs | 19 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs | 36 |
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); } } } |
