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
f9d08a25
Unverified
Commit
f9d08a25
authored
Jun 18, 2019
by
John Kessenich
Committed by
GitHub
Jun 18, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1804 from KhronosGroup/fix-930-subgroup--mask-ops
AST/SPV: Fix #930: translate uvec4 <-> uint64 for SubgroupGeMask et. al.
parents
11805e41
8e96e247
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
451 additions
and
345 deletions
+451
-345
GlslangToSpv.cpp
SPIRV/GlslangToSpv.cpp
+101
-14
spv.shaderBallot.comp.out
Test/baseResults/spv.shaderBallot.comp.out
+349
-330
revision.h
glslang/Include/revision.h
+1
-1
No files found.
SPIRV/GlslangToSpv.cpp
View file @
f9d08a25
...
...
@@ -138,7 +138,7 @@ protected:
spv
::
LoopControlMask
TranslateLoopControl
(
const
glslang
::
TIntermLoop
&
,
std
::
vector
<
unsigned
int
>&
operands
)
const
;
spv
::
StorageClass
TranslateStorageClass
(
const
glslang
::
TType
&
);
void
addIndirectionIndexCapabilities
(
const
glslang
::
TType
&
baseType
,
const
glslang
::
TType
&
indexType
);
spv
::
Id
createSpvVariable
(
const
glslang
::
TIntermSymbol
*
);
spv
::
Id
createSpvVariable
(
const
glslang
::
TIntermSymbol
*
,
spv
::
Id
forcedType
);
spv
::
Id
getSampledType
(
const
glslang
::
TSampler
&
);
spv
::
Id
getInvertedSwizzleType
(
const
glslang
::
TIntermTyped
&
);
spv
::
Id
createInvertedSwizzle
(
spv
::
Decoration
precision
,
const
glslang
::
TIntermTyped
&
,
spv
::
Id
parentResult
);
...
...
@@ -208,6 +208,8 @@ protected:
if
(
builder
.
getSpvVersion
()
<
glslang
::
EShTargetSpv_1_3
)
builder
.
addExtension
(
ext
);
}
std
::
pair
<
spv
::
Id
,
spv
::
Id
>
getForcedType
(
spv
::
BuiltIn
,
const
glslang
::
TType
&
);
spv
::
Id
translateForcedType
(
spv
::
Id
object
);
glslang
::
SpvOptions
&
options
;
spv
::
Function
*
shaderEntry
;
...
...
@@ -238,6 +240,10 @@ protected:
std
::
unordered_map
<
std
::
string
,
const
glslang
::
TIntermSymbol
*>
counterOriginator
;
// Map pointee types for EbtReference to their forward pointers
std
::
map
<
const
glslang
::
TType
*
,
spv
::
Id
>
forwardPointers
;
// Type forcing, for when SPIR-V wants a different type than the AST,
// requiring local translation to and from SPIR-V type on every access.
// Maps <builtin-variable-id -> AST-required-type-id>
std
::
unordered_map
<
spv
::
Id
,
spv
::
Id
>
forceType
;
};
//
...
...
@@ -733,27 +739,27 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case
glslang
:
:
EbvSubGroupEqMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupEqMask
KHR
;
return
spv
::
BuiltInSubgroupEqMask
;
case
glslang
:
:
EbvSubGroupGeMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupGeMask
KHR
;
return
spv
::
BuiltInSubgroupGeMask
;
case
glslang
:
:
EbvSubGroupGtMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupGtMask
KHR
;
return
spv
::
BuiltInSubgroupGtMask
;
case
glslang
:
:
EbvSubGroupLeMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupLeMask
KHR
;
return
spv
::
BuiltInSubgroupLeMask
;
case
glslang
:
:
EbvSubGroupLtMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupLtMask
KHR
;
return
spv
::
BuiltInSubgroupLtMask
;
case
glslang
:
:
EbvNumSubgroups
:
builder
.
addCapability
(
spv
::
CapabilityGroupNonUniform
);
...
...
@@ -795,6 +801,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder
.
addCapability
(
spv
::
CapabilityGroupNonUniform
);
builder
.
addCapability
(
spv
::
CapabilityGroupNonUniformBallot
);
return
spv
::
BuiltInSubgroupLtMask
;
#ifdef AMD_EXTENSIONS
case
glslang
:
:
EbvBaryCoordNoPersp
:
builder
.
addExtension
(
spv
::
E_SPV_AMD_shader_explicit_vertex_parameter
);
...
...
@@ -1620,8 +1627,8 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
// Formal function parameters were mapped during makeFunctions().
spv
::
Id
id
=
getSymbolId
(
symbol
);
// Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
if
(
builder
.
isPointer
(
id
))
{
// Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
// Consider adding to the OpEntryPoint interface list.
// Only looking at structures if they have at least one member.
if
(
!
symbol
->
getType
().
isStruct
()
||
symbol
->
getType
().
getStruct
()
->
size
()
>
0
)
{
...
...
@@ -1633,6 +1640,14 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
iOSet
.
insert
(
id
);
}
}
// If the SPIR-V type is required to be different than the AST type,
// translate now from the SPIR-V type to the AST type, for the consuming
// operation.
// Note this turns it from an l-value to an r-value.
// Currently, all symbols needing this are inputs; avoid the map lookup when non-input.
if
(
symbol
->
getType
().
getQualifier
().
storage
==
glslang
::
EvqVaryingIn
)
id
=
translateForcedType
(
id
);
}
// Only process non-linkage-only nodes for generating actual static uses
...
...
@@ -1650,8 +1665,10 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
// See comments in handleUserFunctionCall().
// B) Specialization constants (normal constants don't even come in as a variable),
// These are also pure R-values.
// C) R-Values from type translation, see above call to translateForcedType()
glslang
::
TQualifier
qualifier
=
symbol
->
getQualifier
();
if
(
qualifier
.
isSpecConstant
()
||
rValueParameters
.
find
(
symbol
->
getId
())
!=
rValueParameters
.
end
())
if
(
qualifier
.
isSpecConstant
()
||
rValueParameters
.
find
(
symbol
->
getId
())
!=
rValueParameters
.
end
()
||
!
builder
.
isPointerType
(
builder
.
getTypeId
(
id
)))
builder
.
setAccessChainRValue
(
id
);
else
builder
.
setAccessChainLValue
(
id
);
...
...
@@ -1908,6 +1925,71 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
}
}
// Figure out what, if any, type changes are needed when accessing a specific built-in.
// Returns <the type SPIR-V requires for declarion, the type to translate to on use>.
// Also see comment for 'forceType', regarding tracking SPIR-V-required types.
std
::
pair
<
spv
::
Id
,
spv
::
Id
>
TGlslangToSpvTraverser
::
getForcedType
(
spv
::
BuiltIn
builtIn
,
const
glslang
::
TType
&
glslangType
)
{
switch
(
builtIn
)
{
case
spv
:
:
BuiltInSubgroupEqMask
:
case
spv
:
:
BuiltInSubgroupGeMask
:
case
spv
:
:
BuiltInSubgroupGtMask
:
case
spv
:
:
BuiltInSubgroupLeMask
:
case
spv
:
:
BuiltInSubgroupLtMask
:
{
// these require changing a 64-bit scaler -> a vector of 32-bit components
if
(
glslangType
.
isVector
())
break
;
std
::
pair
<
spv
::
Id
,
spv
::
Id
>
ret
(
builder
.
makeVectorType
(
builder
.
makeUintType
(
32
),
4
),
builder
.
makeUintType
(
64
));
return
ret
;
}
default
:
break
;
}
std
::
pair
<
spv
::
Id
,
spv
::
Id
>
ret
(
spv
::
NoType
,
spv
::
NoType
);
return
ret
;
}
// For an object previously identified (see getForcedType() and forceType)
// as needing type translations, do the translation needed for a load, turning
// an L-value into in R-value.
spv
::
Id
TGlslangToSpvTraverser
::
translateForcedType
(
spv
::
Id
object
)
{
const
auto
forceIt
=
forceType
.
find
(
object
);
if
(
forceIt
==
forceType
.
end
())
return
object
;
spv
::
Id
desiredTypeId
=
forceIt
->
second
;
spv
::
Id
objectTypeId
=
builder
.
getTypeId
(
object
);
assert
(
builder
.
isPointerType
(
objectTypeId
));
objectTypeId
=
builder
.
getContainedTypeId
(
objectTypeId
);
if
(
builder
.
isVectorType
(
objectTypeId
)
&&
builder
.
getScalarTypeWidth
(
builder
.
getContainedTypeId
(
objectTypeId
))
==
32
)
{
if
(
builder
.
getScalarTypeWidth
(
desiredTypeId
)
==
64
)
{
// handle 32-bit v.xy* -> 64-bit
builder
.
clearAccessChain
();
builder
.
setAccessChainLValue
(
object
);
object
=
builder
.
accessChainLoad
(
spv
::
NoPrecision
,
spv
::
DecorationMax
,
objectTypeId
);
std
::
vector
<
spv
::
Id
>
components
;
components
.
push_back
(
builder
.
createCompositeExtract
(
object
,
builder
.
getContainedTypeId
(
objectTypeId
),
0
));
components
.
push_back
(
builder
.
createCompositeExtract
(
object
,
builder
.
getContainedTypeId
(
objectTypeId
),
1
));
spv
::
Id
vecType
=
builder
.
makeVectorType
(
builder
.
getContainedTypeId
(
objectTypeId
),
2
);
return
builder
.
createUnaryOp
(
spv
::
OpBitcast
,
desiredTypeId
,
builder
.
createCompositeConstruct
(
vecType
,
components
));
}
else
{
logger
->
missingFunctionality
(
"forcing 32-bit vector type to non 64-bit scalar"
);
}
}
else
{
logger
->
missingFunctionality
(
"forcing non 32-bit vector type"
);
}
return
object
;
}
bool
TGlslangToSpvTraverser
::
visitUnary
(
glslang
::
TVisit
/* visit */
,
glslang
::
TIntermUnary
*
node
)
{
builder
.
setLine
(
node
->
getLoc
().
line
,
node
->
getLoc
().
getFilename
());
...
...
@@ -3037,7 +3119,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
return
false
;
}
spv
::
Id
TGlslangToSpvTraverser
::
createSpvVariable
(
const
glslang
::
TIntermSymbol
*
node
)
spv
::
Id
TGlslangToSpvTraverser
::
createSpvVariable
(
const
glslang
::
TIntermSymbol
*
node
,
spv
::
Id
forcedType
)
{
// First, steer off constants, which are not SPIR-V variables, but
// can still have a mapping to a SPIR-V Id.
...
...
@@ -3050,7 +3132,8 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
// Now, handle actual variables
spv
::
StorageClass
storageClass
=
TranslateStorageClass
(
node
->
getType
());
spv
::
Id
spvType
=
convertGlslangToSpvType
(
node
->
getType
());
spv
::
Id
spvType
=
forcedType
==
spv
::
NoType
?
convertGlslangToSpvType
(
node
->
getType
())
:
forcedType
;
const
bool
contains16BitType
=
node
->
getType
().
containsBasicType
(
glslang
::
EbtFloat16
)
||
node
->
getType
().
containsBasicType
(
glslang
::
EbtInt16
)
||
...
...
@@ -7543,8 +7626,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
}
// it was not found, create it
id
=
createSpvVariable
(
symbol
);
spv
::
BuiltIn
builtIn
=
TranslateBuiltInDecoration
(
symbol
->
getQualifier
().
builtIn
,
false
);
auto
forcedType
=
getForcedType
(
builtIn
,
symbol
->
getType
());
id
=
createSpvVariable
(
symbol
,
forcedType
.
first
);
symbolValues
[
symbol
->
getId
()]
=
id
;
if
(
forcedType
.
second
!=
spv
::
NoType
)
forceType
[
id
]
=
forcedType
.
second
;
if
(
symbol
->
getBasicType
()
!=
glslang
::
EbtBlock
)
{
builder
.
addDecoration
(
id
,
TranslatePrecisionDecoration
(
symbol
->
getType
()));
...
...
@@ -7604,10 +7691,10 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder
.
addDecoration
(
id
,
memory
[
i
]);
}
// built-in variable decorations
spv
::
BuiltIn
builtIn
=
TranslateBuiltInDecoration
(
symbol
->
getQualifier
().
builtIn
,
false
);
if
(
builtIn
!=
spv
::
BuiltInMax
)
// add built-in variable decoration
if
(
builtIn
!=
spv
::
BuiltInMax
)
{
builder
.
addDecoration
(
id
,
spv
::
DecorationBuiltIn
,
(
int
)
builtIn
);
}
// nonuniform
builder
.
addDecoration
(
id
,
TranslateNonUniformDecoration
(
symbol
->
getType
().
getQualifier
()));
...
...
Test/baseResults/spv.shaderBallot.comp.out
View file @
f9d08a25
spv.shaderBallot.comp
Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by
29
8
// Id's are bound by
31
8
Capability Shader
Capability Int64
...
...
@@ -10,7 +9,7 @@ Validation failed
Extension "SPV_KHR_shader_ballot"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 10 12 2
1 23 26 29 32
EntryPoint GLCompute 4 "main" 10 12 2
2 29 36 43 50
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_ARB_gpu_shader_int64"
...
...
@@ -20,30 +19,30 @@ Validation failed
Name 10 "gl_SubGroupInvocationARB"
Name 12 "gl_SubGroupSizeARB"
Name 19 "relMask"
Name 2
1
"gl_SubGroupEqMaskARB"
Name 2
3
"gl_SubGroupGeMaskARB"
Name
2
6 "gl_SubGroupGtMaskARB"
Name
29
"gl_SubGroupLeMaskARB"
Name
32
"gl_SubGroupLtMaskARB"
Name
5
2 "Buffers"
MemberName
5
2(Buffers) 0 "f4"
MemberName
5
2(Buffers) 1 "i4"
MemberName
5
2(Buffers) 2 "u4"
Name
5
5 "data"
Name 2
2
"gl_SubGroupEqMaskARB"
Name 2
9
"gl_SubGroupGeMaskARB"
Name
3
6 "gl_SubGroupGtMaskARB"
Name
43
"gl_SubGroupLeMaskARB"
Name
50
"gl_SubGroupLtMaskARB"
Name
7
2 "Buffers"
MemberName
7
2(Buffers) 0 "f4"
MemberName
7
2(Buffers) 1 "i4"
MemberName
7
2(Buffers) 2 "u4"
Name
7
5 "data"
Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId
Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize
Decorate 2
1
(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
Decorate 2
3
(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
Decorate
2
6(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
Decorate
29
(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
Decorate
32
(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
MemberDecorate
5
2(Buffers) 0 Offset 0
MemberDecorate
5
2(Buffers) 1 Offset 16
MemberDecorate
5
2(Buffers) 2 Offset 32
Decorate
5
2(Buffers) BufferBlock
Decorate
5
5(data) DescriptorSet 0
Decorate
5
5(data) Binding 0
Decorate
29
7 BuiltIn WorkgroupSize
Decorate 2
2
(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
Decorate 2
9
(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
Decorate
3
6(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
Decorate
43
(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
Decorate
50
(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
MemberDecorate
7
2(Buffers) 0 Offset 0
MemberDecorate
7
2(Buffers) 1 Offset 16
MemberDecorate
7
2(Buffers) 2 Offset 32
Decorate
7
2(Buffers) BufferBlock
Decorate
7
5(data) DescriptorSet 0
Decorate
7
5(data) Binding 0
Decorate
31
7 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
...
...
@@ -54,43 +53,43 @@ Validation failed
15: 6(int) Constant 4
17: TypeInt 64 0
18: TypePointer Function 17(int64_t)
20: Type
Pointer Input 17(int64_t)
21(gl_SubGroupEqMaskARB): 20(ptr) Variable Input
2
3(gl_SubGroupGeMaskARB): 20
(ptr) Variable Input
26(gl_SubGroupGtMaskARB): 20(ptr) Variable Input
29(gl_SubGroup
LeMaskARB): 20
(ptr) Variable Input
3
2(gl_SubGroupLtMaskARB): 20
(ptr) Variable Input
36: TypeBool
37: 36(bool) ConstantTrue
38: TypeVector 6(int) 4
42: TypeVector 6(int) 2
4
8: TypeFloat 32
49: TypeVector 4
8(float) 4
5
0: TypeInt 32 1
51: TypeVector 5
0(int) 4
52(Buffers): TypeStruct 49(fvec4) 51(ivec4) 38
(ivec4)
53: TypeArray 5
2(Buffers) 15
54: TypePointer Uniform 5
3
55(data): 5
4(ptr) Variable Uniform
57: 5
0(int) Constant 0
5
8: 6(int) Constant 0
59: TypePointer Uniform 4
8(float)
66: 5
0(int) Constant 1
67: TypeVector 4
8(float) 2
68: TypePointer Uniform 4
9(fvec4)
82: 5
0(int) Constant 2
83: TypeVector 4
8(float) 3
99: 5
0(int) Constant 3
1
14: TypePointer Uniform 5
0(int)
1
21: TypeVector 5
0(int) 2
1
22: TypePointer Uniform 5
1(ivec4)
1
36: TypeVector 5
0(int) 3
1
6
6: TypePointer Uniform 6(int)
1
73: TypePointer Uniform 38
(ivec4)
18
7: TypeVector 6(int) 3
29
5: 6(int) Constant 8
29
6: 6(int) Constant 1
297: 187(ivec3) ConstantComposite 295 295 29
6
20: Type
Vector 6(int) 4
21: TypePointer Input 20(ivec4)
2
2(gl_SubGroupEqMaskARB): 21
(ptr) Variable Input
26: TypeVector 6(int) 2
29(gl_SubGroup
GeMaskARB): 21
(ptr) Variable Input
3
6(gl_SubGroupGtMaskARB): 21
(ptr) Variable Input
43(gl_SubGroupLeMaskARB): 21(ptr) Variable Input
50(gl_SubGroupLtMaskARB): 21(ptr) Variable Input
58: TypeBool
59: 58(bool) ConstantTrue
6
8: TypeFloat 32
69: TypeVector 6
8(float) 4
7
0: TypeInt 32 1
71: TypeVector 7
0(int) 4
72(Buffers): TypeStruct 69(fvec4) 71(ivec4) 20
(ivec4)
73: TypeArray 7
2(Buffers) 15
74: TypePointer Uniform 7
3
75(data): 7
4(ptr) Variable Uniform
77: 7
0(int) Constant 0
7
8: 6(int) Constant 0
79: TypePointer Uniform 6
8(float)
86: 7
0(int) Constant 1
87: TypeVector 6
8(float) 2
88: TypePointer Uniform 6
9(fvec4)
102: 7
0(int) Constant 2
103: TypeVector 6
8(float) 3
119: 7
0(int) Constant 3
1
34: TypePointer Uniform 7
0(int)
1
41: TypeVector 7
0(int) 2
1
42: TypePointer Uniform 7
1(ivec4)
1
56: TypeVector 7
0(int) 3
1
8
6: TypePointer Uniform 6(int)
1
93: TypePointer Uniform 20
(ivec4)
20
7: TypeVector 6(int) 3
31
5: 6(int) Constant 8
31
6: 6(int) Constant 1
317: 207(ivec3) ConstantComposite 315 315 31
6
4(main): 2 Function None 3
5: Label
8(invocation): 7(ptr) Variable Function
...
...
@@ -100,275 +99,295 @@ Validation failed
14: 6(int) IAdd 11 13
16: 6(int) UMod 14 15
Store 8(invocation) 16
22: 17(int64_t) Load 21(gl_SubGroupEqMaskARB)
24: 17(int64_t) Load 23(gl_SubGroupGeMaskARB)
25: 17(int64_t) IAdd 22 24
27: 17(int64_t) Load 26(gl_SubGroupGtMaskARB)
28: 17(int64_t) IAdd 25 27
30: 17(int64_t) Load 29(gl_SubGroupLeMaskARB)
31: 17(int64_t) IAdd 28 30
33: 17(int64_t) Load 32(gl_SubGroupLtMaskARB)
34: 17(int64_t) IAdd 31 33
Store 19(relMask) 34
35: 17(int64_t) Load 19(relMask)
39: 38(ivec4) SubgroupBallotKHR 37
40: 6(int) CompositeExtract 39 0
41: 6(int) CompositeExtract 39 1
43: 42(ivec2) CompositeConstruct 40 41
44: 17(int64_t) Bitcast 43
45: 36(bool) IEqual 35 44
SelectionMerge 47 None
BranchConditional 45 46 216
46: Label
56: 6(int) Load 8(invocation)
60: 59(ptr) AccessChain 55(data) 57 57 58
61: 48(float) Load 60
62: 6(int) Load 8(invocation)
63: 48(float) SubgroupReadInvocationKHR 61 62
64: 59(ptr) AccessChain 55(data) 56 57 58
Store 64 63
65: 6(int) Load 8(invocation)
69: 68(ptr) AccessChain 55(data) 66 57
70: 49(fvec4) Load 69
71: 67(fvec2) VectorShuffle 70 70 0 1
72: 6(int) Load 8(invocation)
73: 48(float) CompositeExtract 71 0
74: 48(float) SubgroupReadInvocationKHR 73 72
75: 48(float) CompositeExtract 71 1
76: 48(float) SubgroupReadInvocationKHR 75 72
77: 67(fvec2) CompositeConstruct 74 76
78: 68(ptr) AccessChain 55(data) 65 57
79: 49(fvec4) Load 78
80: 49(fvec4) VectorShuffle 79 77 4 5 2 3
Store 78 80
81: 6(int) Load 8(invocation)
84: 68(ptr) AccessChain 55(data) 82 57
85: 49(fvec4) Load 84
86: 83(fvec3) VectorShuffle 85 85 0 1 2
87: 6(int) Load 8(invocation)
88: 48(float) CompositeExtract 86 0
89: 48(float) SubgroupReadInvocationKHR 88 87
90: 48(float) CompositeExtract 86 1
91: 48(float) SubgroupReadInvocationKHR 90 87
92: 48(float) CompositeExtract 86 2
93: 48(float) SubgroupReadInvocationKHR 92 87
94: 83(fvec3) CompositeConstruct 89 91 93
95: 68(ptr) AccessChain 55(data) 81 57
96: 49(fvec4) Load 95
97: 49(fvec4) VectorShuffle 96 94 4 5 6 3
Store 95 97
98: 6(int) Load 8(invocation)
100: 68(ptr) AccessChain 55(data) 99 57
101: 49(fvec4) Load 100
102: 6(int) Load 8(invocation)
103: 48(float) CompositeExtract 101 0
104: 48(float) SubgroupReadInvocationKHR 103 102
105: 48(float) CompositeExtract 101 1
106: 48(float) SubgroupReadInvocationKHR 105 102
107: 48(float) CompositeExtract 101 2
108: 48(float) SubgroupReadInvocationKHR 107 102
109: 48(float) CompositeExtract 101 3
110: 48(float) SubgroupReadInvocationKHR 109 102
111: 49(fvec4) CompositeConstruct 104 106 108 110
112: 68(ptr) AccessChain 55(data) 98 57
Store 112 111
113: 6(int) Load 8(invocation)
115: 114(ptr) AccessChain 55(data) 57 66 58
116: 50(int) Load 115
117: 6(int) Load 8(invocation)
118: 50(int) SubgroupReadInvocationKHR 116 117
119: 114(ptr) AccessChain 55(data) 113 66 58
Store 119 118
120: 6(int) Load 8(invocation)
123: 122(ptr) AccessChain 55(data) 66 66
124: 51(ivec4) Load 123
125: 121(ivec2) VectorShuffle 124 124 0 1
126: 6(int) Load 8(invocation)
127: 50(int) CompositeExtract 125 0
128: 50(int) SubgroupReadInvocationKHR 127 126
129: 50(int) CompositeExtract 125 1
130: 50(int) SubgroupReadInvocationKHR 129 126
131: 121(ivec2) CompositeConstruct 128 130
132: 122(ptr) AccessChain 55(data) 120 66
133: 51(ivec4) Load 132
134: 51(ivec4) VectorShuffle 133 131 4 5 2 3
Store 132 134
135: 6(int) Load 8(invocation)
137: 122(ptr) AccessChain 55(data) 82 66
138: 51(ivec4) Load 137
139: 136(ivec3) VectorShuffle 138 138 0 1 2
23: 20(ivec4) Load 22(gl_SubGroupEqMaskARB)
24: 6(int) CompositeExtract 23 0
25: 6(int) CompositeExtract 23 1
27: 26(ivec2) CompositeConstruct 24 25
28: 17(int64_t) Bitcast 27
30: 20(ivec4) Load 29(gl_SubGroupGeMaskARB)
31: 6(int) CompositeExtract 30 0
32: 6(int) CompositeExtract 30 1
33: 26(ivec2) CompositeConstruct 31 32
34: 17(int64_t) Bitcast 33
35: 17(int64_t) IAdd 28 34
37: 20(ivec4) Load 36(gl_SubGroupGtMaskARB)
38: 6(int) CompositeExtract 37 0
39: 6(int) CompositeExtract 37 1
40: 26(ivec2) CompositeConstruct 38 39
41: 17(int64_t) Bitcast 40
42: 17(int64_t) IAdd 35 41
44: 20(ivec4) Load 43(gl_SubGroupLeMaskARB)
45: 6(int) CompositeExtract 44 0
46: 6(int) CompositeExtract 44 1
47: 26(ivec2) CompositeConstruct 45 46
48: 17(int64_t) Bitcast 47
49: 17(int64_t) IAdd 42 48
51: 20(ivec4) Load 50(gl_SubGroupLtMaskARB)
52: 6(int) CompositeExtract 51 0
53: 6(int) CompositeExtract 51 1
54: 26(ivec2) CompositeConstruct 52 53
55: 17(int64_t) Bitcast 54
56: 17(int64_t) IAdd 49 55
Store 19(relMask) 56
57: 17(int64_t) Load 19(relMask)
60: 20(ivec4) SubgroupBallotKHR 59
61: 6(int) CompositeExtract 60 0
62: 6(int) CompositeExtract 60 1
63: 26(ivec2) CompositeConstruct 61 62
64: 17(int64_t) Bitcast 63
65: 58(bool) IEqual 57 64
SelectionMerge 67 None
BranchConditional 65 66 236
66: Label
76: 6(int) Load 8(invocation)
80: 79(ptr) AccessChain 75(data) 77 77 78
81: 68(float) Load 80
82: 6(int) Load 8(invocation)
83: 68(float) SubgroupReadInvocationKHR 81 82
84: 79(ptr) AccessChain 75(data) 76 77 78
Store 84 83
85: 6(int) Load 8(invocation)
89: 88(ptr) AccessChain 75(data) 86 77
90: 69(fvec4) Load 89
91: 87(fvec2) VectorShuffle 90 90 0 1
92: 6(int) Load 8(invocation)
93: 68(float) CompositeExtract 91 0
94: 68(float) SubgroupReadInvocationKHR 93 92
95: 68(float) CompositeExtract 91 1
96: 68(float) SubgroupReadInvocationKHR 95 92
97: 87(fvec2) CompositeConstruct 94 96
98: 88(ptr) AccessChain 75(data) 85 77
99: 69(fvec4) Load 98
100: 69(fvec4) VectorShuffle 99 97 4 5 2 3
Store 98 100
101: 6(int) Load 8(invocation)
104: 88(ptr) AccessChain 75(data) 102 77
105: 69(fvec4) Load 104
106: 103(fvec3) VectorShuffle 105 105 0 1 2
107: 6(int) Load 8(invocation)
108: 68(float) CompositeExtract 106 0
109: 68(float) SubgroupReadInvocationKHR 108 107
110: 68(float) CompositeExtract 106 1
111: 68(float) SubgroupReadInvocationKHR 110 107
112: 68(float) CompositeExtract 106 2
113: 68(float) SubgroupReadInvocationKHR 112 107
114: 103(fvec3) CompositeConstruct 109 111 113
115: 88(ptr) AccessChain 75(data) 101 77
116: 69(fvec4) Load 115
117: 69(fvec4) VectorShuffle 116 114 4 5 6 3
Store 115 117
118: 6(int) Load 8(invocation)
120: 88(ptr) AccessChain 75(data) 119 77
121: 69(fvec4) Load 120
122: 6(int) Load 8(invocation)
123: 68(float) CompositeExtract 121 0
124: 68(float) SubgroupReadInvocationKHR 123 122
125: 68(float) CompositeExtract 121 1
126: 68(float) SubgroupReadInvocationKHR 125 122
127: 68(float) CompositeExtract 121 2
128: 68(float) SubgroupReadInvocationKHR 127 122
129: 68(float) CompositeExtract 121 3
130: 68(float) SubgroupReadInvocationKHR 129 122
131: 69(fvec4) CompositeConstruct 124 126 128 130
132: 88(ptr) AccessChain 75(data) 118 77
Store 132 131
133: 6(int) Load 8(invocation)
135: 134(ptr) AccessChain 75(data) 77 86 78
136: 70(int) Load 135
137: 6(int) Load 8(invocation)
138: 70(int) SubgroupReadInvocationKHR 136 137
139: 134(ptr) AccessChain 75(data) 133 86 78
Store 139 138
140: 6(int) Load 8(invocation)
141: 50(int) CompositeExtract 139 0
142: 50(int) SubgroupReadInvocationKHR 141 140
143: 50(int) CompositeExtract 139 1
144: 50(int) SubgroupReadInvocationKHR 143 140
145: 50(int) CompositeExtract 139 2
146: 50(int) SubgroupReadInvocationKHR 145 140
147: 136(ivec3) CompositeConstruct 142 144 146
148: 122(ptr) AccessChain 55(data) 135 66
149: 51(ivec4) Load 148
150: 51(ivec4) VectorShuffle 149 147 4 5 6 3
Store 148 150
151: 6(int) Load 8(invocation)
152: 122(ptr) AccessChain 55(data) 99 66
153: 51(ivec4) Load 152
154: 6(int) Load 8(invocation)
155: 50(int) CompositeExtract 153 0
156: 50(int) SubgroupReadInvocationKHR 155 154
157: 50(int) CompositeExtract 153 1
158: 50(int) SubgroupReadInvocationKHR 157 154
159: 50(int) CompositeExtract 153 2
160: 50(int) SubgroupReadInvocationKHR 159 154
161: 50(int) CompositeExtract 153 3
162: 50(int) SubgroupReadInvocationKHR 161 154
163: 51(ivec4) CompositeConstruct 156 158 160 162
164: 122(ptr) AccessChain 55(data) 151 66
Store 164 163
165: 6(int) Load 8(invocation)
167: 166(ptr) AccessChain 55(data) 57 82 58
168: 6(int) Load 167
169: 6(int) Load 8(invocation)
170: 6(int) SubgroupReadInvocationKHR 168 169
171: 166(ptr) AccessChain 55(data) 165 82 58
Store 171 170
172: 6(int) Load 8(invocation)
174: 173(ptr) AccessChain 55(data) 66 82
175: 38(ivec4) Load 174
176: 42(ivec2) VectorShuffle 175 175 0 1
177: 6(int) Load 8(invocation)
178: 6(int) CompositeExtract 176 0
179: 6(int) SubgroupReadInvocationKHR 178 177
180: 6(int) CompositeExtract 176 1
181: 6(int) SubgroupReadInvocationKHR 180 177
182: 42(ivec2) CompositeConstruct 179 181
183: 173(ptr) AccessChain 55(data) 172 82
184: 38(ivec4) Load 183
185: 38(ivec4) VectorShuffle 184 182 4 5 2 3
Store 183 185
186: 6(int) Load 8(invocation)
188: 173(ptr) AccessChain 55(data) 82 82
189: 38(ivec4) Load 188
190: 187(ivec3) VectorShuffle 189 189 0 1 2
191: 6(int) Load 8(invocation)
192: 6(int) CompositeExtract 190 0
193: 6(int) SubgroupReadInvocationKHR 192 191
194: 6(int) CompositeExtract 190 1
195: 6(int) SubgroupReadInvocationKHR 194 191
196: 6(int) CompositeExtract 190 2
197: 6(int) SubgroupReadInvocationKHR 196 191
198: 187(ivec3) CompositeConstruct 193 195 197
199: 173(ptr) AccessChain 55(data) 186 82
200: 38(ivec4) Load 199
201: 38(ivec4) VectorShuffle 200 198 4 5 6 3
Store 199 201
202: 6(int) Load 8(invocation)
203: 173(ptr) AccessChain 55(data) 99 82
204: 38(ivec4) Load 203
205: 6(int) Load 8(invocation)
206: 6(int) CompositeExtract 204 0
207: 6(int) SubgroupReadInvocationKHR 206 205
208: 6(int) CompositeExtract 204 1
209: 6(int) SubgroupReadInvocationKHR 208 205
210: 6(int) CompositeExtract 204 2
211: 6(int) SubgroupReadInvocationKHR 210 205
212: 6(int) CompositeExtract 204 3
213: 6(int) SubgroupReadInvocationKHR 212 205
214: 38(ivec4) CompositeConstruct 207 209 211 213
215: 173(ptr) AccessChain 55(data) 202 82
Store 215 214
Branch 47
216: Label
217: 6(int) Load 8(invocation)
218: 59(ptr) AccessChain 55(data) 57 57 58
219: 48(float) Load 218
220: 48(float) SubgroupFirstInvocationKHR 219
221: 59(ptr) AccessChain 55(data) 217 57 58
Store 221 220
143: 142(ptr) AccessChain 75(data) 86 86
144: 71(ivec4) Load 143
145: 141(ivec2) VectorShuffle 144 144 0 1
146: 6(int) Load 8(invocation)
147: 70(int) CompositeExtract 145 0
148: 70(int) SubgroupReadInvocationKHR 147 146
149: 70(int) CompositeExtract 145 1
150: 70(int) SubgroupReadInvocationKHR 149 146
151: 141(ivec2) CompositeConstruct 148 150
152: 142(ptr) AccessChain 75(data) 140 86
153: 71(ivec4) Load 152
154: 71(ivec4) VectorShuffle 153 151 4 5 2 3
Store 152 154
155: 6(int) Load 8(invocation)
157: 142(ptr) AccessChain 75(data) 102 86
158: 71(ivec4) Load 157
159: 156(ivec3) VectorShuffle 158 158 0 1 2
160: 6(int) Load 8(invocation)
161: 70(int) CompositeExtract 159 0
162: 70(int) SubgroupReadInvocationKHR 161 160
163: 70(int) CompositeExtract 159 1
164: 70(int) SubgroupReadInvocationKHR 163 160
165: 70(int) CompositeExtract 159 2
166: 70(int) SubgroupReadInvocationKHR 165 160
167: 156(ivec3) CompositeConstruct 162 164 166
168: 142(ptr) AccessChain 75(data) 155 86
169: 71(ivec4) Load 168
170: 71(ivec4) VectorShuffle 169 167 4 5 6 3
Store 168 170
171: 6(int) Load 8(invocation)
172: 142(ptr) AccessChain 75(data) 119 86
173: 71(ivec4) Load 172
174: 6(int) Load 8(invocation)
175: 70(int) CompositeExtract 173 0
176: 70(int) SubgroupReadInvocationKHR 175 174
177: 70(int) CompositeExtract 173 1
178: 70(int) SubgroupReadInvocationKHR 177 174
179: 70(int) CompositeExtract 173 2
180: 70(int) SubgroupReadInvocationKHR 179 174
181: 70(int) CompositeExtract 173 3
182: 70(int) SubgroupReadInvocationKHR 181 174
183: 71(ivec4) CompositeConstruct 176 178 180 182
184: 142(ptr) AccessChain 75(data) 171 86
Store 184 183
185: 6(int) Load 8(invocation)
187: 186(ptr) AccessChain 75(data) 77 102 78
188: 6(int) Load 187
189: 6(int) Load 8(invocation)
190: 6(int) SubgroupReadInvocationKHR 188 189
191: 186(ptr) AccessChain 75(data) 185 102 78
Store 191 190
192: 6(int) Load 8(invocation)
194: 193(ptr) AccessChain 75(data) 86 102
195: 20(ivec4) Load 194
196: 26(ivec2) VectorShuffle 195 195 0 1
197: 6(int) Load 8(invocation)
198: 6(int) CompositeExtract 196 0
199: 6(int) SubgroupReadInvocationKHR 198 197
200: 6(int) CompositeExtract 196 1
201: 6(int) SubgroupReadInvocationKHR 200 197
202: 26(ivec2) CompositeConstruct 199 201
203: 193(ptr) AccessChain 75(data) 192 102
204: 20(ivec4) Load 203
205: 20(ivec4) VectorShuffle 204 202 4 5 2 3
Store 203 205
206: 6(int) Load 8(invocation)
208: 193(ptr) AccessChain 75(data) 102 102
209: 20(ivec4) Load 208
210: 207(ivec3) VectorShuffle 209 209 0 1 2
211: 6(int) Load 8(invocation)
212: 6(int) CompositeExtract 210 0
213: 6(int) SubgroupReadInvocationKHR 212 211
214: 6(int) CompositeExtract 210 1
215: 6(int) SubgroupReadInvocationKHR 214 211
216: 6(int) CompositeExtract 210 2
217: 6(int) SubgroupReadInvocationKHR 216 211
218: 207(ivec3) CompositeConstruct 213 215 217
219: 193(ptr) AccessChain 75(data) 206 102
220: 20(ivec4) Load 219
221: 20(ivec4) VectorShuffle 220 218 4 5 6 3
Store 219 221
222: 6(int) Load 8(invocation)
223: 68(ptr) AccessChain 55(data) 66 57
224: 49(fvec4) Load 223
225: 67(fvec2) VectorShuffle 224 224 0 1
226: 67(fvec2) SubgroupFirstInvocationKHR 225
227: 68(ptr) AccessChain 55(data) 222 57
228: 49(fvec4) Load 227
229: 49(fvec4) VectorShuffle 228 226 4 5 2 3
Store 227 229
230: 6(int) Load 8(invocation)
231: 68(ptr) AccessChain 55(data) 82 57
232: 49(fvec4) Load 231
233: 83(fvec3) VectorShuffle 232 232 0 1 2
234: 83(fvec3) SubgroupFirstInvocationKHR 233
235: 68(ptr) AccessChain 55(data) 230 57
236: 49(fvec4) Load 235
237: 49(fvec4) VectorShuffle 236 234 4 5 6 3
Store 235 237
238: 6(int) Load 8(invocation)
239: 68(ptr) AccessChain 55(data) 99 57
240: 49(fvec4) Load 239
241: 49(fvec4) SubgroupFirstInvocationKHR 240
242: 68(ptr) AccessChain 55(data) 238 57
Store 242 241
243: 6(int) Load 8(invocation)
244: 114(ptr) AccessChain 55(data) 57 66 58
245: 50(int) Load 244
246: 50(int) SubgroupFirstInvocationKHR 245
247: 114(ptr) AccessChain 55(data) 243 66 58
Store 247 246
248: 6(int) Load 8(invocation)
249: 122(ptr) AccessChain 55(data) 66 66
250: 51(ivec4) Load 249
251: 121(ivec2) VectorShuffle 250 250 0 1
252: 121(ivec2) SubgroupFirstInvocationKHR 251
253: 122(ptr) AccessChain 55(data) 248 66
254: 51(ivec4) Load 253
255: 51(ivec4) VectorShuffle 254 252 4 5 2 3
Store 253 255
256: 6(int) Load 8(invocation)
257: 122(ptr) AccessChain 55(data) 82 66
258: 51(ivec4) Load 257
259: 136(ivec3) VectorShuffle 258 258 0 1 2
260: 136(ivec3) SubgroupFirstInvocationKHR 259
261: 122(ptr) AccessChain 55(data) 256 66
262: 51(ivec4) Load 261
263: 51(ivec4) VectorShuffle 262 260 4 5 6 3
Store 261 263
264: 6(int) Load 8(invocation)
265: 122(ptr) AccessChain 55(data) 99 66
266: 51(ivec4) Load 265
267: 51(ivec4) SubgroupFirstInvocationKHR 266
268: 122(ptr) AccessChain 55(data) 264 66
Store 268 267
269: 6(int) Load 8(invocation)
270: 166(ptr) AccessChain 55(data) 57 82 58
271: 6(int) Load 270
272: 6(int) SubgroupFirstInvocationKHR 271
273: 166(ptr) AccessChain 55(data) 269 82 58
Store 273 272
274: 6(int) Load 8(invocation)
275: 173(ptr) AccessChain 55(data) 66 82
276: 38(ivec4) Load 275
277: 42(ivec2) VectorShuffle 276 276 0 1
278: 42(ivec2) SubgroupFirstInvocationKHR 277
279: 173(ptr) AccessChain 55(data) 274 82
280: 38(ivec4) Load 279
281: 38(ivec4) VectorShuffle 280 278 4 5 2 3
Store 279 281
282: 6(int) Load 8(invocation)
283: 173(ptr) AccessChain 55(data) 82 82
284: 38(ivec4) Load 283
285: 187(ivec3) VectorShuffle 284 284 0 1 2
286: 187(ivec3) SubgroupFirstInvocationKHR 285
287: 173(ptr) AccessChain 55(data) 282 82
288: 38(ivec4) Load 287
289: 38(ivec4) VectorShuffle 288 286 4 5 6 3
Store 287 289
290: 6(int) Load 8(invocation)
291: 173(ptr) AccessChain 55(data) 99 82
292: 38(ivec4) Load 291
293: 38(ivec4) SubgroupFirstInvocationKHR 292
294: 173(ptr) AccessChain 55(data) 290 82
Store 294 293
Branch 47
47: Label
223: 193(ptr) AccessChain 75(data) 119 102
224: 20(ivec4) Load 223
225: 6(int) Load 8(invocation)
226: 6(int) CompositeExtract 224 0
227: 6(int) SubgroupReadInvocationKHR 226 225
228: 6(int) CompositeExtract 224 1
229: 6(int) SubgroupReadInvocationKHR 228 225
230: 6(int) CompositeExtract 224 2
231: 6(int) SubgroupReadInvocationKHR 230 225
232: 6(int) CompositeExtract 224 3
233: 6(int) SubgroupReadInvocationKHR 232 225
234: 20(ivec4) CompositeConstruct 227 229 231 233
235: 193(ptr) AccessChain 75(data) 222 102
Store 235 234
Branch 67
236: Label
237: 6(int) Load 8(invocation)
238: 79(ptr) AccessChain 75(data) 77 77 78
239: 68(float) Load 238
240: 68(float) SubgroupFirstInvocationKHR 239
241: 79(ptr) AccessChain 75(data) 237 77 78
Store 241 240
242: 6(int) Load 8(invocation)
243: 88(ptr) AccessChain 75(data) 86 77
244: 69(fvec4) Load 243
245: 87(fvec2) VectorShuffle 244 244 0 1
246: 87(fvec2) SubgroupFirstInvocationKHR 245
247: 88(ptr) AccessChain 75(data) 242 77
248: 69(fvec4) Load 247
249: 69(fvec4) VectorShuffle 248 246 4 5 2 3
Store 247 249
250: 6(int) Load 8(invocation)
251: 88(ptr) AccessChain 75(data) 102 77
252: 69(fvec4) Load 251
253: 103(fvec3) VectorShuffle 252 252 0 1 2
254: 103(fvec3) SubgroupFirstInvocationKHR 253
255: 88(ptr) AccessChain 75(data) 250 77
256: 69(fvec4) Load 255
257: 69(fvec4) VectorShuffle 256 254 4 5 6 3
Store 255 257
258: 6(int) Load 8(invocation)
259: 88(ptr) AccessChain 75(data) 119 77
260: 69(fvec4) Load 259
261: 69(fvec4) SubgroupFirstInvocationKHR 260
262: 88(ptr) AccessChain 75(data) 258 77
Store 262 261
263: 6(int) Load 8(invocation)
264: 134(ptr) AccessChain 75(data) 77 86 78
265: 70(int) Load 264
266: 70(int) SubgroupFirstInvocationKHR 265
267: 134(ptr) AccessChain 75(data) 263 86 78
Store 267 266
268: 6(int) Load 8(invocation)
269: 142(ptr) AccessChain 75(data) 86 86
270: 71(ivec4) Load 269
271: 141(ivec2) VectorShuffle 270 270 0 1
272: 141(ivec2) SubgroupFirstInvocationKHR 271
273: 142(ptr) AccessChain 75(data) 268 86
274: 71(ivec4) Load 273
275: 71(ivec4) VectorShuffle 274 272 4 5 2 3
Store 273 275
276: 6(int) Load 8(invocation)
277: 142(ptr) AccessChain 75(data) 102 86
278: 71(ivec4) Load 277
279: 156(ivec3) VectorShuffle 278 278 0 1 2
280: 156(ivec3) SubgroupFirstInvocationKHR 279
281: 142(ptr) AccessChain 75(data) 276 86
282: 71(ivec4) Load 281
283: 71(ivec4) VectorShuffle 282 280 4 5 6 3
Store 281 283
284: 6(int) Load 8(invocation)
285: 142(ptr) AccessChain 75(data) 119 86
286: 71(ivec4) Load 285
287: 71(ivec4) SubgroupFirstInvocationKHR 286
288: 142(ptr) AccessChain 75(data) 284 86
Store 288 287
289: 6(int) Load 8(invocation)
290: 186(ptr) AccessChain 75(data) 77 102 78
291: 6(int) Load 290
292: 6(int) SubgroupFirstInvocationKHR 291
293: 186(ptr) AccessChain 75(data) 289 102 78
Store 293 292
294: 6(int) Load 8(invocation)
295: 193(ptr) AccessChain 75(data) 86 102
296: 20(ivec4) Load 295
297: 26(ivec2) VectorShuffle 296 296 0 1
298: 26(ivec2) SubgroupFirstInvocationKHR 297
299: 193(ptr) AccessChain 75(data) 294 102
300: 20(ivec4) Load 299
301: 20(ivec4) VectorShuffle 300 298 4 5 2 3
Store 299 301
302: 6(int) Load 8(invocation)
303: 193(ptr) AccessChain 75(data) 102 102
304: 20(ivec4) Load 303
305: 207(ivec3) VectorShuffle 304 304 0 1 2
306: 207(ivec3) SubgroupFirstInvocationKHR 305
307: 193(ptr) AccessChain 75(data) 302 102
308: 20(ivec4) Load 307
309: 20(ivec4) VectorShuffle 308 306 4 5 6 3
Store 307 309
310: 6(int) Load 8(invocation)
311: 193(ptr) AccessChain 75(data) 119 102
312: 20(ivec4) Load 311
313: 20(ivec4) SubgroupFirstInvocationKHR 312
314: 193(ptr) AccessChain 75(data) 310 102
Store 314 313
Branch 67
67: Label
Return
FunctionEnd
glslang/Include/revision.h
View file @
f9d08a25
// This header is generated by the make-revision script.
#define GLSLANG_PATCH_LEVEL 327
4
#define GLSLANG_PATCH_LEVEL 327
6
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