1#version 450 core
2
3in float in1;
4in vec2 in2;
5in vec3 in3;
6in vec4 in4;
7
8void main()
9{
10    vec2 v2 = dFdxFine(in2);
11    vec3 v3 = dFdyCoarse(in3);
12    vec4 v4 = fwidth(in4);
13    v4 = dFdyFine(in4);
14    v3 = dFdyFine(in3);
15    float f = dFdx(in1) + dFdxFine(in1) + dFdxCoarse(in1);
16    v4 = fwidthCoarse(in4) + fwidthFine(in4);
17
18    float cull = gl_CullDistance[2];
19    float consts = gl_MaxCullDistances + gl_MaxCombinedClipAndCullDistances + gl_MaxSamples;
20
21    if (gl_HelperInvocation)
22        ++v4;
23
24    int sum = gl_MaxVertexImageUniforms +
25              gl_MaxFragmentImageUniforms +
26              gl_MaxComputeImageUniforms +
27              gl_MaxCombinedImageUniforms +
28              gl_MaxCombinedShaderOutputResources;
29
30    bool b1, b3, b;
31    uint uin;
32    bvec2 b2 = mix(bvec2(b1), bvec2(b3), bvec2(b));
33    uint um = mix(uin, uin, b);
34    ivec3 im3 = mix(ivec3(uin), ivec3(uin), bvec3(b));
35}
36
37uniform sampler2DMS s2dms;
38uniform usampler2DMSArray us2dmsa;
39layout(rgba32i) uniform iimage2DMS ii2dms;
40layout(rgba32f) uniform image2DMSArray i2dmsa;
41
42void foo()
43{
44    int s = textureSamples(s2dms);
45    s += textureSamples(us2dmsa);
46    s += imageSamples(ii2dms);
47    s += imageSamples(i2dmsa);
48    float f = imageAtomicExchange(i2dmsa, ivec3(in3), 2, 4.5);
49}
50
51#extension GL_ARB_sparse_texture2: enable
52
53uniform sampler2D               s2D;
54uniform isampler2DArray         is2DArray;
55uniform sampler2DRectShadow     s2DRectShadow;
56
57in flat ivec2 offsets[4];
58in vec2 c2;
59in vec3 c3;
60
61void testOffsets()
62{
63    vec4  texel  = vec4(0.0);
64    ivec4 itexel = ivec4(0);
65    const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));
66    sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel);
67    sparseTextureGatherOffsetsARB(is2DArray, c3, constOffsets, itexel, 2);
68    sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, constOffsets, texel);
69
70    sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel); // Error : Non constant offsets
71    sparseTextureGatherOffsetsARB(is2DArray, c3, offsets, itexel, 2); // Error : Non constant offsets
72    sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, offsets, texel); // Error : Non constant offsets
73
74}
75
76in float gl_CullDistance[6];
77
78float cull(int i)
79{
80    return (i >= 6) ? gl_CullDistance[5] : gl_CullDistance[i];
81}
82
83layout(location = 6) in bName1 {
84    float f;
85    layout(location = 7) float g;
86    mat4 m;
87} bInst1;
88layout(location = 12) in bName2 {
89    float f;
90    layout(location = 13) float g;  // ERROR, location on array
91} bInst2[3];
92
93layout(early_fragment_tests) in float f; // ERROR, must be standalone
94