diff options
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation/Translator.cs')
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/Translator.cs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs index 0d64bccc..c7eb27e5 100644 --- a/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -36,6 +36,22 @@ namespace Ryujinx.Graphics.Shader.Translation return new TranslatorContext(address, cfg, config); } + private static void ScanForBindless(BasicBlock[] blocks, ShaderConfig config) + { + for (int blkIndex = 0; blkIndex < blocks.Length; blkIndex++) + { + // Right now the guest shader cache cannot handle bindless textures correctly. + for (LinkedListNode<INode> node = blocks[blkIndex].Operations.First; node != null; node = node.Next) + { + if (node.Value is TextureOperation texOp && (texOp.Flags & TextureFlags.Bindless) != 0) + { + config.SetUsedFeature(FeatureFlags.Bindless); + break; + } + } + } + } + internal static ShaderProgram Translate(FunctionCode[] functions, ShaderConfig config, out ShaderProgramInfo shaderProgramInfo) { var cfgs = new ControlFlowGraph[functions.Length]; @@ -75,6 +91,8 @@ namespace Ryujinx.Graphics.Shader.Translation Dominance.FindDominators(cfg); Dominance.FindDominanceFrontiers(cfg.Blocks); + ScanForBindless(cfg.Blocks, config); + Ssa.Rename(cfg.Blocks); Optimizer.RunPass(cfg.Blocks, config); |
