42 lines
1.3 KiB
C#
42 lines
1.3 KiB
C#
|
|
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);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|