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_NV_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 shared memory in mesh shaders:
19617a3babSopenharmony_ci
20617a3babSopenharmony_ciwriteonly uniform image2D uni_image;
21617a3babSopenharmony_ciuniform block0 {
22617a3babSopenharmony_ci    uint    uni_value;
23617a3babSopenharmony_ci};
24617a3babSopenharmony_ci
25617a3babSopenharmony_cishared vec4 mem[10];
26617a3babSopenharmony_ci
27617a3babSopenharmony_civoid main()
28617a3babSopenharmony_ci{
29617a3babSopenharmony_ci    uint iid = gl_LocalInvocationID.x;
30617a3babSopenharmony_ci    uint gid = gl_WorkGroupID.x;
31617a3babSopenharmony_ci
32617a3babSopenharmony_ci    for (uint i = 0; i < 10; ++i) {
33617a3babSopenharmony_ci        mem[i] = vec4(i+uni_value);
34617a3babSopenharmony_ci    }
35617a3babSopenharmony_ci    imageStore(uni_image, ivec2(iid), mem[gid]);
36617a3babSopenharmony_ci    imageStore(uni_image, ivec2(iid), mem[gid+1]);
37617a3babSopenharmony_ci
38617a3babSopenharmony_ci    BARRIER();
39617a3babSopenharmony_ci}
40