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
5fc501ff
Commit
5fc501ff
authored
Sep 26, 2016
by
John Kessenich
Committed by
GitHub
Sep 26, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #520 from amdrexu/bugfix
SPV: OpGroupBroadcast is unable to handle vector operand.
parents
f38978ed
b707205b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
272 additions
and
209 deletions
+272
-209
GlslangToSpv.cpp
SPIRV/GlslangToSpv.cpp
+26
-17
spv.shaderBallot.comp.out
Test/baseResults/spv.shaderBallot.comp.out
+246
-192
No files found.
SPIRV/GlslangToSpv.cpp
View file @
5fc501ff
...
@@ -156,9 +156,7 @@ protected:
...
@@ -156,9 +156,7 @@ protected:
spv
::
Id
makeSmearedConstant
(
spv
::
Id
constant
,
int
vectorSize
);
spv
::
Id
makeSmearedConstant
(
spv
::
Id
constant
,
int
vectorSize
);
spv
::
Id
createAtomicOperation
(
glslang
::
TOperator
op
,
spv
::
Decoration
precision
,
spv
::
Id
typeId
,
std
::
vector
<
spv
::
Id
>&
operands
,
glslang
::
TBasicType
typeProxy
);
spv
::
Id
createAtomicOperation
(
glslang
::
TOperator
op
,
spv
::
Decoration
precision
,
spv
::
Id
typeId
,
std
::
vector
<
spv
::
Id
>&
operands
,
glslang
::
TBasicType
typeProxy
);
spv
::
Id
createInvocationsOperation
(
glslang
::
TOperator
op
,
spv
::
Id
typeId
,
std
::
vector
<
spv
::
Id
>&
operands
,
glslang
::
TBasicType
typeProxy
);
spv
::
Id
createInvocationsOperation
(
glslang
::
TOperator
op
,
spv
::
Id
typeId
,
std
::
vector
<
spv
::
Id
>&
operands
,
glslang
::
TBasicType
typeProxy
);
#ifdef AMD_EXTENSIONS
spv
::
Id
CreateInvocationsVectorOperation
(
spv
::
Op
op
,
spv
::
Id
typeId
,
std
::
vector
<
spv
::
Id
>&
operands
);
spv
::
Id
CreateInvocationsVectorOperation
(
spv
::
Op
op
,
spv
::
Id
typeId
,
spv
::
Id
operand
);
#endif
spv
::
Id
createMiscOperation
(
glslang
::
TOperator
op
,
spv
::
Decoration
precision
,
spv
::
Id
typeId
,
std
::
vector
<
spv
::
Id
>&
operands
,
glslang
::
TBasicType
typeProxy
);
spv
::
Id
createMiscOperation
(
glslang
::
TOperator
op
,
spv
::
Decoration
precision
,
spv
::
Id
typeId
,
std
::
vector
<
spv
::
Id
>&
operands
,
glslang
::
TBasicType
typeProxy
);
spv
::
Id
createNoArgOperation
(
glslang
::
TOperator
op
,
spv
::
Decoration
precision
,
spv
::
Id
typeId
);
spv
::
Id
createNoArgOperation
(
glslang
::
TOperator
op
,
spv
::
Decoration
precision
,
spv
::
Id
typeId
);
spv
::
Id
getSymbolId
(
const
glslang
::
TIntermSymbol
*
node
);
spv
::
Id
getSymbolId
(
const
glslang
::
TIntermSymbol
*
node
);
...
@@ -4029,6 +4027,8 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
...
@@ -4029,6 +4027,8 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
case
glslang
:
:
EOpReadInvocation
:
case
glslang
:
:
EOpReadInvocation
:
opCode
=
spv
::
OpGroupBroadcast
;
opCode
=
spv
::
OpGroupBroadcast
;
if
(
builder
.
isVectorType
(
typeId
))
return
CreateInvocationsVectorOperation
(
opCode
,
typeId
,
operands
);
break
;
break
;
case
glslang
:
:
EOpReadFirstInvocation
:
case
glslang
:
:
EOpReadFirstInvocation
:
opCode
=
spv
::
OpSubgroupFirstInvocationKHR
;
opCode
=
spv
::
OpSubgroupFirstInvocationKHR
;
...
@@ -4084,7 +4084,7 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
...
@@ -4084,7 +4084,7 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
}
}
if
(
builder
.
isVectorType
(
typeId
))
if
(
builder
.
isVectorType
(
typeId
))
return
CreateInvocationsVectorOperation
(
opCode
,
typeId
,
operands
[
0
]
);
return
CreateInvocationsVectorOperation
(
opCode
,
typeId
,
operands
);
break
;
break
;
case
glslang
:
:
EOpMinInvocationsNonUniform
:
case
glslang
:
:
EOpMinInvocationsNonUniform
:
...
@@ -4118,7 +4118,7 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
...
@@ -4118,7 +4118,7 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
}
}
if
(
builder
.
isVectorType
(
typeId
))
if
(
builder
.
isVectorType
(
typeId
))
return
CreateInvocationsVectorOperation
(
opCode
,
typeId
,
operands
[
0
]
);
return
CreateInvocationsVectorOperation
(
opCode
,
typeId
,
operands
);
break
;
break
;
#endif
#endif
...
@@ -4131,16 +4131,21 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
...
@@ -4131,16 +4131,21 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
return
builder
.
createOp
(
opCode
,
typeId
,
spvGroupOperands
);
return
builder
.
createOp
(
opCode
,
typeId
,
spvGroupOperands
);
}
}
#ifdef AMD_EXTENSIONS
// Create group invocation operations on a vector
// Create group invocation operations on a vector
spv
::
Id
TGlslangToSpvTraverser
::
CreateInvocationsVectorOperation
(
spv
::
Op
op
,
spv
::
Id
typeId
,
s
pv
::
Id
operand
)
spv
::
Id
TGlslangToSpvTraverser
::
CreateInvocationsVectorOperation
(
spv
::
Op
op
,
spv
::
Id
typeId
,
s
td
::
vector
<
spv
::
Id
>&
operands
)
{
{
#ifdef AMD_EXTENSIONS
assert
(
op
==
spv
::
OpGroupFMin
||
op
==
spv
::
OpGroupUMin
||
op
==
spv
::
OpGroupSMin
||
assert
(
op
==
spv
::
OpGroupFMin
||
op
==
spv
::
OpGroupUMin
||
op
==
spv
::
OpGroupSMin
||
op
==
spv
::
OpGroupFMax
||
op
==
spv
::
OpGroupUMax
||
op
==
spv
::
OpGroupSMax
||
op
==
spv
::
OpGroupFMax
||
op
==
spv
::
OpGroupUMax
||
op
==
spv
::
OpGroupSMax
||
op
==
spv
::
OpGroupFAdd
||
op
==
spv
::
OpGroupIAdd
||
op
==
spv
::
OpGroupFAdd
||
op
==
spv
::
OpGroupIAdd
||
op
==
spv
::
OpGroupBroadcast
||
op
==
spv
::
OpGroupFMinNonUniformAMD
||
op
==
spv
::
OpGroupUMinNonUniformAMD
||
op
==
spv
::
OpGroupSMinNonUniformAMD
||
op
==
spv
::
OpGroupFMinNonUniformAMD
||
op
==
spv
::
OpGroupUMinNonUniformAMD
||
op
==
spv
::
OpGroupSMinNonUniformAMD
||
op
==
spv
::
OpGroupFMaxNonUniformAMD
||
op
==
spv
::
OpGroupUMaxNonUniformAMD
||
op
==
spv
::
OpGroupSMaxNonUniformAMD
||
op
==
spv
::
OpGroupFMaxNonUniformAMD
||
op
==
spv
::
OpGroupUMaxNonUniformAMD
||
op
==
spv
::
OpGroupSMaxNonUniformAMD
||
op
==
spv
::
OpGroupFAddNonUniformAMD
||
op
==
spv
::
OpGroupIAddNonUniformAMD
);
op
==
spv
::
OpGroupFAddNonUniformAMD
||
op
==
spv
::
OpGroupIAddNonUniformAMD
);
#else
assert
(
op
==
spv
::
OpGroupFMin
||
op
==
spv
::
OpGroupUMin
||
op
==
spv
::
OpGroupSMin
||
op
==
spv
::
OpGroupFMax
||
op
==
spv
::
OpGroupUMax
||
op
==
spv
::
OpGroupSMax
||
op
==
spv
::
OpGroupFAdd
||
op
==
spv
::
OpGroupIAdd
||
op
==
spv
::
OpGroupBroadcast
);
#endif
// Handle group invocation operations scalar by scalar.
// Handle group invocation operations scalar by scalar.
// The result type is the same type as the original type.
// The result type is the same type as the original type.
...
@@ -4150,28 +4155,32 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv
...
@@ -4150,28 +4155,32 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv
// - make a vector out the scalar results
// - make a vector out the scalar results
// get the types sorted out
// get the types sorted out
int
numComponents
=
builder
.
getNumComponents
(
operand
);
int
numComponents
=
builder
.
getNumComponents
(
operand
s
[
0
]
);
spv
::
Id
scalarType
=
builder
.
getScalarTypeId
(
builder
.
getTypeId
(
operand
));
spv
::
Id
scalarType
=
builder
.
getScalarTypeId
(
builder
.
getTypeId
(
operand
s
[
0
]
));
std
::
vector
<
spv
::
Id
>
results
;
std
::
vector
<
spv
::
Id
>
results
;
// do each scalar op
// do each scalar op
for
(
int
comp
=
0
;
comp
<
numComponents
;
++
comp
)
{
for
(
int
comp
=
0
;
comp
<
numComponents
;
++
comp
)
{
std
::
vector
<
unsigned
int
>
indexes
;
std
::
vector
<
unsigned
int
>
indexes
;
indexes
.
push_back
(
comp
);
indexes
.
push_back
(
comp
);
spv
::
Id
scalar
=
builder
.
createCompositeExtract
(
operand
,
scalarType
,
indexes
);
spv
::
Id
scalar
=
builder
.
createCompositeExtract
(
operand
s
[
0
]
,
scalarType
,
indexes
);
std
::
vector
<
spv
::
Id
>
operands
;
std
::
vector
<
spv
::
Id
>
spvGroupOperands
;
operands
.
push_back
(
builder
.
makeUintConstant
(
spv
::
ScopeSubgroup
));
spvGroupOperands
.
push_back
(
builder
.
makeUintConstant
(
spv
::
ScopeSubgroup
));
operands
.
push_back
(
spv
::
GroupOperationReduce
);
if
(
op
==
spv
::
OpGroupBroadcast
)
{
operands
.
push_back
(
scalar
);
spvGroupOperands
.
push_back
(
scalar
);
spvGroupOperands
.
push_back
(
operands
[
1
]);
}
else
{
spvGroupOperands
.
push_back
(
spv
::
GroupOperationReduce
);
spvGroupOperands
.
push_back
(
scalar
);
}
results
.
push_back
(
builder
.
createOp
(
op
,
scalarType
,
o
perands
));
results
.
push_back
(
builder
.
createOp
(
op
,
scalarType
,
spvGroupO
perands
));
}
}
// put the pieces together
// put the pieces together
return
builder
.
createCompositeConstruct
(
typeId
,
results
);
return
builder
.
createCompositeConstruct
(
typeId
,
results
);
}
}
#endif
spv
::
Id
TGlslangToSpvTraverser
::
createMiscOperation
(
glslang
::
TOperator
op
,
spv
::
Decoration
precision
,
spv
::
Id
typeId
,
std
::
vector
<
spv
::
Id
>&
operands
,
glslang
::
TBasicType
typeProxy
)
spv
::
Id
TGlslangToSpvTraverser
::
createMiscOperation
(
glslang
::
TOperator
op
,
spv
::
Decoration
precision
,
spv
::
Id
typeId
,
std
::
vector
<
spv
::
Id
>&
operands
,
glslang
::
TBasicType
typeProxy
)
{
{
...
...
Test/baseResults/spv.shaderBallot.comp.out
View file @
5fc501ff
...
@@ -7,7 +7,7 @@ Linked compute stage:
...
@@ -7,7 +7,7 @@ Linked compute stage:
// Module Version 10000
// Module Version 10000
// Generated by (magic number): 80001
// Generated by (magic number): 80001
// Id's are bound by 2
45
// Id's are bound by 2
99
Capability Shader
Capability Shader
Capability Int64
Capability Int64
...
@@ -49,7 +49,7 @@ Linked compute stage:
...
@@ -49,7 +49,7 @@ Linked compute stage:
Decorate 52(Buffers) BufferBlock
Decorate 52(Buffers) BufferBlock
Decorate 55(data) DescriptorSet 0
Decorate 55(data) DescriptorSet 0
Decorate 55(data) Binding 0
Decorate 55(data) Binding 0
Decorate 2
44
BuiltIn WorkgroupSize
Decorate 2
98
BuiltIn WorkgroupSize
2: TypeVoid
2: TypeVoid
3: TypeFunction 2
3: TypeFunction 2
6: TypeInt 32 0
6: TypeInt 32 0
...
@@ -85,19 +85,19 @@ Linked compute stage:
...
@@ -85,19 +85,19 @@ Linked compute stage:
67: 50(int) Constant 1
67: 50(int) Constant 1
68: TypeVector 48(float) 2
68: TypeVector 48(float) 2
69: TypePointer Uniform 49(fvec4)
69: TypePointer Uniform 49(fvec4)
79
: 50(int) Constant 2
83
: 50(int) Constant 2
8
0
: TypeVector 48(float) 3
8
4
: TypeVector 48(float) 3
9
0: 50(int) Constant 3
10
0: 50(int) Constant 3
97
: TypePointer Uniform 50(int)
115
: TypePointer Uniform 50(int)
1
04
: TypeVector 50(int) 2
1
22
: TypeVector 50(int) 2
1
05
: TypePointer Uniform 51(ivec4)
1
23
: TypePointer Uniform 51(ivec4)
1
15
: TypeVector 50(int) 3
1
37
: TypeVector 50(int) 3
1
31
: TypePointer Uniform 6(int)
1
67
: TypePointer Uniform 6(int)
1
38
: TypePointer Uniform 38(ivec4)
1
74
: TypePointer Uniform 38(ivec4)
1
4
8: TypeVector 6(int) 3
1
8
8: TypeVector 6(int) 3
2
42
: 6(int) Constant 8
2
96
: 6(int) Constant 8
2
43
: 6(int) Constant 1
2
97
: 6(int) Constant 1
2
44: 148(ivec3) ConstantComposite 242 242 243
2
98: 188(ivec3) ConstantComposite 296 296 297
4(main): 2 Function None 3
4(main): 2 Function None 3
5: Label
5: Label
8(invocation): 7(ptr) Variable Function
8(invocation): 7(ptr) Variable Function
...
@@ -125,7 +125,7 @@ Linked compute stage:
...
@@ -125,7 +125,7 @@ Linked compute stage:
44: 17(int) Bitcast 43
44: 17(int) Bitcast 43
45: 36(bool) IEqual 35 44
45: 36(bool) IEqual 35 44
SelectionMerge 47 None
SelectionMerge 47 None
BranchConditional 45 46
163
BranchConditional 45 46
217
46: Label
46: Label
56: 6(int) Load 8(invocation)
56: 6(int) Load 8(invocation)
60: 59(ptr) AccessChain 55(data) 57 57 58
60: 59(ptr) AccessChain 55(data) 57 57 58
...
@@ -139,188 +139,242 @@ Linked compute stage:
...
@@ -139,188 +139,242 @@ Linked compute stage:
71: 49(fvec4) Load 70
71: 49(fvec4) Load 70
72: 68(fvec2) VectorShuffle 71 71 0 1
72: 68(fvec2) VectorShuffle 71 71 0 1
73: 6(int) Load 8(invocation)
73: 6(int) Load 8(invocation)
74: 68(fvec2) GroupBroadcast 63 72 73
74: 48(float) CompositeExtract 72 0
75: 69(ptr) AccessChain 55(data) 66 57
75: 48(float) GroupBroadcast 63 74 73
76: 49(fvec4) Load 75
76: 48(float) CompositeExtract 72 1
77: 49(fvec4) VectorShuffle 76 74 4 5 2 3
77: 48(float) GroupBroadcast 63 76 73
Store 75 77
78: 68(fvec2) CompositeConstruct 75 77
78: 6(int) Load 8(invocation)
79: 69(ptr) AccessChain 55(data) 66 57
81: 69(ptr) AccessChain 55(data) 79 57
80: 49(fvec4) Load 79
82: 49(fvec4) Load 81
81: 49(fvec4) VectorShuffle 80 78 4 5 2 3
83: 80(fvec3) VectorShuffle 82 82 0 1 2
Store 79 81
84: 6(int) Load 8(invocation)
82: 6(int) Load 8(invocation)
85: 80(fvec3) GroupBroadcast 63 83 84
85: 69(ptr) AccessChain 55(data) 83 57
86: 69(ptr) AccessChain 55(data) 78 57
86: 49(fvec4) Load 85
87: 49(fvec4) Load 86
87: 84(fvec3) VectorShuffle 86 86 0 1 2
88: 49(fvec4) VectorShuffle 87 85 4 5 6 3
88: 6(int) Load 8(invocation)
Store 86 88
89: 48(float) CompositeExtract 87 0
89: 6(int) Load 8(invocation)
90: 48(float) GroupBroadcast 63 89 88
91: 69(ptr) AccessChain 55(data) 90 57
91: 48(float) CompositeExtract 87 1
92: 49(fvec4) Load 91
92: 48(float) GroupBroadcast 63 91 88
93: 6(int) Load 8(invocation)
93: 48(float) CompositeExtract 87 2
94: 49(fvec4) GroupBroadcast 63 92 93
94: 48(float) GroupBroadcast 63 93 88
95: 69(ptr) AccessChain 55(data) 89 57
95: 84(fvec3) CompositeConstruct 90 92 94
Store 95 94
96: 69(ptr) AccessChain 55(data) 82 57
96: 6(int) Load 8(invocation)
97: 49(fvec4) Load 96
98: 97(ptr) AccessChain 55(data) 57 67 58
98: 49(fvec4) VectorShuffle 97 95 4 5 6 3
99: 50(int) Load 98
Store 96 98
100: 6(int) Load 8(invocation)
99: 6(int) Load 8(invocation)
101: 50(int) GroupBroadcast 63 99 100
101: 69(ptr) AccessChain 55(data) 100 57
102: 97(ptr) AccessChain 55(data) 96 67 58
102: 49(fvec4) Load 101
Store 102 101
103: 6(int) Load 8(invocation)
103: 6(int) Load 8(invocation)
106: 105(ptr) AccessChain 55(data) 67 67
104: 48(float) CompositeExtract 102 0
107: 51(ivec4) Load 106
105: 48(float) GroupBroadcast 63 104 103
108: 104(ivec2) VectorShuffle 107 107 0 1
106: 48(float) CompositeExtract 102 1
109: 6(int) Load 8(invocation)
107: 48(float) GroupBroadcast 63 106 103
110: 104(ivec2) GroupBroadcast 63 108 109
108: 48(float) CompositeExtract 102 2
111: 105(ptr) AccessChain 55(data) 103 67
109: 48(float) GroupBroadcast 63 108 103
112: 51(ivec4) Load 111
110: 48(float) CompositeExtract 102 3
113: 51(ivec4) VectorShuffle 112 110 4 5 2 3
111: 48(float) GroupBroadcast 63 110 103
Store 111 113
112: 49(fvec4) CompositeConstruct 105 107 109 111
113: 69(ptr) AccessChain 55(data) 99 57
Store 113 112
114: 6(int) Load 8(invocation)
114: 6(int) Load 8(invocation)
116: 105(ptr) AccessChain 55(data) 79 67
116: 115(ptr) AccessChain 55(data) 57 67 58
117: 51(ivec4) Load 116
117: 50(int) Load 116
118: 115(ivec3) VectorShuffle 117 117 0 1 2
118: 6(int) Load 8(invocation)
119: 6(int) Load 8(invocation)
119: 50(int) GroupBroadcast 63 117 118
120: 115(ivec3) GroupBroadcast 63 118 119
120: 115(ptr) AccessChain 55(data) 114 67 58
121: 105(ptr) AccessChain 55(data) 114 67
Store 120 119
122: 51(ivec4) Load 121
121: 6(int) Load 8(invocation)
123: 51(ivec4) VectorShuffle 122 120 4 5 6 3
124: 123(ptr) AccessChain 55(data) 67 67
Store 121 123
125: 51(ivec4) Load 124
124: 6(int) Load 8(invocation)
126: 122(ivec2) VectorShuffle 125 125 0 1
125: 105(ptr) AccessChain 55(data) 90 67
126: 51(ivec4) Load 125
127: 6(int) Load 8(invocation)
127: 6(int) Load 8(invocation)
128: 51(ivec4) GroupBroadcast 63 126 127
128: 50(int) CompositeExtract 126 0
129: 105(ptr) AccessChain 55(data) 124 67
129: 50(int) GroupBroadcast 63 128 127
Store 129 128
130: 50(int) CompositeExtract 126 1
130: 6(int) Load 8(invocation)
131: 50(int) GroupBroadcast 63 130 127
132: 131(ptr) AccessChain 55(data) 57 79 58
132: 122(ivec2) CompositeConstruct 129 131
133: 6(int) Load 132
133: 123(ptr) AccessChain 55(data) 121 67
134: 6(int) Load 8(invocation)
134: 51(ivec4) Load 133
135: 6(int) GroupBroadcast 63 133 134
135: 51(ivec4) VectorShuffle 134 132 4 5 2 3
136: 131(ptr) AccessChain 55(data) 130 79 58
Store 133 135
Store 136 135
136: 6(int) Load 8(invocation)
137: 6(int) Load 8(invocation)
138: 123(ptr) AccessChain 55(data) 83 67
139: 138(ptr) AccessChain 55(data) 67 79
139: 51(ivec4) Load 138
140: 38(ivec4) Load 139
140: 137(ivec3) VectorShuffle 139 139 0 1 2
141: 42(ivec2) VectorShuffle 140 140 0 1
141: 6(int) Load 8(invocation)
142: 6(int) Load 8(invocation)
142: 50(int) CompositeExtract 140 0
143: 42(ivec2) GroupBroadcast 63 141 142
143: 50(int) GroupBroadcast 63 142 141
144: 138(ptr) AccessChain 55(data) 137 79
144: 50(int) CompositeExtract 140 1
145: 38(ivec4) Load 144
145: 50(int) GroupBroadcast 63 144 141
146: 38(ivec4) VectorShuffle 145 143 4 5 2 3
146: 50(int) CompositeExtract 140 2
Store 144 146
147: 50(int) GroupBroadcast 63 146 141
147: 6(int) Load 8(invocation)
148: 137(ivec3) CompositeConstruct 143 145 147
149: 138(ptr) AccessChain 55(data) 79 79
149: 123(ptr) AccessChain 55(data) 136 67
150: 38(ivec4) Load 149
150: 51(ivec4) Load 149
151: 148(ivec3) VectorShuffle 150 150 0 1 2
151: 51(ivec4) VectorShuffle 150 148 4 5 6 3
Store 149 151
152: 6(int) Load 8(invocation)
152: 6(int) Load 8(invocation)
153: 148(ivec3) GroupBroadcast 63 151 152
153: 123(ptr) AccessChain 55(data) 100 67
154: 138(ptr) AccessChain 55(data) 147 79
154: 51(ivec4) Load 153
155: 38(ivec4) Load 154
155: 6(int) Load 8(invocation)
156: 38(ivec4) VectorShuffle 155 153 4 5 6 3
156: 50(int) CompositeExtract 154 0
Store 154 156
157: 50(int) GroupBroadcast 63 156 155
157: 6(int) Load 8(invocation)
158: 50(int) CompositeExtract 154 1
158: 138(ptr) AccessChain 55(data) 90 79
159: 50(int) GroupBroadcast 63 158 155
159: 38(ivec4) Load 158
160: 50(int) CompositeExtract 154 2
160: 6(int) Load 8(invocation)
161: 50(int) GroupBroadcast 63 160 155
161: 38(ivec4) GroupBroadcast 63 159 160
162: 50(int) CompositeExtract 154 3
162: 138(ptr) AccessChain 55(data) 157 79
163: 50(int) GroupBroadcast 63 162 155
Store 162 161
164: 51(ivec4) CompositeConstruct 157 159 161 163
Branch 47
165: 123(ptr) AccessChain 55(data) 152 67
163: Label
Store 165 164
164: 6(int) Load 8(invocation)
166: 6(int) Load 8(invocation)
165: 59(ptr) AccessChain 55(data) 57 57 58
168: 167(ptr) AccessChain 55(data) 57 83 58
166: 48(float) Load 165
169: 6(int) Load 168
167: 48(float) SubgroupFirstInvocationKHR 166
170: 6(int) Load 8(invocation)
168: 59(ptr) AccessChain 55(data) 164 57 58
171: 6(int) GroupBroadcast 63 169 170
Store 168 167
172: 167(ptr) AccessChain 55(data) 166 83 58
169: 6(int) Load 8(invocation)
Store 172 171
170: 69(ptr) AccessChain 55(data) 67 57
173: 6(int) Load 8(invocation)
171: 49(fvec4) Load 170
175: 174(ptr) AccessChain 55(data) 67 83
172: 68(fvec2) VectorShuffle 171 171 0 1
176: 38(ivec4) Load 175
173: 68(fvec2) SubgroupFirstInvocationKHR 172
177: 42(ivec2) VectorShuffle 176 176 0 1
174: 69(ptr) AccessChain 55(data) 169 57
178: 6(int) Load 8(invocation)
175: 49(fvec4) Load 174
179: 6(int) CompositeExtract 177 0
176: 49(fvec4) VectorShuffle 175 173 4 5 2 3
180: 6(int) GroupBroadcast 63 179 178
Store 174 176
181: 6(int) CompositeExtract 177 1
177: 6(int) Load 8(invocation)
182: 6(int) GroupBroadcast 63 181 178
178: 69(ptr) AccessChain 55(data) 79 57
183: 42(ivec2) CompositeConstruct 180 182
179: 49(fvec4) Load 178
184: 174(ptr) AccessChain 55(data) 173 83
180: 80(fvec3) VectorShuffle 179 179 0 1 2
185: 38(ivec4) Load 184
181: 80(fvec3) SubgroupFirstInvocationKHR 180
186: 38(ivec4) VectorShuffle 185 183 4 5 2 3
182: 69(ptr) AccessChain 55(data) 177 57
Store 184 186
183: 49(fvec4) Load 182
187: 6(int) Load 8(invocation)
184: 49(fvec4) VectorShuffle 183 181 4 5 6 3
189: 174(ptr) AccessChain 55(data) 83 83
Store 182 184
190: 38(ivec4) Load 189
185: 6(int) Load 8(invocation)
191: 188(ivec3) VectorShuffle 190 190 0 1 2
186: 69(ptr) AccessChain 55(data) 90 57
192: 6(int) Load 8(invocation)
187: 49(fvec4) Load 186
193: 6(int) CompositeExtract 191 0
188: 49(fvec4) SubgroupFirstInvocationKHR 187
194: 6(int) GroupBroadcast 63 193 192
189: 69(ptr) AccessChain 55(data) 185 57
195: 6(int) CompositeExtract 191 1
Store 189 188
196: 6(int) GroupBroadcast 63 195 192
190: 6(int) Load 8(invocation)
197: 6(int) CompositeExtract 191 2
191: 97(ptr) AccessChain 55(data) 57 67 58
198: 6(int) GroupBroadcast 63 197 192
192: 50(int) Load 191
199: 188(ivec3) CompositeConstruct 194 196 198
193: 50(int) SubgroupFirstInvocationKHR 192
200: 174(ptr) AccessChain 55(data) 187 83
194: 97(ptr) AccessChain 55(data) 190 67 58
201: 38(ivec4) Load 200
Store 194 193
202: 38(ivec4) VectorShuffle 201 199 4 5 6 3
195: 6(int) Load 8(invocation)
196: 105(ptr) AccessChain 55(data) 67 67
197: 51(ivec4) Load 196
198: 104(ivec2) VectorShuffle 197 197 0 1
199: 104(ivec2) SubgroupFirstInvocationKHR 198
200: 105(ptr) AccessChain 55(data) 195 67
201: 51(ivec4) Load 200
202: 51(ivec4) VectorShuffle 201 199 4 5 2 3
Store 200 202
Store 200 202
203: 6(int) Load 8(invocation)
203: 6(int) Load 8(invocation)
204: 105(ptr) AccessChain 55(data) 79 67
204: 174(ptr) AccessChain 55(data) 100 83
205: 51(ivec4) Load 204
205: 38(ivec4) Load 204
206: 115(ivec3) VectorShuffle 205 205 0 1 2
206: 6(int) Load 8(invocation)
207: 115(ivec3) SubgroupFirstInvocationKHR 206
207: 6(int) CompositeExtract 205 0
208: 105(ptr) AccessChain 55(data) 203 67
208: 6(int) GroupBroadcast 63 207 206
209: 51(ivec4) Load 208
209: 6(int) CompositeExtract 205 1
210: 51(ivec4) VectorShuffle 209 207 4 5 6 3
210: 6(int) GroupBroadcast 63 209 206
Store 208 210
211: 6(int) CompositeExtract 205 2
211: 6(int) Load 8(invocation)
212: 6(int) GroupBroadcast 63 211 206
212: 105(ptr) AccessChain 55(data) 90 67
213: 6(int) CompositeExtract 205 3
213: 51(ivec4) Load 212
214: 6(int) GroupBroadcast 63 213 206
214: 51(ivec4) SubgroupFirstInvocationKHR 213
215: 38(ivec4) CompositeConstruct 208 210 212 214
215: 105(ptr) AccessChain 55(data) 211 67
216: 174(ptr) AccessChain 55(data) 203 83
Store 215 214
Store 216 215
216: 6(int) Load 8(invocation)
Branch 47
217: 131(ptr) AccessChain 55(data) 57 79 58
217: Label
218: 6(int) Load 217
218: 6(int) Load 8(invocation)
219: 6(int) SubgroupFirstInvocationKHR 218
219: 59(ptr) AccessChain 55(data) 57 57 58
220: 131(ptr) AccessChain 55(data) 216 79 58
220: 48(float) Load 219
Store 220 219
221: 48(float) SubgroupFirstInvocationKHR 220
221: 6(int) Load 8(invocation)
222: 59(ptr) AccessChain 55(data) 218 57 58
222: 138(ptr) AccessChain 55(data) 67 79
Store 222 221
223: 38(ivec4) Load 222
223: 6(int) Load 8(invocation)
224: 42(ivec2) VectorShuffle 223 223 0 1
224: 69(ptr) AccessChain 55(data) 67 57
225: 42(ivec2) SubgroupFirstInvocationKHR 224
225: 49(fvec4) Load 224
226: 138(ptr) AccessChain 55(data) 221 79
226: 68(fvec2) VectorShuffle 225 225 0 1
227: 38(ivec4) Load 226
227: 68(fvec2) SubgroupFirstInvocationKHR 226
228: 38(ivec4) VectorShuffle 227 225 4 5 2 3
228: 69(ptr) AccessChain 55(data) 223 57
Store 226 228
229: 49(fvec4) Load 228
229: 6(int) Load 8(invocation)
230: 49(fvec4) VectorShuffle 229 227 4 5 2 3
230: 138(ptr) AccessChain 55(data) 79 79
Store 228 230
231: 38(ivec4) Load 230
231: 6(int) Load 8(invocation)
232: 148(ivec3) VectorShuffle 231 231 0 1 2
232: 69(ptr) AccessChain 55(data) 83 57
233: 148(ivec3) SubgroupFirstInvocationKHR 232
233: 49(fvec4) Load 232
234: 138(ptr) AccessChain 55(data) 229 79
234: 84(fvec3) VectorShuffle 233 233 0 1 2
235: 38(ivec4) Load 234
235: 84(fvec3) SubgroupFirstInvocationKHR 234
236: 38(ivec4) VectorShuffle 235 233 4 5 6 3
236: 69(ptr) AccessChain 55(data) 231 57
Store 234 236
237: 49(fvec4) Load 236
237: 6(int) Load 8(invocation)
238: 49(fvec4) VectorShuffle 237 235 4 5 6 3
238: 138(ptr) AccessChain 55(data) 90 79
Store 236 238
239: 38(ivec4) Load 238
239: 6(int) Load 8(invocation)
240: 38(ivec4) SubgroupFirstInvocationKHR 239
240: 69(ptr) AccessChain 55(data) 100 57
241: 138(ptr) AccessChain 55(data) 237 79
241: 49(fvec4) Load 240
Store 241 240
242: 49(fvec4) SubgroupFirstInvocationKHR 241
243: 69(ptr) AccessChain 55(data) 239 57
Store 243 242
244: 6(int) Load 8(invocation)
245: 115(ptr) AccessChain 55(data) 57 67 58
246: 50(int) Load 245
247: 50(int) SubgroupFirstInvocationKHR 246
248: 115(ptr) AccessChain 55(data) 244 67 58
Store 248 247
249: 6(int) Load 8(invocation)
250: 123(ptr) AccessChain 55(data) 67 67
251: 51(ivec4) Load 250
252: 122(ivec2) VectorShuffle 251 251 0 1
253: 122(ivec2) SubgroupFirstInvocationKHR 252
254: 123(ptr) AccessChain 55(data) 249 67
255: 51(ivec4) Load 254
256: 51(ivec4) VectorShuffle 255 253 4 5 2 3
Store 254 256
257: 6(int) Load 8(invocation)
258: 123(ptr) AccessChain 55(data) 83 67
259: 51(ivec4) Load 258
260: 137(ivec3) VectorShuffle 259 259 0 1 2
261: 137(ivec3) SubgroupFirstInvocationKHR 260
262: 123(ptr) AccessChain 55(data) 257 67
263: 51(ivec4) Load 262
264: 51(ivec4) VectorShuffle 263 261 4 5 6 3
Store 262 264
265: 6(int) Load 8(invocation)
266: 123(ptr) AccessChain 55(data) 100 67
267: 51(ivec4) Load 266
268: 51(ivec4) SubgroupFirstInvocationKHR 267
269: 123(ptr) AccessChain 55(data) 265 67
Store 269 268
270: 6(int) Load 8(invocation)
271: 167(ptr) AccessChain 55(data) 57 83 58
272: 6(int) Load 271
273: 6(int) SubgroupFirstInvocationKHR 272
274: 167(ptr) AccessChain 55(data) 270 83 58
Store 274 273
275: 6(int) Load 8(invocation)
276: 174(ptr) AccessChain 55(data) 67 83
277: 38(ivec4) Load 276
278: 42(ivec2) VectorShuffle 277 277 0 1
279: 42(ivec2) SubgroupFirstInvocationKHR 278
280: 174(ptr) AccessChain 55(data) 275 83
281: 38(ivec4) Load 280
282: 38(ivec4) VectorShuffle 281 279 4 5 2 3
Store 280 282
283: 6(int) Load 8(invocation)
284: 174(ptr) AccessChain 55(data) 83 83
285: 38(ivec4) Load 284
286: 188(ivec3) VectorShuffle 285 285 0 1 2
287: 188(ivec3) SubgroupFirstInvocationKHR 286
288: 174(ptr) AccessChain 55(data) 283 83
289: 38(ivec4) Load 288
290: 38(ivec4) VectorShuffle 289 287 4 5 6 3
Store 288 290
291: 6(int) Load 8(invocation)
292: 174(ptr) AccessChain 55(data) 100 83
293: 38(ivec4) Load 292
294: 38(ivec4) SubgroupFirstInvocationKHR 293
295: 174(ptr) AccessChain 55(data) 291 83
Store 295 294
Branch 47
Branch 47
47: Label
47: Label
Return
Return
...
...
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