#version 450

#define MAX_VER  81
#define MAX_PRIM 32

#define BARRIER() \
    memoryBarrierShared(); \
    barrier();

#extension GL_NV_mesh_shader : enable

layout(local_size_x = 32) in;

layout(max_vertices=MAX_VER) out;
layout(max_primitives=MAX_PRIM) out;
layout(triangles) out;

// test use of user defined interface out blocks:

// per-primitive block
perprimitiveNV layout(location=0) out myblock {
    float f;
    float fArr[4];
    vec3 pos;
    vec4 posArr[4];
    mat4 m;
    mat3 mArr[2];
} blk[];

// per-vertex block
layout(location=20) out myblock2 {
    float f;
    vec4 pos;
    mat4 m;
} blk2[];

void main()
{
    uint iid = gl_LocalInvocationID.x;
    uint gid = gl_WorkGroupID.x;

    blk[iid].f               = 11.0;
    blk[iid+1].fArr[gid]     = blk[iid].f;
    blk[iid/2].pos.yzx       = vec3(14.0, 15.0, 13.0);
    blk[iid*2].posArr[1].yzw = blk[iid/2].pos;
    blk[iid/4].m[2].wzyx     = vec4(13.0, 14.0, 15.0, 16.0);
    blk[iid].mArr[0][1][1]   = blk[iid/4].m[2].w;
    blk[iid*4].mArr[1][gid]  = vec3(17.0, 18.0, 19.0);

    BARRIER();

    blk2[iid].f           = blk2[iid-1].f + 20.0;
    blk2[iid].pos         = vec4(21.0, 22.0, 23.0, 24.0);
    blk2[iid+1].m[gid]    = blk2[iid].pos;
    blk2[iid+1].m[gid][2] = 29.0;
    blk2[iid+2].m[3]      = blk2[iid+1].m[gid];

    BARRIER();
}
