Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
glslang
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
glslang
Commits
1ff8346b
Unverified
Commit
1ff8346b
authored
Feb 08, 2019
by
John Kessenich
Committed by
GitHub
Feb 08, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1693 from sparmarNV/fix-NV_mesh_shader
Add missing support for gl_MeshViewCountNV/gl_MeshViewIndicesNV in task shaders
parents
9dda1281
3958927a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
166 additions
and
131 deletions
+166
-131
spv.meshTaskShader.task.out
Test/baseResults/spv.meshTaskShader.task.out
+153
-131
spv.meshTaskShader.task
Test/spv.meshTaskShader.task
+5
-0
Initialize.cpp
glslang/MachineIndependent/Initialize.cpp
+8
-0
No files found.
Test/baseResults/spv.meshTaskShader.task.out
View file @
1ff8346b
spv.meshTaskShader.task
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 1
04
// Id's are bound by 1
16
Capability StorageImageWriteWithoutFormat
Capability MeshShadingNV
Extension "SPV_NV_mesh_shader"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TaskNV 4 "main" 11 17
80 101
EntryPoint TaskNV 4 "main" 11 17
24 25 90 113
ExecutionMode 4 LocalSize 32 1 1
Source GLSL 450
SourceExtension "GL_NV_mesh_shader"
...
...
@@ -17,34 +17,42 @@ spv.meshTaskShader.task
Name 11 "gl_LocalInvocationID"
Name 16 "gid"
Name 17 "gl_WorkGroupID"
Name 20 "i"
Name 34 "mem"
Name 37 "block0"
MemberName 37(block0) 0 "uni_value"
Name 39 ""
Name 55 "uni_image"
Name 78 "Task"
MemberName 78(Task) 0 "dummy"
MemberName 78(Task) 1 "submesh"
Name 80 "mytask"
Name 101 "gl_TaskCountNV"
Name 20 "viewID"
Name 24 "gl_MeshViewIndicesNV"
Name 25 "gl_MeshViewCountNV"
Name 30 "i"
Name 44 "mem"
Name 47 "block0"
MemberName 47(block0) 0 "uni_value"
Name 49 ""
Name 65 "uni_image"
Name 88 "Task"
MemberName 88(Task) 0 "dummy"
MemberName 88(Task) 1 "submesh"
MemberName 88(Task) 2 "viewID"
Name 90 "mytask"
Name 113 "gl_TaskCountNV"
Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
MemberDecorate 37(block0) 0 Offset 0
Decorate 37(block0) Block
Decorate 39 DescriptorSet 0
Decorate 39 Binding 0
Decorate 55(uni_image) DescriptorSet 0
Decorate 55(uni_image) Binding 0
Decorate 55(uni_image) NonReadable
Decorate 77 ArrayStride 8
MemberDecorate 78(Task) 0 PerTaskNV
MemberDecorate 78(Task) 0 Offset 0
MemberDecorate 78(Task) 1 PerTaskNV
MemberDecorate 78(Task) 1 Offset 8
Decorate 78(Task) Block
Decorate 101(gl_TaskCountNV) BuiltIn TaskCountNV
Decorate 103 BuiltIn WorkgroupSize
Decorate 24(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
Decorate 25(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
MemberDecorate 47(block0) 0 Offset 0
Decorate 47(block0) Block
Decorate 49 DescriptorSet 0
Decorate 49 Binding 0
Decorate 65(uni_image) DescriptorSet 0
Decorate 65(uni_image) Binding 0
Decorate 65(uni_image) NonReadable
Decorate 87 ArrayStride 8
MemberDecorate 88(Task) 0 PerTaskNV
MemberDecorate 88(Task) 0 Offset 0
MemberDecorate 88(Task) 1 PerTaskNV
MemberDecorate 88(Task) 1 Offset 8
MemberDecorate 88(Task) 2 PerTaskNV
MemberDecorate 88(Task) 2 Offset 32
Decorate 88(Task) Block
Decorate 113(gl_TaskCountNV) BuiltIn TaskCountNV
Decorate 115 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
...
...
@@ -55,119 +63,133 @@ spv.meshTaskShader.task
12: 6(int) Constant 0
13: TypePointer Input 6(int)
17(gl_WorkGroupID): 10(ptr) Variable Input
27: 6(int) Constant 10
28: TypeBool
30: TypeFloat 32
31: TypeVector 30(float) 4
32: TypeArray 31(fvec4) 27
33: TypePointer Workgroup 32
34(mem): 33(ptr) Variable Workgroup
37(block0): TypeStruct 6(int)
38: TypePointer Uniform 37(block0)
39: 38(ptr) Variable Uniform
40: TypeInt 32 1
41: 40(int) Constant 0
42: TypePointer Uniform 6(int)
48: TypePointer Workgroup 31(fvec4)
51: 40(int) Constant 1
53: TypeImage 30(float) 2D nonsampled format:Unknown
54: TypePointer UniformConstant 53
55(uni_image): 54(ptr) Variable UniformConstant
59: TypeVector 40(int) 2
69: 6(int) Constant 1
73: 6(int) Constant 264
74: 6(int) Constant 2
75: TypeVector 30(float) 2
76: 6(int) Constant 3
77: TypeArray 75(fvec2) 76
78(Task): TypeStruct 75(fvec2) 77
79: TypePointer Output 78(Task)
80(mytask): 79(ptr) Variable Output
81: 30(float) Constant 1106247680
82: 30(float) Constant 1106771968
83: 75(fvec2) ConstantComposite 81 82
84: TypePointer Output 75(fvec2)
86: 30(float) Constant 1107296256
87: 30(float) Constant 1107558400
88: 75(fvec2) ConstantComposite 86 87
90: 30(float) Constant 1107820544
91: 30(float) Constant 1108082688
92: 75(fvec2) ConstantComposite 90 91
94: 40(int) Constant 2
100: TypePointer Output 6(int)
101(gl_TaskCountNV): 100(ptr) Variable Output
102: 6(int) Constant 32
103: 9(ivec3) ConstantComposite 102 69 69
21: 6(int) Constant 4
22: TypeArray 6(int) 21
23: TypePointer Input 22
24(gl_MeshViewIndicesNV): 23(ptr) Variable Input
25(gl_MeshViewCountNV): 13(ptr) Variable Input
37: 6(int) Constant 10
38: TypeBool
40: TypeFloat 32
41: TypeVector 40(float) 4
42: TypeArray 41(fvec4) 37
43: TypePointer Workgroup 42
44(mem): 43(ptr) Variable Workgroup
47(block0): TypeStruct 6(int)
48: TypePointer Uniform 47(block0)
49: 48(ptr) Variable Uniform
50: TypeInt 32 1
51: 50(int) Constant 0
52: TypePointer Uniform 6(int)
58: TypePointer Workgroup 41(fvec4)
61: 50(int) Constant 1
63: TypeImage 40(float) 2D nonsampled format:Unknown
64: TypePointer UniformConstant 63
65(uni_image): 64(ptr) Variable UniformConstant
69: TypeVector 50(int) 2
79: 6(int) Constant 1
83: 6(int) Constant 264
84: 6(int) Constant 2
85: TypeVector 40(float) 2
86: 6(int) Constant 3
87: TypeArray 85(fvec2) 86
88(Task): TypeStruct 85(fvec2) 87 6(int)
89: TypePointer Output 88(Task)
90(mytask): 89(ptr) Variable Output
91: 40(float) Constant 1106247680
92: 40(float) Constant 1106771968
93: 85(fvec2) ConstantComposite 91 92
94: TypePointer Output 85(fvec2)
96: 40(float) Constant 1107296256
97: 40(float) Constant 1107558400
98: 85(fvec2) ConstantComposite 96 97
100: 40(float) Constant 1107820544
101: 40(float) Constant 1108082688
102: 85(fvec2) ConstantComposite 100 101
104: 50(int) Constant 2
111: TypePointer Output 6(int)
113(gl_TaskCountNV): 111(ptr) Variable Output
114: 6(int) Constant 32
115: 9(ivec3) ConstantComposite 114 79 79
4(main): 2 Function None 3
5: Label
8(iid): 7(ptr) Variable Function
16(gid): 7(ptr) Variable Function
20(i): 7(ptr) Variable Function
20(viewID): 7(ptr) Variable Function
30(i): 7(ptr) Variable Function
14: 13(ptr) AccessChain 11(gl_LocalInvocationID) 12
15: 6(int) Load 14
Store 8(iid) 15
18: 13(ptr) AccessChain 17(gl_WorkGroupID) 12
19: 6(int) Load 18
Store 16(gid) 19
Store 20(i) 12
Branch 21
21: Label
LoopMerge 23 24 None
Branch 25
25: Label
26: 6(int) Load 20(i)
29: 28(bool) ULessThan 26 27
BranchConditional 29 22 23
22: Label
35: 6(int) Load 20(i)
36: 6(int) Load 20(i)
43: 42(ptr) AccessChain 39 41
44: 6(int) Load 43
45: 6(int) IAdd 36 44
46: 30(float) ConvertUToF 45
47: 31(fvec4) CompositeConstruct 46 46 46 46
49: 48(ptr) AccessChain 34(mem) 35
Store 49 47
Branch 24
24: Label
50: 6(int) Load 20(i)
52: 6(int) IAdd 50 51
Store 20(i) 52
Branch 21
23: Label
56: 53 Load 55(uni_image)
57: 6(int) Load 8(iid)
58: 40(int) Bitcast 57
60: 59(ivec2) CompositeConstruct 58 58
61: 6(int) Load 16(gid)
62: 48(ptr) AccessChain 34(mem) 61
63: 31(fvec4) Load 62
ImageWrite 56 60 63
64: 53 Load 55(uni_image)
65: 6(int) Load 8(iid)
66: 40(int) Bitcast 65
67: 59(ivec2) CompositeConstruct 66 66
68: 6(int) Load 16(gid)
70: 6(int) IAdd 68 69
71: 48(ptr) AccessChain 34(mem) 70
72: 31(fvec4) Load 71
ImageWrite 64 67 72
MemoryBarrier 69 73
ControlBarrier 74 74 73
85: 84(ptr) AccessChain 80(mytask) 41
Store 85 83
89: 84(ptr) AccessChain 80(mytask) 51 41
Store 89 88
93: 84(ptr) AccessChain 80(mytask) 51 51
Store 93 92
95: 6(int) Load 16(gid)
96: 6(int) UMod 95 74
97: 84(ptr) AccessChain 80(mytask) 51 96
98: 75(fvec2) Load 97
99: 84(ptr) AccessChain 80(mytask) 51 94
26: 6(int) Load 25(gl_MeshViewCountNV)
27: 6(int) UMod 26 21
28: 13(ptr) AccessChain 24(gl_MeshViewIndicesNV) 27
29: 6(int) Load 28
Store 20(viewID) 29
Store 30(i) 12
Branch 31
31: Label
LoopMerge 33 34 None
Branch 35
35: Label
36: 6(int) Load 30(i)
39: 38(bool) ULessThan 36 37
BranchConditional 39 32 33
32: Label
45: 6(int) Load 30(i)
46: 6(int) Load 30(i)
53: 52(ptr) AccessChain 49 51
54: 6(int) Load 53
55: 6(int) IAdd 46 54
56: 40(float) ConvertUToF 55
57: 41(fvec4) CompositeConstruct 56 56 56 56
59: 58(ptr) AccessChain 44(mem) 45
Store 59 57
Branch 34
34: Label
60: 6(int) Load 30(i)
62: 6(int) IAdd 60 61
Store 30(i) 62
Branch 31
33: Label
66: 63 Load 65(uni_image)
67: 6(int) Load 8(iid)
68: 50(int) Bitcast 67
70: 69(ivec2) CompositeConstruct 68 68
71: 6(int) Load 16(gid)
72: 58(ptr) AccessChain 44(mem) 71
73: 41(fvec4) Load 72
ImageWrite 66 70 73
74: 63 Load 65(uni_image)
75: 6(int) Load 8(iid)
76: 50(int) Bitcast 75
77: 69(ivec2) CompositeConstruct 76 76
78: 6(int) Load 16(gid)
80: 6(int) IAdd 78 79
81: 58(ptr) AccessChain 44(mem) 80
82: 41(fvec4) Load 81
ImageWrite 74 77 82
MemoryBarrier 79 83
ControlBarrier 84 84 83
95: 94(ptr) AccessChain 90(mytask) 51
Store 95 93
99: 94(ptr) AccessChain 90(mytask) 61 51
Store 99 98
MemoryBarrier 69 73
ControlBarrier 74 74 73
Store 101(gl_TaskCountNV) 76
103: 94(ptr) AccessChain 90(mytask) 61 61
Store 103 102
105: 6(int) Load 16(gid)
106: 6(int) UMod 105 84
107: 94(ptr) AccessChain 90(mytask) 61 106
108: 85(fvec2) Load 107
109: 94(ptr) AccessChain 90(mytask) 61 104
Store 109 108
110: 6(int) Load 20(viewID)
112: 111(ptr) AccessChain 90(mytask) 104
Store 112 110
MemoryBarrier 79 83
ControlBarrier 84 84 83
Store 113(gl_TaskCountNV) 86
Return
FunctionEnd
Test/spv.meshTaskShader.task
View file @
1ff8346b
#version 450
#define MAX_VIEWS gl_MaxMeshViewCountNV
#define BARRIER() \
memoryBarrierShared(); \
barrier();
...
...
@@ -19,12 +21,14 @@ shared vec4 mem[10];
taskNV out Task {
vec2 dummy;
vec2 submesh[3];
uint viewID;
} mytask;
void main()
{
uint iid = gl_LocalInvocationID.x;
uint gid = gl_WorkGroupID.x;
uint viewID = gl_MeshViewIndicesNV[gl_MeshViewCountNV%MAX_VIEWS];
// 1. shared memory load and stores
for (uint i = 0; i < 10; ++i) {
...
...
@@ -41,6 +45,7 @@ void main()
mytask.submesh[0] = vec2(32.0, 33.0);
mytask.submesh[1] = vec2(34.0, 35.0);
mytask.submesh[2] = mytask.submesh[gid%2];
mytask.viewID = viewID;
BARRIER();
...
...
glslang/MachineIndependent/Initialize.cpp
View file @
1ff8346b
...
...
@@ -5357,6 +5357,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in highp uvec3 gl_GlobalInvocationID;"
"in highp uint gl_LocalInvocationIndex;"
"in uint gl_MeshViewCountNV;"
"in uint gl_MeshViewIndicesNV[4];"
"
\n
"
);
}
...
...
@@ -8843,6 +8846,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable
.
setVariableExtensions
(
"gl_LocalInvocationID"
,
1
,
&
E_GL_NV_mesh_shader
);
symbolTable
.
setVariableExtensions
(
"gl_GlobalInvocationID"
,
1
,
&
E_GL_NV_mesh_shader
);
symbolTable
.
setVariableExtensions
(
"gl_LocalInvocationIndex"
,
1
,
&
E_GL_NV_mesh_shader
);
symbolTable
.
setVariableExtensions
(
"gl_MeshViewCountNV"
,
1
,
&
E_GL_NV_mesh_shader
);
symbolTable
.
setVariableExtensions
(
"gl_MeshViewIndicesNV"
,
1
,
&
E_GL_NV_mesh_shader
);
BuiltInVariable
(
"gl_TaskCountNV"
,
EbvTaskCountNV
,
symbolTable
);
BuiltInVariable
(
"gl_WorkGroupSize"
,
EbvWorkGroupSize
,
symbolTable
);
...
...
@@ -8850,8 +8855,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable
(
"gl_LocalInvocationID"
,
EbvLocalInvocationId
,
symbolTable
);
BuiltInVariable
(
"gl_GlobalInvocationID"
,
EbvGlobalInvocationId
,
symbolTable
);
BuiltInVariable
(
"gl_LocalInvocationIndex"
,
EbvLocalInvocationIndex
,
symbolTable
);
BuiltInVariable
(
"gl_MeshViewCountNV"
,
EbvMeshViewCountNV
,
symbolTable
);
BuiltInVariable
(
"gl_MeshViewIndicesNV"
,
EbvMeshViewIndicesNV
,
symbolTable
);
symbolTable
.
setVariableExtensions
(
"gl_MaxTaskWorkGroupSizeNV"
,
1
,
&
E_GL_NV_mesh_shader
);
symbolTable
.
setVariableExtensions
(
"gl_MaxMeshViewCountNV"
,
1
,
&
E_GL_NV_mesh_shader
);
symbolTable
.
setFunctionExtensions
(
"barrier"
,
1
,
&
E_GL_NV_mesh_shader
);
symbolTable
.
setFunctionExtensions
(
"memoryBarrierShared"
,
1
,
&
E_GL_NV_mesh_shader
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment