mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2025-11-14 21:14:51 +00:00
* Move shuffle handling out of the backend to a transform pass * Handle subgroup sizes higher than 32 * Stop using the subgroup size control extension * Make GenerateShuffleFunction static * Shader cache version bump
43 lines
1.4 KiB
C#
43 lines
1.4 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);
|
|
RunPass<ShufflePass>(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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|