1#version 430
2
3layout (triangles) in;
4layout (triangle_strip, max_vertices = 3) out;
5
6// OK: different instance names is allowed
7layout (std140, binding = 0) uniform MatrixBlock
8{
9	mat4 uProj;
10	mat4 uWorld;
11} uM;
12
13// Verify that in/out blocks with same block name work
14in Vertex
15{
16	vec4 v1;
17	vec4 v2;
18} iV[3];
19
20out Vertex
21{
22	vec4 val1;
23} oV;
24
25// OK: different instance names is allowed
26layout (std140, binding = 1) uniform ColorBlock
27{
28	vec4 color1;
29	bool b;
30	vec4 color2;
31	vec4 color3;
32} uC;
33
34// OK: different instance names is allowed
35layout (std430, binding = 1) buffer BufferBlock
36{
37	mat4 p;
38} uBuf;
39
40vec4 getWorld(int i);
41vec4 getColor2();
42
43out vec4 oColor;
44
45float globalF;
46
47void
48main()
49{
50	oColor = uC.color1 * getColor2();
51
52	globalF = 1.0;
53
54	for (int i = 0; i < 3; i++)
55	{
56		gl_Position = uM.uProj * getWorld(i);
57		oV.val1 = uC.color1 + iV[i].v2 * globalF;
58		EmitVertex();
59	}
60
61	EndPrimitive();
62}
63