#version 320 es

#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()
{
    int iid = int(gl_LocalInvocationID.x);
    int gid = int(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();
}
