#version 140
#extension GL_ARB_enhanced_layouts : require

in vec4 k;
out vec4 o;

in float gl_ClipDistance[5];

layout(row_major) uniform;

uniform sampler2D samp2Da[3];

layout(std140) uniform bn {
    layout(row_major) mat4 matra[4];
    layout(column_major) mat4 matca[4];
    layout(row_major) mat4 matr;
    layout(column_major) mat4 matc;
    layout(align=512, offset=1024) mat4 matrdef;
};

uniform sampler2DRect sampR;
uniform isamplerBuffer sampB;

float foo();

void main()
{
    o.y = gl_ClipDistance[2];
    o.z = gl_ClipDistance[int(k)];
    o.w = float(textureSize(sampR) + textureSize(sampB)) / 100.0;
    o.z = foo();
}

// Test extra-function initializers

float i1 = gl_FrontFacing ? -2.0 : 2.0;
float i2 = 102;

float foo()
{
    return i1 + i2;
}

// test arrayed block
layout(std140) uniform bi {
    vec3 v[2];
} bname[4];
