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