#version 450 #extension GL_EXT_mesh_shader : enable struct PositionColor { vec4 position; vec4 color; }; layout(set=0, binding=0, std430) readonly buffer PositionColorBlock { PositionColor posColor[]; } vtxData; layout(push_constant, std430) uniform PushConstantBlock { uint vertexOffset; } pc; layout(local_size_x=1) in; layout(triangles) out; layout(max_vertices=3, max_primitives=1) out; layout(location = 0) out vec4 outColor[]; void main() { SetMeshOutputsEXT(3u, 1u); const uint firstVertex = uint(gl_WorkGroupID.x) + pc.vertexOffset; for (uint i = 0u; i < 3u; ++i) { const uint srcIdx = firstVertex + i; gl_MeshVerticesEXT[i].gl_Position = vtxData.posColor[srcIdx].position; outColor[i] = vtxData.posColor[srcIdx].color; } gl_PrimitiveTriangleIndicesEXT[0] = uvec3(0, 1, 2); gl_MeshPrimitivesEXT[0].gl_ViewportIndex = int(round(vtxData.posColor[firstVertex].position.z * 3.0)); }