1#version 320 es
2
3layout(vertices = 4) out;
4out int outa[gl_out.length()];
5
6layout(quads) in;                   // ERROR
7layout(ccw) out;                    // ERROR
8layout(fractional_even_spacing) in; // ERROR
9
10patch in vec4 patchIn;              // ERROR
11patch out vec4 patchOut;
12
13void main()
14{
15    barrier();
16
17    int a = gl_MaxTessControlInputComponents +
18            gl_MaxTessControlOutputComponents +
19            gl_MaxTessControlTextureImageUnits +
20            gl_MaxTessControlUniformComponents +
21            gl_MaxTessControlTotalOutputComponents;
22
23    vec4 p = gl_in[1].gl_Position;
24    float ps = gl_in[1].gl_PointSize;        // ERROR, need point_size extension
25    float cd = gl_in[1].gl_ClipDistance[2];  // ERROR, not in ES
26
27    int pvi = gl_PatchVerticesIn;
28    int pid = gl_PrimitiveID;
29    int iid = gl_InvocationID;
30
31    gl_out[gl_InvocationID].gl_Position = p;
32    gl_out[gl_InvocationID].gl_PointSize = ps;        // ERROR, need point_size extension
33    gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;  // ERROR, not in ES
34
35    gl_TessLevelOuter[3] = 3.2;
36    gl_TessLevelInner[1] = 1.3;
37
38    if (a > 10)
39        barrier();           // ERROR
40    else
41        barrier();           // ERROR
42
43    barrier();
44
45    do {
46        barrier();           // ERROR
47    } while (a > 10);
48
49    switch (a) {
50    default:
51        barrier();           // ERROR
52        break;
53    }
54    a < 12 ? a : (barrier(), a); // ERROR
55    {
56        barrier();
57    }
58
59    return;
60
61    barrier();               // ERROR
62}
63
64layout(vertices = 4) in;    // ERROR, not on in
65layout(vertices = 5) out;   // ERROR, changing #
66
67void foo()
68{
69    gl_out[4].gl_Position;  // ERROR, out of range
70
71    barrier();              // ERROR, not in main
72}
73
74in vec2 ina;                // ERROR, not array
75in vec2 inb[];
76in vec2 inc[18];            // ERROR, wrong size
77in vec2 ind[gl_MaxPatchVertices];
78patch out float implA[];    // ERROR, not sized
79
80#extension GL_ARB_separate_shader_objects : enable
81
82layout(location = 3) in vec4 ivla[];
83layout(location = 4) in vec4 ivlb[];
84layout(location = 4) in vec4 ivlc[];  // ERROR, overlapping
85
86layout(location = 3) out vec4 ovla[];
87layout(location = 4) out vec4 ovlb[];
88layout(location = 4) out vec4 ovlc[];  // ERROR, overlapping
89
90patch out pinbn {
91    int a;
92} pinbi;
93
94centroid out vec3 myColor2[];
95centroid in vec3 centr[];
96sample out vec4 perSampleColor[];
97
98layout(vertices = 4) out float badlay[];   // ERROR, not on a variable
99out float misSized[5];              // ERROR, size doesn't match
100out float okaySize[4];
101
102void pointSize2()
103{
104    float ps = gl_in[1].gl_PointSize;  // ERROR, need point_size extension
105    gl_out[gl_InvocationID].gl_PointSize = ps;   // ERROR, need point_size extension
106}
107
108precise vec3 pv3;
109
110void goodfoop()
111{
112    precise float d;
113
114    pv3 *= pv3;
115    pv3 = fma(pv3, pv3, pv3);
116    d = fma(d, d, d);
117}
118
119void bb()
120{
121    gl_BoundingBoxOES[0] = vec4(0.0);
122    gl_BoundingBoxOES[1] = vec4(1.0);
123    gl_BoundingBoxOES[2] = vec4(2.0);  // ERROR, overflow
124}
125
126out patch badpatchBName {  // ERROR, array size required
127    float f;
128} badpatchIName[];
129
130out patch patchBName {
131    float f;
132} patchIName[4];
133
134void outputtingOutparam(out int a)
135{
136    a = 2;
137}
138
139void outputting()
140{
141    outa[gl_InvocationID] = 2;
142    outa[1] = 2;                         // ERROR, not gl_InvocationID
143    gl_out[0].gl_Position = vec4(1.0);   // ERROR, not gl_InvocationID
144    outa[1];
145    gl_out[0];
146    outputtingOutparam(outa[0]);         // ERROR, not gl_InvocationID
147    outputtingOutparam(outa[gl_InvocationID]);
148    patchIName[1].f = 3.14;
149    outa[(gl_InvocationID)] = 2;
150}
151