yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

Abir DeolReject reads of mesh shader outputs under GL_EXT_mesh_shader4b626a04

main
1.2 KiB36 linesraw
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}