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// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders:
19617a3babSopenharmony_cistruct taskBlock {
20617a3babSopenharmony_ci    float gid1[2];
21617a3babSopenharmony_ci    vec4 gid2;
22617a3babSopenharmony_ci};
23617a3babSopenharmony_citaskPayloadSharedEXT taskBlock mytask;
24617a3babSopenharmony_ci
25617a3babSopenharmony_cibuffer bufferBlock {
26617a3babSopenharmony_ci    float gid3[2];
27617a3babSopenharmony_ci    vec4 gid4;
28617a3babSopenharmony_ci} mybuf;
29617a3babSopenharmony_ci
30617a3babSopenharmony_cilayout(location=0) out outBlock {
31617a3babSopenharmony_ci    float gid5;
32617a3babSopenharmony_ci    vec4 gid6;
33617a3babSopenharmony_ci} myblk[];
34617a3babSopenharmony_ci
35617a3babSopenharmony_civoid main()
36617a3babSopenharmony_ci{
37617a3babSopenharmony_ci    uint iid = gl_LocalInvocationID.x;
38617a3babSopenharmony_ci
39617a3babSopenharmony_ci    myblk[iid].gid5 = mytask.gid1[1] + mybuf.gid3[1];
40617a3babSopenharmony_ci    myblk[iid].gid6 = mytask.gid2    + mybuf.gid4;
41617a3babSopenharmony_ci}
42