1#version 150 core
2
3in fromVertex {
4    in vec3 color;
5} fromV[];
6
7out toFragment {
8    out vec3 color;
9} toF;
10
11out fromVertex {  // okay to reuse a block name for another block name
12    vec3 color;
13};
14
15out fooB {
16    vec2 color;
17} fromVertex;     // ERROR, cannot reuse block name as block instance
18
19int fromVertex;   // ERROR, cannot reuse a block name for something else
20
21out fooC {
22    vec2 color;
23} fooC;           // ERROR, cannot have same name for block and instance name
24
25void main()
26{
27    EmitVertex();
28    EndPrimitive();
29    EmitStreamVertex(1);    // ERROR
30    EndStreamPrimitive(0);  // ERROR
31
32    color = fromV[0].color;
33    gl_ClipDistance[3] = gl_in[1].gl_ClipDistance[2];
34    gl_Position = gl_in[0].gl_Position;
35    gl_PointSize = gl_in[3].gl_PointSize;
36    gl_PrimitiveID = gl_PrimitiveIDIn;
37    gl_Layer = 2;
38}
39
40out vec4 ov0;  // stream should be 0
41layout(stream = 4) out vec4 ov4;
42out vec4 o1v0;  // stream should be 0
43
44layout(stream = 3) uniform;        // ERROR
45layout(stream = 3) in;             // ERROR
46layout(stream = 3) uniform int ua; // ERROR
47layout(stream = 3) uniform ubb { int ua; } ibb; // ERROR
48
49layout(line_strip, points, triangle_strip, stream = 3, points, triangle_strip) out;  // just means "stream = 3, triangle_strip"
50layout(stream = 3, triangle_strip) out;
51out vec4 ov3;  // stream should be 3
52
53layout(stream = 6) out ooutb { vec4 a; } ouuaa6;
54
55layout(stream = 6) out ooutb2 {
56    layout(stream = 6) vec4 a;
57} ouua6;
58
59layout(stream = 7) out ooutb3 {
60    layout(stream = 6) vec4 a;  // ERROR
61} ouua7;
62
63out vec4 ov2s3;  // stream should be 3
64
65layout(max_vertices = 200) out;
66layout(max_vertices = 300) out;   // ERROR, too big
67void foo(layout(max_vertices = 4) int a)  // ERROR
68{
69    ouuaa6.a = vec4(1.0);
70}
71
72layout(line_strip, points, triangle_strip, stream = 3, points) out;  // ERROR, changing output primitive
73layout(line_strip, points, stream = 3) out; // ERROR, changing output primitive
74layout(triangle_strip) in; // ERROR, not an input primitive
75layout(triangle_strip) uniform; // ERROR
76layout(triangle_strip) out vec4 badv4;  // ERROR, not on a variable
77layout(triangle_strip) in vec4 bad2v4[];  // ERROR, not on a variable or input
78layout(invocations = 3) out outbn { int a; }; // 2 ERROR, not on a block, not until 4.0
79out outbn2 {
80    layout(invocations = 3)  int a; // 2 ERRORs, not on a block member, not until 4.0
81    layout(max_vertices = 3) int b; // ERROR, not on a block member
82    layout(triangle_strip)   int c; // ERROR, not on a block member
83} outbi;
84
85layout(lines) out;  // ERROR, not on output
86layout(lines_adjacency) in;
87layout(triangles) in;             // ERROR, can't change it
88layout(triangles_adjacency) in;   // ERROR, can't change it
89layout(invocations = 4) in;       // ERROR, not until 4.0
90
91in inbn {
92    layout(stream = 2) int a;     // ERROR, stream on input
93} inbi[];
94
95in sameName {
96    int a15;
97} insn[];
98
99out sameName {
100    float f15;
101};
102
103uniform sameName {
104    bool b15;
105};
106
107float summ = gl_MaxVertexAttribs +
108             gl_MaxVertexUniformComponents +
109             gl_MaxVaryingFloats +
110             gl_MaxVaryingComponents +
111             gl_MaxVertexOutputComponents  +
112             gl_MaxGeometryInputComponents  +
113             gl_MaxGeometryOutputComponents  +
114             gl_MaxFragmentInputComponents  +
115             gl_MaxVertexTextureImageUnits +
116             gl_MaxCombinedTextureImageUnits +
117             gl_MaxTextureImageUnits +
118             gl_MaxFragmentUniformComponents +
119             gl_MaxDrawBuffers +
120             gl_MaxClipDistances  +
121             gl_MaxGeometryTextureImageUnits +
122             gl_MaxGeometryOutputVertices +
123             gl_MaxGeometryTotalOutputComponents  +
124             gl_MaxGeometryUniformComponents  +
125             gl_MaxGeometryVaryingComponents;
126
127void fooe1()
128{
129    gl_ViewportIndex = gl_MaxViewports - 1;
130}
131
132#extension GL_ARB_viewport_array : enable
133
134void fooe2()
135{
136    gl_ViewportIndex = gl_MaxViewports - 1;
137}
138
139out int gl_ViewportIndex;
140