blob: ea35b80e4276d8c3de7b180a700f08c2c5b4d6d1 [file] [log] [blame]
John Kessenich564842b2013-01-10 18:20:47 +00001#version 120
2
John Kessenich1c809952013-01-31 22:55:53 +00003float lowp;
4float mediump;
5float highp;
John Kessenich564842b2013-01-10 18:20:47 +00006
John Kessenich1c809952013-01-31 22:55:53 +00007float precision;
John Kessenich564842b2013-01-10 18:20:47 +00008
9in vec4 i;
10out vec4 o;
11
John Kessenichca8899c2013-03-01 21:53:13 +000012uniform sampler2D s2D;
13centroid varying vec2 centTexCoord;
14
John Kessenich71fca672013-02-12 08:02:20 +000015uniform mat4x2 m;
16
John Kessenich4b671032013-02-28 20:49:41 +000017struct s {
18 float f;
19};
20
John Kessenich564842b2013-01-10 18:20:47 +000021void main()
22{
John Kessenich71fca672013-02-12 08:02:20 +000023 mat2x3 m23 = mat2x3(m);
John Kessenich4b671032013-02-28 20:49:41 +000024
25 int a;
26 bool b;
27 s sv = s(a);
28 float[2] ia = float[2](3, i.y);
29 float f1 = 1;
30 float f = a;
31 f = a;
32 ivec3 iv3;
33 vec3 v3 = iv3;
34 f = f + a;
35 f = a - f;
36 f += a;
37 f = a - f;
38 v3 *= iv3;
John Kessenich69aa9c12013-11-12 03:31:24 +000039 v3 = iv3 / 2.0f;
John Kessenich4b671032013-02-28 20:49:41 +000040 v3 = 3.0 * iv3;
41 v3 = 2 * v3;
42 v3 = v3 - 2;
43 if (f < a ||
44 a <= f ||
45 f > a ||
46 f >= a ||
47 a == f ||
48 f != a);
49 f = b ? a : f;
50 f = b ? f : a;
51 f = b ? a : a;
52 s news = sv;
53
54 i.xy + i.xyz; // ERROR
55 m * i.xyz; // ERROR
56 m + i; // ERROR
57 int aoeu = 1.0; // ERROR
58 f = b; // ERROR
59 f = a + b; // ERROR
60 f = b * a; // ERROR
61 b = a; // ERROR
62 b = b + f; // ERROR
63 f |= b; // ERROR
John Kessenichca8899c2013-03-01 21:53:13 +000064
65 gl_FragColor = texture2D(s2D, centTexCoord);
John Kessenichc2ff7702013-04-25 16:44:03 +000066
67 float flat;
68 float smooth;
69 float noperspective;
70 float uvec2;
71 float uvec3;
72 float uvec4;
73 //packed; // ERROR, reserved word
John Kessenich8d00fd02013-05-28 07:29:58 +000074
75 {
76 mat4 m;
77 vec4 v;
78 bool b;
79 gl_FragColor += b ? v : m; // ERROR, types don't match around ":"
80 }
John Kessenichef84d102013-06-25 21:53:59 +000081
82 gl_FragColor.xr; // ERROR, swizzlers not from same field space
John Kessenichd46b31f2013-08-27 03:59:04 +000083 gl_FragColor.xyxyx.xy; // ERROR, cannot make a vec5, even temporarily
John Kessenichef84d102013-06-25 21:53:59 +000084 centTexCoord.z; // ERROR, swizzler out of range
85 (a,b) = true; // ERROR, not an l-value
John Kessenich564842b2013-01-10 18:20:47 +000086}
John Kessenichc2ff7702013-04-25 16:44:03 +000087
88float imageBuffer;
89float uimage2DRect;
John Kessenichef84d102013-06-25 21:53:59 +000090
91int main() {} // ERROR
92void main(int a) {} // ERROR
93
94const int a; // ERROR
95
96int foo(in float a);
97int foo(out float a) // ERROR
98{
99 return 3.2; // ERROR
100 foo(a); // ERROR
101}
John Kessenich252b6192013-08-08 16:22:54 +0000102
103bool gen(vec3 v)
104{
John Kessenich69aa9c12013-11-12 03:31:24 +0000105 if (abs(v[0]) < 1e-4F && abs(v[1]) < 1e-4)
John Kessenich252b6192013-08-08 16:22:54 +0000106 return true;
John Kessenichd46b31f2013-08-27 03:59:04 +0000107}
108
109void v1()
110{
111}
112
113void v2()
114{
115 return v1(); // ERROR, no expression allowed, even though void
116}
John Kessenich5f753e02013-09-08 21:04:46 +0000117
118void atest()
119{
120 vec4 v = gl_TexCoord[1];
121 v += gl_TexCoord[3];
122}
123
124varying vec4 gl_TexCoord[6]; // okay, assigning a size
125varying vec4 gl_TexCoord[5]; // ERROR, changing size
John Kessenich37d080c2013-11-22 17:52:58 +0000126
127mat2x2 m22;
128mat2x3 m23;
129mat2x4 m24;
130
131mat3x2 m32;
132mat3x3 m33;
133mat3x4 m34;
134
135mat4x2 m42;
136mat4x3 m43;
137mat4x4 m44;
138
139void foo123()
140{
141 mat2 r2 = matrixCompMult(m22, m22);
142 mat3 r3 = matrixCompMult(m33, m33);
143 mat4 r4 = matrixCompMult(m44, m44);
144
145 mat2x3 r23 = matrixCompMult(m23, m23);
146 mat2x4 r24 = matrixCompMult(m24, m24);
147 mat3x2 r32 = matrixCompMult(m32, m32);
148 mat3x4 r34 = matrixCompMult(m34, m34);
149 mat4x2 r42 = matrixCompMult(m42, m42);
150 mat4x3 r43 = matrixCompMult(m43, m43);
151
152 mat3x2 rfoo1 = matrixCompMult(m23, m32); // ERROR
153 mat3x4 rfoo2 = matrixCompMult(m34, m44); // ERROR
154}
John Kessenich9dedb132014-06-03 00:20:41 +0000155
156void matConst()
157{
158 vec2 v2;
159 vec3 v3;
160 mat4 m4b1 = mat4(v2, v3); // ERROR, not enough
161 mat4 m4b2 = mat4(v2, v3, v3, v3, v3, v2, v2); // ERROR, too much
162 mat4 m4g = mat4(v2, v3, v3, v3, v3, v3);
163 mat4 m4 = mat4(v2, v3, v3, v3, v3, v2);
164 mat3 m3 = mat3(m4);
165 mat3 m3b1 = mat3(m4, v2); // ERROR, extra arg
166 mat3 m3b2 = mat3(m4, m4); // ERROR, extra arg
167 mat3x2 m32 = mat3x2(m4);
168 mat4 m4c = mat4(m32);
169 mat3 m3s = mat3(v2.x);
170
171 mat3 m3a1[2] = mat3[2](m3s, m3s);
172 mat3 m3a2[2] = mat3[2](m3s, m3s, m3s); // ERROR, too many args
173}
John Kessenich35919302014-06-03 19:28:48 +0000174
175uniform sampler3D s3D;
176uniform sampler1D s1D;
177uniform sampler2DShadow s2DS;
178
179void foo2323()
180{
181 vec4 v;
182 vec2 v2;
183 float f;
184 v = texture2DLod(s2D, v2, f); // ERROR
185 v = texture3DProjLod(s3D, v, f); // ERROR
186 v = texture1DProjLod(s1D, v, f); // ERROR
187 v = shadow2DProjLod(s2DS, v, f); // ERROR
John Kessenichb9fc1452014-07-29 18:11:09 +0000188
189 v = texture1DGradARB(s1D, f, f, f); // ERROR
190 v = texture2DProjGradARB(s2D, v, v2, v2); // ERROR
191 v = shadow2DProjGradARB(s2DS, v, v2, v2); // ERROR
John Kessenich35919302014-06-03 19:28:48 +0000192}
193
194#extension GL_ARB_shader_texture_lod : require
195
196void foo2324()
197{
198 vec4 v;
199 vec2 v2;
200 float f;
201 v = texture2DLod(s2D, v2, f);
202 v = texture3DProjLod(s3D, v, f);
203 v = texture1DProjLod(s1D, v, f);
204 v = shadow2DProjLod(s2DS, v, f);
John Kessenichb9fc1452014-07-29 18:11:09 +0000205
206 v = texture1DGradARB(s1D, f, f, f);
207 v = texture2DProjGradARB(s2D, v, v2, v2);
208 v = shadow2DProjGradARB(s2DS, v, v2, v2);
209 v = shadow2DRectProjGradARB(s2DS, v, v2, v2); // ERROR
John Kessenich35919302014-06-03 19:28:48 +0000210}
John Kessenich019a62b2014-07-29 17:18:24 +0000211
John Kessenichb9fc1452014-07-29 18:11:09 +0000212uniform sampler2DRect s2DRbad; // ERROR
John Kessenich019a62b2014-07-29 17:18:24 +0000213
214void foo121111()
215{
216 vec2 v2;
217 vec4 v = texture2DRect(s2DRbad, v2);
218}
219
220#extension GL_ARB_texture_rectangle : enable
221
222uniform sampler2DRect s2DR;
223uniform sampler2DRectShadow s2DRS;
224
225void foo12111()
226{
227 vec2 v2;
228 vec3 v3;
229 vec4 v4;
230 vec4 v;
231 v = texture2DRect(s2DR, v2);
232 v = texture2DRectProj(s2DR, v3);
233 v = texture2DRectProj(s2DR, v4);
234 v = shadow2DRect(s2DRS, v3);
235 v = shadow2DRectProj(s2DRS, v4);
John Kessenichb9fc1452014-07-29 18:11:09 +0000236
237 v = shadow2DRectProjGradARB(s2DRS, v, v2, v2);
John Kessenich019a62b2014-07-29 17:18:24 +0000238}
John Kessenich82e0e582017-01-26 15:48:27 -0700239
240void voidTernary()
241{
242 bool b;
243 b ? foo121111() : foo12111();
244 b ? foo121111() : 4; // ERROR
245 b ? 3 : foo12111(); // ERROR
John Kessenichb67b4a72017-02-28 12:40:40 -0700246}
247
248float halfFloat1 = 1.0h; // syntax ERROR