-
Notifications
You must be signed in to change notification settings - Fork 830
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1507 from sparmarNV/fix-SPV_NV_mesh_shader
Add ES 320 support and additional error checks for SPV_NV_mesh_shader
- Loading branch information
Showing
10 changed files
with
1,258 additions
and
939 deletions.
There are no files selected for viewing
205 changes: 205 additions & 0 deletions
205
Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
} |
Oops, something went wrong.