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(lines) out;
19e5c31af7Sopenharmony_cilayout(max_vertices=2, max_primitives=1) out;
20e5c31af7Sopenharmony_ci
21e5c31af7Sopenharmony_cilayout(location = 0) out vec4 outColor[];
22e5c31af7Sopenharmony_ci
23e5c31af7Sopenharmony_civoid main() {
24e5c31af7Sopenharmony_ci    SetMeshOutputsEXT(2u, 1u);
25e5c31af7Sopenharmony_ci    const uint firstVertex = uint(gl_WorkGroupID.x) + pc.vertexOffset;
26e5c31af7Sopenharmony_ci    for (uint i = 0u; i < 2u; ++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_PrimitiveLineIndicesEXT[0] = uvec2(0, 1);
33e5c31af7Sopenharmony_ci}
34