#version 460

#define MAX_VER  81
#define MAX_PRIM 32

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

#extension GL_EXT_mesh_shader : enable

layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;

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

// test use of redeclared single-view builtins in mesh shaders:

out gl_MeshPerVertexEXT {
    vec4 gl_Position;
    float gl_PointSize;
    float gl_ClipDistance[4];
    float gl_CullDistance[4];
} gl_MeshVerticesEXT[MAX_VER];                   // explicitly sized to MAX_VER

perprimitiveEXT out gl_MeshPerPrimitiveEXT {
    int gl_PrimitiveID;
    int gl_Layer;
    int gl_ViewportIndex;
    bool gl_CullPrimitiveEXT;
    int  gl_PrimitiveShadingRateEXT;
} gl_MeshPrimitivesEXT[];                        // implicitly sized to MAX_PRIM

out uint gl_PrimitivePointIndicesEXT[MAX_PRIM];     // explicitly sized to MAX_PRIM

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

    SetMeshOutputsEXT(MAX_VER, MAX_PRIM);

    gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0);
    gl_MeshVerticesEXT[iid].gl_PointSize = 2.0;
    gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0;
    gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0;

    BARRIER();

    gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position;
    gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize;
    gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3];
    gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2];

    BARRIER();

    gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6;
    gl_MeshPrimitivesEXT[iid].gl_Layer = 7;
    gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8;
    gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false;

    BARRIER();

    gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID;
    gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer;
    gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex;
    gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT;

    BARRIER();

    // check bound limits
    gl_PrimitivePointIndicesEXT[0] = 1;
    gl_PrimitivePointIndicesEXT[MAX_PRIM - 1] = 2;
}
