GL_EXT_mesh_shader/SPV_EXT_mesh_shader implementation
[platform/upstream/glslang.git] / Test / spv.ext.meshShaderUserDefined.mesh
1 #version 450
2
3 #define MAX_VER  81
4 #define MAX_PRIM 32
5
6 #define BARRIER() \
7     memoryBarrierShared(); \
8     barrier();
9
10 #extension GL_EXT_mesh_shader : enable
11
12 layout(local_size_x = 32) in;
13
14 layout(max_vertices=MAX_VER) out;
15 layout(max_primitives=MAX_PRIM) out;
16 layout(triangles) out;
17
18 // test use of user defined interface out blocks:
19
20 // per-primitive block
21 perprimitiveEXT layout(location=0) out myblock {
22     float f;
23     float fArr[4];
24     vec3 pos;
25     vec4 posArr[4];
26     mat4 m;
27     mat3 mArr[2];
28 } blk[];
29
30 // per-vertex block
31 layout(location=20) out myblock2 {
32     float f;
33     vec4 pos;
34     mat4 m;
35 } blk2[];
36
37 void main()
38 {
39     uint iid = gl_LocalInvocationID.x;
40     uint gid = gl_WorkGroupID.x;
41
42     blk[iid].f               = 11.0;
43     blk[iid+1].fArr[gid]     = blk[iid].f;
44     blk[iid/2].pos.yzx       = vec3(14.0, 15.0, 13.0);
45     blk[iid*2].posArr[1].yzw = blk[iid/2].pos;
46     blk[iid/4].m[2].wzyx     = vec4(13.0, 14.0, 15.0, 16.0);
47     blk[iid].mArr[0][1][1]   = blk[iid/4].m[2].w;
48     blk[iid*4].mArr[1][gid]  = vec3(17.0, 18.0, 19.0);
49
50     BARRIER();
51
52     blk2[iid].f           = blk2[iid-1].f + 20.0;
53     blk2[iid].pos         = vec4(21.0, 22.0, 23.0, 24.0);
54     blk2[iid+1].m[gid]    = blk2[iid].pos;
55     blk2[iid+1].m[gid][2] = 29.0;
56     blk2[iid+2].m[3]      = blk2[iid+1].m[gid];
57
58     BARRIER();
59 }