From edfd4bc860e05698946605c740fdb5857d64e917 Mon Sep 17 00:00:00 2001
From: ReinUsesLisp <reinuseslisp@airmail.cc>
Date: Thu, 28 Jun 2018 22:01:58 -0300
Subject: [PATCH] Explicit GLSL "position" attribute location (#199)

---
 Ryujinx.Graphics/Gal/Shader/GlslDecl.cs       | 2 ++
 Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs | 4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs
index 5c7dd794e3..867f901604 100644
--- a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs
+++ b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs
@@ -15,6 +15,8 @@ namespace Ryujinx.Graphics.Gal.Shader
 
         public const int GlPositionVec4Index = 7;
 
+        public const int PositionOutAttrLocation = 15;
+
         private const int AttrStartIndex = 8;
         private const int TexStartIndex = 8;
 
diff --git a/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs b/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs
index 2bc350da3e..87d448689b 100644
--- a/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs
+++ b/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs
@@ -208,7 +208,7 @@ namespace Ryujinx.Graphics.Gal.Shader
         {
             if (Decl.ShaderType == GalShaderType.Fragment)
             {
-                SB.AppendLine("in vec4 " + GlslDecl.PositionOutAttrName + ";");
+                SB.AppendLine("layout (location = " + GlslDecl.PositionOutAttrLocation + ") in vec4 " + GlslDecl.PositionOutAttrName + ";");
             }
 
             PrintDeclAttributes(Decl.InAttributes.Values, "in");
@@ -218,7 +218,7 @@ namespace Ryujinx.Graphics.Gal.Shader
         {
             if (Decl.ShaderType == GalShaderType.Vertex)
             {
-                SB.AppendLine("out vec4 " + GlslDecl.PositionOutAttrName + ";");
+                SB.AppendLine("layout (location = " + GlslDecl.PositionOutAttrLocation + ") out vec4 " + GlslDecl.PositionOutAttrName + ";");
             }
 
             PrintDeclAttributes(Decl.OutAttributes.Values, "out");