yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
4b626a04
main
1#version 460 2#extension GL_EXT_mesh_shader : require 3 4layout(local_size_x = 1) in; 5layout(triangles, max_vertices = 3, max_primitives = 1) out; 6 7struct Vertex { vec3 worldPos; }; 8layout(location = 0) out Vertex outVert[]; 9layout(location = 1) perprimitiveEXT out vec4 outPrim[]; 10 11void writeOut(out vec3 v) { v = vec3(1.0); } 12void readWrite(inout vec3 v) { v += vec3(1.0); } 13 14void main() 15{ 16 SetMeshOutputsEXT(3, 1); 17 uint i = gl_LocalInvocationIndex; 18 19 // Writes: no errors. 20 outVert[i].worldPos = vec3(0.0); 21 outVert[i].worldPos.x = 1.0; 22 outVert[i].worldPos[i] = 1.0; 23 writeOut(outVert[i].worldPos); 24 gl_MeshVerticesEXT[i].gl_Position.xy = vec2(1.0); 25 gl_MeshPrimitivesEXT[0].gl_CullPrimitiveEXT = false; 26 gl_PrimitiveTriangleIndicesEXT[0] = uvec3(0, 1, 2); 27 28 // Reads: one error each. 29 gl_MeshVerticesEXT[i].gl_Position = vec4(outVert[i].worldPos, 1.0); 30 outPrim[0] += vec4(1.0); 31 outVert[i].worldPos.x++; 32 readWrite(outVert[i].worldPos); 33 outPrim[0].x = sin(gl_MeshVerticesEXT[i].gl_Position.x); 34 outVert[gl_PrimitiveTriangleIndicesEXT[0].x].worldPos = vec3(0.0); 35 bool culled = gl_MeshPrimitivesEXT[0].gl_CullPrimitiveEXT; 36}