uniform sampler2D tex; #pragma MSP stage(vertex) layout(location=0) in vec4 position; out VertexOut { vec2 texcoord; } vs_out; void main() { vs_out.texcoord = position.xy*0.5+0.5; gl_Position = position; } #pragma MSP stage(geometry) layout(triangles) in; layout(triangle_strip, max_vertices=3) out; out GeometryOut { vec2 texcoord; } gs_out; void main() { for(int i=0; i<3; ++i) { gs_out.texcoord = vs_out[i].texcoord; passthrough[i]; EmitVertex(); } } #pragma MSP stage(fragment) layout(location=0) out vec4 frag_color; void main() { frag_color = texture(tex, gs_out.texcoord); } // Target API: Vulkan /* Expected output: vertex layout(location=0) in vec4 position; out VertexOut { vec2 texcoord; } vs_out; void main() { vs_out.texcoord = position.xy*0.5+0.5; gl_Position = position; } */ /* Expected output: geometry layout(triangles) in; layout(triangle_strip, max_vertices=3) out; out GeometryOut { vec2 texcoord; } gs_out; in VertexOut { vec2 texcoord; } vs_out[3]; void main() { for(int i = 0; i<3; ++i) { gs_out.texcoord = vs_out[i].texcoord; gl_Position = gl_in[i].gl_Position; EmitVertex(); } } */ /* Expected output: fragment layout(set=0, binding=71) uniform sampler2D tex; layout(location=0) out vec4 frag_color; in GeometryOut { vec2 texcoord; } gs_out; void main() { frag_color = texture(tex, gs_out.texcoord); } */