summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend/glasm/emit_context.cpp
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-05-20 17:28:09 -0300
committerGravatar ameerj2021-07-22 21:51:32 -0400
commit83cef0426b058014ad94dd687a29e7c31a1fbbef (patch)
tree54d1860cae0a8b1db6341b610d50aea15801ab13 /src/shader_recompiler/backend/glasm/emit_context.cpp
parentglasm: Declare geometry program headers (diff)
downloadyuzu-83cef0426b058014ad94dd687a29e7c31a1fbbef.tar.gz
yuzu-83cef0426b058014ad94dd687a29e7c31a1fbbef.tar.xz
yuzu-83cef0426b058014ad94dd687a29e7c31a1fbbef.zip
glasm: Properly declare attributes on geometry programs
Diffstat (limited to 'src/shader_recompiler/backend/glasm/emit_context.cpp')
-rw-r--r--src/shader_recompiler/backend/glasm/emit_context.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_context.cpp b/src/shader_recompiler/backend/glasm/emit_context.cpp
index 8f418936e..a9bbb680f 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
47 case Stage::VertexA: 47 case Stage::VertexA:
48 case Stage::VertexB: 48 case Stage::VertexB:
49 stage_name = "vertex"; 49 stage_name = "vertex";
50 attrib_name = "vertex";
50 break; 51 break;
51 case Stage::TessellationControl: 52 case Stage::TessellationControl:
52 case Stage::TessellationEval: 53 case Stage::TessellationEval:
54 stage_name = "primitive";
55 attrib_name = "primitive";
56 break;
53 case Stage::Geometry: 57 case Stage::Geometry:
54 stage_name = "primitive"; 58 stage_name = "primitive";
59 attrib_name = "vertex";
55 break; 60 break;
56 case Stage::Fragment: 61 case Stage::Fragment:
57 stage_name = "fragment"; 62 stage_name = "fragment";
63 attrib_name = "fragment";
58 break; 64 break;
59 case Stage::Compute: 65 case Stage::Compute:
60 stage_name = "invocation"; 66 stage_name = "invocation";
61 break; 67 break;
62 } 68 }
69 const std::string_view attr_stage{stage == Stage::Fragment ? "fragment" : "vertex"};
63 for (size_t index = 0; index < program.info.input_generics.size(); ++index) { 70 for (size_t index = 0; index < program.info.input_generics.size(); ++index) {
64 const auto& generic{program.info.input_generics[index]}; 71 const auto& generic{program.info.input_generics[index]};
65 if (generic.used) { 72 if (generic.used) {
66 Add("{}ATTRIB in_attr{}[]={{{}.attrib[{}..{}]}};", 73 Add("{}ATTRIB in_attr{}[]={{{}.attrib[{}..{}]}};",
67 InterpDecorator(generic.interpolation), index, stage_name, index, index); 74 InterpDecorator(generic.interpolation), index, attr_stage, index, index);
68 } 75 }
69 } 76 }
70 for (size_t index = 0; index < program.info.stores_frag_color.size(); ++index) { 77 for (size_t index = 0; index < program.info.stores_frag_color.size(); ++index) {