From 9e4f668f6cc59d47847472410228850fe5528daa Mon Sep 17 00:00:00 2001 From: gdkchan Date: Fri, 14 Feb 2020 07:29:58 -0300 Subject: [PATCH] Update bindless to indexed conversion code pattern match (#938) * Update bindless to indexed conversion code pattern match * Correct index shift --- .../Translation/Optimizations/BindlessToIndexed.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs b/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs index 83f8fe9a7b..41f42dad17 100644 --- a/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs +++ b/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs @@ -45,7 +45,12 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations continue; } - if (!(ldcSrc1.AsgOp is Operation addOp)) + if (!(ldcSrc1.AsgOp is Operation shrOp) || shrOp.Inst != Instruction.ShiftRightU32) + { + continue; + } + + if (!(shrOp.GetSource(0).AsgOp is Operation addOp) || addOp.Inst != Instruction.Add) { continue; } @@ -57,15 +62,15 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations continue; } - texOp.TurnIntoIndexed(addSrc1.Value); + texOp.TurnIntoIndexed(addSrc1.Value / 4); Operand index = Local(); Operand source = addOp.GetSource(0); - Operation shrBy1 = new Operation(Instruction.ShiftRightU32, index, source, Const(1)); + Operation shrBy3 = new Operation(Instruction.ShiftRightU32, index, source, Const(3)); - block.Operations.AddBefore(node, shrBy1); + block.Operations.AddBefore(node, shrBy3); texOp.SetSource(0, index); }