#version 400 core

in vec2 c2D;
flat in int i;
out vec4 outp;
out ivec4 ioutp;
out uvec4 uoutp;
uniform sampler2D arrayedSampler[5];
uniform usampler2DRect samp2dr;
uniform isampler2DArray isamp2DA;
uniform sampler2DRectShadow u2drs;

#extension GL_ARB_separate_shader_objects : enable

layout(location = 6) in vec4 vl2;

void foo23()
{
    const ivec2[3] offsets = ivec2[3](ivec2(1,2), ivec2(3,4), ivec2(15,16));

    outp.x += textureProjGradOffset(u2drs, outp, vec2(0.0), vec2(0.0), offsets[1]);
}

void main()
{
    vec4 v;
    v = texture(arrayedSampler[i], c2D);
    outp.x = gl_ClipDistance[1];
    outp.yzw = v.yzw;

    ivec2 offsets[4];
    const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));
    uoutp = textureGatherOffsets(samp2dr, c2D, constOffsets, 2);
    outp += textureGather(arrayedSampler[0], c2D);
    ioutp = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 3);
    ioutp += textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2);
    ioutp += textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i));

    outp += gl_FragCoord + vl2;
    foo23();
}

