• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#version 420 core
2#version 420 core
3varying 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
14
15int 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
32void 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
47const float cx = 4.20;
48const float dx = 4.20;
49
50void bar(in highp volatile vec4 v)
51{
52    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}
65
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];
74layout(binding = 80) uniform sampler2D sampb3; // ERROR, binding too big
75layout(binding = 31) uniform sampler2D sampb4;
76layout(binding = 79) uniform sampler2D sampb5[2]; // ERROR, binding too big
77
78int fgfg(float f, mediump int i);
79int fgfg(float f, highp int i);
80
81out gl_PerVertex {
82    float gl_ClipDistance[4];
83};
84
85patch in vec4 patchIn;              // ERROR
86patch 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}
99
100const int comma0 = (2, 3);  // ERROR
101int comma1[(2, 3)];   // ERROR
102
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;
130layout(r32i) coherent volatile readonly uniform iimage2D qualim2;
131
132void passrc()
133{
134    passr(qualim1);   // ERROR, changing formats
135    passr(qualim2);   // ERROR, drops volatile, ERROR, changing formats
136    passr(iimg2D);    // ERROR, changing formats
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
145
146uniform offcheck {
147    layout(offset = 16) int foo;   // ERROR
148} offcheckI;
149
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
159}
160
161layout(binding=0) writeonly uniform image1D badArray[];
162layout(binding = 74) uniform sampler2D u_sampler0[6];
163