Merge pull request #2892 from greg-lunarg/mb
[platform/upstream/glslang.git] / Test / 300.vert
1 #version 300 es
2
3 uniform mat4x3 m43;
4 uniform mat3x3 m33;
5 uniform mat4x4 m44;
6
7 in vec3 v3;
8 varying vec2 v2;               // ERROR, varying reserved
9 in vec4 bad[10];               // ERROR, no arrayed inputs
10 highp in vec4 badorder;        // ERROR, incorrect qualifier order
11 out invariant vec4 badorder2;  // ERROR, incorrect qualifier order
12 in centroid vec4 badorder4;    // ERROR, incorrect qualifier order
13 out flat vec4 badorder3;       // ERROR, incorrect qualifier order
14 void bar(in const float a);    // ERROR, incorrect qualifier order
15 void bar2(highp in float b);   // ERROR, incorrect qualifier order
16 smooth flat out vec4 rep;      // ERROR, replicating interpolation qualification
17 centroid sample out vec4 rep2; // ERROR, replicating auxiliary qualification
18 in uniform vec4 rep3;          // ERROR, replicating storage qualification
19
20 struct S {
21     vec3 c;
22     float f;
23 };
24
25 out S s;
26
27 void 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);
48
49     gl_Position = m44[2];
50     gl_PointSize = v2.y;
51
52      s.c = v3;
53      s.f = dm;
54
55 #ifdef GL_ES
56 #error GL_ES is set
57 #else
58 #error GL_ES is not set
59 #endif
60 }
61
62 float badsize[];    // ERROR
63 float[] badsize2;   // ERROR
64 uniform ub {
65     int a[];        // ERROR
66 } ubInst[];         // ERROR
67 void foo(int a[]);  // ERROR
68 float okayA[] = float[](3.0f, 4.0F);  // Okay
69
70 out vec3 newV;
71 void newVFun()
72 {
73     newV = v3;
74 }
75
76 invariant newV;  // ERROR, variable already used
77 in vec4 invIn;
78 invariant invIn; // ERROR, in v300
79 out S s2;
80 invariant s2;
81 invariant out S s3;
82 flat out int;
83
84 uniform ub2 {
85     float f;
86 } a;
87
88 uniform ub2 {  // ERROR redeclaration of block name (same instance name)
89     float g;
90 } a;
91
92 uniform ub2 {  // ERROR redeclaration of block name (different instance name)
93     float f;
94 } c;
95
96 uniform ub2 {  // ERROR redeclaration of block name (no instance name)
97     float f123;
98 };
99
100 uniform ub3 {
101     bool b23;
102 };
103
104 uniform ub3 {  // ERROR redeclaration of block name (no instance name in first or declared)
105     bool b234;
106 };
107
108 precision lowp sampler3D;
109 precision lowp sampler2DShadow;
110 precision lowp sampler2DArrayShadow;
111
112 uniform sampler2D s2D;
113 uniform sampler3D s3D;
114 uniform sampler2DShadow s2DS;
115 uniform sampler2DArrayShadow s2DAS;
116 in vec2 c2D;
117
118 void 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 }
130
131 int fgfg(float f, mediump int i);
132 int fgfg(float f, highp int i);   // ERROR, precision qualifier difference
133
134 int fgfgh(float f, const in mediump int i);
135 int fgfgh(float f, in mediump int i);   // ERROR, precision qualifier difference
136
137 void 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
146 int[] foo213234();        // ERROR
147 int foo234234(float[]);   // ERROR
148 int foo234235(vec2[] v);  // ERROR
149 precision highp float[2]; // ERROR
150
151 int fffg(float f);
152 int fffg(float f);
153
154 int gggf(float f);
155 int gggf(float f) { return 2; }
156 int gggf(float f);
157
158 int agggf(float f) { return 2; }
159 int agggf(float f);
160
161 out struct Ssss { float f; } ssss;
162
163 uniform Bblock {
164    int a;
165 } Binst;
166 int Bfoo;
167
168 layout(std140) Binst;    // ERROR
169 layout(std140) Bblock;   // ERROR
170 layout(std140) Bfoo;     // ERROR
171
172 layout(std430) uniform B430 { int a; } B430i;     // ERROR
173
174 struct SNA {
175     int a[];             // ERROR
176 };
177
178 void 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 }\r
188
189 layout(num_views = 2) in; // ERROR, no extension
190
191 void mwErr()
192 {
193     gl_ViewID_OVR;   // ERROR, no extension
194 }
195
196 #extension GL_OVR_multiview : enable
197
198 layout(num_views = 2) uniform float mwUniform; // ERROR, must be global
199 layout(num_views = 2) in; // OK
200
201 void mwOk()
202 {
203     gl_ViewID_OVR;
204 }