From 83cef0426b058014ad94dd687a29e7c31a1fbbef Mon Sep 17 00:00:00 2001
From: ReinUsesLisp <reinuseslisp@airmail.cc>
Date: Thu, 20 May 2021 17:28:09 -0300
Subject: glasm: Properly declare attributes on geometry programs

---
 src/shader_recompiler/backend/glasm/emit_context.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

(limited to 'src/shader_recompiler/backend/glasm/emit_context.cpp')

diff --git a/src/shader_recompiler/backend/glasm/emit_context.cpp b/src/shader_recompiler/backend/glasm/emit_context.cpp
index 8f418936ea..a9bbb680fe 100644
--- a/src/shader_recompiler/backend/glasm/emit_context.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_context.cpp
@@ -47,24 +47,31 @@ EmitContext::EmitContext(IR::Program& program, Bindings& bindings, const Profile
     case Stage::VertexA:
     case Stage::VertexB:
         stage_name = "vertex";
+        attrib_name = "vertex";
         break;
     case Stage::TessellationControl:
     case Stage::TessellationEval:
+        stage_name = "primitive";
+        attrib_name = "primitive";
+        break;
     case Stage::Geometry:
         stage_name = "primitive";
+        attrib_name = "vertex";
         break;
     case Stage::Fragment:
         stage_name = "fragment";
+        attrib_name = "fragment";
         break;
     case Stage::Compute:
         stage_name = "invocation";
         break;
     }
+    const std::string_view attr_stage{stage == Stage::Fragment ? "fragment" : "vertex"};
     for (size_t index = 0; index < program.info.input_generics.size(); ++index) {
         const auto& generic{program.info.input_generics[index]};
         if (generic.used) {
             Add("{}ATTRIB in_attr{}[]={{{}.attrib[{}..{}]}};",
-                InterpDecorator(generic.interpolation), index, stage_name, index, index);
+                InterpDecorator(generic.interpolation), index, attr_stage, index, index);
         }
     }
     for (size_t index = 0; index < program.info.stores_frag_color.size(); ++index) {
-- 
cgit v1.2.3-70-g09d2