1617a3babSopenharmony_ci#version 320 es
2617a3babSopenharmony_ci
3617a3babSopenharmony_cilayout(vertices = 4) out;
4617a3babSopenharmony_ciout int outa[gl_out.length()];
5617a3babSopenharmony_ci
6617a3babSopenharmony_cilayout(quads) in;                   // ERROR
7617a3babSopenharmony_cilayout(ccw) out;                    // ERROR
8617a3babSopenharmony_cilayout(fractional_even_spacing) in; // ERROR
9617a3babSopenharmony_ci
10617a3babSopenharmony_cipatch in vec4 patchIn;              // ERROR
11617a3babSopenharmony_cipatch out vec4 patchOut;
12617a3babSopenharmony_ci
13617a3babSopenharmony_civoid main()
14617a3babSopenharmony_ci{
15617a3babSopenharmony_ci    barrier();
16617a3babSopenharmony_ci
17617a3babSopenharmony_ci    int a = gl_MaxTessControlInputComponents +
18617a3babSopenharmony_ci            gl_MaxTessControlOutputComponents +
19617a3babSopenharmony_ci            gl_MaxTessControlTextureImageUnits +
20617a3babSopenharmony_ci            gl_MaxTessControlUniformComponents +
21617a3babSopenharmony_ci            gl_MaxTessControlTotalOutputComponents;
22617a3babSopenharmony_ci
23617a3babSopenharmony_ci    vec4 p = gl_in[1].gl_Position;
24617a3babSopenharmony_ci    float ps = gl_in[1].gl_PointSize;        // ERROR, need point_size extension
25617a3babSopenharmony_ci    float cd = gl_in[1].gl_ClipDistance[2];  // ERROR, not in ES
26617a3babSopenharmony_ci
27617a3babSopenharmony_ci    int pvi = gl_PatchVerticesIn;
28617a3babSopenharmony_ci    int pid = gl_PrimitiveID;
29617a3babSopenharmony_ci    int iid = gl_InvocationID;
30617a3babSopenharmony_ci
31617a3babSopenharmony_ci    gl_out[gl_InvocationID].gl_Position = p;
32617a3babSopenharmony_ci    gl_out[gl_InvocationID].gl_PointSize = ps;        // ERROR, need point_size extension
33617a3babSopenharmony_ci    gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;  // ERROR, not in ES
34617a3babSopenharmony_ci
35617a3babSopenharmony_ci    gl_TessLevelOuter[3] = 3.2;
36617a3babSopenharmony_ci    gl_TessLevelInner[1] = 1.3;
37617a3babSopenharmony_ci
38617a3babSopenharmony_ci    if (a > 10)
39617a3babSopenharmony_ci        barrier();           // ERROR
40617a3babSopenharmony_ci    else
41617a3babSopenharmony_ci        barrier();           // ERROR
42617a3babSopenharmony_ci
43617a3babSopenharmony_ci    barrier();
44617a3babSopenharmony_ci
45617a3babSopenharmony_ci    do {
46617a3babSopenharmony_ci        barrier();           // ERROR
47617a3babSopenharmony_ci    } while (a > 10);
48617a3babSopenharmony_ci
49617a3babSopenharmony_ci    switch (a) {
50617a3babSopenharmony_ci    default:
51617a3babSopenharmony_ci        barrier();           // ERROR
52617a3babSopenharmony_ci        break;
53617a3babSopenharmony_ci    }
54617a3babSopenharmony_ci    a < 12 ? a : (barrier(), a); // ERROR
55617a3babSopenharmony_ci    {
56617a3babSopenharmony_ci        barrier();
57617a3babSopenharmony_ci    }
58617a3babSopenharmony_ci
59617a3babSopenharmony_ci    return;
60617a3babSopenharmony_ci
61617a3babSopenharmony_ci    barrier();               // ERROR
62617a3babSopenharmony_ci}
63617a3babSopenharmony_ci
64617a3babSopenharmony_cilayout(vertices = 4) in;    // ERROR, not on in
65617a3babSopenharmony_cilayout(vertices = 5) out;   // ERROR, changing #
66617a3babSopenharmony_ci
67617a3babSopenharmony_civoid foo()
68617a3babSopenharmony_ci{
69617a3babSopenharmony_ci    gl_out[4].gl_Position;  // ERROR, out of range
70617a3babSopenharmony_ci
71617a3babSopenharmony_ci    barrier();              // ERROR, not in main
72617a3babSopenharmony_ci}
73617a3babSopenharmony_ci
74617a3babSopenharmony_ciin vec2 ina;                // ERROR, not array
75617a3babSopenharmony_ciin vec2 inb[];
76617a3babSopenharmony_ciin vec2 inc[18];            // ERROR, wrong size
77617a3babSopenharmony_ciin vec2 ind[gl_MaxPatchVertices];
78617a3babSopenharmony_cipatch out float implA[];    // ERROR, not sized
79617a3babSopenharmony_ci
80617a3babSopenharmony_ci#extension GL_ARB_separate_shader_objects : enable
81617a3babSopenharmony_ci
82617a3babSopenharmony_cilayout(location = 3) in vec4 ivla[];
83617a3babSopenharmony_cilayout(location = 4) in vec4 ivlb[];
84617a3babSopenharmony_cilayout(location = 4) in vec4 ivlc[];  // ERROR, overlapping
85617a3babSopenharmony_ci
86617a3babSopenharmony_cilayout(location = 3) out vec4 ovla[];
87617a3babSopenharmony_cilayout(location = 4) out vec4 ovlb[];
88617a3babSopenharmony_cilayout(location = 4) out vec4 ovlc[];  // ERROR, overlapping
89617a3babSopenharmony_ci
90617a3babSopenharmony_cipatch out pinbn {
91617a3babSopenharmony_ci    int a;
92617a3babSopenharmony_ci} pinbi;
93617a3babSopenharmony_ci
94617a3babSopenharmony_cicentroid out vec3 myColor2[];
95617a3babSopenharmony_cicentroid in vec3 centr[];
96617a3babSopenharmony_cisample out vec4 perSampleColor[];
97617a3babSopenharmony_ci
98617a3babSopenharmony_cilayout(vertices = 4) out float badlay[];   // ERROR, not on a variable
99617a3babSopenharmony_ciout float misSized[5];              // ERROR, size doesn't match
100617a3babSopenharmony_ciout float okaySize[4];
101617a3babSopenharmony_ci
102617a3babSopenharmony_civoid pointSize2()
103617a3babSopenharmony_ci{
104617a3babSopenharmony_ci    float ps = gl_in[1].gl_PointSize;  // ERROR, need point_size extension
105617a3babSopenharmony_ci    gl_out[gl_InvocationID].gl_PointSize = ps;   // ERROR, need point_size extension
106617a3babSopenharmony_ci}
107617a3babSopenharmony_ci
108617a3babSopenharmony_ciprecise vec3 pv3;
109617a3babSopenharmony_ci
110617a3babSopenharmony_civoid goodfoop()
111617a3babSopenharmony_ci{
112617a3babSopenharmony_ci    precise float d;
113617a3babSopenharmony_ci
114617a3babSopenharmony_ci    pv3 *= pv3;
115617a3babSopenharmony_ci    pv3 = fma(pv3, pv3, pv3);
116617a3babSopenharmony_ci    d = fma(d, d, d);
117617a3babSopenharmony_ci}
118617a3babSopenharmony_ci
119617a3babSopenharmony_civoid bb()
120617a3babSopenharmony_ci{
121617a3babSopenharmony_ci    gl_BoundingBoxEXT[0] = vec4(0.0); // ERROR without GL_EXT_primitive_bounding_box 
122617a3babSopenharmony_ci    gl_BoundingBoxOES[0] = vec4(0.0); // ERROR without GL_OES_primitive_bounding_box 
123617a3babSopenharmony_ci    gl_BoundingBox[0] = vec4(1.0);
124617a3babSopenharmony_ci    gl_BoundingBox[1] = vec4(1.0);
125617a3babSopenharmony_ci    gl_BoundingBox[2] = vec4(2.0);  // ERROR, overflow
126617a3babSopenharmony_ci}
127617a3babSopenharmony_ci
128617a3babSopenharmony_ci#extension GL_EXT_primitive_bounding_box : enable
129617a3babSopenharmony_ci#extension GL_OES_primitive_bounding_box : enable
130617a3babSopenharmony_ci
131617a3babSopenharmony_civoid bbext()
132617a3babSopenharmony_ci{
133617a3babSopenharmony_ci    gl_BoundingBoxEXT[1] = vec4(0.0);
134617a3babSopenharmony_ci    gl_BoundingBoxOES[1] = vec4(0.0);
135617a3babSopenharmony_ci}
136617a3babSopenharmony_ci
137617a3babSopenharmony_ciout patch badpatchBName {  // ERROR, array size required
138617a3babSopenharmony_ci    float f;
139617a3babSopenharmony_ci} badpatchIName[];
140617a3babSopenharmony_ci
141617a3babSopenharmony_ciout patch patchBName {
142617a3babSopenharmony_ci    float f;
143617a3babSopenharmony_ci} patchIName[4];
144617a3babSopenharmony_ci
145617a3babSopenharmony_civoid outputtingOutparam(out int a)
146617a3babSopenharmony_ci{
147617a3babSopenharmony_ci    a = 2;
148617a3babSopenharmony_ci}
149617a3babSopenharmony_ci
150617a3babSopenharmony_civoid outputting()
151617a3babSopenharmony_ci{
152617a3babSopenharmony_ci    outa[gl_InvocationID] = 2;
153617a3babSopenharmony_ci    outa[1] = 2;                         // ERROR, not gl_InvocationID
154617a3babSopenharmony_ci    gl_out[0].gl_Position = vec4(1.0);   // ERROR, not gl_InvocationID
155617a3babSopenharmony_ci    outa[1];
156617a3babSopenharmony_ci    gl_out[0];
157617a3babSopenharmony_ci    outputtingOutparam(outa[0]);         // ERROR, not gl_InvocationID
158617a3babSopenharmony_ci    outputtingOutparam(outa[gl_InvocationID]);
159617a3babSopenharmony_ci    patchIName[1].f = 3.14;
160617a3babSopenharmony_ci    outa[(gl_InvocationID)] = 2;
161617a3babSopenharmony_ci}
162