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