diff --git a/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs b/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs index 83f8fe9a..41f42dad 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); }