diff options
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/Translation/Transforms/TransformPasses.cs')
| -rw-r--r-- | src/Ryujinx.Graphics.Shader/Translation/Transforms/TransformPasses.cs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Shader/Translation/Transforms/TransformPasses.cs b/src/Ryujinx.Graphics.Shader/Translation/Transforms/TransformPasses.cs new file mode 100644 index 00000000..c3bbe7dd --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/Translation/Transforms/TransformPasses.cs @@ -0,0 +1,41 @@ +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<DrawParametersReplace>(context); + RunPass<ForcePreciseEnable>(context); + RunPass<VectorComponentSelect>(context); + RunPass<TexturePass>(context); + RunPass<SharedStoreSmallIntCas>(context); + RunPass<SharedAtomicSignedCas>(context); + } + + private static void RunPass<T>(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<INode> node = block.Operations.First; node != null; node = node.Next) + { + if (node.Value is not Operation) + { + continue; + } + + node = T.RunPass(context, node); + } + } + } + } +} |
