diff options
author | gdk <gab.dark.100@gmail.com> | 2019-11-15 00:01:54 -0300 |
---|---|---|
committer | Thog <thog@protonmail.com> | 2020-01-09 02:13:00 +0100 |
commit | 04102e5c9db600d4ea4ffc0b514bda6f5e300bca (patch) | |
tree | 0ac17582778c118b98fc6d1a7f26f17b441374fc /Ryujinx.Graphics.Shader/Translation/Translator.cs | |
parent | eea73bc421d359f0df60f377d2f921357a217416 (diff) |
Make the shader translator more error resilient
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation/Translator.cs')
-rw-r--r-- | Ryujinx.Graphics.Shader/Translation/Translator.cs | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs index 55617b24..3e5cb4a8 100644 --- a/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -105,13 +105,16 @@ namespace Ryujinx.Graphics.Shader.Translation { BasicBlock[] irBlocks = ControlFlowGraph.MakeCfg(ops); - Dominance.FindDominators(irBlocks[0], irBlocks.Length); + if (irBlocks.Length > 0) + { + Dominance.FindDominators(irBlocks[0], irBlocks.Length); - Dominance.FindDominanceFrontiers(irBlocks); + Dominance.FindDominanceFrontiers(irBlocks); - Ssa.Rename(irBlocks); + Ssa.Rename(irBlocks); - Optimizer.Optimize(irBlocks, config.Stage); + Optimizer.Optimize(irBlocks, config.Stage); + } StructuredProgramInfo sInfo = StructuredProgram.MakeStructuredProgram(irBlocks, config); @@ -158,6 +161,13 @@ namespace Ryujinx.Graphics.Shader.Translation context = new EmitterContext(header.Stage, header); } + if (cfg == null) + { + size = 0; + + return new Operation[0]; + } + ulong maxEndAddress = 0; for (int blkIndex = 0; blkIndex < cfg.Length; blkIndex++) |