• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#version 300 es
2void nodef1(float f); // ERROR, no default precision
3uniform sampler2D s2D;
4uniform lowp sampler3D s3D;
5uniform samplerCube sCube;
6uniform lowp samplerCubeShadow sCubeShadow;
7uniform lowp sampler2DShadow s2DShadow;
8uniform lowp sampler2DArray s2DArray;
9uniform lowp sampler2DArrayShadow s2DArrayShadow;
10
11uniform lowp isampler2D is2D;
12uniform lowp isampler3D is3D;
13uniform lowp isamplerCube isCube;
14uniform lowp isampler2DArray is2DArray;
15
16uniform lowp usampler2D us2D;
17uniform lowp usampler3D us3D;
18uniform lowp usamplerCube usCube;
19uniform lowp usampler2DArray us2DArray;
20precision lowp float;
21in float c1D;
22in vec2  c2D;
23in vec3  c3D;
24smooth vec4  c4D;
25
26flat in int   ic1D;
27flat in ivec2 ic2D;
28flat in ivec3 ic3D;
29flat in ivec4 ic4D;
30noperspective in vec4 badv; // ERROR
31in sampler2D bads;          // ERROR
32precision lowp uint;        // ERROR
33
34struct s {
35    int i;
36    sampler2D s;
37};
38
39in s badout;               // ERROR, can't contain a sampler
40                           // ERROR, can't have int in struct without flat
41struct S2 {
42    vec3 c;
43    float f;
44};
45
46in S2 s2;
47
48out vec3 sc;
49out float sf;
50
51uniform sampler2D arrayedSampler[5];
52
53void main()
54{
55    float f;
56    vec4 v;
57    v = texture(s2D, c2D);
58    v = textureProj(s3D, c4D);
59    v = textureLod(s2DArray, c3D, 1.2);
60    f = textureOffset(s2DShadow, c3D, ic2D, c1D);  // ERROR, offset argument not constant
61    v = texelFetch(s3D, ic3D, ic1D);
62    v = texelFetchOffset(arrayedSampler[2], ic2D, 4, ic2D);   // ERROR, offset argument not constant
63    f = textureLodOffset(s2DShadow, c3D, c1D, ic2D);
64    v = textureProjLodOffset(s2D, c3D, c1D, ic2D);
65    v = textureGrad(sCube, c3D, c3D, c3D);
66    f = textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ic2D);
67    v = textureProjGrad(s3D, c4D, c3D, c3D);
68    v = textureProjGradOffset(s2D, c3D, c2D, c2D, ic2D);
69    v = texture(arrayedSampler[ic1D], c2D);                 // ERROR
70
71    ivec4 iv;
72    iv = texture(is2D, c2D);
73    iv = textureProjOffset(is2D, c4D, ic2D);
74    iv = textureProjLod(is2D, c3D, c1D);
75    iv = textureProjGrad(is2D, c3D, c2D, c2D);
76    iv = texture(is3D, c3D, 4.2);
77    iv = textureLod(isCube, c3D, c1D);
78    iv = texelFetch(is2DArray, ic3D, ic1D);
79
80    iv.xy = textureSize(sCubeShadow, 2);
81
82    float precise;
83    double boo;       // ERROR
84    dvec2 boo2;       // ERROR
85    dvec3 boo3;       // ERROR
86    dvec4 boo4;       // ERROR
87
88    f += gl_FragCoord.y;
89    gl_FragDepth = f;
90
91    sc = s2.c;
92    sf = s2.f;
93
94    sinh(c1D) +
95    cosh(c1D) * tanh(c2D);
96    asinh(c4D) + acosh(c4D);
97    atanh(c3D);
98}
99
100uniform multi {
101    int[2] a[3];      // ERROR
102    int[2][3] b;      // ERROR
103    int c[2][3];      // ERROR
104} multiInst[2][3];    // ERROR
105
106out vec4 colors[4];
107
108void foo()
109{
110    colors[2] = c4D;
111    colors[ic1D] = c4D;  // ERROR
112}
113
114uniform s st1;
115uniform s st2;
116
117void foo13(s inSt2)
118{
119    if (st1 == st2);  // ERROR
120    if (st1 != st2);  // ERROR
121    st1.s == st2.s;   // ERROR
122    inSt2 = st1;      // ERROR
123    inSt2 == st1;     // ERROR
124}
125
126void foo23()
127{
128    textureOffset(s2DShadow, c3D, ivec2(-8, 7), c1D);
129    textureOffset(s2DShadow, c3D, ivec2(-9, 8), c1D);
130}
131
132void foo324(void)
133{
134    float p = pow(3.2, 4.6);
135    p += sin(0.4);
136    p += distance(vec2(10.0, 11.0), vec2(13.0, 15.0)); // 5
137    p += dot(vec3(2,3,5), vec3(-2,-1,4));              // 13
138    vec3 c3 = cross(vec3(3,-3,1), vec3(4,9,2));        // (-15, -2, 39)
139    c3 += faceforward(vec3(1,2,3), vec3(2,3,5), vec3(-2,-1,4));     // (-1,-2,-3)
140    c3 += faceforward(vec3(1,2,3), vec3(-2,-3,-5), vec3(-2,-1,4));  // (1,2,3)
141    vec2 c2 = reflect(vec2(1,3), vec2(0,1));           // (1,-3)
142    c2 += refract(vec2(1,3), vec2(0,1), 1.0);          // (1,-3)
143    c2 += refract(vec2(1,3), vec2(0,1), 3.0);
144    c2 += refract(vec2(1,0.1), vec2(0,1), 5.0);        // (0,0)
145    mat3x2 m32 = outerProduct(vec2(2,3), vec3(5,7,11));// rows: (10, 14, 22), (15, 21, 33)
146}
147
148uniform mediump;       // ERROR
149
150layout(early_fragment_tests) in;  // ERROR
151
152// Test extension GL_EXT_shader_integer_mix
153#extension GL_EXT_shader_integer_mix : enable
154bool b1, b2, b;
155int x,y;
156uint z,w;
157
158void testmix()
159{
160    int ival  = mix(x, y, b);
161    ivec2 iv2 = mix(ivec2(x), ivec2(y), bvec2(b));
162    ivec3 iv3 = mix(ivec3(x), ivec3(y), bvec3(b));
163    ivec4 iv4 = mix(ivec4(x), ivec4(x), bvec4(b));
164    uint  uiv = mix(z, w, b);
165    uvec2 uv2 = mix(uvec2(z), uvec2(z), bvec2(b));
166    uvec3 uv3 = mix(uvec3(z), uvec3(z), bvec3(b));
167    uvec4 uv4 = mix(uvec4(z), uvec4(z), bvec4(b));
168    bool  bv  = mix(b1, b2, b);
169    bvec2 bv2 = mix(bvec2(b1), bvec2(b2), bvec2(b));
170    bvec3 bv3 = mix(bvec3(b1), bvec3(b2), bvec3(b));
171    bvec4 bv4 = mix(bvec4(b1), bvec4(b2), bvec4(b));
172}
173
174#extension GL_EXT_shader_integer_mix : disable
175void testmixFail()
176{
177    int ival  = mix(x, y, b); // Error since extenson GL_EXT_shader_integer_mix is disabled
178}
179
180// Test layout qualifier "index" with extension GL_EXT_blend_func_extended
181layout(location = 0, index = 1) out vec4 outVarFail; // Error Index supported with extension GL_EXT_blend_func_extended enabled
182#extension GL_EXT_blend_func_extended : enable
183layout(location = 0, index = 2) out vec4 outVarPass;
184
185#ifndef GL_FRAGMENT_PRECISION_HIGH
186#error missing GL_FRAGMENT_PRECISION_HIGH
187#endif
188
189invariant in;                // ERROR
190invariant in vec4;           // ERROR
191invariant in vec4 fooinv;    // ERROR
192
193float imageBuffer;    // ERROR, reserved
194float uimage2DRect;   // ERROR, reserved
195