#version 440 core

struct VertexInfo {
    float position[3];
    float normal[3];
};

struct TriangleInfo {
    VertexInfo v[3];
};

buffer VertexCollection {
    TriangleInfo t[5];
    uint padding[10];
};

buffer MultipleArrays {
    TriangleInfo tri[5];
    VertexInfo vert[5];
    float f[5];
} multiarray;

uniform UBO {
    VertexInfo verts[2];
    float flt[8];
    uvec4 unused;
    float uniform_multi[4][3][2];
} ubo;

uniform float uniform_multi[4][3][2];

struct OutputStruct {
    float val;
    vec3 a;
    vec2 b[4];
    mat2x2 c;
};

out OutputStruct outval;
out float outarr[3];

void main()
{
    float f;
    f += t[0].v[0].position[0];
    f += t[gl_InstanceID].v[gl_InstanceID].position[gl_InstanceID];
    f += t[gl_InstanceID].v[gl_InstanceID].normal[gl_InstanceID];
    f += multiarray.tri[gl_InstanceID].v[0].position[0];
    f += multiarray.vert[gl_InstanceID].position[0];
    f += multiarray.f[gl_InstanceID];
    f += ubo.verts[gl_InstanceID].position[0];
    f += ubo.flt[gl_InstanceID];
    f += ubo.uniform_multi[0][0][0];
    f += uniform_multi[gl_InstanceID][gl_InstanceID][gl_InstanceID];
    TriangleInfo tlocal[5] = t;
    outval.val = f;
    outarr[2] = f;
}
