#version 420 core

layout(triangles) in;

in gl_PerVertex {
    float gl_PointSize;
} gl_in[];

out gl_PerVertex {
    float gl_PointSize;
};

layout(line_strip) out;
layout(max_vertices = 127) out;
layout(invocations = 4) in;

uniform sampler2D s2D;
in vec2 coord[];

int i;

void main()
{
    float p = gl_in[1].gl_PointSize;
    gl_PointSize = p;
    gl_ViewportIndex = 7;

    EmitStreamVertex(1);
    EndStreamPrimitive(0);
    EmitVertex();
    EndPrimitive();
    int id = gl_InvocationID;

    const ivec2 offsets[5] =
    {
        ivec2(0,1),
        ivec2(1,-2),
        ivec2(0,3),
        ivec2(-3,0),
        ivec2(2,1)
    };
    vec4 v = textureGatherOffset(s2D, coord[0], offsets[i].xy);
}
