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:
...
@@ -138,7 +138,7 @@ protected:
spv
::
LoopControlMask
TranslateLoopControl
(
const
glslang
::
TIntermLoop
&
,
std
::
vector
<
unsigned
int
>&
operands
)
const
;
spv
::
LoopControlMask
TranslateLoopControl
(
const
glslang
::
TIntermLoop
&
,
std
::
vector
<
unsigned
int
>&
operands
)
const
;
spv
::
StorageClass
TranslateStorageClass
(
const
glslang
::
TType
&
);
spv
::
StorageClass
TranslateStorageClass
(
const
glslang
::
TType
&
);
void
addIndirectionIndexCapabilities
(
const
glslang
::
TType
&
baseType
,
const
glslang
::
TType
&
indexType
);
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
getSampledType
(
const
glslang
::
TSampler
&
);
spv
::
Id
getInvertedSwizzleType
(
const
glslang
::
TIntermTyped
&
);
spv
::
Id
getInvertedSwizzleType
(
const
glslang
::
TIntermTyped
&
);
spv
::
Id
createInvertedSwizzle
(
spv
::
Decoration
precision
,
const
glslang
::
TIntermTyped
&
,
spv
::
Id
parentResult
);
spv
::
Id
createInvertedSwizzle
(
spv
::
Decoration
precision
,
const
glslang
::
TIntermTyped
&
,
spv
::
Id
parentResult
);
...
@@ -208,6 +208,8 @@ protected:
...
@@ -208,6 +208,8 @@ protected:
if
(
builder
.
getSpvVersion
()
<
glslang
::
EShTargetSpv_1_3
)
if
(
builder
.
getSpvVersion
()
<
glslang
::
EShTargetSpv_1_3
)
builder
.
addExtension
(
ext
);
builder
.
addExtension
(
ext
);
}
}
std
::
pair
<
spv
::
Id
,
spv
::
Id
>
getForcedType
(
spv
::
BuiltIn
,
const
glslang
::
TType
&
);
spv
::
Id
translateForcedType
(
spv
::
Id
object
);
glslang
::
SpvOptions
&
options
;
glslang
::
SpvOptions
&
options
;
spv
::
Function
*
shaderEntry
;
spv
::
Function
*
shaderEntry
;
...
@@ -238,6 +240,10 @@ protected:
...
@@ -238,6 +240,10 @@ protected:
std
::
unordered_map
<
std
::
string
,
const
glslang
::
TIntermSymbol
*>
counterOriginator
;
std
::
unordered_map
<
std
::
string
,
const
glslang
::
TIntermSymbol
*>
counterOriginator
;
// Map pointee types for EbtReference to their forward pointers
// Map pointee types for EbtReference to their forward pointers
std
::
map
<
const
glslang
::
TType
*
,
spv
::
Id
>
forwardPointers
;
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
...
@@ -733,27 +739,27 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case
glslang
:
:
EbvSubGroupEqMask
:
case
glslang
:
:
EbvSubGroupEqMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupEqMask
KHR
;
return
spv
::
BuiltInSubgroupEqMask
;
case
glslang
:
:
EbvSubGroupGeMask
:
case
glslang
:
:
EbvSubGroupGeMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupGeMask
KHR
;
return
spv
::
BuiltInSubgroupGeMask
;
case
glslang
:
:
EbvSubGroupGtMask
:
case
glslang
:
:
EbvSubGroupGtMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupGtMask
KHR
;
return
spv
::
BuiltInSubgroupGtMask
;
case
glslang
:
:
EbvSubGroupLeMask
:
case
glslang
:
:
EbvSubGroupLeMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupLeMask
KHR
;
return
spv
::
BuiltInSubgroupLeMask
;
case
glslang
:
:
EbvSubGroupLtMask
:
case
glslang
:
:
EbvSubGroupLtMask
:
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addExtension
(
spv
::
E_SPV_KHR_shader_ballot
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
builder
.
addCapability
(
spv
::
CapabilitySubgroupBallotKHR
);
return
spv
::
BuiltInSubgroupLtMask
KHR
;
return
spv
::
BuiltInSubgroupLtMask
;
case
glslang
:
:
EbvNumSubgroups
:
case
glslang
:
:
EbvNumSubgroups
:
builder
.
addCapability
(
spv
::
CapabilityGroupNonUniform
);
builder
.
addCapability
(
spv
::
CapabilityGroupNonUniform
);
...
@@ -795,6 +801,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
...
@@ -795,6 +801,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder
.
addCapability
(
spv
::
CapabilityGroupNonUniform
);
builder
.
addCapability
(
spv
::
CapabilityGroupNonUniform
);
builder
.
addCapability
(
spv
::
CapabilityGroupNonUniformBallot
);
builder
.
addCapability
(
spv
::
CapabilityGroupNonUniformBallot
);
return
spv
::
BuiltInSubgroupLtMask
;
return
spv
::
BuiltInSubgroupLtMask
;
#ifdef AMD_EXTENSIONS
#ifdef AMD_EXTENSIONS
case
glslang
:
:
EbvBaryCoordNoPersp
:
case
glslang
:
:
EbvBaryCoordNoPersp
:
builder
.
addExtension
(
spv
::
E_SPV_AMD_shader_explicit_vertex_parameter
);
builder
.
addExtension
(
spv
::
E_SPV_AMD_shader_explicit_vertex_parameter
);
...
@@ -1620,8 +1627,8 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
...
@@ -1620,8 +1627,8 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
// Formal function parameters were mapped during makeFunctions().
// Formal function parameters were mapped during makeFunctions().
spv
::
Id
id
=
getSymbolId
(
symbol
);
spv
::
Id
id
=
getSymbolId
(
symbol
);
// Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
if
(
builder
.
isPointer
(
id
))
{
if
(
builder
.
isPointer
(
id
))
{
// Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
// Consider adding to the OpEntryPoint interface list.
// Consider adding to the OpEntryPoint interface list.
// Only looking at structures if they have at least one member.
// Only looking at structures if they have at least one member.
if
(
!
symbol
->
getType
().
isStruct
()
||
symbol
->
getType
().
getStruct
()
->
size
()
>
0
)
{
if
(
!
symbol
->
getType
().
isStruct
()
||
symbol
->
getType
().
getStruct
()
->
size
()
>
0
)
{
...
@@ -1633,6 +1640,14 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
...
@@ -1633,6 +1640,14 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
iOSet
.
insert
(
id
);
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
// Only process non-linkage-only nodes for generating actual static uses
...
@@ -1650,8 +1665,10 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
...
@@ -1650,8 +1665,10 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
// See comments in handleUserFunctionCall().
// See comments in handleUserFunctionCall().
// B) Specialization constants (normal constants don't even come in as a variable),
// B) Specialization constants (normal constants don't even come in as a variable),
// These are also pure R-values.
// These are also pure R-values.
// C) R-Values from type translation, see above call to translateForcedType()
glslang
::
TQualifier
qualifier
=
symbol
->
getQualifier
();
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
);
builder
.
setAccessChainRValue
(
id
);
else
else
builder
.
setAccessChainLValue
(
id
);
builder
.
setAccessChainLValue
(
id
);
...
@@ -1908,6 +1925,71 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
...
@@ -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
)
bool
TGlslangToSpvTraverser
::
visitUnary
(
glslang
::
TVisit
/* visit */
,
glslang
::
TIntermUnary
*
node
)
{
{
builder
.
setLine
(
node
->
getLoc
().
line
,
node
->
getLoc
().
getFilename
());
builder
.
setLine
(
node
->
getLoc
().
line
,
node
->
getLoc
().
getFilename
());
...
@@ -3037,7 +3119,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
...
@@ -3037,7 +3119,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
return
false
;
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
// First, steer off constants, which are not SPIR-V variables, but
// can still have a mapping to a SPIR-V Id.
// can still have a mapping to a SPIR-V Id.
...
@@ -3050,7 +3132,8 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
...
@@ -3050,7 +3132,8 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
// Now, handle actual variables
// Now, handle actual variables
spv
::
StorageClass
storageClass
=
TranslateStorageClass
(
node
->
getType
());
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
)
||
const
bool
contains16BitType
=
node
->
getType
().
containsBasicType
(
glslang
::
EbtFloat16
)
||
node
->
getType
().
containsBasicType
(
glslang
::
EbtInt16
)
||
node
->
getType
().
containsBasicType
(
glslang
::
EbtInt16
)
||
...
@@ -7543,8 +7626,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
...
@@ -7543,8 +7626,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
}
}
// it was not found, create it
// 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
;
symbolValues
[
symbol
->
getId
()]
=
id
;
if
(
forcedType
.
second
!=
spv
::
NoType
)
forceType
[
id
]
=
forcedType
.
second
;
if
(
symbol
->
getBasicType
()
!=
glslang
::
EbtBlock
)
{
if
(
symbol
->
getBasicType
()
!=
glslang
::
EbtBlock
)
{
builder
.
addDecoration
(
id
,
TranslatePrecisionDecoration
(
symbol
->
getType
()));
builder
.
addDecoration
(
id
,
TranslatePrecisionDecoration
(
symbol
->
getType
()));
...
@@ -7604,10 +7691,10 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
...
@@ -7604,10 +7691,10 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder
.
addDecoration
(
id
,
memory
[
i
]);
builder
.
addDecoration
(
id
,
memory
[
i
]);
}
}
// built-in variable decorations
// add built-in variable decoration
spv
::
BuiltIn
builtIn
=
TranslateBuiltInDecoration
(
symbol
->
getQualifier
().
builtIn
,
false
);
if
(
builtIn
!=
spv
::
BuiltInMax
)
{
if
(
builtIn
!=
spv
::
BuiltInMax
)
builder
.
addDecoration
(
id
,
spv
::
DecorationBuiltIn
,
(
int
)
builtIn
);
builder
.
addDecoration
(
id
,
spv
::
DecorationBuiltIn
,
(
int
)
builtIn
);
}
// nonuniform
// nonuniform
builder
.
addDecoration
(
id
,
TranslateNonUniformDecoration
(
symbol
->
getType
().
getQualifier
()));
builder
.
addDecoration
(
id
,
TranslateNonUniformDecoration
(
symbol
->
getType
().
getQualifier
()));
...
...
Test/baseResults/spv.shaderBallot.comp.out
View file @
f9d08a25
spv.shaderBallot.comp
spv.shaderBallot.comp
Validation failed
// Module Version 10000
// Module Version 10000
// Generated by (magic number): 80007
// Generated by (magic number): 80007
// Id's are bound by
29
8
// Id's are bound by
31
8
Capability Shader
Capability Shader
Capability Int64
Capability Int64
...
@@ -10,7 +9,7 @@ Validation failed
...
@@ -10,7 +9,7 @@ Validation failed
Extension "SPV_KHR_shader_ballot"
Extension "SPV_KHR_shader_ballot"
1: ExtInstImport "GLSL.std.450"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
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
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
Source GLSL 450
SourceExtension "GL_ARB_gpu_shader_int64"
SourceExtension "GL_ARB_gpu_shader_int64"
...
@@ -20,30 +19,30 @@ Validation failed
...
@@ -20,30 +19,30 @@ Validation failed
Name 10 "gl_SubGroupInvocationARB"
Name 10 "gl_SubGroupInvocationARB"
Name 12 "gl_SubGroupSizeARB"
Name 12 "gl_SubGroupSizeARB"
Name 19 "relMask"
Name 19 "relMask"
Name 2
1
"gl_SubGroupEqMaskARB"
Name 2
2
"gl_SubGroupEqMaskARB"
Name 2
3
"gl_SubGroupGeMaskARB"
Name 2
9
"gl_SubGroupGeMaskARB"
Name
2
6 "gl_SubGroupGtMaskARB"
Name
3
6 "gl_SubGroupGtMaskARB"
Name
29
"gl_SubGroupLeMaskARB"
Name
43
"gl_SubGroupLeMaskARB"
Name
32
"gl_SubGroupLtMaskARB"
Name
50
"gl_SubGroupLtMaskARB"
Name
5
2 "Buffers"
Name
7
2 "Buffers"
MemberName
5
2(Buffers) 0 "f4"
MemberName
7
2(Buffers) 0 "f4"
MemberName
5
2(Buffers) 1 "i4"
MemberName
7
2(Buffers) 1 "i4"
MemberName
5
2(Buffers) 2 "u4"
MemberName
7
2(Buffers) 2 "u4"
Name
5
5 "data"
Name
7
5 "data"
Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId
Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId
Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize
Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize
Decorate 2
1
(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
Decorate 2
2
(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
Decorate 2
3
(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
Decorate 2
9
(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
Decorate
2
6(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
Decorate
3
6(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
Decorate
29
(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
Decorate
43
(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
Decorate
32
(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
Decorate
50
(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
MemberDecorate
5
2(Buffers) 0 Offset 0
MemberDecorate
7
2(Buffers) 0 Offset 0
MemberDecorate
5
2(Buffers) 1 Offset 16
MemberDecorate
7
2(Buffers) 1 Offset 16
MemberDecorate
5
2(Buffers) 2 Offset 32
MemberDecorate
7
2(Buffers) 2 Offset 32
Decorate
5
2(Buffers) BufferBlock
Decorate
7
2(Buffers) BufferBlock
Decorate
5
5(data) DescriptorSet 0
Decorate
7
5(data) DescriptorSet 0
Decorate
5
5(data) Binding 0
Decorate
7
5(data) Binding 0
Decorate
29
7 BuiltIn WorkgroupSize
Decorate
31
7 BuiltIn WorkgroupSize
2: TypeVoid
2: TypeVoid
3: TypeFunction 2
3: TypeFunction 2
6: TypeInt 32 0
6: TypeInt 32 0
...
@@ -54,43 +53,43 @@ Validation failed
...
@@ -54,43 +53,43 @@ Validation failed
15: 6(int) Constant 4
15: 6(int) Constant 4
17: TypeInt 64 0
17: TypeInt 64 0
18: TypePointer Function 17(int64_t)
18: TypePointer Function 17(int64_t)
20: Type
Pointer Input 17(int64_t)
20: Type
Vector 6(int) 4
21(gl_SubGroupEqMaskARB): 20(ptr) Variable Input
21: TypePointer Input 20(ivec4)
2
3(gl_SubGroupGeMaskARB): 20
(ptr) Variable Input
2
2(gl_SubGroupEqMaskARB): 21
(ptr) Variable Input
26(gl_SubGroupGtMaskARB): 20(ptr) Variable Input
26: TypeVector 6(int) 2
29(gl_SubGroup
LeMaskARB): 20
(ptr) Variable Input
29(gl_SubGroup
GeMaskARB): 21
(ptr) Variable Input
3
2(gl_SubGroupLtMaskARB): 20
(ptr) Variable Input
3
6(gl_SubGroupGtMaskARB): 21
(ptr) Variable Input
36: TypeBool
43(gl_SubGroupLeMaskARB): 21(ptr) Variable Input
37: 36(bool) ConstantTrue
50(gl_SubGroupLtMaskARB): 21(ptr) Variable Input
38: TypeVector 6(int) 4
58: TypeBool
42: TypeVector 6(int) 2
59: 58(bool) ConstantTrue
4
8: TypeFloat 32
6
8: TypeFloat 32
49: TypeVector 4
8(float) 4
69: TypeVector 6
8(float) 4
5
0: TypeInt 32 1
7
0: TypeInt 32 1
51: TypeVector 5
0(int) 4
71: TypeVector 7
0(int) 4
52(Buffers): TypeStruct 49(fvec4) 51(ivec4) 38
(ivec4)
72(Buffers): TypeStruct 69(fvec4) 71(ivec4) 20
(ivec4)
53: TypeArray 5
2(Buffers) 15
73: TypeArray 7
2(Buffers) 15
54: TypePointer Uniform 5
3
74: TypePointer Uniform 7
3
55(data): 5
4(ptr) Variable Uniform
75(data): 7
4(ptr) Variable Uniform
57: 5
0(int) Constant 0
77: 7
0(int) Constant 0
5
8: 6(int) Constant 0
7
8: 6(int) Constant 0
59: TypePointer Uniform 4
8(float)
79: TypePointer Uniform 6
8(float)
66: 5
0(int) Constant 1
86: 7
0(int) Constant 1
67: TypeVector 4
8(float) 2
87: TypeVector 6
8(float) 2
68: TypePointer Uniform 4
9(fvec4)
88: TypePointer Uniform 6
9(fvec4)
82: 5
0(int) Constant 2
102: 7
0(int) Constant 2
83: TypeVector 4
8(float) 3
103: TypeVector 6
8(float) 3
99: 5
0(int) Constant 3
119: 7
0(int) Constant 3
1
14: TypePointer Uniform 5
0(int)
1
34: TypePointer Uniform 7
0(int)
1
21: TypeVector 5
0(int) 2
1
41: TypeVector 7
0(int) 2
1
22: TypePointer Uniform 5
1(ivec4)
1
42: TypePointer Uniform 7
1(ivec4)
1
36: TypeVector 5
0(int) 3
1
56: TypeVector 7
0(int) 3
1
6
6: TypePointer Uniform 6(int)
1
8
6: TypePointer Uniform 6(int)
1
73: TypePointer Uniform 38
(ivec4)
1
93: TypePointer Uniform 20
(ivec4)
18
7: TypeVector 6(int) 3
20
7: TypeVector 6(int) 3
29
5: 6(int) Constant 8
31
5: 6(int) Constant 8
29
6: 6(int) Constant 1
31
6: 6(int) Constant 1
297: 187(ivec3) ConstantComposite 295 295 29
6
317: 207(ivec3) ConstantComposite 315 315 31
6
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
...
@@ -100,275 +99,295 @@ Validation failed
...
@@ -100,275 +99,295 @@ Validation failed
14: 6(int) IAdd 11 13
14: 6(int) IAdd 11 13
16: 6(int) UMod 14 15
16: 6(int) UMod 14 15
Store 8(invocation) 16
Store 8(invocation) 16
22: 17(int64_t) Load 21(gl_SubGroupEqMaskARB)
23: 20(ivec4) Load 22(gl_SubGroupEqMaskARB)
24: 17(int64_t) Load 23(gl_SubGroupGeMaskARB)
24: 6(int) CompositeExtract 23 0
25: 17(int64_t) IAdd 22 24
25: 6(int) CompositeExtract 23 1
27: 17(int64_t) Load 26(gl_SubGroupGtMaskARB)
27: 26(ivec2) CompositeConstruct 24 25
28: 17(int64_t) IAdd 25 27
28: 17(int64_t) Bitcast 27
30: 17(int64_t) Load 29(gl_SubGroupLeMaskARB)
30: 20(ivec4) Load 29(gl_SubGroupGeMaskARB)
31: 17(int64_t) IAdd 28 30
31: 6(int) CompositeExtract 30 0
33: 17(int64_t) Load 32(gl_SubGroupLtMaskARB)
32: 6(int) CompositeExtract 30 1
34: 17(int64_t) IAdd 31 33
33: 26(ivec2) CompositeConstruct 31 32
Store 19(relMask) 34
34: 17(int64_t) Bitcast 33
35: 17(int64_t) Load 19(relMask)
35: 17(int64_t) IAdd 28 34
39: 38(ivec4) SubgroupBallotKHR 37
37: 20(ivec4) Load 36(gl_SubGroupGtMaskARB)
40: 6(int) CompositeExtract 39 0
38: 6(int) CompositeExtract 37 0
41: 6(int) CompositeExtract 39 1
39: 6(int) CompositeExtract 37 1
43: 42(ivec2) CompositeConstruct 40 41
40: 26(ivec2) CompositeConstruct 38 39
44: 17(int64_t) Bitcast 43
41: 17(int64_t) Bitcast 40
45: 36(bool) IEqual 35 44
42: 17(int64_t) IAdd 35 41
SelectionMerge 47 None
44: 20(ivec4) Load 43(gl_SubGroupLeMaskARB)
BranchConditional 45 46 216
45: 6(int) CompositeExtract 44 0
46: Label
46: 6(int) CompositeExtract 44 1
56: 6(int) Load 8(invocation)
47: 26(ivec2) CompositeConstruct 45 46
60: 59(ptr) AccessChain 55(data) 57 57 58
48: 17(int64_t) Bitcast 47
61: 48(float) Load 60
49: 17(int64_t) IAdd 42 48
62: 6(int) Load 8(invocation)
51: 20(ivec4) Load 50(gl_SubGroupLtMaskARB)
63: 48(float) SubgroupReadInvocationKHR 61 62
52: 6(int) CompositeExtract 51 0
64: 59(ptr) AccessChain 55(data) 56 57 58
53: 6(int) CompositeExtract 51 1
Store 64 63
54: 26(ivec2) CompositeConstruct 52 53
65: 6(int) Load 8(invocation)
55: 17(int64_t) Bitcast 54
69: 68(ptr) AccessChain 55(data) 66 57
56: 17(int64_t) IAdd 49 55
70: 49(fvec4) Load 69
Store 19(relMask) 56
71: 67(fvec2) VectorShuffle 70 70 0 1
57: 17(int64_t) Load 19(relMask)
72: 6(int) Load 8(invocation)
60: 20(ivec4) SubgroupBallotKHR 59
73: 48(float) CompositeExtract 71 0
61: 6(int) CompositeExtract 60 0
74: 48(float) SubgroupReadInvocationKHR 73 72
62: 6(int) CompositeExtract 60 1
75: 48(float) CompositeExtract 71 1
63: 26(ivec2) CompositeConstruct 61 62
76: 48(float) SubgroupReadInvocationKHR 75 72
64: 17(int64_t) Bitcast 63
77: 67(fvec2) CompositeConstruct 74 76
65: 58(bool) IEqual 57 64
78: 68(ptr) AccessChain 55(data) 65 57
SelectionMerge 67 None
79: 49(fvec4) Load 78
BranchConditional 65 66 236
80: 49(fvec4) VectorShuffle 79 77 4 5 2 3
66: Label
Store 78 80
76: 6(int) Load 8(invocation)
81: 6(int) Load 8(invocation)
80: 79(ptr) AccessChain 75(data) 77 77 78
84: 68(ptr) AccessChain 55(data) 82 57
81: 68(float) Load 80
85: 49(fvec4) Load 84
82: 6(int) Load 8(invocation)
86: 83(fvec3) VectorShuffle 85 85 0 1 2
83: 68(float) SubgroupReadInvocationKHR 81 82
87: 6(int) Load 8(invocation)
84: 79(ptr) AccessChain 75(data) 76 77 78
88: 48(float) CompositeExtract 86 0
Store 84 83
89: 48(float) SubgroupReadInvocationKHR 88 87
85: 6(int) Load 8(invocation)
90: 48(float) CompositeExtract 86 1
89: 88(ptr) AccessChain 75(data) 86 77
91: 48(float) SubgroupReadInvocationKHR 90 87
90: 69(fvec4) Load 89
92: 48(float) CompositeExtract 86 2
91: 87(fvec2) VectorShuffle 90 90 0 1
93: 48(float) SubgroupReadInvocationKHR 92 87
92: 6(int) Load 8(invocation)
94: 83(fvec3) CompositeConstruct 89 91 93
93: 68(float) CompositeExtract 91 0
95: 68(ptr) AccessChain 55(data) 81 57
94: 68(float) SubgroupReadInvocationKHR 93 92
96: 49(fvec4) Load 95
95: 68(float) CompositeExtract 91 1
97: 49(fvec4) VectorShuffle 96 94 4 5 6 3
96: 68(float) SubgroupReadInvocationKHR 95 92
Store 95 97
97: 87(fvec2) CompositeConstruct 94 96
98: 6(int) Load 8(invocation)
98: 88(ptr) AccessChain 75(data) 85 77
100: 68(ptr) AccessChain 55(data) 99 57
99: 69(fvec4) Load 98
101: 49(fvec4) Load 100
100: 69(fvec4) VectorShuffle 99 97 4 5 2 3
102: 6(int) Load 8(invocation)
Store 98 100
103: 48(float) CompositeExtract 101 0
101: 6(int) Load 8(invocation)
104: 48(float) SubgroupReadInvocationKHR 103 102
104: 88(ptr) AccessChain 75(data) 102 77
105: 48(float) CompositeExtract 101 1
105: 69(fvec4) Load 104
106: 48(float) SubgroupReadInvocationKHR 105 102
106: 103(fvec3) VectorShuffle 105 105 0 1 2
107: 48(float) CompositeExtract 101 2
107: 6(int) Load 8(invocation)
108: 48(float) SubgroupReadInvocationKHR 107 102
108: 68(float) CompositeExtract 106 0
109: 48(float) CompositeExtract 101 3
109: 68(float) SubgroupReadInvocationKHR 108 107
110: 48(float) SubgroupReadInvocationKHR 109 102
110: 68(float) CompositeExtract 106 1
111: 49(fvec4) CompositeConstruct 104 106 108 110
111: 68(float) SubgroupReadInvocationKHR 110 107
112: 68(ptr) AccessChain 55(data) 98 57
112: 68(float) CompositeExtract 106 2
Store 112 111
113: 68(float) SubgroupReadInvocationKHR 112 107
113: 6(int) Load 8(invocation)
114: 103(fvec3) CompositeConstruct 109 111 113
115: 114(ptr) AccessChain 55(data) 57 66 58
115: 88(ptr) AccessChain 75(data) 101 77
116: 50(int) Load 115
116: 69(fvec4) Load 115
117: 6(int) Load 8(invocation)
117: 69(fvec4) VectorShuffle 116 114 4 5 6 3
118: 50(int) SubgroupReadInvocationKHR 116 117
Store 115 117
119: 114(ptr) AccessChain 55(data) 113 66 58
118: 6(int) Load 8(invocation)
Store 119 118
120: 88(ptr) AccessChain 75(data) 119 77
120: 6(int) Load 8(invocation)
121: 69(fvec4) Load 120
123: 122(ptr) AccessChain 55(data) 66 66
122: 6(int) Load 8(invocation)
124: 51(ivec4) Load 123
123: 68(float) CompositeExtract 121 0
125: 121(ivec2) VectorShuffle 124 124 0 1
124: 68(float) SubgroupReadInvocationKHR 123 122
126: 6(int) Load 8(invocation)
125: 68(float) CompositeExtract 121 1
127: 50(int) CompositeExtract 125 0
126: 68(float) SubgroupReadInvocationKHR 125 122
128: 50(int) SubgroupReadInvocationKHR 127 126
127: 68(float) CompositeExtract 121 2
129: 50(int) CompositeExtract 125 1
128: 68(float) SubgroupReadInvocationKHR 127 122
130: 50(int) SubgroupReadInvocationKHR 129 126
129: 68(float) CompositeExtract 121 3
131: 121(ivec2) CompositeConstruct 128 130
130: 68(float) SubgroupReadInvocationKHR 129 122
132: 122(ptr) AccessChain 55(data) 120 66
131: 69(fvec4) CompositeConstruct 124 126 128 130
133: 51(ivec4) Load 132
132: 88(ptr) AccessChain 75(data) 118 77
134: 51(ivec4) VectorShuffle 133 131 4 5 2 3
Store 132 131
Store 132 134
133: 6(int) Load 8(invocation)
135: 6(int) Load 8(invocation)
135: 134(ptr) AccessChain 75(data) 77 86 78
137: 122(ptr) AccessChain 55(data) 82 66
136: 70(int) Load 135
138: 51(ivec4) Load 137
137: 6(int) Load 8(invocation)
139: 136(ivec3) VectorShuffle 138 138 0 1 2
138: 70(int) SubgroupReadInvocationKHR 136 137
139: 134(ptr) AccessChain 75(data) 133 86 78
Store 139 138
140: 6(int) Load 8(invocation)
140: 6(int) Load 8(invocation)
141: 50(int) CompositeExtract 139 0
143: 142(ptr) AccessChain 75(data) 86 86
142: 50(int) SubgroupReadInvocationKHR 141 140
144: 71(ivec4) Load 143
143: 50(int) CompositeExtract 139 1
145: 141(ivec2) VectorShuffle 144 144 0 1
144: 50(int) SubgroupReadInvocationKHR 143 140
146: 6(int) Load 8(invocation)
145: 50(int) CompositeExtract 139 2
147: 70(int) CompositeExtract 145 0
146: 50(int) SubgroupReadInvocationKHR 145 140
148: 70(int) SubgroupReadInvocationKHR 147 146
147: 136(ivec3) CompositeConstruct 142 144 146
149: 70(int) CompositeExtract 145 1
148: 122(ptr) AccessChain 55(data) 135 66
150: 70(int) SubgroupReadInvocationKHR 149 146
149: 51(ivec4) Load 148
151: 141(ivec2) CompositeConstruct 148 150
150: 51(ivec4) VectorShuffle 149 147 4 5 6 3
152: 142(ptr) AccessChain 75(data) 140 86
Store 148 150
153: 71(ivec4) Load 152
151: 6(int) Load 8(invocation)
154: 71(ivec4) VectorShuffle 153 151 4 5 2 3
152: 122(ptr) AccessChain 55(data) 99 66
Store 152 154
153: 51(ivec4) Load 152
155: 6(int) Load 8(invocation)
154: 6(int) Load 8(invocation)
157: 142(ptr) AccessChain 75(data) 102 86
155: 50(int) CompositeExtract 153 0
158: 71(ivec4) Load 157
156: 50(int) SubgroupReadInvocationKHR 155 154
159: 156(ivec3) VectorShuffle 158 158 0 1 2
157: 50(int) CompositeExtract 153 1
160: 6(int) Load 8(invocation)
158: 50(int) SubgroupReadInvocationKHR 157 154
161: 70(int) CompositeExtract 159 0
159: 50(int) CompositeExtract 153 2
162: 70(int) SubgroupReadInvocationKHR 161 160
160: 50(int) SubgroupReadInvocationKHR 159 154
163: 70(int) CompositeExtract 159 1
161: 50(int) CompositeExtract 153 3
164: 70(int) SubgroupReadInvocationKHR 163 160
162: 50(int) SubgroupReadInvocationKHR 161 154
165: 70(int) CompositeExtract 159 2
163: 51(ivec4) CompositeConstruct 156 158 160 162
166: 70(int) SubgroupReadInvocationKHR 165 160
164: 122(ptr) AccessChain 55(data) 151 66
167: 156(ivec3) CompositeConstruct 162 164 166
Store 164 163
168: 142(ptr) AccessChain 75(data) 155 86
165: 6(int) Load 8(invocation)
169: 71(ivec4) Load 168
167: 166(ptr) AccessChain 55(data) 57 82 58
170: 71(ivec4) VectorShuffle 169 167 4 5 6 3
168: 6(int) Load 167
Store 168 170
169: 6(int) Load 8(invocation)
171: 6(int) Load 8(invocation)
170: 6(int) SubgroupReadInvocationKHR 168 169
172: 142(ptr) AccessChain 75(data) 119 86
171: 166(ptr) AccessChain 55(data) 165 82 58
173: 71(ivec4) Load 172
Store 171 170
174: 6(int) Load 8(invocation)
172: 6(int) Load 8(invocation)
175: 70(int) CompositeExtract 173 0
174: 173(ptr) AccessChain 55(data) 66 82
176: 70(int) SubgroupReadInvocationKHR 175 174
175: 38(ivec4) Load 174
177: 70(int) CompositeExtract 173 1
176: 42(ivec2) VectorShuffle 175 175 0 1
178: 70(int) SubgroupReadInvocationKHR 177 174
177: 6(int) Load 8(invocation)
179: 70(int) CompositeExtract 173 2
178: 6(int) CompositeExtract 176 0
180: 70(int) SubgroupReadInvocationKHR 179 174
179: 6(int) SubgroupReadInvocationKHR 178 177
181: 70(int) CompositeExtract 173 3
180: 6(int) CompositeExtract 176 1
182: 70(int) SubgroupReadInvocationKHR 181 174
181: 6(int) SubgroupReadInvocationKHR 180 177
183: 71(ivec4) CompositeConstruct 176 178 180 182
182: 42(ivec2) CompositeConstruct 179 181
184: 142(ptr) AccessChain 75(data) 171 86
183: 173(ptr) AccessChain 55(data) 172 82
Store 184 183
184: 38(ivec4) Load 183
185: 6(int) Load 8(invocation)
185: 38(ivec4) VectorShuffle 184 182 4 5 2 3
187: 186(ptr) AccessChain 75(data) 77 102 78
Store 183 185
188: 6(int) Load 187
186: 6(int) Load 8(invocation)
189: 6(int) Load 8(invocation)
188: 173(ptr) AccessChain 55(data) 82 82
190: 6(int) SubgroupReadInvocationKHR 188 189
189: 38(ivec4) Load 188
191: 186(ptr) AccessChain 75(data) 185 102 78
190: 187(ivec3) VectorShuffle 189 189 0 1 2
Store 191 190
191: 6(int) Load 8(invocation)
192: 6(int) Load 8(invocation)
192: 6(int) CompositeExtract 190 0
194: 193(ptr) AccessChain 75(data) 86 102
193: 6(int) SubgroupReadInvocationKHR 192 191
195: 20(ivec4) Load 194
194: 6(int) CompositeExtract 190 1
196: 26(ivec2) VectorShuffle 195 195 0 1
195: 6(int) SubgroupReadInvocationKHR 194 191
197: 6(int) Load 8(invocation)
196: 6(int) CompositeExtract 190 2
198: 6(int) CompositeExtract 196 0
197: 6(int) SubgroupReadInvocationKHR 196 191
199: 6(int) SubgroupReadInvocationKHR 198 197
198: 187(ivec3) CompositeConstruct 193 195 197
200: 6(int) CompositeExtract 196 1
199: 173(ptr) AccessChain 55(data) 186 82
201: 6(int) SubgroupReadInvocationKHR 200 197
200: 38(ivec4) Load 199
202: 26(ivec2) CompositeConstruct 199 201
201: 38(ivec4) VectorShuffle 200 198 4 5 6 3
203: 193(ptr) AccessChain 75(data) 192 102
Store 199 201
204: 20(ivec4) Load 203
202: 6(int) Load 8(invocation)
205: 20(ivec4) VectorShuffle 204 202 4 5 2 3
203: 173(ptr) AccessChain 55(data) 99 82
Store 203 205
204: 38(ivec4) Load 203
206: 6(int) Load 8(invocation)
205: 6(int) Load 8(invocation)
208: 193(ptr) AccessChain 75(data) 102 102
206: 6(int) CompositeExtract 204 0
209: 20(ivec4) Load 208
207: 6(int) SubgroupReadInvocationKHR 206 205
210: 207(ivec3) VectorShuffle 209 209 0 1 2
208: 6(int) CompositeExtract 204 1
211: 6(int) Load 8(invocation)
209: 6(int) SubgroupReadInvocationKHR 208 205
212: 6(int) CompositeExtract 210 0
210: 6(int) CompositeExtract 204 2
213: 6(int) SubgroupReadInvocationKHR 212 211
211: 6(int) SubgroupReadInvocationKHR 210 205
214: 6(int) CompositeExtract 210 1
212: 6(int) CompositeExtract 204 3
215: 6(int) SubgroupReadInvocationKHR 214 211
213: 6(int) SubgroupReadInvocationKHR 212 205
216: 6(int) CompositeExtract 210 2
214: 38(ivec4) CompositeConstruct 207 209 211 213
217: 6(int) SubgroupReadInvocationKHR 216 211
215: 173(ptr) AccessChain 55(data) 202 82
218: 207(ivec3) CompositeConstruct 213 215 217
Store 215 214
219: 193(ptr) AccessChain 75(data) 206 102
Branch 47
220: 20(ivec4) Load 219
216: Label
221: 20(ivec4) VectorShuffle 220 218 4 5 6 3
217: 6(int) Load 8(invocation)
Store 219 221
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
222: 6(int) Load 8(invocation)
222: 6(int) Load 8(invocation)
223: 68(ptr) AccessChain 55(data) 66 57
223: 193(ptr) AccessChain 75(data) 119 102
224: 49(fvec4) Load 223
224: 20(ivec4) Load 223
225: 67(fvec2) VectorShuffle 224 224 0 1
225: 6(int) Load 8(invocation)
226: 67(fvec2) SubgroupFirstInvocationKHR 225
226: 6(int) CompositeExtract 224 0
227: 68(ptr) AccessChain 55(data) 222 57
227: 6(int) SubgroupReadInvocationKHR 226 225
228: 49(fvec4) Load 227
228: 6(int) CompositeExtract 224 1
229: 49(fvec4) VectorShuffle 228 226 4 5 2 3
229: 6(int) SubgroupReadInvocationKHR 228 225
Store 227 229
230: 6(int) CompositeExtract 224 2
230: 6(int) Load 8(invocation)
231: 6(int) SubgroupReadInvocationKHR 230 225
231: 68(ptr) AccessChain 55(data) 82 57
232: 6(int) CompositeExtract 224 3
232: 49(fvec4) Load 231
233: 6(int) SubgroupReadInvocationKHR 232 225
233: 83(fvec3) VectorShuffle 232 232 0 1 2
234: 20(ivec4) CompositeConstruct 227 229 231 233
234: 83(fvec3) SubgroupFirstInvocationKHR 233
235: 193(ptr) AccessChain 75(data) 222 102
235: 68(ptr) AccessChain 55(data) 230 57
Store 235 234
236: 49(fvec4) Load 235
Branch 67
237: 49(fvec4) VectorShuffle 236 234 4 5 6 3
236: Label
Store 235 237
237: 6(int) Load 8(invocation)
238: 6(int) Load 8(invocation)
238: 79(ptr) AccessChain 75(data) 77 77 78
239: 68(ptr) AccessChain 55(data) 99 57
239: 68(float) Load 238
240: 49(fvec4) Load 239
240: 68(float) SubgroupFirstInvocationKHR 239
241: 49(fvec4) SubgroupFirstInvocationKHR 240
241: 79(ptr) AccessChain 75(data) 237 77 78
242: 68(ptr) AccessChain 55(data) 238 57
Store 241 240
Store 242 241
242: 6(int) Load 8(invocation)
243: 6(int) Load 8(invocation)
243: 88(ptr) AccessChain 75(data) 86 77
244: 114(ptr) AccessChain 55(data) 57 66 58
244: 69(fvec4) Load 243
245: 50(int) Load 244
245: 87(fvec2) VectorShuffle 244 244 0 1
246: 50(int) SubgroupFirstInvocationKHR 245
246: 87(fvec2) SubgroupFirstInvocationKHR 245
247: 114(ptr) AccessChain 55(data) 243 66 58
247: 88(ptr) AccessChain 75(data) 242 77
Store 247 246
248: 69(fvec4) Load 247
248: 6(int) Load 8(invocation)
249: 69(fvec4) VectorShuffle 248 246 4 5 2 3
249: 122(ptr) AccessChain 55(data) 66 66
Store 247 249
250: 51(ivec4) Load 249
250: 6(int) Load 8(invocation)
251: 121(ivec2) VectorShuffle 250 250 0 1
251: 88(ptr) AccessChain 75(data) 102 77
252: 121(ivec2) SubgroupFirstInvocationKHR 251
252: 69(fvec4) Load 251
253: 122(ptr) AccessChain 55(data) 248 66
253: 103(fvec3) VectorShuffle 252 252 0 1 2
254: 51(ivec4) Load 253
254: 103(fvec3) SubgroupFirstInvocationKHR 253
255: 51(ivec4) VectorShuffle 254 252 4 5 2 3
255: 88(ptr) AccessChain 75(data) 250 77
Store 253 255
256: 69(fvec4) Load 255
256: 6(int) Load 8(invocation)
257: 69(fvec4) VectorShuffle 256 254 4 5 6 3
257: 122(ptr) AccessChain 55(data) 82 66
Store 255 257
258: 51(ivec4) Load 257
258: 6(int) Load 8(invocation)
259: 136(ivec3) VectorShuffle 258 258 0 1 2
259: 88(ptr) AccessChain 75(data) 119 77
260: 136(ivec3) SubgroupFirstInvocationKHR 259
260: 69(fvec4) Load 259
261: 122(ptr) AccessChain 55(data) 256 66
261: 69(fvec4) SubgroupFirstInvocationKHR 260
262: 51(ivec4) Load 261
262: 88(ptr) AccessChain 75(data) 258 77
263: 51(ivec4) VectorShuffle 262 260 4 5 6 3
Store 262 261
Store 261 263
263: 6(int) Load 8(invocation)
264: 6(int) Load 8(invocation)
264: 134(ptr) AccessChain 75(data) 77 86 78
265: 122(ptr) AccessChain 55(data) 99 66
265: 70(int) Load 264
266: 51(ivec4) Load 265
266: 70(int) SubgroupFirstInvocationKHR 265
267: 51(ivec4) SubgroupFirstInvocationKHR 266
267: 134(ptr) AccessChain 75(data) 263 86 78
268: 122(ptr) AccessChain 55(data) 264 66
Store 267 266
Store 268 267
268: 6(int) Load 8(invocation)
269: 6(int) Load 8(invocation)
269: 142(ptr) AccessChain 75(data) 86 86
270: 166(ptr) AccessChain 55(data) 57 82 58
270: 71(ivec4) Load 269
271: 6(int) Load 270
271: 141(ivec2) VectorShuffle 270 270 0 1
272: 6(int) SubgroupFirstInvocationKHR 271
272: 141(ivec2) SubgroupFirstInvocationKHR 271
273: 166(ptr) AccessChain 55(data) 269 82 58
273: 142(ptr) AccessChain 75(data) 268 86
Store 273 272
274: 71(ivec4) Load 273
274: 6(int) Load 8(invocation)
275: 71(ivec4) VectorShuffle 274 272 4 5 2 3
275: 173(ptr) AccessChain 55(data) 66 82
Store 273 275
276: 38(ivec4) Load 275
276: 6(int) Load 8(invocation)
277: 42(ivec2) VectorShuffle 276 276 0 1
277: 142(ptr) AccessChain 75(data) 102 86
278: 42(ivec2) SubgroupFirstInvocationKHR 277
278: 71(ivec4) Load 277
279: 173(ptr) AccessChain 55(data) 274 82
279: 156(ivec3) VectorShuffle 278 278 0 1 2
280: 38(ivec4) Load 279
280: 156(ivec3) SubgroupFirstInvocationKHR 279
281: 38(ivec4) VectorShuffle 280 278 4 5 2 3
281: 142(ptr) AccessChain 75(data) 276 86
Store 279 281
282: 71(ivec4) Load 281
282: 6(int) Load 8(invocation)
283: 71(ivec4) VectorShuffle 282 280 4 5 6 3
283: 173(ptr) AccessChain 55(data) 82 82
Store 281 283
284: 38(ivec4) Load 283
284: 6(int) Load 8(invocation)
285: 187(ivec3) VectorShuffle 284 284 0 1 2
285: 142(ptr) AccessChain 75(data) 119 86
286: 187(ivec3) SubgroupFirstInvocationKHR 285
286: 71(ivec4) Load 285
287: 173(ptr) AccessChain 55(data) 282 82
287: 71(ivec4) SubgroupFirstInvocationKHR 286
288: 38(ivec4) Load 287
288: 142(ptr) AccessChain 75(data) 284 86
289: 38(ivec4) VectorShuffle 288 286 4 5 6 3
Store 288 287
Store 287 289
289: 6(int) Load 8(invocation)
290: 6(int) Load 8(invocation)
290: 186(ptr) AccessChain 75(data) 77 102 78
291: 173(ptr) AccessChain 55(data) 99 82
291: 6(int) Load 290
292: 38(ivec4) Load 291
292: 6(int) SubgroupFirstInvocationKHR 291
293: 38(ivec4) SubgroupFirstInvocationKHR 292
293: 186(ptr) AccessChain 75(data) 289 102 78
294: 173(ptr) AccessChain 55(data) 290 82
Store 293 292
Store 294 293
294: 6(int) Load 8(invocation)
Branch 47
295: 193(ptr) AccessChain 75(data) 86 102
47: Label
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
Return
FunctionEnd
FunctionEnd
glslang/Include/revision.h
View file @
f9d08a25
// This header is generated by the make-revision script.
// 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