layout(push_constant) uniform Transform { mat4 vp_matrix; }; uniform sampler2D tex; #pragma MSP stage(vertex) layout(location=0) in vec4 position; layout(location=1) in vec2 texcoord; layout(location=2) in vec4 instance_transform[3]; void main() { passthrough; mat4 model_matrix = transpose(mat4(instance_transform[0], instance_transform[1], instance_transform[2], vec4(0.0, 0.0, 0.0, 1.0))); gl_Position = vp_matrix*model_matrix*position; } #pragma MSP stage(geometry) layout(triangles) in; layout(triangle_strip, max_vertices=3) out; void main() { for(int i=0; i<3; ++i) { passthrough[i]; EmitVertex(); } } #pragma MSP stage(fragment) layout(location=0) out vec4 frag_color; void main() { frag_color = texture(tex, texcoord); } // Target API: Vulkan /* Expected output: vertex layout(push_constant) uniform Transform { mat4 vp_matrix; }; layout(location=0) in vec4 position; layout(location=1) in vec2 texcoord; layout(location=2) in vec4 instance_transform[3]; layout(location=0) out vec2 _vs_out_texcoord; void main() { _vs_out_texcoord = texcoord; gl_Position = vp_matrix*transpose(mat4(instance_transform[0], instance_transform[1], instance_transform[2], vec4(0.0, 0.0, 0.0, 1.0)))*position; } */ /* Expected output: geometry layout(triangles) in; layout(triangle_strip, max_vertices=3) out; layout(location=0) in vec2 _vs_out_texcoord[3]; layout(location=0) out vec2 _gs_out_texcoord; void main() { for(int i = 0; i<3; ++i) { gl_Position = gl_in[i].gl_Position; _gs_out_texcoord = _vs_out_texcoord[i]; EmitVertex(); } } */ /* Expected output: fragment layout(set=0, binding=71) uniform sampler2D tex; layout(location=0) out vec4 frag_color; layout(location=0) in vec2 _gs_out_texcoord; void main() { frag_color = texture(tex, _gs_out_texcoord); } */