blob: ab28140e584295eaef95c2bf66ce38e244c06d78 [file] [log] [blame]
John Kessenich01fc0642013-06-24 21:22:03 +00001#version 420 core
John Kessenich66cdf362013-12-04 20:08:16 +00002#version 420 core
John Kessenich01fc0642013-06-24 21:22:03 +00003varying vec2 v2; // ERROR, varying reserved
4in vec4 bad[10];
5highp in vec4 badorder;
6out invariant vec4 badorder2;
7in centroid vec4 badorder4; // ERROR, no centroid input to vertex stage
8out flat vec4 badorder3;
9void bar(in const float a);
10void bar2(highp in float b);
11smooth flat out vec4 rep; // ERROR, replicating interpolation qualification
12centroid sample out vec4 rep2; // ERROR, replicating auxiliary qualification
13in uniform vec4 rep3; // ERROR, replicating storage qualification
John Kessenichd46b31f2013-08-27 03:59:04 +000014
John Kesseniche46b0872013-10-17 20:55:30 +000015int anonconst;
16const int aconst = 5;
17const int a = aconst;
18const int b = anonconst; // ERROR at global scope
19
20const int foo() // ERROR, no const functions
21{
22 const int a = aconst;
23 const int b = anonconst;
24 const int c = a; // still compile-time const
25 const int d = b; // not a compile-time const
26 float x[c]; // okay
27 float y[d]; // ERROR
28
29 return b;
30}
31
John Kessenichd46b31f2013-08-27 03:59:04 +000032void main()
33{
34 int i;
35 if (i == 3)
36 int j = i;
37 else
38 int k = j; // ERROR, j is undeclared
39 int m = k; // ERROR, k is undeclared
40 int n = j; // ERROR, j is undeclared
41
42 while (true)
43 int jj;
44 int kk = jj; // ERROR, jj is undeclared
45}
46
John Kessenich8f13e132013-10-18 03:56:23 +000047const float cx = 4.20;
48const float dx = 4.20;
49
John Kessenichd46b31f2013-08-27 03:59:04 +000050void bar(in highp volatile vec4 v)
51{
John Kessenich8f13e132013-10-18 03:56:23 +000052 int s;
53 s.x; // okay
54 s.y; // ERROR
55 if (bad[0].x == cx.x)
56 ;
57 if (cx.x == dx.x)
58 badorder3 = bad[0];
59
60 float f;
61 vec3 smeared = f.xxx;
62 f.xxxxx; // ERROR
63 f.xxy; // ERROR
64}
John Kessenichab308032013-10-18 21:37:55 +000065
66layout(binding = 3) uniform; // ERROR
67layout(binding = 3) uniform boundblock { int aoeu; } boundInst;
68layout(binding = 7) uniform anonblock { int aoeu; } ;
69layout(location = 1) in; // ERROR
70layout(binding = 1) in inblock { int aoeua; }; // ERROR
71layout(binding = 100000) uniform anonblock2 { int aooeu; } ;
72layout(binding = 4) uniform sampler2D sampb1;
73layout(binding = 5) uniform sampler2D sampb2[10];
John Kessenich623833f2013-12-11 18:57:40 +000074layout(binding = 80) uniform sampler2D sampb3; // ERROR, binding too big
John Kessenich1fbaa352013-11-27 02:41:52 +000075layout(binding = 31) uniform sampler2D sampb4;
John Kessenich623833f2013-12-11 18:57:40 +000076layout(binding = 79) uniform sampler2D sampb5[2]; // ERROR, binding too big
John Kessenich143c8bf2013-12-03 21:04:03 +000077
78int fgfg(float f, mediump int i);
79int fgfg(float f, highp int i);
John Kessenichc7194812013-12-09 00:37:46 +000080
81out gl_PerVertex {
82 float gl_ClipDistance[4];
83};
John Kessenich116c30b2013-12-12 01:25:37 +000084
85patch in vec4 patchIn; // ERROR
John Kessenich0b9e1122014-05-10 22:24:50 +000086patch out vec4 patchOut; // ERROR
87
88void bar23444()
89{
90 mat4x3 m43; \
91 float a1 = m43[3].y;
92 vec3 v3;
93 int a2 = m43.length();
94 a2 += m43[1].length();
95 a2 += v3.length();
96 const float b = 2 * a1;
97 int a = gl_MinProgramTexelOffset + gl_MaxProgramTexelOffset;
98}
John Kessenichbae44b72014-05-11 01:07:31 +000099
100const int comma0 = (2, 3); // ERROR
101int comma1[(2, 3)]; // ERROR
John Kessenichddea6782014-08-10 18:19:36 +0000102
103layout(r32i) uniform iimage2D iimg2D;
104layout(rgba32i) uniform iimage2D iimg2Drgba;
105layout(rgba32f) uniform image2D img2Drgba;
106layout(r32ui) uniform uimage2D uimg2D;
107uniform image2DMS img2DMS; // ERROR image variables not declared writeonly must have format layout qualifier
108uniform writeonly image2DMS img2DMSWO;
109void qux()
110{
111 int i = aoeu;
112 imageAtomicCompSwap(iimg2D, ivec2(i,i), i, i);
113 imageAtomicAdd(uimg2D, ivec2(i,i), uint(i));
114 imageAtomicMin(iimg2Drgba, ivec2(i,i), i); // ERROR iimg2Drgba does not have r32i layout
115 imageAtomicMax(img2Drgba, ivec2(i,i), i); // ERROR img2Drgba is not integer image
116 ivec4 pos = imageLoad(iimg2D, ivec2(i,i));
117 vec4 col = imageLoad(img2DMS, ivec2(i,i), i);
118 imageStore(img2DMSWO, ivec2(i,i), i, vec4(0));
119 imageLoad(img2DMSWO, ivec2(i,i), i); // ERROR, drops writeonly
120}
121
122volatile float vol; // ERROR, not an image
123readonly int vol2; // ERROR, not an image
124
125void passr(coherent readonly iimage2D image)
126{
127}
128
129layout(r32i) coherent readonly uniform iimage2D qualim1;
John Kessenich6df29042014-12-11 00:17:42 +0000130layout(r32i) coherent volatile readonly uniform iimage2D qualim2;
John Kessenichddea6782014-08-10 18:19:36 +0000131
132void passrc()
133{
134 passr(qualim1);
John Kessenich6df29042014-12-11 00:17:42 +0000135 passr(qualim2); // ERROR, drops volatile
John Kessenichddea6782014-08-10 18:19:36 +0000136 passr(iimg2D);
137}
138
139layout(rg8i) uniform uimage2D i1bad; // ERROR, type mismatch
140layout(rgba32i) uniform image2D i2bad; // ERROR, type mismatch
141layout(rgba32f) uniform uimage2D i3bad; // ERROR, type mismatch
142layout(r8_snorm) uniform iimage2D i4bad; // ERROR, type mismatch
143layout(rgba32ui) uniform iimage2D i5bad; // ERROR, type mismatch
144layout(r8ui) uniform iimage2D i6bad; // ERROR, type mismatch
John Kessenich265f5fb2014-08-13 01:04:28 +0000145
146uniform offcheck {
147 layout(offset = 16) int foo; // ERROR
148} offcheckI;
John Kessenich2398b3a2015-09-15 19:38:56 -0600149
150uniform sampler1D samp1D;
151uniform sampler1DShadow samp1Ds;
152
153void qlod()
154{
155 int levels;
156
157 levels = textureQueryLevels(samp1D); // ERROR, not until 430
158 levels = textureQueryLevels(samp1Ds); // ERROR, not until 430
John Kessenich414f7352016-07-27 14:43:01 -0600159}
160
161layout(binding=0) writeonly uniform image1D badArray[];