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
d0d873eb
Commit
d0d873eb
authored
May 11, 2017
by
Neil Henning
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Address most feedback.
parent
892c3b6f
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
749 additions
and
748 deletions
+749
-748
SPVRemapper.cpp
SPIRV/SPVRemapper.cpp
+1
-1
Initialize.cpp
glslang/MachineIndependent/Initialize.cpp
+747
-745
Versions.cpp
glslang/MachineIndependent/Versions.cpp
+1
-2
No files found.
SPIRV/SPVRemapper.cpp
View file @
d0d873eb
...
@@ -246,7 +246,7 @@ namespace spv {
...
@@ -246,7 +246,7 @@ namespace spv {
spv
::
Id
spirvbin_t
::
localId
(
spv
::
Id
id
,
spv
::
Id
newId
)
spv
::
Id
spirvbin_t
::
localId
(
spv
::
Id
id
,
spv
::
Id
newId
)
{
{
assert
(
id
!=
spv
::
NoResult
&&
newId
!=
spv
::
NoResult
);
//
assert(id != spv::NoResult && newId != spv::NoResult);
if
(
id
>=
idMapL
.
size
())
if
(
id
>=
idMapL
.
size
())
idMapL
.
resize
(
id
+
1
,
unused
);
idMapL
.
resize
(
id
+
1
,
unused
);
...
...
glslang/MachineIndependent/Initialize.cpp
View file @
d0d873eb
...
@@ -1572,7 +1572,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
...
@@ -1572,7 +1572,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
}
}
// GL_KHR_shader_subgroup
// GL_KHR_shader_subgroup
if
(
profile
!=
EEsProfile
&&
version
>=
45
0
)
{
if
(
spvVersion
.
vulkan
>=
10
0
)
{
commonBuiltins
.
append
(
commonBuiltins
.
append
(
"void subgroupBarrier();"
"void subgroupBarrier();"
"void subgroupMemoryBarrier();"
"void subgroupMemoryBarrier();"
...
@@ -1580,676 +1580,676 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
...
@@ -1580,676 +1580,676 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"void subgroupMemoryBarrierImage();"
"void subgroupMemoryBarrierImage();"
"bool subgroupElect();"
"bool subgroupElect();"
"bool subgroupAll(bool
value);
"
"bool subgroupAll(bool
);
\n
"
"bool subgroupAny(bool
value);
"
"bool subgroupAny(bool
);
\n
"
"bool subgroupAllEqual(float
value);
"
"bool subgroupAllEqual(float
);
\n
"
"bool subgroupAllEqual(vec2
value);
"
"bool subgroupAllEqual(vec2
);
\n
"
"bool subgroupAllEqual(vec3
value);
"
"bool subgroupAllEqual(vec3
);
\n
"
"bool subgroupAllEqual(vec4
value);
"
"bool subgroupAllEqual(vec4
);
\n
"
"bool subgroupAllEqual(int
value);
"
"bool subgroupAllEqual(int
);
\n
"
"bool subgroupAllEqual(ivec2
value);
"
"bool subgroupAllEqual(ivec2
);
\n
"
"bool subgroupAllEqual(ivec3
value);
"
"bool subgroupAllEqual(ivec3
);
\n
"
"bool subgroupAllEqual(ivec4
value);
"
"bool subgroupAllEqual(ivec4
);
\n
"
"bool subgroupAllEqual(uint
value);
"
"bool subgroupAllEqual(uint
);
\n
"
"bool subgroupAllEqual(uvec2
value);
"
"bool subgroupAllEqual(uvec2
);
\n
"
"bool subgroupAllEqual(uvec3
value);
"
"bool subgroupAllEqual(uvec3
);
\n
"
"bool subgroupAllEqual(uvec4
value);
"
"bool subgroupAllEqual(uvec4
);
\n
"
"bool subgroupAllEqual(bool
value);
"
"bool subgroupAllEqual(bool
);
\n
"
"bool subgroupAllEqual(bvec2
value);
"
"bool subgroupAllEqual(bvec2
);
\n
"
"bool subgroupAllEqual(bvec3
value);
"
"bool subgroupAllEqual(bvec3
);
\n
"
"bool subgroupAllEqual(bvec4
value);
"
"bool subgroupAllEqual(bvec4
);
\n
"
"bool subgroupAllEqual(double
value);
"
"bool subgroupAllEqual(double
);
\n
"
"bool subgroupAllEqual(dvec2
value);
"
"bool subgroupAllEqual(dvec2
);
\n
"
"bool subgroupAllEqual(dvec3
value);
"
"bool subgroupAllEqual(dvec3
);
\n
"
"bool subgroupAllEqual(dvec4
value);
"
"bool subgroupAllEqual(dvec4
);
\n
"
"float subgroupBroadcast(float
value, uint id);
"
"float subgroupBroadcast(float
, uint);
\n
"
"vec2 subgroupBroadcast(vec2
value, uint id);
"
"vec2 subgroupBroadcast(vec2
, uint);
\n
"
"vec3 subgroupBroadcast(vec3
value, uint id);
"
"vec3 subgroupBroadcast(vec3
, uint);
\n
"
"vec4 subgroupBroadcast(vec4
value, uint id);
"
"vec4 subgroupBroadcast(vec4
, uint);
\n
"
"int subgroupBroadcast(int
value, uint id);
"
"int subgroupBroadcast(int
, uint);
\n
"
"ivec2 subgroupBroadcast(ivec2
value, uint id);
"
"ivec2 subgroupBroadcast(ivec2
, uint);
\n
"
"ivec3 subgroupBroadcast(ivec3
value, uint id);
"
"ivec3 subgroupBroadcast(ivec3
, uint);
\n
"
"ivec4 subgroupBroadcast(ivec4
value, uint id);
"
"ivec4 subgroupBroadcast(ivec4
, uint);
\n
"
"uint subgroupBroadcast(uint
value, uint id);
"
"uint subgroupBroadcast(uint
, uint);
\n
"
"uvec2 subgroupBroadcast(uvec2
value, uint id);
"
"uvec2 subgroupBroadcast(uvec2
, uint);
\n
"
"uvec3 subgroupBroadcast(uvec3
value, uint id);
"
"uvec3 subgroupBroadcast(uvec3
, uint);
\n
"
"uvec4 subgroupBroadcast(uvec4
value, uint id);
"
"uvec4 subgroupBroadcast(uvec4
, uint);
\n
"
"bool subgroupBroadcast(bool
value, uint id);
"
"bool subgroupBroadcast(bool
, uint);
\n
"
"bvec2 subgroupBroadcast(bvec2
value, uint id);
"
"bvec2 subgroupBroadcast(bvec2
, uint);
\n
"
"bvec3 subgroupBroadcast(bvec3
value, uint id);
"
"bvec3 subgroupBroadcast(bvec3
, uint);
\n
"
"bvec4 subgroupBroadcast(bvec4
value, uint id);
"
"bvec4 subgroupBroadcast(bvec4
, uint);
\n
"
"double subgroupBroadcast(double
value, uint id);
"
"double subgroupBroadcast(double
, uint);
\n
"
"dvec2 subgroupBroadcast(dvec2
value, uint id);
"
"dvec2 subgroupBroadcast(dvec2
, uint);
\n
"
"dvec3 subgroupBroadcast(dvec3
value, uint id);
"
"dvec3 subgroupBroadcast(dvec3
, uint);
\n
"
"dvec4 subgroupBroadcast(dvec4
value, uint id);
"
"dvec4 subgroupBroadcast(dvec4
, uint);
\n
"
"float subgroupBroadcastFirst(float
value);
"
"float subgroupBroadcastFirst(float
);
\n
"
"vec2 subgroupBroadcastFirst(vec2
value);
"
"vec2 subgroupBroadcastFirst(vec2
);
\n
"
"vec3 subgroupBroadcastFirst(vec3
value);
"
"vec3 subgroupBroadcastFirst(vec3
);
\n
"
"vec4 subgroupBroadcastFirst(vec4
value);
"
"vec4 subgroupBroadcastFirst(vec4
);
\n
"
"int subgroupBroadcastFirst(int
value);
"
"int subgroupBroadcastFirst(int
);
\n
"
"ivec2 subgroupBroadcastFirst(ivec2
value);
"
"ivec2 subgroupBroadcastFirst(ivec2
);
\n
"
"ivec3 subgroupBroadcastFirst(ivec3
value);
"
"ivec3 subgroupBroadcastFirst(ivec3
);
\n
"
"ivec4 subgroupBroadcastFirst(ivec4
value);
"
"ivec4 subgroupBroadcastFirst(ivec4
);
\n
"
"uint subgroupBroadcastFirst(uint
value);
"
"uint subgroupBroadcastFirst(uint
);
\n
"
"uvec2 subgroupBroadcastFirst(uvec2
value);
"
"uvec2 subgroupBroadcastFirst(uvec2
);
\n
"
"uvec3 subgroupBroadcastFirst(uvec3
value);
"
"uvec3 subgroupBroadcastFirst(uvec3
);
\n
"
"uvec4 subgroupBroadcastFirst(uvec4
value);
"
"uvec4 subgroupBroadcastFirst(uvec4
);
\n
"
"bool subgroupBroadcastFirst(bool
value);
"
"bool subgroupBroadcastFirst(bool
);
\n
"
"bvec2 subgroupBroadcastFirst(bvec2
value);
"
"bvec2 subgroupBroadcastFirst(bvec2
);
\n
"
"bvec3 subgroupBroadcastFirst(bvec3
value);
"
"bvec3 subgroupBroadcastFirst(bvec3
);
\n
"
"bvec4 subgroupBroadcastFirst(bvec4
value);
"
"bvec4 subgroupBroadcastFirst(bvec4
);
\n
"
"double subgroupBroadcastFirst(double
value);
"
"double subgroupBroadcastFirst(double
);
\n
"
"dvec2 subgroupBroadcastFirst(dvec2
value);
"
"dvec2 subgroupBroadcastFirst(dvec2
);
\n
"
"dvec3 subgroupBroadcastFirst(dvec3
value);
"
"dvec3 subgroupBroadcastFirst(dvec3
);
\n
"
"dvec4 subgroupBroadcastFirst(dvec4
value);
"
"dvec4 subgroupBroadcastFirst(dvec4
);
\n
"
"uvec4 subgroupBallot(bool
value);
"
"uvec4 subgroupBallot(bool
);
\n
"
"bool subgroupInverseBallot(uvec4
value);
"
"bool subgroupInverseBallot(uvec4
);
\n
"
"bool subgroupBallotBitExtract(uvec4
value, uint index);
"
"bool subgroupBallotBitExtract(uvec4
, uint);
\n
"
"uint subgroupBallotBitCount(uvec4
value);
"
"uint subgroupBallotBitCount(uvec4
);
\n
"
"uint subgroupBallotInclusiveBitCount(uvec4
value);
"
"uint subgroupBallotInclusiveBitCount(uvec4
);
\n
"
"uint subgroupBallotExclusiveBitCount(uvec4
value);
"
"uint subgroupBallotExclusiveBitCount(uvec4
);
\n
"
"uint subgroupBallotFindLSB(uvec4
value);
"
"uint subgroupBallotFindLSB(uvec4
);
\n
"
"uint subgroupBallotFindMSB(uvec4
value);
"
"uint subgroupBallotFindMSB(uvec4
);
\n
"
"float subgroupShuffle(float
value, uint id);
"
"float subgroupShuffle(float
, uint);
\n
"
"vec2 subgroupShuffle(vec2
value, uint id);
"
"vec2 subgroupShuffle(vec2
, uint);
\n
"
"vec3 subgroupShuffle(vec3
value, uint id);
"
"vec3 subgroupShuffle(vec3
, uint);
\n
"
"vec4 subgroupShuffle(vec4
value, uint id);
"
"vec4 subgroupShuffle(vec4
, uint);
\n
"
"int subgroupShuffle(int
value, uint id);
"
"int subgroupShuffle(int
, uint);
\n
"
"ivec2 subgroupShuffle(ivec2
value, uint id);
"
"ivec2 subgroupShuffle(ivec2
, uint);
\n
"
"ivec3 subgroupShuffle(ivec3
value, uint id);
"
"ivec3 subgroupShuffle(ivec3
, uint);
\n
"
"ivec4 subgroupShuffle(ivec4
value, uint id);
"
"ivec4 subgroupShuffle(ivec4
, uint);
\n
"
"uint subgroupShuffle(uint
value, uint id);
"
"uint subgroupShuffle(uint
, uint);
\n
"
"uvec2 subgroupShuffle(uvec2
value, uint id);
"
"uvec2 subgroupShuffle(uvec2
, uint);
\n
"
"uvec3 subgroupShuffle(uvec3
value, uint id);
"
"uvec3 subgroupShuffle(uvec3
, uint);
\n
"
"uvec4 subgroupShuffle(uvec4
value, uint id);
"
"uvec4 subgroupShuffle(uvec4
, uint);
\n
"
"bool subgroupShuffle(bool
value, uint id);
"
"bool subgroupShuffle(bool
, uint);
\n
"
"bvec2 subgroupShuffle(bvec2
value, uint id);
"
"bvec2 subgroupShuffle(bvec2
, uint);
\n
"
"bvec3 subgroupShuffle(bvec3
value, uint id);
"
"bvec3 subgroupShuffle(bvec3
, uint);
\n
"
"bvec4 subgroupShuffle(bvec4
value, uint id);
"
"bvec4 subgroupShuffle(bvec4
, uint);
\n
"
"double subgroupShuffle(double
value, uint id);
"
"double subgroupShuffle(double
, uint);
\n
"
"dvec2 subgroupShuffle(dvec2
value, uint id);
"
"dvec2 subgroupShuffle(dvec2
, uint);
\n
"
"dvec3 subgroupShuffle(dvec3
value, uint id);
"
"dvec3 subgroupShuffle(dvec3
, uint);
\n
"
"dvec4 subgroupShuffle(dvec4
value, uint id);
"
"dvec4 subgroupShuffle(dvec4
, uint);
\n
"
"float subgroupShuffleXor(float
value, uint mask);
"
"float subgroupShuffleXor(float
, uint);
\n
"
"vec2 subgroupShuffleXor(vec2
value, uint mask);
"
"vec2 subgroupShuffleXor(vec2
, uint);
\n
"
"vec3 subgroupShuffleXor(vec3
value, uint mask);
"
"vec3 subgroupShuffleXor(vec3
, uint);
\n
"
"vec4 subgroupShuffleXor(vec4
value, uint mask);
"
"vec4 subgroupShuffleXor(vec4
, uint);
\n
"
"int subgroupShuffleXor(int
value, uint mask);
"
"int subgroupShuffleXor(int
, uint);
\n
"
"ivec2 subgroupShuffleXor(ivec2
value, uint mask);
"
"ivec2 subgroupShuffleXor(ivec2
, uint);
\n
"
"ivec3 subgroupShuffleXor(ivec3
value, uint mask);
"
"ivec3 subgroupShuffleXor(ivec3
, uint);
\n
"
"ivec4 subgroupShuffleXor(ivec4
value, uint mask);
"
"ivec4 subgroupShuffleXor(ivec4
, uint);
\n
"
"uint subgroupShuffleXor(uint
value, uint mask);
"
"uint subgroupShuffleXor(uint
, uint);
\n
"
"uvec2 subgroupShuffleXor(uvec2
value, uint mask);
"
"uvec2 subgroupShuffleXor(uvec2
, uint);
\n
"
"uvec3 subgroupShuffleXor(uvec3
value, uint mask);
"
"uvec3 subgroupShuffleXor(uvec3
, uint);
\n
"
"uvec4 subgroupShuffleXor(uvec4
value, uint mask);
"
"uvec4 subgroupShuffleXor(uvec4
, uint);
\n
"
"bool subgroupShuffleXor(bool
value, uint mask);
"
"bool subgroupShuffleXor(bool
, uint);
\n
"
"bvec2 subgroupShuffleXor(bvec2
value, uint mask);
"
"bvec2 subgroupShuffleXor(bvec2
, uint);
\n
"
"bvec3 subgroupShuffleXor(bvec3
value, uint mask);
"
"bvec3 subgroupShuffleXor(bvec3
, uint);
\n
"
"bvec4 subgroupShuffleXor(bvec4
value, uint mask);
"
"bvec4 subgroupShuffleXor(bvec4
, uint);
\n
"
"double subgroupShuffleXor(double
value, uint mask);
"
"double subgroupShuffleXor(double
, uint);
\n
"
"dvec2 subgroupShuffleXor(dvec2
value, uint mask);
"
"dvec2 subgroupShuffleXor(dvec2
, uint);
\n
"
"dvec3 subgroupShuffleXor(dvec3
value, uint mask);
"
"dvec3 subgroupShuffleXor(dvec3
, uint);
\n
"
"dvec4 subgroupShuffleXor(dvec4
value, uint mask);
"
"dvec4 subgroupShuffleXor(dvec4
, uint);
\n
"
"float subgroupShuffleUp(float
value, uint delta);
"
"float subgroupShuffleUp(float
, uint delta);
\n
"
"vec2 subgroupShuffleUp(vec2
value, uint delta);
"
"vec2 subgroupShuffleUp(vec2
, uint delta);
\n
"
"vec3 subgroupShuffleUp(vec3
value, uint delta);
"
"vec3 subgroupShuffleUp(vec3
, uint delta);
\n
"
"vec4 subgroupShuffleUp(vec4
value, uint delta);
"
"vec4 subgroupShuffleUp(vec4
, uint delta);
\n
"
"int subgroupShuffleUp(int
value, uint delta);
"
"int subgroupShuffleUp(int
, uint delta);
\n
"
"ivec2 subgroupShuffleUp(ivec2
value, uint delta);
"
"ivec2 subgroupShuffleUp(ivec2
, uint delta);
\n
"
"ivec3 subgroupShuffleUp(ivec3
value, uint delta);
"
"ivec3 subgroupShuffleUp(ivec3
, uint delta);
\n
"
"ivec4 subgroupShuffleUp(ivec4
value, uint delta);
"
"ivec4 subgroupShuffleUp(ivec4
, uint delta);
\n
"
"uint subgroupShuffleUp(uint
value, uint delta);
"
"uint subgroupShuffleUp(uint
, uint delta);
\n
"
"uvec2 subgroupShuffleUp(uvec2
value, uint delta);
"
"uvec2 subgroupShuffleUp(uvec2
, uint delta);
\n
"
"uvec3 subgroupShuffleUp(uvec3
value, uint delta);
"
"uvec3 subgroupShuffleUp(uvec3
, uint delta);
\n
"
"uvec4 subgroupShuffleUp(uvec4
value, uint delta);
"
"uvec4 subgroupShuffleUp(uvec4
, uint delta);
\n
"
"bool subgroupShuffleUp(bool
value, uint delta);
"
"bool subgroupShuffleUp(bool
, uint delta);
\n
"
"bvec2 subgroupShuffleUp(bvec2
value, uint delta);
"
"bvec2 subgroupShuffleUp(bvec2
, uint delta);
\n
"
"bvec3 subgroupShuffleUp(bvec3
value, uint delta);
"
"bvec3 subgroupShuffleUp(bvec3
, uint delta);
\n
"
"bvec4 subgroupShuffleUp(bvec4
value, uint delta);
"
"bvec4 subgroupShuffleUp(bvec4
, uint delta);
\n
"
"double subgroupShuffleUp(double
value, uint delta);
"
"double subgroupShuffleUp(double
, uint delta);
\n
"
"dvec2 subgroupShuffleUp(dvec2
value, uint delta);
"
"dvec2 subgroupShuffleUp(dvec2
, uint delta);
\n
"
"dvec3 subgroupShuffleUp(dvec3
value, uint delta);
"
"dvec3 subgroupShuffleUp(dvec3
, uint delta);
\n
"
"dvec4 subgroupShuffleUp(dvec4
value, uint delta);
"
"dvec4 subgroupShuffleUp(dvec4
, uint delta);
\n
"
"float subgroupShuffleDown(float
value, uint delta);
"
"float subgroupShuffleDown(float
, uint delta);
\n
"
"vec2 subgroupShuffleDown(vec2
value, uint delta);
"
"vec2 subgroupShuffleDown(vec2
, uint delta);
\n
"
"vec3 subgroupShuffleDown(vec3
value, uint delta);
"
"vec3 subgroupShuffleDown(vec3
, uint delta);
\n
"
"vec4 subgroupShuffleDown(vec4
value, uint delta);
"
"vec4 subgroupShuffleDown(vec4
, uint delta);
\n
"
"int subgroupShuffleDown(int
value, uint delta);
"
"int subgroupShuffleDown(int
, uint delta);
\n
"
"ivec2 subgroupShuffleDown(ivec2
value, uint delta);
"
"ivec2 subgroupShuffleDown(ivec2
, uint delta);
\n
"
"ivec3 subgroupShuffleDown(ivec3
value, uint delta);
"
"ivec3 subgroupShuffleDown(ivec3
, uint delta);
\n
"
"ivec4 subgroupShuffleDown(ivec4
value, uint delta);
"
"ivec4 subgroupShuffleDown(ivec4
, uint delta);
\n
"
"uint subgroupShuffleDown(uint
value, uint delta);
"
"uint subgroupShuffleDown(uint
, uint delta);
\n
"
"uvec2 subgroupShuffleDown(uvec2
value, uint delta);
"
"uvec2 subgroupShuffleDown(uvec2
, uint delta);
\n
"
"uvec3 subgroupShuffleDown(uvec3
value, uint delta);
"
"uvec3 subgroupShuffleDown(uvec3
, uint delta);
\n
"
"uvec4 subgroupShuffleDown(uvec4
value, uint delta);
"
"uvec4 subgroupShuffleDown(uvec4
, uint delta);
\n
"
"bool subgroupShuffleDown(bool
value, uint delta);
"
"bool subgroupShuffleDown(bool
, uint delta);
\n
"
"bvec2 subgroupShuffleDown(bvec2
value, uint delta);
"
"bvec2 subgroupShuffleDown(bvec2
, uint delta);
\n
"
"bvec3 subgroupShuffleDown(bvec3
value, uint delta);
"
"bvec3 subgroupShuffleDown(bvec3
, uint delta);
\n
"
"bvec4 subgroupShuffleDown(bvec4
value, uint delta);
"
"bvec4 subgroupShuffleDown(bvec4
, uint delta);
\n
"
"double subgroupShuffleDown(double
value, uint delta);
"
"double subgroupShuffleDown(double
, uint delta);
\n
"
"dvec2 subgroupShuffleDown(dvec2
value, uint delta);
"
"dvec2 subgroupShuffleDown(dvec2
, uint delta);
\n
"
"dvec3 subgroupShuffleDown(dvec3
value, uint delta);
"
"dvec3 subgroupShuffleDown(dvec3
, uint delta);
\n
"
"dvec4 subgroupShuffleDown(dvec4
value, uint delta);
"
"dvec4 subgroupShuffleDown(dvec4
, uint delta);
\n
"
"float subgroupAdd(float
value);
"
"float subgroupAdd(float
);
\n
"
"vec2 subgroupAdd(vec2
value);
"
"vec2 subgroupAdd(vec2
);
\n
"
"vec3 subgroupAdd(vec3
value);
"
"vec3 subgroupAdd(vec3
);
\n
"
"vec4 subgroupAdd(vec4
value);
"
"vec4 subgroupAdd(vec4
);
\n
"
"int subgroupAdd(int
value);
"
"int subgroupAdd(int
);
\n
"
"ivec2 subgroupAdd(ivec2
value);
"
"ivec2 subgroupAdd(ivec2
);
\n
"
"ivec3 subgroupAdd(ivec3
value);
"
"ivec3 subgroupAdd(ivec3
);
\n
"
"ivec4 subgroupAdd(ivec4
value);
"
"ivec4 subgroupAdd(ivec4
);
\n
"
"uint subgroupAdd(uint
value);
"
"uint subgroupAdd(uint
);
\n
"
"uvec2 subgroupAdd(uvec2
value);
"
"uvec2 subgroupAdd(uvec2
);
\n
"
"uvec3 subgroupAdd(uvec3
value);
"
"uvec3 subgroupAdd(uvec3
);
\n
"
"uvec4 subgroupAdd(uvec4
value);
"
"uvec4 subgroupAdd(uvec4
);
\n
"
"double subgroupAdd(double
value);
"
"double subgroupAdd(double
);
\n
"
"dvec2 subgroupAdd(dvec2
value);
"
"dvec2 subgroupAdd(dvec2
);
\n
"
"dvec3 subgroupAdd(dvec3
value);
"
"dvec3 subgroupAdd(dvec3
);
\n
"
"dvec4 subgroupAdd(dvec4
value);
"
"dvec4 subgroupAdd(dvec4
);
\n
"
"float subgroupMul(float
value);
"
"float subgroupMul(float
);
\n
"
"vec2 subgroupMul(vec2
value);
"
"vec2 subgroupMul(vec2
);
\n
"
"vec3 subgroupMul(vec3
value);
"
"vec3 subgroupMul(vec3
);
\n
"
"vec4 subgroupMul(vec4
value);
"
"vec4 subgroupMul(vec4
);
\n
"
"int subgroupMul(int
value);
"
"int subgroupMul(int
);
\n
"
"ivec2 subgroupMul(ivec2
value);
"
"ivec2 subgroupMul(ivec2
);
\n
"
"ivec3 subgroupMul(ivec3
value);
"
"ivec3 subgroupMul(ivec3
);
\n
"
"ivec4 subgroupMul(ivec4
value);
"
"ivec4 subgroupMul(ivec4
);
\n
"
"uint subgroupMul(uint
value);
"
"uint subgroupMul(uint
);
\n
"
"uvec2 subgroupMul(uvec2
value);
"
"uvec2 subgroupMul(uvec2
);
\n
"
"uvec3 subgroupMul(uvec3
value);
"
"uvec3 subgroupMul(uvec3
);
\n
"
"uvec4 subgroupMul(uvec4
value);
"
"uvec4 subgroupMul(uvec4
);
\n
"
"double subgroupMul(double
value);
"
"double subgroupMul(double
);
\n
"
"dvec2 subgroupMul(dvec2
value);
"
"dvec2 subgroupMul(dvec2
);
\n
"
"dvec3 subgroupMul(dvec3
value);
"
"dvec3 subgroupMul(dvec3
);
\n
"
"dvec4 subgroupMul(dvec4
value);
"
"dvec4 subgroupMul(dvec4
);
\n
"
"float subgroupMin(float
value);
"
"float subgroupMin(float
);
\n
"
"vec2 subgroupMin(vec2
value);
"
"vec2 subgroupMin(vec2
);
\n
"
"vec3 subgroupMin(vec3
value);
"
"vec3 subgroupMin(vec3
);
\n
"
"vec4 subgroupMin(vec4
value);
"
"vec4 subgroupMin(vec4
);
\n
"
"int subgroupMin(int
value);
"
"int subgroupMin(int
);
\n
"
"ivec2 subgroupMin(ivec2
value);
"
"ivec2 subgroupMin(ivec2
);
\n
"
"ivec3 subgroupMin(ivec3
value);
"
"ivec3 subgroupMin(ivec3
);
\n
"
"ivec4 subgroupMin(ivec4
value);
"
"ivec4 subgroupMin(ivec4
);
\n
"
"uint subgroupMin(uint
value);
"
"uint subgroupMin(uint
);
\n
"
"uvec2 subgroupMin(uvec2
value);
"
"uvec2 subgroupMin(uvec2
);
\n
"
"uvec3 subgroupMin(uvec3
value);
"
"uvec3 subgroupMin(uvec3
);
\n
"
"uvec4 subgroupMin(uvec4
value);
"
"uvec4 subgroupMin(uvec4
);
\n
"
"double subgroupMin(double
value);
"
"double subgroupMin(double
);
\n
"
"dvec2 subgroupMin(dvec2
value);
"
"dvec2 subgroupMin(dvec2
);
\n
"
"dvec3 subgroupMin(dvec3
value);
"
"dvec3 subgroupMin(dvec3
);
\n
"
"dvec4 subgroupMin(dvec4
value);
"
"dvec4 subgroupMin(dvec4
);
\n
"
"float subgroupMax(float
value);
"
"float subgroupMax(float
);
\n
"
"vec2 subgroupMax(vec2
value);
"
"vec2 subgroupMax(vec2
);
\n
"
"vec3 subgroupMax(vec3
value);
"
"vec3 subgroupMax(vec3
);
\n
"
"vec4 subgroupMax(vec4
value);
"
"vec4 subgroupMax(vec4
);
\n
"
"int subgroupMax(int
value);
"
"int subgroupMax(int
);
\n
"
"ivec2 subgroupMax(ivec2
value);
"
"ivec2 subgroupMax(ivec2
);
\n
"
"ivec3 subgroupMax(ivec3
value);
"
"ivec3 subgroupMax(ivec3
);
\n
"
"ivec4 subgroupMax(ivec4
value);
"
"ivec4 subgroupMax(ivec4
);
\n
"
"uint subgroupMax(uint
value);
"
"uint subgroupMax(uint
);
\n
"
"uvec2 subgroupMax(uvec2
value);
"
"uvec2 subgroupMax(uvec2
);
\n
"
"uvec3 subgroupMax(uvec3
value);
"
"uvec3 subgroupMax(uvec3
);
\n
"
"uvec4 subgroupMax(uvec4
value);
"
"uvec4 subgroupMax(uvec4
);
\n
"
"double subgroupMax(double
value);
"
"double subgroupMax(double
);
\n
"
"dvec2 subgroupMax(dvec2
value);
"
"dvec2 subgroupMax(dvec2
);
\n
"
"dvec3 subgroupMax(dvec3
value);
"
"dvec3 subgroupMax(dvec3
);
\n
"
"dvec4 subgroupMax(dvec4
value);
"
"dvec4 subgroupMax(dvec4
);
\n
"
"int subgroupAnd(int
value);
"
"int subgroupAnd(int
);
\n
"
"ivec2 subgroupAnd(ivec2
value);
"
"ivec2 subgroupAnd(ivec2
);
\n
"
"ivec3 subgroupAnd(ivec3
value);
"
"ivec3 subgroupAnd(ivec3
);
\n
"
"ivec4 subgroupAnd(ivec4
value);
"
"ivec4 subgroupAnd(ivec4
);
\n
"
"uint subgroupAnd(uint
value);
"
"uint subgroupAnd(uint
);
\n
"
"uvec2 subgroupAnd(uvec2
value);
"
"uvec2 subgroupAnd(uvec2
);
\n
"
"uvec3 subgroupAnd(uvec3
value);
"
"uvec3 subgroupAnd(uvec3
);
\n
"
"uvec4 subgroupAnd(uvec4
value);
"
"uvec4 subgroupAnd(uvec4
);
\n
"
"bool subgroupAnd(bool
value);
"
"bool subgroupAnd(bool
);
\n
"
"bvec2 subgroupAnd(bvec2
value);
"
"bvec2 subgroupAnd(bvec2
);
\n
"
"bvec3 subgroupAnd(bvec3
value);
"
"bvec3 subgroupAnd(bvec3
);
\n
"
"bvec4 subgroupAnd(bvec4
value);
"
"bvec4 subgroupAnd(bvec4
);
\n
"
"int subgroupOr(int
value);
"
"int subgroupOr(int
);
\n
"
"ivec2 subgroupOr(ivec2
value);
"
"ivec2 subgroupOr(ivec2
);
\n
"
"ivec3 subgroupOr(ivec3
value);
"
"ivec3 subgroupOr(ivec3
);
\n
"
"ivec4 subgroupOr(ivec4
value);
"
"ivec4 subgroupOr(ivec4
);
\n
"
"uint subgroupOr(uint
value);
"
"uint subgroupOr(uint
);
\n
"
"uvec2 subgroupOr(uvec2
value);
"
"uvec2 subgroupOr(uvec2
);
\n
"
"uvec3 subgroupOr(uvec3
value);
"
"uvec3 subgroupOr(uvec3
);
\n
"
"uvec4 subgroupOr(uvec4
value);
"
"uvec4 subgroupOr(uvec4
);
\n
"
"bool subgroupOr(bool
value);
"
"bool subgroupOr(bool
);
\n
"
"bvec2 subgroupOr(bvec2
value);
"
"bvec2 subgroupOr(bvec2
);
\n
"
"bvec3 subgroupOr(bvec3
value);
"
"bvec3 subgroupOr(bvec3
);
\n
"
"bvec4 subgroupOr(bvec4
value);
"
"bvec4 subgroupOr(bvec4
);
\n
"
"int subgroupXor(int
value);
"
"int subgroupXor(int
);
\n
"
"ivec2 subgroupXor(ivec2
value);
"
"ivec2 subgroupXor(ivec2
);
\n
"
"ivec3 subgroupXor(ivec3
value);
"
"ivec3 subgroupXor(ivec3
);
\n
"
"ivec4 subgroupXor(ivec4
value);
"
"ivec4 subgroupXor(ivec4
);
\n
"
"uint subgroupXor(uint
value);
"
"uint subgroupXor(uint
);
\n
"
"uvec2 subgroupXor(uvec2
value);
"
"uvec2 subgroupXor(uvec2
);
\n
"
"uvec3 subgroupXor(uvec3
value);
"
"uvec3 subgroupXor(uvec3
);
\n
"
"uvec4 subgroupXor(uvec4
value);
"
"uvec4 subgroupXor(uvec4
);
\n
"
"bool subgroupXor(bool
value);
"
"bool subgroupXor(bool
);
\n
"
"bvec2 subgroupXor(bvec2
value);
"
"bvec2 subgroupXor(bvec2
);
\n
"
"bvec3 subgroupXor(bvec3
value);
"
"bvec3 subgroupXor(bvec3
);
\n
"
"bvec4 subgroupXor(bvec4
value);
"
"bvec4 subgroupXor(bvec4
);
\n
"
"float subgroupInclusiveAdd(float
value);
"
"float subgroupInclusiveAdd(float
);
\n
"
"vec2 subgroupInclusiveAdd(vec2
value);
"
"vec2 subgroupInclusiveAdd(vec2
);
\n
"
"vec3 subgroupInclusiveAdd(vec3
value);
"
"vec3 subgroupInclusiveAdd(vec3
);
\n
"
"vec4 subgroupInclusiveAdd(vec4
value);
"
"vec4 subgroupInclusiveAdd(vec4
);
\n
"
"int subgroupInclusiveAdd(int
value);
"
"int subgroupInclusiveAdd(int
);
\n
"
"ivec2 subgroupInclusiveAdd(ivec2
value);
"
"ivec2 subgroupInclusiveAdd(ivec2
);
\n
"
"ivec3 subgroupInclusiveAdd(ivec3
value);
"
"ivec3 subgroupInclusiveAdd(ivec3
);
\n
"
"ivec4 subgroupInclusiveAdd(ivec4
value);
"
"ivec4 subgroupInclusiveAdd(ivec4
);
\n
"
"uint subgroupInclusiveAdd(uint
value);
"
"uint subgroupInclusiveAdd(uint
);
\n
"
"uvec2 subgroupInclusiveAdd(uvec2
value);
"
"uvec2 subgroupInclusiveAdd(uvec2
);
\n
"
"uvec3 subgroupInclusiveAdd(uvec3
value);
"
"uvec3 subgroupInclusiveAdd(uvec3
);
\n
"
"uvec4 subgroupInclusiveAdd(uvec4
value);
"
"uvec4 subgroupInclusiveAdd(uvec4
);
\n
"
"double subgroupInclusiveAdd(double
value);
"
"double subgroupInclusiveAdd(double
);
\n
"
"dvec2 subgroupInclusiveAdd(dvec2
value);
"
"dvec2 subgroupInclusiveAdd(dvec2
);
\n
"
"dvec3 subgroupInclusiveAdd(dvec3
value);
"
"dvec3 subgroupInclusiveAdd(dvec3
);
\n
"
"dvec4 subgroupInclusiveAdd(dvec4
value);
"
"dvec4 subgroupInclusiveAdd(dvec4
);
\n
"
"float subgroupInclusiveMul(float
value);
"
"float subgroupInclusiveMul(float
);
\n
"
"vec2 subgroupInclusiveMul(vec2
value);
"
"vec2 subgroupInclusiveMul(vec2
);
\n
"
"vec3 subgroupInclusiveMul(vec3
value);
"
"vec3 subgroupInclusiveMul(vec3
);
\n
"
"vec4 subgroupInclusiveMul(vec4
value);
"
"vec4 subgroupInclusiveMul(vec4
);
\n
"
"int subgroupInclusiveMul(int
value);
"
"int subgroupInclusiveMul(int
);
\n
"
"ivec2 subgroupInclusiveMul(ivec2
value);
"
"ivec2 subgroupInclusiveMul(ivec2
);
\n
"
"ivec3 subgroupInclusiveMul(ivec3
value);
"
"ivec3 subgroupInclusiveMul(ivec3
);
\n
"
"ivec4 subgroupInclusiveMul(ivec4
value);
"
"ivec4 subgroupInclusiveMul(ivec4
);
\n
"
"uint subgroupInclusiveMul(uint
value);
"
"uint subgroupInclusiveMul(uint
);
\n
"
"uvec2 subgroupInclusiveMul(uvec2
value);
"
"uvec2 subgroupInclusiveMul(uvec2
);
\n
"
"uvec3 subgroupInclusiveMul(uvec3
value);
"
"uvec3 subgroupInclusiveMul(uvec3
);
\n
"
"uvec4 subgroupInclusiveMul(uvec4
value);
"
"uvec4 subgroupInclusiveMul(uvec4
);
\n
"
"double subgroupInclusiveMul(double
value);
"
"double subgroupInclusiveMul(double
);
\n
"
"dvec2 subgroupInclusiveMul(dvec2
value);
"
"dvec2 subgroupInclusiveMul(dvec2
);
\n
"
"dvec3 subgroupInclusiveMul(dvec3
value);
"
"dvec3 subgroupInclusiveMul(dvec3
);
\n
"
"dvec4 subgroupInclusiveMul(dvec4
value);
"
"dvec4 subgroupInclusiveMul(dvec4
);
\n
"
"float subgroupInclusiveMin(float
value);
"
"float subgroupInclusiveMin(float
);
\n
"
"vec2 subgroupInclusiveMin(vec2
value);
"
"vec2 subgroupInclusiveMin(vec2
);
\n
"
"vec3 subgroupInclusiveMin(vec3
value);
"
"vec3 subgroupInclusiveMin(vec3
);
\n
"
"vec4 subgroupInclusiveMin(vec4
value);
"
"vec4 subgroupInclusiveMin(vec4
);
\n
"
"int subgroupInclusiveMin(int
value);
"
"int subgroupInclusiveMin(int
);
\n
"
"ivec2 subgroupInclusiveMin(ivec2
value);
"
"ivec2 subgroupInclusiveMin(ivec2
);
\n
"
"ivec3 subgroupInclusiveMin(ivec3
value);
"
"ivec3 subgroupInclusiveMin(ivec3
);
\n
"
"ivec4 subgroupInclusiveMin(ivec4
value);
"
"ivec4 subgroupInclusiveMin(ivec4
);
\n
"
"uint subgroupInclusiveMin(uint
value);
"
"uint subgroupInclusiveMin(uint
);
\n
"
"uvec2 subgroupInclusiveMin(uvec2
value);
"
"uvec2 subgroupInclusiveMin(uvec2
);
\n
"
"uvec3 subgroupInclusiveMin(uvec3
value);
"
"uvec3 subgroupInclusiveMin(uvec3
);
\n
"
"uvec4 subgroupInclusiveMin(uvec4
value);
"
"uvec4 subgroupInclusiveMin(uvec4
);
\n
"
"double subgroupInclusiveMin(double
value);
"
"double subgroupInclusiveMin(double
);
\n
"
"dvec2 subgroupInclusiveMin(dvec2
value);
"
"dvec2 subgroupInclusiveMin(dvec2
);
\n
"
"dvec3 subgroupInclusiveMin(dvec3
value);
"
"dvec3 subgroupInclusiveMin(dvec3
);
\n
"
"dvec4 subgroupInclusiveMin(dvec4
value);
"
"dvec4 subgroupInclusiveMin(dvec4
);
\n
"
"float subgroupInclusiveMax(float
value);
"
"float subgroupInclusiveMax(float
);
\n
"
"vec2 subgroupInclusiveMax(vec2
value);
"
"vec2 subgroupInclusiveMax(vec2
);
\n
"
"vec3 subgroupInclusiveMax(vec3
value);
"
"vec3 subgroupInclusiveMax(vec3
);
\n
"
"vec4 subgroupInclusiveMax(vec4
value);
"
"vec4 subgroupInclusiveMax(vec4
);
\n
"
"int subgroupInclusiveMax(int
value);
"
"int subgroupInclusiveMax(int
);
\n
"
"ivec2 subgroupInclusiveMax(ivec2
value);
"
"ivec2 subgroupInclusiveMax(ivec2
);
\n
"
"ivec3 subgroupInclusiveMax(ivec3
value);
"
"ivec3 subgroupInclusiveMax(ivec3
);
\n
"
"ivec4 subgroupInclusiveMax(ivec4
value);
"
"ivec4 subgroupInclusiveMax(ivec4
);
\n
"
"uint subgroupInclusiveMax(uint
value);
"
"uint subgroupInclusiveMax(uint
);
\n
"
"uvec2 subgroupInclusiveMax(uvec2
value);
"
"uvec2 subgroupInclusiveMax(uvec2
);
\n
"
"uvec3 subgroupInclusiveMax(uvec3
value);
"
"uvec3 subgroupInclusiveMax(uvec3
);
\n
"
"uvec4 subgroupInclusiveMax(uvec4
value);
"
"uvec4 subgroupInclusiveMax(uvec4
);
\n
"
"double subgroupInclusiveMax(double
value);
"
"double subgroupInclusiveMax(double
);
\n
"
"dvec2 subgroupInclusiveMax(dvec2
value);
"
"dvec2 subgroupInclusiveMax(dvec2
);
\n
"
"dvec3 subgroupInclusiveMax(dvec3
value);
"
"dvec3 subgroupInclusiveMax(dvec3
);
\n
"
"dvec4 subgroupInclusiveMax(dvec4
value);
"
"dvec4 subgroupInclusiveMax(dvec4
);
\n
"
"int subgroupInclusiveAnd(int
value);
"
"int subgroupInclusiveAnd(int
);
\n
"
"ivec2 subgroupInclusiveAnd(ivec2
value);
"
"ivec2 subgroupInclusiveAnd(ivec2
);
\n
"
"ivec3 subgroupInclusiveAnd(ivec3
value);
"
"ivec3 subgroupInclusiveAnd(ivec3
);
\n
"
"ivec4 subgroupInclusiveAnd(ivec4
value);
"
"ivec4 subgroupInclusiveAnd(ivec4
);
\n
"
"uint subgroupInclusiveAnd(uint
value);
"
"uint subgroupInclusiveAnd(uint
);
\n
"
"uvec2 subgroupInclusiveAnd(uvec2
value);
"
"uvec2 subgroupInclusiveAnd(uvec2
);
\n
"
"uvec3 subgroupInclusiveAnd(uvec3
value);
"
"uvec3 subgroupInclusiveAnd(uvec3
);
\n
"
"uvec4 subgroupInclusiveAnd(uvec4
value);
"
"uvec4 subgroupInclusiveAnd(uvec4
);
\n
"
"bool subgroupInclusiveAnd(bool
value);
"
"bool subgroupInclusiveAnd(bool
);
\n
"
"bvec2 subgroupInclusiveAnd(bvec2
value);
"
"bvec2 subgroupInclusiveAnd(bvec2
);
\n
"
"bvec3 subgroupInclusiveAnd(bvec3
value);
"
"bvec3 subgroupInclusiveAnd(bvec3
);
\n
"
"bvec4 subgroupInclusiveAnd(bvec4
value);
"
"bvec4 subgroupInclusiveAnd(bvec4
);
\n
"
"int subgroupInclusiveOr(int
value);
"
"int subgroupInclusiveOr(int
);
\n
"
"ivec2 subgroupInclusiveOr(ivec2
value);
"
"ivec2 subgroupInclusiveOr(ivec2
);
\n
"
"ivec3 subgroupInclusiveOr(ivec3
value);
"
"ivec3 subgroupInclusiveOr(ivec3
);
\n
"
"ivec4 subgroupInclusiveOr(ivec4
value);
"
"ivec4 subgroupInclusiveOr(ivec4
);
\n
"
"uint subgroupInclusiveOr(uint
value);
"
"uint subgroupInclusiveOr(uint
);
\n
"
"uvec2 subgroupInclusiveOr(uvec2
value);
"
"uvec2 subgroupInclusiveOr(uvec2
);
\n
"
"uvec3 subgroupInclusiveOr(uvec3
value);
"
"uvec3 subgroupInclusiveOr(uvec3
);
\n
"
"uvec4 subgroupInclusiveOr(uvec4
value);
"
"uvec4 subgroupInclusiveOr(uvec4
);
\n
"
"bool subgroupInclusiveOr(bool
value);
"
"bool subgroupInclusiveOr(bool
);
\n
"
"bvec2 subgroupInclusiveOr(bvec2
value);
"
"bvec2 subgroupInclusiveOr(bvec2
);
\n
"
"bvec3 subgroupInclusiveOr(bvec3
value);
"
"bvec3 subgroupInclusiveOr(bvec3
);
\n
"
"bvec4 subgroupInclusiveOr(bvec4
value);
"
"bvec4 subgroupInclusiveOr(bvec4
);
\n
"
"int subgroupInclusiveXor(int
value);
"
"int subgroupInclusiveXor(int
);
\n
"
"ivec2 subgroupInclusiveXor(ivec2
value);
"
"ivec2 subgroupInclusiveXor(ivec2
);
\n
"
"ivec3 subgroupInclusiveXor(ivec3
value);
"
"ivec3 subgroupInclusiveXor(ivec3
);
\n
"
"ivec4 subgroupInclusiveXor(ivec4
value);
"
"ivec4 subgroupInclusiveXor(ivec4
);
\n
"
"uint subgroupInclusiveXor(uint
value);
"
"uint subgroupInclusiveXor(uint
);
\n
"
"uvec2 subgroupInclusiveXor(uvec2
value);
"
"uvec2 subgroupInclusiveXor(uvec2
);
\n
"
"uvec3 subgroupInclusiveXor(uvec3
value);
"
"uvec3 subgroupInclusiveXor(uvec3
);
\n
"
"uvec4 subgroupInclusiveXor(uvec4
value);
"
"uvec4 subgroupInclusiveXor(uvec4
);
\n
"
"bool subgroupInclusiveXor(bool
value);
"
"bool subgroupInclusiveXor(bool
);
\n
"
"bvec2 subgroupInclusiveXor(bvec2
value);
"
"bvec2 subgroupInclusiveXor(bvec2
);
\n
"
"bvec3 subgroupInclusiveXor(bvec3
value);
"
"bvec3 subgroupInclusiveXor(bvec3
);
\n
"
"bvec4 subgroupInclusiveXor(bvec4
value);
"
"bvec4 subgroupInclusiveXor(bvec4
);
\n
"
"float subgroupExclusiveAdd(float
value);
"
"float subgroupExclusiveAdd(float
);
\n
"
"vec2 subgroupExclusiveAdd(vec2
value);
"
"vec2 subgroupExclusiveAdd(vec2
);
\n
"
"vec3 subgroupExclusiveAdd(vec3
value);
"
"vec3 subgroupExclusiveAdd(vec3
);
\n
"
"vec4 subgroupExclusiveAdd(vec4
value);
"
"vec4 subgroupExclusiveAdd(vec4
);
\n
"
"int subgroupExclusiveAdd(int
value);
"
"int subgroupExclusiveAdd(int
);
\n
"
"ivec2 subgroupExclusiveAdd(ivec2
value);
"
"ivec2 subgroupExclusiveAdd(ivec2
);
\n
"
"ivec3 subgroupExclusiveAdd(ivec3
value);
"
"ivec3 subgroupExclusiveAdd(ivec3
);
\n
"
"ivec4 subgroupExclusiveAdd(ivec4
value);
"
"ivec4 subgroupExclusiveAdd(ivec4
);
\n
"
"uint subgroupExclusiveAdd(uint
value);
"
"uint subgroupExclusiveAdd(uint
);
\n
"
"uvec2 subgroupExclusiveAdd(uvec2
value);
"
"uvec2 subgroupExclusiveAdd(uvec2
);
\n
"
"uvec3 subgroupExclusiveAdd(uvec3
value);
"
"uvec3 subgroupExclusiveAdd(uvec3
);
\n
"
"uvec4 subgroupExclusiveAdd(uvec4
value);
"
"uvec4 subgroupExclusiveAdd(uvec4
);
\n
"
"double subgroupExclusiveAdd(double
value);
"
"double subgroupExclusiveAdd(double
);
\n
"
"dvec2 subgroupExclusiveAdd(dvec2
value);
"
"dvec2 subgroupExclusiveAdd(dvec2
);
\n
"
"dvec3 subgroupExclusiveAdd(dvec3
value);
"
"dvec3 subgroupExclusiveAdd(dvec3
);
\n
"
"dvec4 subgroupExclusiveAdd(dvec4
value);
"
"dvec4 subgroupExclusiveAdd(dvec4
);
\n
"
"float subgroupExclusiveMul(float
value);
"
"float subgroupExclusiveMul(float
);
\n
"
"vec2 subgroupExclusiveMul(vec2
value);
"
"vec2 subgroupExclusiveMul(vec2
);
\n
"
"vec3 subgroupExclusiveMul(vec3
value);
"
"vec3 subgroupExclusiveMul(vec3
);
\n
"
"vec4 subgroupExclusiveMul(vec4
value);
"
"vec4 subgroupExclusiveMul(vec4
);
\n
"
"int subgroupExclusiveMul(int
value);
"
"int subgroupExclusiveMul(int
);
\n
"
"ivec2 subgroupExclusiveMul(ivec2
value);
"
"ivec2 subgroupExclusiveMul(ivec2
);
\n
"
"ivec3 subgroupExclusiveMul(ivec3
value);
"
"ivec3 subgroupExclusiveMul(ivec3
);
\n
"
"ivec4 subgroupExclusiveMul(ivec4
value);
"
"ivec4 subgroupExclusiveMul(ivec4
);
\n
"
"uint subgroupExclusiveMul(uint
value);
"
"uint subgroupExclusiveMul(uint
);
\n
"
"uvec2 subgroupExclusiveMul(uvec2
value);
"
"uvec2 subgroupExclusiveMul(uvec2
);
\n
"
"uvec3 subgroupExclusiveMul(uvec3
value);
"
"uvec3 subgroupExclusiveMul(uvec3
);
\n
"
"uvec4 subgroupExclusiveMul(uvec4
value);
"
"uvec4 subgroupExclusiveMul(uvec4
);
\n
"
"double subgroupExclusiveMul(double
value);
"
"double subgroupExclusiveMul(double
);
\n
"
"dvec2 subgroupExclusiveMul(dvec2
value);
"
"dvec2 subgroupExclusiveMul(dvec2
);
\n
"
"dvec3 subgroupExclusiveMul(dvec3
value);
"
"dvec3 subgroupExclusiveMul(dvec3
);
\n
"
"dvec4 subgroupExclusiveMul(dvec4
value);
"
"dvec4 subgroupExclusiveMul(dvec4
);
\n
"
"float subgroupExclusiveMin(float
value);
"
"float subgroupExclusiveMin(float
);
\n
"
"vec2 subgroupExclusiveMin(vec2
value);
"
"vec2 subgroupExclusiveMin(vec2
);
\n
"
"vec3 subgroupExclusiveMin(vec3
value);
"
"vec3 subgroupExclusiveMin(vec3
);
\n
"
"vec4 subgroupExclusiveMin(vec4
value);
"
"vec4 subgroupExclusiveMin(vec4
);
\n
"
"int subgroupExclusiveMin(int
value);
"
"int subgroupExclusiveMin(int
);
\n
"
"ivec2 subgroupExclusiveMin(ivec2
value);
"
"ivec2 subgroupExclusiveMin(ivec2
);
\n
"
"ivec3 subgroupExclusiveMin(ivec3
value);
"
"ivec3 subgroupExclusiveMin(ivec3
);
\n
"
"ivec4 subgroupExclusiveMin(ivec4
value);
"
"ivec4 subgroupExclusiveMin(ivec4
);
\n
"
"uint subgroupExclusiveMin(uint
value);
"
"uint subgroupExclusiveMin(uint
);
\n
"
"uvec2 subgroupExclusiveMin(uvec2
value);
"
"uvec2 subgroupExclusiveMin(uvec2
);
\n
"
"uvec3 subgroupExclusiveMin(uvec3
value);
"
"uvec3 subgroupExclusiveMin(uvec3
);
\n
"
"uvec4 subgroupExclusiveMin(uvec4
value);
"
"uvec4 subgroupExclusiveMin(uvec4
);
\n
"
"double subgroupExclusiveMin(double
value);
"
"double subgroupExclusiveMin(double
);
\n
"
"dvec2 subgroupExclusiveMin(dvec2
value);
"
"dvec2 subgroupExclusiveMin(dvec2
);
\n
"
"dvec3 subgroupExclusiveMin(dvec3
value);
"
"dvec3 subgroupExclusiveMin(dvec3
);
\n
"
"dvec4 subgroupExclusiveMin(dvec4
value);
"
"dvec4 subgroupExclusiveMin(dvec4
);
\n
"
"float subgroupExclusiveMax(float
value);
"
"float subgroupExclusiveMax(float
);
\n
"
"vec2 subgroupExclusiveMax(vec2
value);
"
"vec2 subgroupExclusiveMax(vec2
);
\n
"
"vec3 subgroupExclusiveMax(vec3
value);
"
"vec3 subgroupExclusiveMax(vec3
);
\n
"
"vec4 subgroupExclusiveMax(vec4
value);
"
"vec4 subgroupExclusiveMax(vec4
);
\n
"
"int subgroupExclusiveMax(int
value);
"
"int subgroupExclusiveMax(int
);
\n
"
"ivec2 subgroupExclusiveMax(ivec2
value);
"
"ivec2 subgroupExclusiveMax(ivec2
);
\n
"
"ivec3 subgroupExclusiveMax(ivec3
value);
"
"ivec3 subgroupExclusiveMax(ivec3
);
\n
"
"ivec4 subgroupExclusiveMax(ivec4
value);
"
"ivec4 subgroupExclusiveMax(ivec4
);
\n
"
"uint subgroupExclusiveMax(uint
value);
"
"uint subgroupExclusiveMax(uint
);
\n
"
"uvec2 subgroupExclusiveMax(uvec2
value);
"
"uvec2 subgroupExclusiveMax(uvec2
);
\n
"
"uvec3 subgroupExclusiveMax(uvec3
value);
"
"uvec3 subgroupExclusiveMax(uvec3
);
\n
"
"uvec4 subgroupExclusiveMax(uvec4
value);
"
"uvec4 subgroupExclusiveMax(uvec4
);
\n
"
"double subgroupExclusiveMax(double
value);
"
"double subgroupExclusiveMax(double
);
\n
"
"dvec2 subgroupExclusiveMax(dvec2
value);
"
"dvec2 subgroupExclusiveMax(dvec2
);
\n
"
"dvec3 subgroupExclusiveMax(dvec3
value);
"
"dvec3 subgroupExclusiveMax(dvec3
);
\n
"
"dvec4 subgroupExclusiveMax(dvec4
value);
"
"dvec4 subgroupExclusiveMax(dvec4
);
\n
"
"int subgroupExclusiveAnd(int
value);
"
"int subgroupExclusiveAnd(int
);
\n
"
"ivec2 subgroupExclusiveAnd(ivec2
value);
"
"ivec2 subgroupExclusiveAnd(ivec2
);
\n
"
"ivec3 subgroupExclusiveAnd(ivec3
value);
"
"ivec3 subgroupExclusiveAnd(ivec3
);
\n
"
"ivec4 subgroupExclusiveAnd(ivec4
value);
"
"ivec4 subgroupExclusiveAnd(ivec4
);
\n
"
"uint subgroupExclusiveAnd(uint
value);
"
"uint subgroupExclusiveAnd(uint
);
\n
"
"uvec2 subgroupExclusiveAnd(uvec2
value);
"
"uvec2 subgroupExclusiveAnd(uvec2
);
\n
"
"uvec3 subgroupExclusiveAnd(uvec3
value);
"
"uvec3 subgroupExclusiveAnd(uvec3
);
\n
"
"uvec4 subgroupExclusiveAnd(uvec4
value);
"
"uvec4 subgroupExclusiveAnd(uvec4
);
\n
"
"bool subgroupExclusiveAnd(bool
value);
"
"bool subgroupExclusiveAnd(bool
);
\n
"
"bvec2 subgroupExclusiveAnd(bvec2
value);
"
"bvec2 subgroupExclusiveAnd(bvec2
);
\n
"
"bvec3 subgroupExclusiveAnd(bvec3
value);
"
"bvec3 subgroupExclusiveAnd(bvec3
);
\n
"
"bvec4 subgroupExclusiveAnd(bvec4
value);
"
"bvec4 subgroupExclusiveAnd(bvec4
);
\n
"
"int subgroupExclusiveOr(int
value);
"
"int subgroupExclusiveOr(int
);
\n
"
"ivec2 subgroupExclusiveOr(ivec2
value);
"
"ivec2 subgroupExclusiveOr(ivec2
);
\n
"
"ivec3 subgroupExclusiveOr(ivec3
value);
"
"ivec3 subgroupExclusiveOr(ivec3
);
\n
"
"ivec4 subgroupExclusiveOr(ivec4
value);
"
"ivec4 subgroupExclusiveOr(ivec4
);
\n
"
"uint subgroupExclusiveOr(uint
value);
"
"uint subgroupExclusiveOr(uint
);
\n
"
"uvec2 subgroupExclusiveOr(uvec2
value);
"
"uvec2 subgroupExclusiveOr(uvec2
);
\n
"
"uvec3 subgroupExclusiveOr(uvec3
value);
"
"uvec3 subgroupExclusiveOr(uvec3
);
\n
"
"uvec4 subgroupExclusiveOr(uvec4
value);
"
"uvec4 subgroupExclusiveOr(uvec4
);
\n
"
"bool subgroupExclusiveOr(bool
value);
"
"bool subgroupExclusiveOr(bool
);
\n
"
"bvec2 subgroupExclusiveOr(bvec2
value);
"
"bvec2 subgroupExclusiveOr(bvec2
);
\n
"
"bvec3 subgroupExclusiveOr(bvec3
value);
"
"bvec3 subgroupExclusiveOr(bvec3
);
\n
"
"bvec4 subgroupExclusiveOr(bvec4
value);
"
"bvec4 subgroupExclusiveOr(bvec4
);
\n
"
"int subgroupExclusiveXor(int
value);
"
"int subgroupExclusiveXor(int
);
\n
"
"ivec2 subgroupExclusiveXor(ivec2
value);
"
"ivec2 subgroupExclusiveXor(ivec2
);
\n
"
"ivec3 subgroupExclusiveXor(ivec3
value);
"
"ivec3 subgroupExclusiveXor(ivec3
);
\n
"
"ivec4 subgroupExclusiveXor(ivec4
value);
"
"ivec4 subgroupExclusiveXor(ivec4
);
\n
"
"uint subgroupExclusiveXor(uint
value);
"
"uint subgroupExclusiveXor(uint
);
\n
"
"uvec2 subgroupExclusiveXor(uvec2
value);
"
"uvec2 subgroupExclusiveXor(uvec2
);
\n
"
"uvec3 subgroupExclusiveXor(uvec3
value);
"
"uvec3 subgroupExclusiveXor(uvec3
);
\n
"
"uvec4 subgroupExclusiveXor(uvec4
value);
"
"uvec4 subgroupExclusiveXor(uvec4
);
\n
"
"bool subgroupExclusiveXor(bool
value);
"
"bool subgroupExclusiveXor(bool
);
\n
"
"bvec2 subgroupExclusiveXor(bvec2
value);
"
"bvec2 subgroupExclusiveXor(bvec2
);
\n
"
"bvec3 subgroupExclusiveXor(bvec3
value);
"
"bvec3 subgroupExclusiveXor(bvec3
);
\n
"
"bvec4 subgroupExclusiveXor(bvec4
value);
"
"bvec4 subgroupExclusiveXor(bvec4
);
\n
"
"float subgroupClusteredAdd(float
value, uint clusterSize);
"
"float subgroupClusteredAdd(float
, uint);
\n
"
"vec2 subgroupClusteredAdd(vec2
value, uint clusterSize);
"
"vec2 subgroupClusteredAdd(vec2
, uint);
\n
"
"vec3 subgroupClusteredAdd(vec3
value, uint clusterSize);
"
"vec3 subgroupClusteredAdd(vec3
, uint);
\n
"
"vec4 subgroupClusteredAdd(vec4
value, uint clusterSize);
"
"vec4 subgroupClusteredAdd(vec4
, uint);
\n
"
"int subgroupClusteredAdd(int
value, uint clusterSize);
"
"int subgroupClusteredAdd(int
, uint);
\n
"
"ivec2 subgroupClusteredAdd(ivec2
value, uint clusterSize);
"
"ivec2 subgroupClusteredAdd(ivec2
, uint);
\n
"
"ivec3 subgroupClusteredAdd(ivec3
value, uint clusterSize);
"
"ivec3 subgroupClusteredAdd(ivec3
, uint);
\n
"
"ivec4 subgroupClusteredAdd(ivec4
value, uint clusterSize);
"
"ivec4 subgroupClusteredAdd(ivec4
, uint);
\n
"
"uint subgroupClusteredAdd(uint
value, uint clusterSize);
"
"uint subgroupClusteredAdd(uint
, uint);
\n
"
"uvec2 subgroupClusteredAdd(uvec2
value, uint clusterSize);
"
"uvec2 subgroupClusteredAdd(uvec2
, uint);
\n
"
"uvec3 subgroupClusteredAdd(uvec3
value, uint clusterSize);
"
"uvec3 subgroupClusteredAdd(uvec3
, uint);
\n
"
"uvec4 subgroupClusteredAdd(uvec4
value, uint clusterSize);
"
"uvec4 subgroupClusteredAdd(uvec4
, uint);
\n
"
"double subgroupClusteredAdd(double
value, uint clusterSize);
"
"double subgroupClusteredAdd(double
, uint);
\n
"
"dvec2 subgroupClusteredAdd(dvec2
value, uint clusterSize);
"
"dvec2 subgroupClusteredAdd(dvec2
, uint);
\n
"
"dvec3 subgroupClusteredAdd(dvec3
value, uint clusterSize);
"
"dvec3 subgroupClusteredAdd(dvec3
, uint);
\n
"
"dvec4 subgroupClusteredAdd(dvec4
value, uint clusterSize);
"
"dvec4 subgroupClusteredAdd(dvec4
, uint);
\n
"
"float subgroupClusteredMul(float
value, uint clusterSize);
"
"float subgroupClusteredMul(float
, uint);
\n
"
"vec2 subgroupClusteredMul(vec2
value, uint clusterSize);
"
"vec2 subgroupClusteredMul(vec2
, uint);
\n
"
"vec3 subgroupClusteredMul(vec3
value, uint clusterSize);
"
"vec3 subgroupClusteredMul(vec3
, uint);
\n
"
"vec4 subgroupClusteredMul(vec4
value, uint clusterSize);
"
"vec4 subgroupClusteredMul(vec4
, uint);
\n
"
"int subgroupClusteredMul(int
value, uint clusterSize);
"
"int subgroupClusteredMul(int
, uint);
\n
"
"ivec2 subgroupClusteredMul(ivec2
value, uint clusterSize);
"
"ivec2 subgroupClusteredMul(ivec2
, uint);
\n
"
"ivec3 subgroupClusteredMul(ivec3
value, uint clusterSize);
"
"ivec3 subgroupClusteredMul(ivec3
, uint);
\n
"
"ivec4 subgroupClusteredMul(ivec4
value, uint clusterSize);
"
"ivec4 subgroupClusteredMul(ivec4
, uint);
\n
"
"uint subgroupClusteredMul(uint
value, uint clusterSize);
"
"uint subgroupClusteredMul(uint
, uint);
\n
"
"uvec2 subgroupClusteredMul(uvec2
value, uint clusterSize);
"
"uvec2 subgroupClusteredMul(uvec2
, uint);
\n
"
"uvec3 subgroupClusteredMul(uvec3
value, uint clusterSize);
"
"uvec3 subgroupClusteredMul(uvec3
, uint);
\n
"
"uvec4 subgroupClusteredMul(uvec4
value, uint clusterSize);
"
"uvec4 subgroupClusteredMul(uvec4
, uint);
\n
"
"double subgroupClusteredMul(double
value, uint clusterSize);
"
"double subgroupClusteredMul(double
, uint);
\n
"
"dvec2 subgroupClusteredMul(dvec2
value, uint clusterSize);
"
"dvec2 subgroupClusteredMul(dvec2
, uint);
\n
"
"dvec3 subgroupClusteredMul(dvec3
value, uint clusterSize);
"
"dvec3 subgroupClusteredMul(dvec3
, uint);
\n
"
"dvec4 subgroupClusteredMul(dvec4
value, uint clusterSize);
"
"dvec4 subgroupClusteredMul(dvec4
, uint);
\n
"
"float subgroupClusteredMin(float
value, uint clusterSize);
"
"float subgroupClusteredMin(float
, uint);
\n
"
"vec2 subgroupClusteredMin(vec2
value, uint clusterSize);
"
"vec2 subgroupClusteredMin(vec2
, uint);
\n
"
"vec3 subgroupClusteredMin(vec3
value, uint clusterSize);
"
"vec3 subgroupClusteredMin(vec3
, uint);
\n
"
"vec4 subgroupClusteredMin(vec4
value, uint clusterSize);
"
"vec4 subgroupClusteredMin(vec4
, uint);
\n
"
"int subgroupClusteredMin(int
value, uint clusterSize);
"
"int subgroupClusteredMin(int
, uint);
\n
"
"ivec2 subgroupClusteredMin(ivec2
value, uint clusterSize);
"
"ivec2 subgroupClusteredMin(ivec2
, uint);
\n
"
"ivec3 subgroupClusteredMin(ivec3
value, uint clusterSize);
"
"ivec3 subgroupClusteredMin(ivec3
, uint);
\n
"
"ivec4 subgroupClusteredMin(ivec4
value, uint clusterSize);
"
"ivec4 subgroupClusteredMin(ivec4
, uint);
\n
"
"uint subgroupClusteredMin(uint
value, uint clusterSize);
"
"uint subgroupClusteredMin(uint
, uint);
\n
"
"uvec2 subgroupClusteredMin(uvec2
value, uint clusterSize);
"
"uvec2 subgroupClusteredMin(uvec2
, uint);
\n
"
"uvec3 subgroupClusteredMin(uvec3
value, uint clusterSize);
"
"uvec3 subgroupClusteredMin(uvec3
, uint);
\n
"
"uvec4 subgroupClusteredMin(uvec4
value, uint clusterSize);
"
"uvec4 subgroupClusteredMin(uvec4
, uint);
\n
"
"double subgroupClusteredMin(double
value, uint clusterSize);
"
"double subgroupClusteredMin(double
, uint);
\n
"
"dvec2 subgroupClusteredMin(dvec2
value, uint clusterSize);
"
"dvec2 subgroupClusteredMin(dvec2
, uint);
\n
"
"dvec3 subgroupClusteredMin(dvec3
value, uint clusterSize);
"
"dvec3 subgroupClusteredMin(dvec3
, uint);
\n
"
"dvec4 subgroupClusteredMin(dvec4
value, uint clusterSize);
"
"dvec4 subgroupClusteredMin(dvec4
, uint);
\n
"
"float subgroupClusteredMax(float
value, uint clusterSize);
"
"float subgroupClusteredMax(float
, uint);
\n
"
"vec2 subgroupClusteredMax(vec2
value, uint clusterSize);
"
"vec2 subgroupClusteredMax(vec2
, uint);
\n
"
"vec3 subgroupClusteredMax(vec3
value, uint clusterSize);
"
"vec3 subgroupClusteredMax(vec3
, uint);
\n
"
"vec4 subgroupClusteredMax(vec4
value, uint clusterSize);
"
"vec4 subgroupClusteredMax(vec4
, uint);
\n
"
"int subgroupClusteredMax(int
value, uint clusterSize);
"
"int subgroupClusteredMax(int
, uint);
\n
"
"ivec2 subgroupClusteredMax(ivec2
value, uint clusterSize);
"
"ivec2 subgroupClusteredMax(ivec2
, uint);
\n
"
"ivec3 subgroupClusteredMax(ivec3
value, uint clusterSize);
"
"ivec3 subgroupClusteredMax(ivec3
, uint);
\n
"
"ivec4 subgroupClusteredMax(ivec4
value, uint clusterSize);
"
"ivec4 subgroupClusteredMax(ivec4
, uint);
\n
"
"uint subgroupClusteredMax(uint
value, uint clusterSize);
"
"uint subgroupClusteredMax(uint
, uint);
\n
"
"uvec2 subgroupClusteredMax(uvec2
value, uint clusterSize);
"
"uvec2 subgroupClusteredMax(uvec2
, uint);
\n
"
"uvec3 subgroupClusteredMax(uvec3
value, uint clusterSize);
"
"uvec3 subgroupClusteredMax(uvec3
, uint);
\n
"
"uvec4 subgroupClusteredMax(uvec4
value, uint clusterSize);
"
"uvec4 subgroupClusteredMax(uvec4
, uint);
\n
"
"double subgroupClusteredMax(double
value, uint clusterSize);
"
"double subgroupClusteredMax(double
, uint);
\n
"
"dvec2 subgroupClusteredMax(dvec2
value, uint clusterSize);
"
"dvec2 subgroupClusteredMax(dvec2
, uint);
\n
"
"dvec3 subgroupClusteredMax(dvec3
value, uint clusterSize);
"
"dvec3 subgroupClusteredMax(dvec3
, uint);
\n
"
"dvec4 subgroupClusteredMax(dvec4
value, uint clusterSize);
"
"dvec4 subgroupClusteredMax(dvec4
, uint);
\n
"
"int subgroupClusteredAnd(int
value, uint clusterSize);
"
"int subgroupClusteredAnd(int
, uint);
\n
"
"ivec2 subgroupClusteredAnd(ivec2
value, uint clusterSize);
"
"ivec2 subgroupClusteredAnd(ivec2
, uint);
\n
"
"ivec3 subgroupClusteredAnd(ivec3
value, uint clusterSize);
"
"ivec3 subgroupClusteredAnd(ivec3
, uint);
\n
"
"ivec4 subgroupClusteredAnd(ivec4
value, uint clusterSize);
"
"ivec4 subgroupClusteredAnd(ivec4
, uint);
\n
"
"uint subgroupClusteredAnd(uint
value, uint clusterSize);
"
"uint subgroupClusteredAnd(uint
, uint);
\n
"
"uvec2 subgroupClusteredAnd(uvec2
value, uint clusterSize);
"
"uvec2 subgroupClusteredAnd(uvec2
, uint);
\n
"
"uvec3 subgroupClusteredAnd(uvec3
value, uint clusterSize);
"
"uvec3 subgroupClusteredAnd(uvec3
, uint);
\n
"
"uvec4 subgroupClusteredAnd(uvec4
value, uint clusterSize);
"
"uvec4 subgroupClusteredAnd(uvec4
, uint);
\n
"
"bool subgroupClusteredAnd(bool
value, uint clusterSize);
"
"bool subgroupClusteredAnd(bool
, uint);
\n
"
"bvec2 subgroupClusteredAnd(bvec2
value, uint clusterSize);
"
"bvec2 subgroupClusteredAnd(bvec2
, uint);
\n
"
"bvec3 subgroupClusteredAnd(bvec3
value, uint clusterSize);
"
"bvec3 subgroupClusteredAnd(bvec3
, uint);
\n
"
"bvec4 subgroupClusteredAnd(bvec4
value, uint clusterSize);
"
"bvec4 subgroupClusteredAnd(bvec4
, uint);
\n
"
"int subgroupClusteredOr(int
value, uint clusterSize);
"
"int subgroupClusteredOr(int
, uint);
\n
"
"ivec2 subgroupClusteredOr(ivec2
value, uint clusterSize);
"
"ivec2 subgroupClusteredOr(ivec2
, uint);
\n
"
"ivec3 subgroupClusteredOr(ivec3
value, uint clusterSize);
"
"ivec3 subgroupClusteredOr(ivec3
, uint);
\n
"
"ivec4 subgroupClusteredOr(ivec4
value, uint clusterSize);
"
"ivec4 subgroupClusteredOr(ivec4
, uint);
\n
"
"uint subgroupClusteredOr(uint
value, uint clusterSize);
"
"uint subgroupClusteredOr(uint
, uint);
\n
"
"uvec2 subgroupClusteredOr(uvec2
value, uint clusterSize);
"
"uvec2 subgroupClusteredOr(uvec2
, uint);
\n
"
"uvec3 subgroupClusteredOr(uvec3
value, uint clusterSize);
"
"uvec3 subgroupClusteredOr(uvec3
, uint);
\n
"
"uvec4 subgroupClusteredOr(uvec4
value, uint clusterSize);
"
"uvec4 subgroupClusteredOr(uvec4
, uint);
\n
"
"bool subgroupClusteredOr(bool
value, uint clusterSize);
"
"bool subgroupClusteredOr(bool
, uint);
\n
"
"bvec2 subgroupClusteredOr(bvec2
value, uint clusterSize);
"
"bvec2 subgroupClusteredOr(bvec2
, uint);
\n
"
"bvec3 subgroupClusteredOr(bvec3
value, uint clusterSize);
"
"bvec3 subgroupClusteredOr(bvec3
, uint);
\n
"
"bvec4 subgroupClusteredOr(bvec4
value, uint clusterSize);
"
"bvec4 subgroupClusteredOr(bvec4
, uint);
\n
"
"int subgroupClusteredXor(int
value, uint clusterSize);
"
"int subgroupClusteredXor(int
, uint);
\n
"
"ivec2 subgroupClusteredXor(ivec2
value, uint clusterSize);
"
"ivec2 subgroupClusteredXor(ivec2
, uint);
\n
"
"ivec3 subgroupClusteredXor(ivec3
value, uint clusterSize);
"
"ivec3 subgroupClusteredXor(ivec3
, uint);
\n
"
"ivec4 subgroupClusteredXor(ivec4
value, uint clusterSize);
"
"ivec4 subgroupClusteredXor(ivec4
, uint);
\n
"
"uint subgroupClusteredXor(uint
value, uint clusterSize);
"
"uint subgroupClusteredXor(uint
, uint);
\n
"
"uvec2 subgroupClusteredXor(uvec2
value, uint clusterSize);
"
"uvec2 subgroupClusteredXor(uvec2
, uint);
\n
"
"uvec3 subgroupClusteredXor(uvec3
value, uint clusterSize);
"
"uvec3 subgroupClusteredXor(uvec3
, uint);
\n
"
"uvec4 subgroupClusteredXor(uvec4
value, uint clusterSize);
"
"uvec4 subgroupClusteredXor(uvec4
, uint);
\n
"
"bool subgroupClusteredXor(bool
value, uint clusterSize);
"
"bool subgroupClusteredXor(bool
, uint);
\n
"
"bvec2 subgroupClusteredXor(bvec2
value, uint clusterSize);
"
"bvec2 subgroupClusteredXor(bvec2
, uint);
\n
"
"bvec3 subgroupClusteredXor(bvec3
value, uint clusterSize);
"
"bvec3 subgroupClusteredXor(bvec3
, uint);
\n
"
"bvec4 subgroupClusteredXor(bvec4
value, uint clusterSize);
"
"bvec4 subgroupClusteredXor(bvec4
, uint);
\n
"
"float subgroupQuadBroadcast(float
value, uint id);
"
"float subgroupQuadBroadcast(float
, uint);
\n
"
"vec2 subgroupQuadBroadcast(vec2
value, uint id);
"
"vec2 subgroupQuadBroadcast(vec2
, uint);
\n
"
"vec3 subgroupQuadBroadcast(vec3
value, uint id);
"
"vec3 subgroupQuadBroadcast(vec3
, uint);
\n
"
"vec4 subgroupQuadBroadcast(vec4
value, uint id);
"
"vec4 subgroupQuadBroadcast(vec4
, uint);
\n
"
"int subgroupQuadBroadcast(int
value, uint id);
"
"int subgroupQuadBroadcast(int
, uint);
\n
"
"ivec2 subgroupQuadBroadcast(ivec2
value, uint id);
"
"ivec2 subgroupQuadBroadcast(ivec2
, uint);
\n
"
"ivec3 subgroupQuadBroadcast(ivec3
value, uint id);
"
"ivec3 subgroupQuadBroadcast(ivec3
, uint);
\n
"
"ivec4 subgroupQuadBroadcast(ivec4
value, uint id);
"
"ivec4 subgroupQuadBroadcast(ivec4
, uint);
\n
"
"uint subgroupQuadBroadcast(uint
value, uint id);
"
"uint subgroupQuadBroadcast(uint
, uint);
\n
"
"uvec2 subgroupQuadBroadcast(uvec2
value, uint id);
"
"uvec2 subgroupQuadBroadcast(uvec2
, uint);
\n
"
"uvec3 subgroupQuadBroadcast(uvec3
value, uint id);
"
"uvec3 subgroupQuadBroadcast(uvec3
, uint);
\n
"
"uvec4 subgroupQuadBroadcast(uvec4
value, uint id);
"
"uvec4 subgroupQuadBroadcast(uvec4
, uint);
\n
"
"bool subgroupQuadBroadcast(bool
value, uint id);
"
"bool subgroupQuadBroadcast(bool
, uint);
\n
"
"bvec2 subgroupQuadBroadcast(bvec2
value, uint id);
"
"bvec2 subgroupQuadBroadcast(bvec2
, uint);
\n
"
"bvec3 subgroupQuadBroadcast(bvec3
value, uint id);
"
"bvec3 subgroupQuadBroadcast(bvec3
, uint);
\n
"
"bvec4 subgroupQuadBroadcast(bvec4
value, uint id);
"
"bvec4 subgroupQuadBroadcast(bvec4
, uint);
\n
"
"double subgroupQuadBroadcast(double
value, uint id);
"
"double subgroupQuadBroadcast(double
, uint);
\n
"
"dvec2 subgroupQuadBroadcast(dvec2
value, uint id);
"
"dvec2 subgroupQuadBroadcast(dvec2
, uint);
\n
"
"dvec3 subgroupQuadBroadcast(dvec3
value, uint id);
"
"dvec3 subgroupQuadBroadcast(dvec3
, uint);
\n
"
"dvec4 subgroupQuadBroadcast(dvec4
value, uint id);
"
"dvec4 subgroupQuadBroadcast(dvec4
, uint);
\n
"
"float subgroupQuadSwapHorizontal(float
value);
"
"float subgroupQuadSwapHorizontal(float
);
\n
"
"vec2 subgroupQuadSwapHorizontal(vec2
value);
"
"vec2 subgroupQuadSwapHorizontal(vec2
);
\n
"
"vec3 subgroupQuadSwapHorizontal(vec3
value);
"
"vec3 subgroupQuadSwapHorizontal(vec3
);
\n
"
"vec4 subgroupQuadSwapHorizontal(vec4
value);
"
"vec4 subgroupQuadSwapHorizontal(vec4
);
\n
"
"int subgroupQuadSwapHorizontal(int
value);
"
"int subgroupQuadSwapHorizontal(int
);
\n
"
"ivec2 subgroupQuadSwapHorizontal(ivec2
value);
"
"ivec2 subgroupQuadSwapHorizontal(ivec2
);
\n
"
"ivec3 subgroupQuadSwapHorizontal(ivec3
value);
"
"ivec3 subgroupQuadSwapHorizontal(ivec3
);
\n
"
"ivec4 subgroupQuadSwapHorizontal(ivec4
value);
"
"ivec4 subgroupQuadSwapHorizontal(ivec4
);
\n
"
"uint subgroupQuadSwapHorizontal(uint
value);
"
"uint subgroupQuadSwapHorizontal(uint
);
\n
"
"uvec2 subgroupQuadSwapHorizontal(uvec2
value);
"
"uvec2 subgroupQuadSwapHorizontal(uvec2
);
\n
"
"uvec3 subgroupQuadSwapHorizontal(uvec3
value);
"
"uvec3 subgroupQuadSwapHorizontal(uvec3
);
\n
"
"uvec4 subgroupQuadSwapHorizontal(uvec4
value);
"
"uvec4 subgroupQuadSwapHorizontal(uvec4
);
\n
"
"bool subgroupQuadSwapHorizontal(bool
value);
"
"bool subgroupQuadSwapHorizontal(bool
);
\n
"
"bvec2 subgroupQuadSwapHorizontal(bvec2
value);
"
"bvec2 subgroupQuadSwapHorizontal(bvec2
);
\n
"
"bvec3 subgroupQuadSwapHorizontal(bvec3
value);
"
"bvec3 subgroupQuadSwapHorizontal(bvec3
);
\n
"
"bvec4 subgroupQuadSwapHorizontal(bvec4
value);
"
"bvec4 subgroupQuadSwapHorizontal(bvec4
);
\n
"
"double subgroupQuadSwapHorizontal(double
value);
"
"double subgroupQuadSwapHorizontal(double
);
\n
"
"dvec2 subgroupQuadSwapHorizontal(dvec2
value);
"
"dvec2 subgroupQuadSwapHorizontal(dvec2
);
\n
"
"dvec3 subgroupQuadSwapHorizontal(dvec3
value);
"
"dvec3 subgroupQuadSwapHorizontal(dvec3
);
\n
"
"dvec4 subgroupQuadSwapHorizontal(dvec4
value);
"
"dvec4 subgroupQuadSwapHorizontal(dvec4
);
\n
"
"float subgroupQuadSwapVertical(float
value);
"
"float subgroupQuadSwapVertical(float
);
\n
"
"vec2 subgroupQuadSwapVertical(vec2
value);
"
"vec2 subgroupQuadSwapVertical(vec2
);
\n
"
"vec3 subgroupQuadSwapVertical(vec3
value);
"
"vec3 subgroupQuadSwapVertical(vec3
);
\n
"
"vec4 subgroupQuadSwapVertical(vec4
value);
"
"vec4 subgroupQuadSwapVertical(vec4
);
\n
"
"int subgroupQuadSwapVertical(int
value);
"
"int subgroupQuadSwapVertical(int
);
\n
"
"ivec2 subgroupQuadSwapVertical(ivec2
value);
"
"ivec2 subgroupQuadSwapVertical(ivec2
);
\n
"
"ivec3 subgroupQuadSwapVertical(ivec3
value);
"
"ivec3 subgroupQuadSwapVertical(ivec3
);
\n
"
"ivec4 subgroupQuadSwapVertical(ivec4
value);
"
"ivec4 subgroupQuadSwapVertical(ivec4
);
\n
"
"uint subgroupQuadSwapVertical(uint
value);
"
"uint subgroupQuadSwapVertical(uint
);
\n
"
"uvec2 subgroupQuadSwapVertical(uvec2
value);
"
"uvec2 subgroupQuadSwapVertical(uvec2
);
\n
"
"uvec3 subgroupQuadSwapVertical(uvec3
value);
"
"uvec3 subgroupQuadSwapVertical(uvec3
);
\n
"
"uvec4 subgroupQuadSwapVertical(uvec4
value);
"
"uvec4 subgroupQuadSwapVertical(uvec4
);
\n
"
"bool subgroupQuadSwapVertical(bool
value);
"
"bool subgroupQuadSwapVertical(bool
);
\n
"
"bvec2 subgroupQuadSwapVertical(bvec2
value);
"
"bvec2 subgroupQuadSwapVertical(bvec2
);
\n
"
"bvec3 subgroupQuadSwapVertical(bvec3
value);
"
"bvec3 subgroupQuadSwapVertical(bvec3
);
\n
"
"bvec4 subgroupQuadSwapVertical(bvec4
value);
"
"bvec4 subgroupQuadSwapVertical(bvec4
);
\n
"
"double subgroupQuadSwapVertical(double
value);
"
"double subgroupQuadSwapVertical(double
);
\n
"
"dvec2 subgroupQuadSwapVertical(dvec2
value);
"
"dvec2 subgroupQuadSwapVertical(dvec2
);
\n
"
"dvec3 subgroupQuadSwapVertical(dvec3
value);
"
"dvec3 subgroupQuadSwapVertical(dvec3
);
\n
"
"dvec4 subgroupQuadSwapVertical(dvec4
value);
"
"dvec4 subgroupQuadSwapVertical(dvec4
);
\n
"
"float subgroupQuadSwapDiagonal(float
value);
"
"float subgroupQuadSwapDiagonal(float
);
\n
"
"vec2 subgroupQuadSwapDiagonal(vec2
value);
"
"vec2 subgroupQuadSwapDiagonal(vec2
);
\n
"
"vec3 subgroupQuadSwapDiagonal(vec3
value);
"
"vec3 subgroupQuadSwapDiagonal(vec3
);
\n
"
"vec4 subgroupQuadSwapDiagonal(vec4
value);
"
"vec4 subgroupQuadSwapDiagonal(vec4
);
\n
"
"int subgroupQuadSwapDiagonal(int
value);
"
"int subgroupQuadSwapDiagonal(int
);
\n
"
"ivec2 subgroupQuadSwapDiagonal(ivec2
value);
"
"ivec2 subgroupQuadSwapDiagonal(ivec2
);
\n
"
"ivec3 subgroupQuadSwapDiagonal(ivec3
value);
"
"ivec3 subgroupQuadSwapDiagonal(ivec3
);
\n
"
"ivec4 subgroupQuadSwapDiagonal(ivec4
value);
"
"ivec4 subgroupQuadSwapDiagonal(ivec4
);
\n
"
"uint subgroupQuadSwapDiagonal(uint
value);
"
"uint subgroupQuadSwapDiagonal(uint
);
\n
"
"uvec2 subgroupQuadSwapDiagonal(uvec2
value);
"
"uvec2 subgroupQuadSwapDiagonal(uvec2
);
\n
"
"uvec3 subgroupQuadSwapDiagonal(uvec3
value);
"
"uvec3 subgroupQuadSwapDiagonal(uvec3
);
\n
"
"uvec4 subgroupQuadSwapDiagonal(uvec4
value);
"
"uvec4 subgroupQuadSwapDiagonal(uvec4
);
\n
"
"bool subgroupQuadSwapDiagonal(bool
value);
"
"bool subgroupQuadSwapDiagonal(bool
);
\n
"
"bvec2 subgroupQuadSwapDiagonal(bvec2
value);
"
"bvec2 subgroupQuadSwapDiagonal(bvec2
);
\n
"
"bvec3 subgroupQuadSwapDiagonal(bvec3
value);
"
"bvec3 subgroupQuadSwapDiagonal(bvec3
);
\n
"
"bvec4 subgroupQuadSwapDiagonal(bvec4
value);
"
"bvec4 subgroupQuadSwapDiagonal(bvec4
);
\n
"
"double subgroupQuadSwapDiagonal(double
value);
"
"double subgroupQuadSwapDiagonal(double
);
\n
"
"dvec2 subgroupQuadSwapDiagonal(dvec2
value);
"
"dvec2 subgroupQuadSwapDiagonal(dvec2
);
\n
"
"dvec3 subgroupQuadSwapDiagonal(dvec3
value);
"
"dvec3 subgroupQuadSwapDiagonal(dvec3
);
\n
"
"dvec4 subgroupQuadSwapDiagonal(dvec4
value);
"
"dvec4 subgroupQuadSwapDiagonal(dvec4
);
\n
"
"
\n
"
);
"
\n
"
);
...
@@ -4439,7 +4439,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
...
@@ -4439,7 +4439,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
}
}
// GL_KHR_shader_subgroup
// GL_KHR_shader_subgroup
if
(
profile
!=
EEsProfile
&&
version
>=
45
0
)
{
if
(
spvVersion
.
vulkan
>=
10
0
)
{
commonBuiltins
.
append
(
commonBuiltins
.
append
(
"mediump in uint gl_SubgroupSize;"
"mediump in uint gl_SubgroupSize;"
"mediump in uint gl_SubgroupInvocationID;"
"mediump in uint gl_SubgroupInvocationID;"
...
@@ -5671,78 +5671,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
...
@@ -5671,78 +5671,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable
.
setFunctionExtensions
(
"anyInvocationARB"
,
1
,
&
E_GL_ARB_shader_group_vote
);
symbolTable
.
setFunctionExtensions
(
"anyInvocationARB"
,
1
,
&
E_GL_ARB_shader_group_vote
);
symbolTable
.
setFunctionExtensions
(
"allInvocationsARB"
,
1
,
&
E_GL_ARB_shader_group_vote
);
symbolTable
.
setFunctionExtensions
(
"allInvocationsARB"
,
1
,
&
E_GL_ARB_shader_group_vote
);
symbolTable
.
setFunctionExtensions
(
"allInvocationsEqualARB"
,
1
,
&
E_GL_ARB_shader_group_vote
);
symbolTable
.
setFunctionExtensions
(
"allInvocationsEqualARB"
,
1
,
&
E_GL_ARB_shader_group_vote
);
// GL_KHR_shader_subgroup
symbolTable
.
setVariableExtensions
(
"gl_SubgroupSize"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupInvocationID"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupEqMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupGeMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupGtMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupLeMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupLtMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
BuiltInVariable
(
"gl_SubgroupSize"
,
EbvSubgroupSize2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupInvocationID"
,
EbvSubgroupInvocation2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupEqMask"
,
EbvSubgroupEqMask2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupGeMask"
,
EbvSubgroupGeMask2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupGtMask"
,
EbvSubgroupGtMask2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupLeMask"
,
EbvSubgroupLeMask2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupLtMask"
,
EbvSubgroupLtMask2
,
symbolTable
);
symbolTable
.
setFunctionExtensions
(
"subgroupBarrier"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMemoryBarrier"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMemoryBarrierBuffer"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMemoryBarrierImage"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupElect"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupAll"
,
1
,
&
E_GL_KHR_shader_subgroup_vote
);
symbolTable
.
setFunctionExtensions
(
"subgroupAny"
,
1
,
&
E_GL_KHR_shader_subgroup_vote
);
symbolTable
.
setFunctionExtensions
(
"subgroupAllEqual"
,
1
,
&
E_GL_KHR_shader_subgroup_vote
);
symbolTable
.
setFunctionExtensions
(
"subgroupBroadcast"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBroadcastFirst"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallot"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupInverseBallot"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotBitExtract"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotBitCount"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotInclusiveBitCount"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotExclusiveBitCount"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotFindLSB"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotFindMSB"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupShuffle"
,
1
,
&
E_GL_KHR_shader_subgroup_shuffle
);
symbolTable
.
setFunctionExtensions
(
"subgroupShuffleXor"
,
1
,
&
E_GL_KHR_shader_subgroup_shuffle
);
symbolTable
.
setFunctionExtensions
(
"subgroupShuffleUp"
,
1
,
&
E_GL_KHR_shader_subgroup_shuffle_relative
);
symbolTable
.
setFunctionExtensions
(
"subgroupShuffleDown"
,
1
,
&
E_GL_KHR_shader_subgroup_shuffle_relative
);
symbolTable
.
setFunctionExtensions
(
"subgroupAdd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMul"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMin"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMax"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupAnd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupOr"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupXor"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveAdd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveMul"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveMin"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveMax"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveAnd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveOr"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveXor"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveAdd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveMul"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveMin"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveMax"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveAnd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveOr"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveXor"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredAdd"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredMul"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredMin"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredMax"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredAnd"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredOr"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredXor"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupQuadBroadcast"
,
1
,
&
E_GL_KHR_shader_subgroup_quad
);
symbolTable
.
setFunctionExtensions
(
"subgroupQuadSwapHorizontal"
,
1
,
&
E_GL_KHR_shader_subgroup_quad
);
symbolTable
.
setFunctionExtensions
(
"subgroupQuadSwapVertical"
,
1
,
&
E_GL_KHR_shader_subgroup_quad
);
symbolTable
.
setFunctionExtensions
(
"subgroupQuadSwapDiagonal"
,
1
,
&
E_GL_KHR_shader_subgroup_quad
);
}
}
#ifdef AMD_EXTENSIONS
#ifdef AMD_EXTENSIONS
...
@@ -6153,6 +6081,80 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
...
@@ -6153,6 +6081,80 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable
(
"gl_DeviceIndex"
,
EbvDeviceIndex
,
symbolTable
);
BuiltInVariable
(
"gl_DeviceIndex"
,
EbvDeviceIndex
,
symbolTable
);
symbolTable
.
setVariableExtensions
(
"gl_ViewIndex"
,
1
,
&
E_GL_EXT_multiview
);
symbolTable
.
setVariableExtensions
(
"gl_ViewIndex"
,
1
,
&
E_GL_EXT_multiview
);
BuiltInVariable
(
"gl_ViewIndex"
,
EbvViewIndex
,
symbolTable
);
BuiltInVariable
(
"gl_ViewIndex"
,
EbvViewIndex
,
symbolTable
);
// GL_KHR_shader_subgroup
if
(
spvVersion
.
vulkan
>=
100
)
{
symbolTable
.
setVariableExtensions
(
"gl_SubgroupSize"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupInvocationID"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupEqMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupGeMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupGtMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupLeMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupLtMask"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
BuiltInVariable
(
"gl_SubgroupSize"
,
EbvSubgroupSize2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupInvocationID"
,
EbvSubgroupInvocation2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupEqMask"
,
EbvSubgroupEqMask2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupGeMask"
,
EbvSubgroupGeMask2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupGtMask"
,
EbvSubgroupGtMask2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupLeMask"
,
EbvSubgroupLeMask2
,
symbolTable
);
BuiltInVariable
(
"gl_SubgroupLtMask"
,
EbvSubgroupLtMask2
,
symbolTable
);
symbolTable
.
setFunctionExtensions
(
"subgroupBarrier"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMemoryBarrier"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMemoryBarrierBuffer"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMemoryBarrierImage"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupElect"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setFunctionExtensions
(
"subgroupAll"
,
1
,
&
E_GL_KHR_shader_subgroup_vote
);
symbolTable
.
setFunctionExtensions
(
"subgroupAny"
,
1
,
&
E_GL_KHR_shader_subgroup_vote
);
symbolTable
.
setFunctionExtensions
(
"subgroupAllEqual"
,
1
,
&
E_GL_KHR_shader_subgroup_vote
);
symbolTable
.
setFunctionExtensions
(
"subgroupBroadcast"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBroadcastFirst"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallot"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupInverseBallot"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotBitExtract"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotBitCount"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotInclusiveBitCount"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotExclusiveBitCount"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotFindLSB"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupBallotFindMSB"
,
1
,
&
E_GL_KHR_shader_subgroup_ballot
);
symbolTable
.
setFunctionExtensions
(
"subgroupShuffle"
,
1
,
&
E_GL_KHR_shader_subgroup_shuffle
);
symbolTable
.
setFunctionExtensions
(
"subgroupShuffleXor"
,
1
,
&
E_GL_KHR_shader_subgroup_shuffle
);
symbolTable
.
setFunctionExtensions
(
"subgroupShuffleUp"
,
1
,
&
E_GL_KHR_shader_subgroup_shuffle_relative
);
symbolTable
.
setFunctionExtensions
(
"subgroupShuffleDown"
,
1
,
&
E_GL_KHR_shader_subgroup_shuffle_relative
);
symbolTable
.
setFunctionExtensions
(
"subgroupAdd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMul"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMin"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupMax"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupAnd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupOr"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupXor"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveAdd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveMul"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveMin"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveMax"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveAnd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveOr"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupInclusiveXor"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveAdd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveMul"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveMin"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveMax"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveAnd"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveOr"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupExclusiveXor"
,
1
,
&
E_GL_KHR_shader_subgroup_arithmetic
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredAdd"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredMul"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredMin"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredMax"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredAnd"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredOr"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupClusteredXor"
,
1
,
&
E_GL_KHR_shader_subgroup_clustered
);
symbolTable
.
setFunctionExtensions
(
"subgroupQuadBroadcast"
,
1
,
&
E_GL_KHR_shader_subgroup_quad
);
symbolTable
.
setFunctionExtensions
(
"subgroupQuadSwapHorizontal"
,
1
,
&
E_GL_KHR_shader_subgroup_quad
);
symbolTable
.
setFunctionExtensions
(
"subgroupQuadSwapVertical"
,
1
,
&
E_GL_KHR_shader_subgroup_quad
);
symbolTable
.
setFunctionExtensions
(
"subgroupQuadSwapDiagonal"
,
1
,
&
E_GL_KHR_shader_subgroup_quad
);
}
break
;
break
;
case
EShLangCompute
:
case
EShLangCompute
:
...
@@ -6195,8 +6197,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
...
@@ -6195,8 +6197,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable
(
"gl_ViewIndex"
,
EbvViewIndex
,
symbolTable
);
BuiltInVariable
(
"gl_ViewIndex"
,
EbvViewIndex
,
symbolTable
);
}
}
if
(
profile
!=
EEsProfile
)
{
// GL_KHR_shader_subgroup
// GL_KHR_shader_subgroup
if
(
spvVersion
.
vulkan
>=
100
)
{
symbolTable
.
setVariableExtensions
(
"gl_NumSubgroups"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setVariableExtensions
(
"gl_NumSubgroups"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupID"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
symbolTable
.
setVariableExtensions
(
"gl_SubgroupID"
,
1
,
&
E_GL_KHR_shader_subgroup_basic
);
...
...
glslang/MachineIndependent/Versions.cpp
View file @
d0d873eb
...
@@ -663,8 +663,7 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co
...
@@ -663,8 +663,7 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co
updateExtensionBehavior
(
line
,
"GL_OES_shader_io_blocks"
,
behaviorString
);
updateExtensionBehavior
(
line
,
"GL_OES_shader_io_blocks"
,
behaviorString
);
else
if
(
strcmp
(
extension
,
"GL_GOOGLE_include_directive"
)
==
0
)
else
if
(
strcmp
(
extension
,
"GL_GOOGLE_include_directive"
)
==
0
)
updateExtensionBehavior
(
line
,
"GL_GOOGLE_cpp_style_line_directive"
,
behaviorString
);
updateExtensionBehavior
(
line
,
"GL_GOOGLE_cpp_style_line_directive"
,
behaviorString
);
else
if
(
strcmp
(
extension
,
"GL_GOOGLE_include_directive"
)
==
0
)
// subgroup_* to subgroup_basic
updateExtensionBehavior
(
line
,
"GL_GOOGLE_cpp_style_line_directive"
,
behaviorString
);
else
if
(
strcmp
(
extension
,
"GL_KHR_shader_subgroup_vote"
)
==
0
)
else
if
(
strcmp
(
extension
,
"GL_KHR_shader_subgroup_vote"
)
==
0
)
updateExtensionBehavior
(
line
,
"GL_KHR_shader_subgroup_basic"
,
behaviorString
);
updateExtensionBehavior
(
line
,
"GL_KHR_shader_subgroup_basic"
,
behaviorString
);
else
if
(
strcmp
(
extension
,
"GL_KHR_shader_subgroup_arithmetic"
)
==
0
)
else
if
(
strcmp
(
extension
,
"GL_KHR_shader_subgroup_arithmetic"
)
==
0
)
...
...
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