File: spv.meshShaderUserDefined.mesh

package info (click to toggle)
glslang 16.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 51,712 kB
  • sloc: cpp: 92,305; yacc: 4,320; sh: 603; python: 305; ansic: 94; javascript: 74; makefile: 17
file content (59 lines) | stat: -rw-r--r-- 1,321 bytes parent folder | download | duplicates (17)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#version 450

#define MAX_VER  81
#define MAX_PRIM 32

#define BARRIER() \
    memoryBarrierShared(); \
    barrier();

#extension GL_NV_mesh_shader : enable

layout(local_size_x = 32) in;

layout(max_vertices=MAX_VER) out;
layout(max_primitives=MAX_PRIM) out;
layout(triangles) out;

// test use of user defined interface out blocks:

// per-primitive block
perprimitiveNV layout(location=0) out myblock {
    float f;
    float fArr[4];
    vec3 pos;
    vec4 posArr[4];
    mat4 m;
    mat3 mArr[2];
} blk[];

// per-vertex block
layout(location=20) out myblock2 {
    float f;
    vec4 pos;
    mat4 m;
} blk2[];

void main()
{
    uint iid = gl_LocalInvocationID.x;
    uint gid = gl_WorkGroupID.x;

    blk[iid].f               = 11.0;
    blk[iid+1].fArr[gid]     = blk[iid].f;
    blk[iid/2].pos.yzx       = vec3(14.0, 15.0, 13.0);
    blk[iid*2].posArr[1].yzw = blk[iid/2].pos;
    blk[iid/4].m[2].wzyx     = vec4(13.0, 14.0, 15.0, 16.0);
    blk[iid].mArr[0][1][1]   = blk[iid/4].m[2].w;
    blk[iid*4].mArr[1][gid]  = vec3(17.0, 18.0, 19.0);

    BARRIER();

    blk2[iid].f           = blk2[iid-1].f + 20.0;
    blk2[iid].pos         = vec4(21.0, 22.0, 23.0, 24.0);
    blk2[iid+1].m[gid]    = blk2[iid].pos;
    blk2[iid+1].m[gid][2] = 29.0;
    blk2[iid+2].m[3]      = blk2[iid+1].m[gid];

    BARRIER();
}