using Ryujinx.Graphics.Shader.IntermediateRepresentation; using System.Collections.Generic; namespace Ryujinx.Graphics.Shader.Translation.Transforms { static class TransformPasses { public static void RunPass(TransformContext context) { RunPass(context); RunPass(context); RunPass(context); RunPass(context); RunPass(context); RunPass(context); } private static void RunPass(TransformContext context) where T : ITransformPass { if (!T.IsEnabled(context.GpuAccessor, context.Stage, context.TargetLanguage, context.UsedFeatures)) { return; } for (int blkIndex = 0; blkIndex < context.Blocks.Length; blkIndex++) { BasicBlock block = context.Blocks[blkIndex]; for (LinkedListNode node = block.Operations.First; node != null; node = node.Next) { if (node.Value is not Operation) { continue; } node = T.RunPass(context, node); } } } } }