Merge pull request #2976 from jeremy-lunarg/hayes-fix-2975
[platform/upstream/glslang.git] / Test / 120.vert
1 #version 120
2
3 in vec4 i;                // ERROR
4 out vec4 o;               // ERROR
5
6 attribute vec2 attv2;
7 attribute vec4 attv4;
8 uniform sampler2D s2D;
9 invariant varying vec2 centTexCoord;
10 invariant gl_Position;
11 centroid gl_Position;     // ERROR
12 centroid centroid foo;    // ERROR
13 invariant gl_Position, gl_PointSize;
14
15 void main()
16 {
17     centTexCoord = attv2; 
18     gl_Position = attv4;
19
20     gl_ClipVertex = attv4;
21     gl_ClipDistance[1] = 0.2;  // ERROR
22
23     vec3[12] a;
24     vec4[a.length()] b;
25     gl_Position = b[b.length()-1];
26
27     float f[];
28     int a1 = f.length();  // ERROR
29     float f[7];
30     int aa = f.length();
31     int a2 = f.length;    // ERROR
32     int a3 = f.length(a); // ERROR
33     int a4 = f.flizbit;   // ERROR
34     int a4 = f.flizbit(); // ERROR
35     float md[2][4];       // ERROR
36     float[2] md2[4];      // ERROR
37     float[2][4] md3;      // ERROR
38     float md5, md6[2][3]; // ERROR
39     float[2] md4, md7[4]; // ERROR
40     float md9[2][3] = float[2][3](1, 2, 3, 4, 5, 6);  // ERROR
41     float md10, md11[2][3] = float[2][3](1, 2, 3, 4, 5, 6);  // ERROR
42
43     gl_PointSize = 3.8;
44 }
45
46 uniform float initted = 3.4;   // okay
47
48 const float concall = sin(0.3);
49
50 int[2][3] foo(                 // ERROR
51               float[2][3] a,   // ERROR
52               float[2] b[3],   // ERROR
53               float c[2][3]);  // ERROR
54
55 int overloadA(in float f);
56 int overloadA(out float f);        // ERROR, different qualifiers
57 float overloadA(float);            // ERROR, different return value for same signature
58 float overloadA(out float f, int);
59 float overloadA(int i);
60
61 void overloadB(float, const in float) { }
62
63 vec2 overloadC(int, int);
64 vec2 overloadC(const in int, float);
65 vec2 overloadC(float, int);
66 vec2 overloadC(vec2, vec2);
67
68 vec3 overloadD(int, float);
69 vec3 overloadD(float, in int);
70
71 vec3 overloadE(float[2]);
72 vec3 overloadE(mat2 m);
73 vec3 overloadE(vec2 v);
74
75 vec3 overloadF(int);
76 vec3 overloadF(float);
77
78 void foo()
79 {
80     float f;
81     int i;
82
83     overloadB(f, f);
84     overloadB(f, 2);
85     overloadB(1, i);
86
87     overloadC(1);    // ERROR
88     overloadC(1, i);
89     overloadC(vec2(1), vec2(2));
90     overloadC(f, 3.0);           // ERROR, no way
91     overloadC(ivec2(1), vec2(2));
92
93     overloadD(i, f);
94     overloadD(f, i);
95     overloadD(i, i);   // ERROR, ambiguous
96
97     int overloadB;     // hiding
98     overloadB(1, i);   // ERROR
99
100     sin(1);
101     texture2D(s2D, ivec2(0));
102     clamp(attv4, 0, 1);
103     clamp(ivec4(attv4), 0, 1);
104
105     int a[2];
106     overloadC(a, 3); // ERROR
107     overloadE(a);    // ERROR
108     overloadE(3.3);  // ERROR
109     overloadE(vec2(3.3));
110     overloadE(mat2(0.5));
111     overloadE(ivec4(1)); // ERROR
112     overloadE(ivec2(1));
113
114     float b[2];
115     overloadE(b);
116     
117     overloadF(1, 1); // ERROR
118     overloadF(1);
119 }
120
121 varying vec4 gl_TexCoord[35]; // ERROR, size too big
122
123 // tests for output conversions
124 void outFun(in float, out ivec2, in int, out float);
125 int outFunRet(in float, out int, const in int, out ivec4);
126 ivec2 outFunRet(in float, out ivec4, in int, out ivec4);
127
128 void foo2()
129 {
130     vec2 v2;
131     vec4 v4;
132     float f;
133     int i;
134
135     outFun(i, v2, i, f);
136     outFunRet(i, f, i, v4);
137     float ret = outFunRet(i, f, i, v4);
138     vec2 ret2 = outFunRet(i, v4, i, v4);
139     bool b = any(lessThan(v4, attv4));  // tests aggregate arg to unary built-in 
140 }
141
142 void noise()\r
143 {\r
144     float f1 = noise1(1.0);\r
145     vec2 f2 = noise2(vec2(1.0));\r
146     vec3 f3 = noise3(vec3(1.0));\r
147     vec4 f4 = noise4(vec4(1.0));\r
148 }
149
150 // version 130 features
151
152 uniform int c;
153
154 attribute ivec2 x;
155 attribute vec2 v2a;
156 attribute float c1D;
157 attribute vec2  c2D;
158 attribute vec3  c3D;
159
160 uniform vec4 v4;
161
162 void foo213()
163 {
164     float f = 3;
165     switch (c) {         // ERRORs...
166     case 1:              
167         f = sin(f);
168         break;
169     case 2:
170         f = f * f;
171     default:
172         f = 3.0;
173     }
174
175     int i;          
176     i << 3 | 0x8A >> 1 & 0xFF;      // ERRORs...
177
178     vec3 modfOut, modfIn;
179     vec3 v11 = modf(modfIn, modfOut); // ERRORS...
180     float t = trunc(f);
181     vec2 v12 = round(v2a);
182     vec2 v13 = roundEven(v2a);
183     bvec2 b10 = isnan(v2a);
184     bvec4 b11 = isinf(v4);
185
186     sinh(c1D) +                      // ERRORS...
187     cosh(c1D) * tanh(c2D);
188     asinh(c4D) + acosh(c4D);
189     atanh(c3D);
190
191     int id = gl_VertexID;            // ERROR
192     gl_ClipDistance[1] = 0.3;        // ERROR
193 }
194
195 int gl_ModelViewMatrix[] = 0;
196
197 // token pasting (ERRORS...)
198
199 #define mac abc##def
200 int mac;
201
202 #define macr(A,B) A ## B
203 int macr(qrs,tuv);
204
205 layout(std140) uniform BlockName    // ERROR
206 {
207     int test;
208 };
209
210 #extension GL_ARB_uniform_buffer_object : enable
211
212 layout(std140) uniform BlockName
213 {
214     int test;
215 };