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