1617a3babSopenharmony_ci#version 450
2617a3babSopenharmony_ci
3617a3babSopenharmony_ci#define MAX_VER  81
4617a3babSopenharmony_ci#define MAX_PRIM 32
5617a3babSopenharmony_ci
6617a3babSopenharmony_ci#define BARRIER() \
7617a3babSopenharmony_ci    memoryBarrierShared(); \
8617a3babSopenharmony_ci    barrier();
9617a3babSopenharmony_ci
10617a3babSopenharmony_ci#extension GL_EXT_mesh_shader : enable
11617a3babSopenharmony_ci
12617a3babSopenharmony_cilayout(local_size_x = 32) in;
13617a3babSopenharmony_ci
14617a3babSopenharmony_cilayout(max_vertices=MAX_VER) out;
15617a3babSopenharmony_cilayout(max_primitives=MAX_PRIM) out;
16617a3babSopenharmony_cilayout(triangles) out;
17617a3babSopenharmony_ci
18617a3babSopenharmony_ci// test use of user defined interface out blocks:
19617a3babSopenharmony_ci
20617a3babSopenharmony_ci// per-primitive block
21617a3babSopenharmony_ciperprimitiveEXT layout(location=0) out myblock {
22617a3babSopenharmony_ci    float f;
23617a3babSopenharmony_ci    float fArr[4];
24617a3babSopenharmony_ci    vec3 pos;
25617a3babSopenharmony_ci    vec4 posArr[4];
26617a3babSopenharmony_ci    mat4 m;
27617a3babSopenharmony_ci    mat3 mArr[2];
28617a3babSopenharmony_ci} blk[];
29617a3babSopenharmony_ci
30617a3babSopenharmony_ci// per-vertex block
31617a3babSopenharmony_cilayout(location=20) out myblock2 {
32617a3babSopenharmony_ci    float f;
33617a3babSopenharmony_ci    vec4 pos;
34617a3babSopenharmony_ci    mat4 m;
35617a3babSopenharmony_ci} blk2[];
36617a3babSopenharmony_ci
37617a3babSopenharmony_civoid main()
38617a3babSopenharmony_ci{
39617a3babSopenharmony_ci    uint iid = gl_LocalInvocationID.x;
40617a3babSopenharmony_ci    uint gid = gl_WorkGroupID.x;
41617a3babSopenharmony_ci
42617a3babSopenharmony_ci    blk[iid].f               = 11.0;
43617a3babSopenharmony_ci    blk[iid+1].fArr[gid]     = blk[iid].f;
44617a3babSopenharmony_ci    blk[iid/2].pos.yzx       = vec3(14.0, 15.0, 13.0);
45617a3babSopenharmony_ci    blk[iid*2].posArr[1].yzw = blk[iid/2].pos;
46617a3babSopenharmony_ci    blk[iid/4].m[2].wzyx     = vec4(13.0, 14.0, 15.0, 16.0);
47617a3babSopenharmony_ci    blk[iid].mArr[0][1][1]   = blk[iid/4].m[2].w;
48617a3babSopenharmony_ci    blk[iid*4].mArr[1][gid]  = vec3(17.0, 18.0, 19.0);
49617a3babSopenharmony_ci
50617a3babSopenharmony_ci    BARRIER();
51617a3babSopenharmony_ci
52617a3babSopenharmony_ci    blk2[iid].f           = blk2[iid-1].f + 20.0;
53617a3babSopenharmony_ci    blk2[iid].pos         = vec4(21.0, 22.0, 23.0, 24.0);
54617a3babSopenharmony_ci    blk2[iid+1].m[gid]    = blk2[iid].pos;
55617a3babSopenharmony_ci    blk2[iid+1].m[gid][2] = 29.0;
56617a3babSopenharmony_ci    blk2[iid+2].m[3]      = blk2[iid+1].m[gid];
57617a3babSopenharmony_ci
58617a3babSopenharmony_ci    BARRIER();
59617a3babSopenharmony_ci}
60