#version 130
#extension GL_ARB_texture_gather : enable

vec3 a;
float b;

in vec4 i;
out vec4 o;
out ivec3 io;
out uvec4 uo;

flat in float fflat;
smooth in float fsmooth;
noperspective in float fnop;

uniform samplerCube sampC;

in vec4 gl_Color;
flat in vec4 gl_Color;

#extension GL_ARB_texture_rectangle : enable

uniform sampler2D samp2D;
uniform sampler2DShadow samp2DS;
uniform sampler2DRect samp2DR;
uniform sampler2DArray samp2DA;

void bar3()
{
    o += textureGatherOffset(samp2D, vec2(0.3), ivec2(1));
    o += textureGatherOffset(samp2DA, vec3(0.3), ivec2(1));
}

#extension GL_ARB_gpu_shader5 : enable

void bar4()
{
    o += textureGatherOffset(samp2DR, vec2(0.3), ivec2(1));
    o += textureGatherOffset(samp2DS, vec2(0.3), 1.3, ivec2(1));
    o += textureGatherOffset(samp2D, vec2(0.3), ivec2(1), 2);
}

#extension GL_ARB_texture_cube_map_array : enable

uniform  samplerCubeArray Sca;
uniform isamplerCubeArray Isca;
uniform usamplerCubeArray Usca;
uniform samplerCubeArrayShadow Scas;

void bar5()
{
    io = textureSize(Sca, 3);
    o += texture(Sca, i);
    io += texture(Isca, i, 0.7).xyz;
    uo = texture(Usca, i);
    
    o += textureLod(Sca, i, 1.7);
    a = textureSize(Scas, 3);
    float f = texture(Scas, i, i.y);
    ivec4 c = textureGrad(Isca, i, vec3(0.1), vec3(0.2));
    o += vec4(a, f + c);
}

#extension GL_ARB_shading_language_420pack : enable

const int ai[3] = { 10, 23, 32 };
uniform layout(binding=0) sampler2D bounds;

void bar6()
{
    mat4x3 m43;
    float a1 = m43[3].y;
    //int a2 = m43.length();  // ERROR until shading_language_420pack is fully implemented
    const float b = 2 * a1;
    //a.x = gl_MinProgramTexelOffset + gl_MaxProgramTexelOffset;    // ERROR until shading_language_420pack is fully implemented
}


#extension GL_ARB_texture_rectangle : enable
#extension GL_ARB_shader_texture_lod : require

uniform sampler2D s2D;
uniform sampler2DRect s2DR;
uniform sampler2DRectShadow s2DRS;
uniform sampler1D s1D;
uniform sampler2DShadow s2DS;

uniform float f;
uniform vec2 v2;
uniform vec3 v3;
uniform vec4 v4;

void bar7()
{
    vec4 v;

    o += texture2DRect(s2DR, v2);
    o += texture2DRectProj(s2DR, v3);
    o += texture2DRectProj(s2DR, v4);
    o += shadow2DRect(s2DRS, v3);
    o += shadow2DRectProj(s2DRS, v4);

    o += texture1DGradARB(s1D, f, f, f);
    o += texture2DProjGradARB(s2D, v, v2, v2);
    o += shadow2DProjGradARB(s2DS, v, v2, v2);

    o += shadow2DRectProjGradARB(s2DRS, v, v2, v2);
}

void main()
{
    o = textureGather(sampC, vec3(0.2));
    o.y =  gl_ClipDistance[3];
    bar3();
    bar4();
    bar5();
    bar6();
    bar7();
}