aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Translation/Translator.cs
diff options
context:
space:
mode:
authorgdk <gab.dark.100@gmail.com>2019-11-15 00:01:54 -0300
committerThog <thog@protonmail.com>2020-01-09 02:13:00 +0100
commit04102e5c9db600d4ea4ffc0b514bda6f5e300bca (patch)
tree0ac17582778c118b98fc6d1a7f26f17b441374fc /Ryujinx.Graphics.Shader/Translation/Translator.cs
parenteea73bc421d359f0df60f377d2f921357a217416 (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.cs18
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++)