Skip to content

Commit

Permalink
Merge pull request #1507 from sparmarNV/fix-SPV_NV_mesh_shader
Browse files Browse the repository at this point in the history
Add ES 320 support and additional error checks for SPV_NV_mesh_shader
  • Loading branch information
johnkslang authored Sep 28, 2018
2 parents 91ac429 + 80b9872 commit 4508a81
Show file tree
Hide file tree
Showing 10 changed files with 1,258 additions and 939 deletions.
205 changes: 205 additions & 0 deletions Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
spv.meshShaderUserDefined.mesh
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 140

Capability MeshShadingNV
Extension "SPV_NV_mesh_shader"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint MeshNV 4 "main" 12 19 37 103
ExecutionMode 4 LocalSize 32 1 1
ExecutionMode 4 OutputVertices 81
ExecutionMode 4 OutputPrimitivesNV 32
ExecutionMode 4 OutputTrianglesNV
Source ESSL 320
SourceExtension "GL_NV_mesh_shader"
Name 4 "main"
Name 8 "iid"
Name 12 "gl_LocalInvocationID"
Name 18 "gid"
Name 19 "gl_WorkGroupID"
Name 33 "myblock"
MemberName 33(myblock) 0 "f"
MemberName 33(myblock) 1 "fArr"
MemberName 33(myblock) 2 "pos"
MemberName 33(myblock) 3 "posArr"
MemberName 33(myblock) 4 "m"
MemberName 33(myblock) 5 "mArr"
Name 37 "blk"
Name 99 "myblock2"
MemberName 99(myblock2) 0 "f"
MemberName 99(myblock2) 1 "pos"
MemberName 99(myblock2) 2 "m"
Name 103 "blk2"
Decorate 12(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId
MemberDecorate 33(myblock) 0 PerPrimitiveNV
MemberDecorate 33(myblock) 1 PerPrimitiveNV
MemberDecorate 33(myblock) 2 PerPrimitiveNV
MemberDecorate 33(myblock) 3 PerPrimitiveNV
MemberDecorate 33(myblock) 4 PerPrimitiveNV
MemberDecorate 33(myblock) 5 PerPrimitiveNV
Decorate 33(myblock) Block
Decorate 37(blk) Location 0
Decorate 99(myblock2) Block
Decorate 103(blk2) Location 20
Decorate 139 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypePointer Function 6(int)
9: TypeInt 32 0
10: TypeVector 9(int) 3
11: TypePointer Input 10(ivec3)
12(gl_LocalInvocationID): 11(ptr) Variable Input
13: 9(int) Constant 0
14: TypePointer Input 9(int)
19(gl_WorkGroupID): 11(ptr) Variable Input
23: TypeFloat 32
24: 9(int) Constant 4
25: TypeArray 23(float) 24
26: TypeVector 23(float) 3
27: TypeVector 23(float) 4
28: TypeArray 27(fvec4) 24
29: TypeMatrix 27(fvec4) 4
30: TypeMatrix 26(fvec3) 3
31: 9(int) Constant 2
32: TypeArray 30 31
33(myblock): TypeStruct 23(float) 25 26(fvec3) 28 29 32
34: 9(int) Constant 32
35: TypeArray 33(myblock) 34
36: TypePointer Output 35
37(blk): 36(ptr) Variable Output
39: 6(int) Constant 0
40: 23(float) Constant 1093664768
41: TypePointer Output 23(float)
44: 6(int) Constant 1
52: 6(int) Constant 2
54: 23(float) Constant 1096810496
55: 23(float) Constant 1097859072
56: 23(float) Constant 1095761920
57: 26(fvec3) ConstantComposite 54 55 56
58: TypePointer Output 26(fvec3)
64: 6(int) Constant 3
69: TypePointer Output 27(fvec4)
74: 6(int) Constant 4
76: 23(float) Constant 1098907648
77: 27(fvec4) ConstantComposite 56 54 55 76
82: 6(int) Constant 5
85: 9(int) Constant 3
88: 9(int) Constant 1
93: 23(float) Constant 1099431936
94: 23(float) Constant 1099956224
95: 23(float) Constant 1100480512
96: 26(fvec3) ConstantComposite 93 94 95
98: 9(int) Constant 264
99(myblock2): TypeStruct 23(float) 27(fvec4) 29
100: 9(int) Constant 81
101: TypeArray 99(myblock2) 100
102: TypePointer Output 101
103(blk2): 102(ptr) Variable Output
109: 23(float) Constant 1101004800
113: 23(float) Constant 1101529088
114: 23(float) Constant 1102053376
115: 23(float) Constant 1102577664
116: 23(float) Constant 1103101952
117: 27(fvec4) ConstantComposite 113 114 115 116
129: 23(float) Constant 1105723392
139: 10(ivec3) ConstantComposite 34 88 88
4(main): 2 Function None 3
5: Label
8(iid): 7(ptr) Variable Function
18(gid): 7(ptr) Variable Function
15: 14(ptr) AccessChain 12(gl_LocalInvocationID) 13
16: 9(int) Load 15
17: 6(int) Bitcast 16
Store 8(iid) 17
20: 14(ptr) AccessChain 19(gl_WorkGroupID) 13
21: 9(int) Load 20
22: 6(int) Bitcast 21
Store 18(gid) 22
38: 6(int) Load 8(iid)
42: 41(ptr) AccessChain 37(blk) 38 39
Store 42 40
43: 6(int) Load 8(iid)
45: 6(int) IAdd 43 44
46: 6(int) Load 18(gid)
47: 6(int) Load 8(iid)
48: 41(ptr) AccessChain 37(blk) 47 39
49: 23(float) Load 48
50: 41(ptr) AccessChain 37(blk) 45 44 46
Store 50 49
51: 6(int) Load 8(iid)
53: 6(int) SDiv 51 52
59: 58(ptr) AccessChain 37(blk) 53 52
60: 26(fvec3) Load 59
61: 26(fvec3) VectorShuffle 60 57 5 3 4
Store 59 61
62: 6(int) Load 8(iid)
63: 6(int) IMul 62 52
65: 6(int) Load 8(iid)
66: 6(int) SDiv 65 52
67: 58(ptr) AccessChain 37(blk) 66 52
68: 26(fvec3) Load 67
70: 69(ptr) AccessChain 37(blk) 63 64 44
71: 27(fvec4) Load 70
72: 27(fvec4) VectorShuffle 71 68 0 4 5 6
Store 70 72
73: 6(int) Load 8(iid)
75: 6(int) SDiv 73 74
78: 69(ptr) AccessChain 37(blk) 75 74 52
79: 27(fvec4) Load 78
80: 27(fvec4) VectorShuffle 79 77 7 6 5 4
Store 78 80
81: 6(int) Load 8(iid)
83: 6(int) Load 8(iid)
84: 6(int) SDiv 83 74
86: 41(ptr) AccessChain 37(blk) 84 74 52 85
87: 23(float) Load 86
89: 41(ptr) AccessChain 37(blk) 81 82 39 44 88
Store 89 87
90: 6(int) Load 8(iid)
91: 6(int) IMul 90 74
92: 6(int) Load 18(gid)
97: 58(ptr) AccessChain 37(blk) 91 82 44 92
Store 97 96
MemoryBarrier 88 98
ControlBarrier 31 31 98
104: 6(int) Load 8(iid)
105: 6(int) Load 8(iid)
106: 6(int) ISub 105 44
107: 41(ptr) AccessChain 103(blk2) 106 39
108: 23(float) Load 107
110: 23(float) FAdd 108 109
111: 41(ptr) AccessChain 103(blk2) 104 39
Store 111 110
112: 6(int) Load 8(iid)
118: 69(ptr) AccessChain 103(blk2) 112 44
Store 118 117
119: 6(int) Load 8(iid)
120: 6(int) IAdd 119 44
121: 6(int) Load 18(gid)
122: 6(int) Load 8(iid)
123: 69(ptr) AccessChain 103(blk2) 122 44
124: 27(fvec4) Load 123
125: 69(ptr) AccessChain 103(blk2) 120 52 121
Store 125 124
126: 6(int) Load 8(iid)
127: 6(int) IAdd 126 44
128: 6(int) Load 18(gid)
130: 41(ptr) AccessChain 103(blk2) 127 52 128 31
Store 130 129
131: 6(int) Load 8(iid)
132: 6(int) IAdd 131 52
133: 6(int) Load 8(iid)
134: 6(int) IAdd 133 44
135: 6(int) Load 18(gid)
136: 69(ptr) AccessChain 103(blk2) 134 52 135
137: 27(fvec4) Load 136
138: 69(ptr) AccessChain 103(blk2) 132 52 64
Store 138 137
MemoryBarrier 88 98
ControlBarrier 31 31 98
Return
FunctionEnd
59 changes: 59 additions & 0 deletions Test/spv.320.meshShaderUserDefined.mesh
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#version 320 es

#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()
{
int iid = int(gl_LocalInvocationID.x);
int gid = int(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();
}
Loading

0 comments on commit 4508a81

Please sign in to comment.