1e5c31af7Sopenharmony_ci#version 450 2e5c31af7Sopenharmony_ci#extension GL_EXT_mesh_shader : enable 3e5c31af7Sopenharmony_ci 4e5c31af7Sopenharmony_cistruct PositionColor { 5e5c31af7Sopenharmony_ci vec4 position; 6e5c31af7Sopenharmony_ci vec4 color; 7e5c31af7Sopenharmony_ci}; 8e5c31af7Sopenharmony_ci 9e5c31af7Sopenharmony_cilayout(set=0, binding=0, std430) readonly buffer PositionColorBlock { 10e5c31af7Sopenharmony_ci PositionColor posColor[]; 11e5c31af7Sopenharmony_ci} vtxData; 12e5c31af7Sopenharmony_ci 13e5c31af7Sopenharmony_cilayout(push_constant, std430) uniform PushConstantBlock { 14e5c31af7Sopenharmony_ci uint vertexOffset; 15e5c31af7Sopenharmony_ci} pc; 16e5c31af7Sopenharmony_ci 17e5c31af7Sopenharmony_cilayout(local_size_x=1) in; 18e5c31af7Sopenharmony_cilayout(triangles) out; 19e5c31af7Sopenharmony_cilayout(max_vertices=3, max_primitives=1) out; 20e5c31af7Sopenharmony_ci 21e5c31af7Sopenharmony_cilayout(location = 0) out vec4 outColor[]; 22e5c31af7Sopenharmony_ci 23e5c31af7Sopenharmony_civoid main() { 24e5c31af7Sopenharmony_ci SetMeshOutputsEXT(3u, 1u); 25e5c31af7Sopenharmony_ci const uint firstVertex = uint(gl_WorkGroupID.x) + pc.vertexOffset; 26e5c31af7Sopenharmony_ci for (uint i = 0u; i < 3u; ++i) 27e5c31af7Sopenharmony_ci { 28e5c31af7Sopenharmony_ci const uint srcIdx = firstVertex + i; 29e5c31af7Sopenharmony_ci gl_MeshVerticesEXT[i].gl_Position = vtxData.posColor[srcIdx].position; 30e5c31af7Sopenharmony_ci outColor[i] = vtxData.posColor[srcIdx].color; 31e5c31af7Sopenharmony_ci } 32e5c31af7Sopenharmony_ci gl_PrimitiveTriangleIndicesEXT[0] = uvec3(0, 1, 2); 33e5c31af7Sopenharmony_ci} 34