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