1// okay
2#version 100
3int a[3] = { 2, 3, 4, };  // ERROR (lots)
4#version 100
5int uint;
6
7attribute vec4 v[3];     // ERROR
8
9float f = 2;             // ERROR
10
11uniform block {          // ERROR
12    int x;
13};
14
15void foo(float);
16
17void main()
18{
19    foo(3);              // ERROR
20    int s = 1 << 4;      // ERROR
21    s = 16 >> 2;         // ERROR
22    if (a == a);         // ERROR
23    int b, c;
24    b = c & 4;           // ERROR
25    b = c % 4;           // ERROR
26    b = c | 4;           // ERROR
27    b >>= 2;             // ERROR
28    b <<= 2;             // ERROR
29    b %= 3;              // ERROR
30
31    struct S {
32        float f;
33        float a[10];
34    } s1, s2;
35
36    s1 = s2;             // ERROR
37    if (s1 == s2);       // ERROR
38    if (s1 != s2);       // ERROR
39
40    switch(b) {          // ERROR
41    }
42}
43
44invariant gl_FragColor;
45float fa[];              // ERROR
46float f13;
47invariant f13;           // ERROR
48struct S { int a; };
49invariant S;             // ERROR, not an input or output
50invariant float fi;      // ERROR
51varying vec4 av;
52invariant av;            // okay in v100
53
54void foo10()
55{
56    invariant f;         // ERROR
57    invariant float f2;  // ERROR
58    float f3;
59    invariant f3;        // ERROR
60}
61
62uniform vec2 uv2;
63invariant uv2;              // ERROR
64invariant uniform vec3 uv3; // ERROR
65
66sampler2D glob2D;           // ERROR
67void f11(sampler2D p2d)
68{
69    sampler2D v2D;          // ERROR
70}
71varying sampler2D vary2D;   // ERROR
72
73struct sp {
74    highp float f;
75    in float g;             // ERROR
76    uniform float h;        // ERROR
77    invariant float i;      // ERROR
78};
79
80uniform sampler3D s3D;      // ERROR
81
82#extension GL_OES_texture_3D : enable
83
84precision highp sampler3D;
85uniform sampler3D s3D2;
86
87void foo234()
88{
89    texture3D(s3D2, vec3(0.2), 0.2);
90    texture3DProj(s3D2, v[1], 0.4);
91    dFdx(v[0]);    // ERROR
92    dFdy(3.2);     // ERROR
93    fwidth(f13);   // ERROR
94}
95
96#extension GL_OES_standard_derivatives : enable
97
98void foo236()
99{
100    dFdx(v[0]);
101    dFdy(3.2);
102    fwidth(f13);
103    gl_FragDepth = f13;    // ERROR
104    gl_FragDepthEXT = f13; // ERROR
105}
106
107#extension GL_EXT_frag_depth : enable
108
109void foo239()
110{
111    gl_FragDepth = f13;    // ERROR
112    gl_FragDepthEXT = f13;
113}
114
115#extension GL_OES_EGL_image_external : enable
116
117uniform samplerExternalOES sExt;
118
119void foo245()
120{
121    texture2D(sExt, vec2(0.2));
122    texture2DProj(sExt, vec3(f13));
123    texture2DProj(sExt, v[2]);
124}
125
126precision mediump samplerExternalOES;
127uniform samplerExternalOES mediumExt;
128uniform highp samplerExternalOES highExt;
129
130void foo246()
131{
132    texture2D(mediumExt, vec2(0.2));
133    texture2DProj(highExt, v[2]);
134    texture3D(sExt, vec3(f13));   // ERROR
135    texture2DProjLod(sExt, vec3(f13), f13);  // ERROR
136    int a;
137    ~a;    // ERROR
138    a | a; // ERROR
139    a & a; // ERROR
140}
141
142#extension GL_OES_EGL_image_external : disable
143uniform sampler2D s2Dg;
144
145int foo203940(int a, float b, float a)  // ERROR, a redefined
146{
147    texture2DProjGradEXT(s2Dg, vec3(f13), uv2, uv2);  // ERROR, extension not enabled
148    return a;
149}
150
151float f123 = 4.0f;   // ERROR
152float f124 = 5e10F;  // ERROR
153
154#extension GL_EXT_shader_texture_lod : enable
155
156uniform samplerCube sCube;
157
158void foo323433()
159{
160    texture2DLodEXT(s2Dg, uv2, f13);
161    texture2DProjGradEXT(s2Dg, vec3(f13), uv2, uv2);
162    texture2DGradEXT(s2Dg, uv2, uv2, uv2);
163    textureCubeGradEXT(sCube, vec3(f13), vec3(f13), vec3(f13));
164}
165
166int fgfg(float f, mediump int i);
167int fgfg(float f, highp int i) { return 2; }   // ERROR, precision qualifier difference
168
169int fffg(float f);
170int fffg(float f);  // ERROR, can't have multiple prototypes
171
172int gggf(float f);
173int gggf(float f) { return 2; }
174
175int agggf(float f) { return 2; }
176int agggf(float f);
177int agggf(float f);  // ERROR, second prototype
178
179varying struct SSS { float f; } s; // ERROR
180
181int vf(void);
182int vf2();
183int vf3(void v);      // ERROR
184int vf4(int, void);   // ERROR
185int vf5(int, void v); // ERROR
186
187void badswizzle()
188{
189    vec3 a[5];
190    a.y;        // ERROR, no array swizzle
191    a.zy;       // ERROR, no array swizzle
192    a.nothing;  // ERROR
193    a.length(); // ERROR, not this version
194    a.method(); // ERROR
195}
196
197float fooinit();
198
199float fooinittest()
200{
201    return fooinit();
202}
203
204// Test extension GL_EXT_blend_func_extended
205void blendFuncFail() // Error since extension GL_EXT_blend_func_extended is disabled
206{
207    gl_SecondaryFragColorEXT = vec4(1.0);
208    gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1);
209}
210#extension GL_EXT_blend_func_extended : enable
211void blendFunc()
212{
213    gl_SecondaryFragColorEXT = vec4(1.0);
214    gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1);
215}
216
217// Test extra-function initializers
218const float fi1 = 3.0;
219const float fi2 = 4.0;
220const float fi3 = 5.0;
221
222float fooinit()
223{
224    return fi1 + fi2 + fi3;  // should make a constant of 12.0
225}
226
227int init1 = gl_FrontFacing ? 1 : 2; // ERROR, non-const initializer
228
229#ifdef GL_EXT_shader_non_constant_global_initializers
230#extension GL_EXT_shader_non_constant_global_initializers : enable
231#endif
232
233int init2 = gl_FrontFacing ? 1 : 2;
234
235#define A__B // error
236int a__b;    // error
237
238#pragma STDGL invariant(all)
239
240#line 3000
241#error line of this error should be 3000
242
243uniform samplerExternalOES badExt;  // syntax ERROR
244