aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/Decoder.cs6
1 files changed, 4 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.Shader/Decoders/Decoder.cs b/Ryujinx.Graphics.Shader/Decoders/Decoder.cs
index 6841c98d..9f039b94 100644
--- a/Ryujinx.Graphics.Shader/Decoders/Decoder.cs
+++ b/Ryujinx.Graphics.Shader/Decoders/Decoder.cs
@@ -45,6 +45,8 @@ namespace Ryujinx.Graphics.Shader.Decoders
GetBlock(0);
+ ulong maxAddress = (ulong)code.Length - headerSize;
+
while (workQueue.TryDequeue(out Block currBlock))
{
// Check if the current block is inside another block.
@@ -65,7 +67,7 @@ namespace Ryujinx.Graphics.Shader.Decoders
}
// If we have a block after the current one, set the limit address.
- ulong limitAddress = (ulong)code.Length - headerSize;
+ ulong limitAddress = maxAddress;
if (nBlkIndex != blocks.Count)
{
@@ -140,7 +142,7 @@ namespace Ryujinx.Graphics.Shader.Decoders
}
// Do we have a block after the current one?
- if (!IsExit(currBlock.GetLastOp()) && currBlock.BrIndir != null)
+ if (!IsExit(currBlock.GetLastOp()) && currBlock.BrIndir != null && currBlock.EndAddress < maxAddress)
{
bool targetVisited = visited.ContainsKey(currBlock.EndAddress);