From 04102e5c9db600d4ea4ffc0b514bda6f5e300bca Mon Sep 17 00:00:00 2001 From: gdk Date: Fri, 15 Nov 2019 00:01:54 -0300 Subject: Make the shader translator more error resilient --- Ryujinx.Graphics.Shader/Translation/Translator.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'Ryujinx.Graphics.Shader/Translation') 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++) -- cgit v1.2.3