blob: 83b9bb112aa2429d98b87c509344dbc76993d407 [file] [log] [blame]
John Kessenich1f2a36b2013-02-20 04:42:42 +00001#version 300 es
2
3uniform mat4x3 m43;
4uniform mat3x3 m33;
5uniform mat4x4 m44;
6
7in vec3 v3;
John Kessenich01fc0642013-06-24 21:22:03 +00008varying vec2 v2; // ERROR, varying reserved
9in vec4 bad[10]; // ERROR, no arrayed inputs
10highp in vec4 badorder; // ERROR, incorrect qualifier order
11out invariant vec4 badorder2; // ERROR, incorrect qualifier order
12in centroid vec4 badorder4; // ERROR, incorrect qualifier order
13out flat vec4 badorder3; // ERROR, incorrect qualifier order
14void bar(in const float a); // ERROR, incorrect qualifier order
15void bar2(highp in float b); // ERROR, incorrect qualifier order
16smooth flat out vec4 rep; // ERROR, replicating interpolation qualification
17centroid sample out vec4 rep2; // ERROR, replicating auxiliary qualification
18in uniform vec4 rep3; // ERROR, replicating storage qualification
John Kessenich3ed2db52013-04-07 22:43:16 +000019
John Kessenichb29ba332013-06-21 19:43:44 +000020struct S {
21 vec3 c;
22 float f;
23};
24
25out S s;
26
John Kessenich1f2a36b2013-02-20 04:42:42 +000027void main()
28{
29 int id = gl_VertexID + gl_InstanceID;
30
31 int c0 = gl_MaxVertexAttribs;
32 int c1 = gl_MaxVertexUniformVectors;
33 int c2 = gl_MaxVertexOutputVectors;
34 int c3 = gl_MaxFragmentInputVectors;
35 int c4 = gl_MaxVertexTextureImageUnits;
36 int c5 = gl_MaxCombinedTextureImageUnits;
37 int c6 = gl_MaxTextureImageUnits;
38 int c7 = gl_MaxFragmentUniformVectors;
39 int c8 = gl_MaxDrawBuffers;
40 int c9 = gl_MinProgramTexelOffset;
41 int c10 = gl_MaxProgramTexelOffset;
42
43 mat3x4 tm = transpose(m43);
44 highp float dm = determinant(m44);
45 mat3x3 im = inverse(m33);
46
47 mat3x2 op = outerProduct(v2, v3);
John Kessenichb51f62c2013-04-11 16:31:09 +000048
John Kessenich3ce57452013-06-07 18:54:19 +000049 gl_Position = m44[2];
50 gl_PointSize = v2.y;
51
John Kessenichb29ba332013-06-21 19:43:44 +000052 s.c = v3;
53 s.f = dm;
54
John Kessenichb51f62c2013-04-11 16:31:09 +000055#ifdef GL_ES
56#error GL_ES is set
57#else
58#error GL_ES is not set
59#endif
John Kessenich1f2a36b2013-02-20 04:42:42 +000060}
John Kessenichfb7044a2013-06-13 20:16:43 +000061
62float badsize[]; // ERROR
63float[] badsize2; // ERROR
64uniform ub {
65 int a[]; // ERROR
66} ubInst[]; // ERROR
67void foo(int a[]); // ERROR
John Kessenich69aa9c12013-11-12 03:31:24 +000068float okayA[] = float[](3.0f, 4.0F); // Okay
John Kessenich01c22af2013-11-08 07:13:18 +000069
70out vec3 newV;
71void newVFun()
72{
73 newV = v3;
74}
75
76invariant newV; // ERROR, variable already used
77in vec4 invIn;
78invariant invIn; // ERROR, in v300
79out S s2;
80invariant s2;
81invariant out S s3;
82flat out int;
John Kessenicha4351c52013-11-11 04:21:31 +000083
84uniform ub2 {
85 float f;
86} a;
87
88uniform ub2 { // ERROR redeclaration of block name (same instance name)
89 float g;
90} a;
91
92uniform ub2 { // ERROR redeclaration of block name (different instance name)
93 float f;
94} c;
95
96uniform ub2 { // ERROR redeclaration of block name (no instance name)
97 float f123;
98};
99
100uniform ub3 {
101 bool b23;
102};
103
104uniform ub3 { // ERROR redeclaration of block name (no instance name in first or declared)
105 bool b234;
106};
John Kessenich13221d22013-12-02 18:09:08 +0000107
108precision lowp sampler3D;
109precision lowp sampler2DShadow;
110precision lowp sampler2DArrayShadow;
111
112uniform sampler2D s2D;
113uniform sampler3D s3D;
114uniform sampler2DShadow s2DS;
115uniform sampler2DArrayShadow s2DAS;
116in vec2 c2D;
117
118void foo23()
119{
120 ivec2 x1 = textureSize(s2D, 2);
121 textureSize(s2D); // ERROR, no lod
122 ivec3 x3 = textureSize(s2DAS, -1);
123 textureSize(s2DAS); // ERROR, no lod
124 vec4 x4 = texture(s2D, c2D);
125 texture(s2D, c2D, 0.2); // ERROR, bias
126 vec4 x5 = textureProjOffset(s3D, vec4(0.2), ivec3(1));
127 textureProjOffset(s3D, vec4(0.2), ivec3(1), .03); // ERROR, bias
128 float x6 = textureProjGradOffset(s2DS, invIn, vec2(4.2), vec2(5.3), ivec2(1));
129}
John Kessenich143c8bf2013-12-03 21:04:03 +0000130
131int fgfg(float f, mediump int i);
132int fgfg(float f, highp int i); // ERROR, precision qualifier difference
133
134int fgfgh(float f, const in mediump int i);
135int fgfgh(float f, in mediump int i); // ERROR, precision qualifier difference
John Kessenich34bd4fb2013-12-04 16:43:00 +0000136
137void foo2349()
138{
139 float[] x = float[] (1.0, 2.0, 3.0);
140 float[] y = x;
141 float[3] z = x;
142 float[3] w;
143 w = y;
144}
145
146int[] foo213234(); // ERROR
147int foo234234(float[]); // ERROR
148int foo234235(vec2[] v); // ERROR
149precision highp float[2]; // ERROR
John Kessenichb88c60b2013-12-04 19:43:05 +0000150
151int fffg(float f);
152int fffg(float f);
153
154int gggf(float f);
155int gggf(float f) { return 2; }
156int gggf(float f);
157
158int agggf(float f) { return 2; }
159int agggf(float f);
John Kessenichafda2412013-12-04 20:41:33 +0000160
161out struct Ssss { float f; } ssss;
John Kessenich56876dc2014-02-13 19:14:33 +0000162
163uniform Bblock {
164 int a;
165} Binst;
166int Bfoo;
167
168layout(std140) Binst; // ERROR
169layout(std140) Bblock; // ERROR
170layout(std140) Bfoo; // ERROR
John Kessenich4d570902014-08-12 22:07:22 +0000171
John Kessenich93930d62015-06-12 22:09:25 +0000172layout(std430) uniform B430 { int a; } B430i; // ERROR
173
John Kessenich4d570902014-08-12 22:07:22 +0000174struct SNA {
175 int a[]; // ERROR
176};
John Kessenich989df852015-11-28 12:52:29 -0700177
178void fooDeeparray()
179{
180 float[] x = float[] (1.0, 2.0, 3.0),
181 y = float[] (1.0, 2.0, 3.0, 4.0);
182 float xp[3], yp[4];
183 xp = x;
184 yp = y;
185 xp = y; // ERROR, wrong size
186 yp = x; // ERROR, wrong size
187}