diff options
Diffstat (limited to 'Ryujinx.Graphics/Gal/OpenGL')
| -rw-r--r-- | Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs index da2762d6..3c5c874e 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs @@ -97,12 +97,37 @@ namespace Ryujinx.Graphics.Gal.OpenGL public void Create(IGalMemory Memory, long Key, GalShaderType Type) { - Stages.GetOrAdd(Key, (Stage) => ShaderStageFactory(Memory, Key, Type)); + Stages.GetOrAdd(Key, (Stage) => ShaderStageFactory(Memory, Key, 0, false, Type)); } - private ShaderStage ShaderStageFactory(IGalMemory Memory, long Position, GalShaderType Type) + public void Create(IGalMemory Memory, long VpAPos, long Key, GalShaderType Type) { - GlslProgram Program = GetGlslProgram(Memory, Position, Type); + Stages.GetOrAdd(Key, (Stage) => ShaderStageFactory(Memory, VpAPos, Key, true, Type)); + } + + private ShaderStage ShaderStageFactory( + IGalMemory Memory, + long Position, + long PositionB, + bool IsDualVp, + GalShaderType Type) + { + GlslProgram Program; + + GlslDecompiler Decompiler = new GlslDecompiler(); + + if (IsDualVp) + { + Program = Decompiler.Decompile( + Memory, + Position + 0x50, + PositionB + 0x50, + Type); + } + else + { + Program = Decompiler.Decompile(Memory, Position + 0x50, Type); + } return new ShaderStage( Type, @@ -111,13 +136,6 @@ namespace Ryujinx.Graphics.Gal.OpenGL Program.Uniforms); } - private GlslProgram GetGlslProgram(IGalMemory Memory, long Position, GalShaderType Type) - { - GlslDecompiler Decompiler = new GlslDecompiler(); - - return Decompiler.Decompile(Memory, Position + 0x50, Type); - } - public IEnumerable<ShaderDeclInfo> GetTextureUsage(long Key) { if (Stages.TryGetValue(Key, out ShaderStage Stage)) |
