diff options
| author | gdk <gab.dark.100@gmail.com> | 2019-11-30 23:53:09 -0300 |
|---|---|---|
| committer | Thog <thog@protonmail.com> | 2020-01-09 02:13:00 +0100 |
| commit | 6a98c643cabeea25dc42e19fe475a687a034a532 (patch) | |
| tree | ccb1ecbfc5b79852be8a1f52e241015142a8a7a9 /Ryujinx.Graphics.Shader/Translation/Translator.cs | |
| parent | 396768f3b4494c7dcb0c03942eeb50ef4d47adde (diff) | |
Add a pass to turn global memory access into storage access, and do all storage related transformations on IR
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation/Translator.cs')
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/Translator.cs | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs index 1c37fa70..b129be93 100644 --- a/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.Shader.Translation return code.Slice(0, headerSize + (int)endAddress); } - public static ShaderProgram Translate(Span<byte> code, TranslationFlags flags) + public static ShaderProgram Translate(Span<byte> code, ShaderCapabilities capabilities, TranslationFlags flags) { bool compute = (flags & TranslationFlags.Compute) != 0; bool debugMode = (flags & TranslationFlags.DebugMode) != 0; @@ -82,6 +82,7 @@ namespace Ryujinx.Graphics.Shader.Translation ShaderConfig config = new ShaderConfig( stage, + capabilities, flags, maxOutputVertexCount, outputTopology); @@ -89,7 +90,7 @@ namespace Ryujinx.Graphics.Shader.Translation return Translate(ops, config, size); } - public static ShaderProgram Translate(Span<byte> vpACode, Span<byte> vpBCode, TranslationFlags flags) + public static ShaderProgram Translate(Span<byte> vpACode, Span<byte> vpBCode, ShaderCapabilities capabilities, TranslationFlags flags) { bool debugMode = (flags & TranslationFlags.DebugMode) != 0; @@ -98,6 +99,7 @@ namespace Ryujinx.Graphics.Shader.Translation ShaderConfig config = new ShaderConfig( header.Stage, + capabilities, flags, header.MaxOutputVertexCount, header.OutputTopology); @@ -107,20 +109,22 @@ namespace Ryujinx.Graphics.Shader.Translation private static ShaderProgram Translate(Operation[] ops, ShaderConfig config, int size) { - BasicBlock[] irBlocks = ControlFlowGraph.MakeCfg(ops); + BasicBlock[] blocks = ControlFlowGraph.MakeCfg(ops); - if (irBlocks.Length > 0) + if (blocks.Length > 0) { - Dominance.FindDominators(irBlocks[0], irBlocks.Length); + Dominance.FindDominators(blocks[0], blocks.Length); - Dominance.FindDominanceFrontiers(irBlocks); + Dominance.FindDominanceFrontiers(blocks); - Ssa.Rename(irBlocks); + Ssa.Rename(blocks); - Optimizer.Optimize(irBlocks, config.Stage); + Optimizer.RunPass(blocks, config); + + Lowering.RunPass(blocks, config); } - StructuredProgramInfo sInfo = StructuredProgram.MakeStructuredProgram(irBlocks, config); + StructuredProgramInfo sInfo = StructuredProgram.MakeStructuredProgram(blocks, config); GlslProgram program = GlslGenerator.Generate(sInfo, config); |
