GLSL: Add support for Logical subgroup ops.
Completely missed these ...
This commit is contained in:
parent
d57ab68a21
commit
5570043af3
@ -62,6 +62,9 @@ void main()
|
||||
uvec4 anded = subgroupAnd(ballot_value);
|
||||
uvec4 ored = subgroupOr(ballot_value);
|
||||
uvec4 xored = subgroupXor(ballot_value);
|
||||
bvec4 anded_b = subgroupAnd(equal(ballot_value, uvec4(42u)));
|
||||
bvec4 ored_b = subgroupOr(equal(ballot_value, uvec4(42u)));
|
||||
bvec4 xored_b = subgroupXor(equal(ballot_value, uvec4(42u)));
|
||||
added = subgroupInclusiveAdd(added);
|
||||
iadded = subgroupInclusiveAdd(iadded);
|
||||
multiplied = subgroupInclusiveMul(multiplied);
|
||||
@ -102,6 +105,9 @@ void main()
|
||||
anded = subgroupClusteredAnd(anded, 4u);
|
||||
ored = subgroupClusteredOr(ored, 4u);
|
||||
xored = subgroupClusteredXor(xored, 4u);
|
||||
anded_b = subgroupClusteredAnd(equal(anded, uvec4(2u)), 4u);
|
||||
ored_b = subgroupClusteredOr(equal(ored, uvec4(3u)), 4u);
|
||||
xored_b = subgroupClusteredXor(equal(xored, uvec4(4u)), 4u);
|
||||
vec4 swap_horiz = subgroupQuadSwapHorizontal(vec4(20.0));
|
||||
vec4 swap_vertical = subgroupQuadSwapVertical(vec4(20.0));
|
||||
vec4 swap_diagonal = subgroupQuadSwapDiagonal(vec4(20.0));
|
||||
|
@ -72,6 +72,9 @@ void main()
|
||||
uvec4 anded = subgroupAnd(ballot_value);
|
||||
uvec4 ored = subgroupOr(ballot_value);
|
||||
uvec4 xored = subgroupXor(ballot_value);
|
||||
bvec4 anded_b = subgroupAnd(equal(ballot_value, uvec4(42)));
|
||||
bvec4 ored_b = subgroupOr(equal(ballot_value, uvec4(42)));
|
||||
bvec4 xored_b = subgroupXor(equal(ballot_value, uvec4(42)));
|
||||
|
||||
added = subgroupInclusiveAdd(added);
|
||||
iadded = subgroupInclusiveAdd(iadded);
|
||||
@ -117,6 +120,10 @@ void main()
|
||||
ored = subgroupClusteredOr(ored, 4u);
|
||||
xored = subgroupClusteredXor(xored, 4u);
|
||||
|
||||
anded_b = subgroupClusteredAnd(equal(anded, uvec4(2u)), 4u);
|
||||
ored_b = subgroupClusteredOr(equal(ored, uvec4(3u)), 4u);
|
||||
xored_b = subgroupClusteredXor(equal(xored, uvec4(4u)), 4u);
|
||||
|
||||
// quad
|
||||
vec4 swap_horiz = subgroupQuadSwapHorizontal(vec4(20.0));
|
||||
vec4 swap_vertical = subgroupQuadSwapVertical(vec4(20.0));
|
||||
|
@ -7646,6 +7646,9 @@ void CompilerGLSL::emit_subgroup_op(const Instruction &i)
|
||||
case OpGroupNonUniformBitwiseAnd:
|
||||
case OpGroupNonUniformBitwiseOr:
|
||||
case OpGroupNonUniformBitwiseXor:
|
||||
case OpGroupNonUniformLogicalAnd:
|
||||
case OpGroupNonUniformLogicalOr:
|
||||
case OpGroupNonUniformLogicalXor:
|
||||
{
|
||||
auto operation = static_cast<GroupOperation>(ops[3]);
|
||||
if (operation == GroupOperationClusteredReduce)
|
||||
@ -7802,6 +7805,9 @@ case OpGroupNonUniform##op: \
|
||||
GLSL_GROUP_OP(BitwiseAnd, And)
|
||||
GLSL_GROUP_OP(BitwiseOr, Or)
|
||||
GLSL_GROUP_OP(BitwiseXor, Xor)
|
||||
GLSL_GROUP_OP(LogicalAnd, And)
|
||||
GLSL_GROUP_OP(LogicalOr, Or)
|
||||
GLSL_GROUP_OP(LogicalXor, Xor)
|
||||
#undef GLSL_GROUP_OP
|
||||
#undef GLSL_GROUP_OP_CAST
|
||||
// clang-format on
|
||||
@ -12148,6 +12154,9 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction)
|
||||
case OpGroupNonUniformBitwiseAnd:
|
||||
case OpGroupNonUniformBitwiseOr:
|
||||
case OpGroupNonUniformBitwiseXor:
|
||||
case OpGroupNonUniformLogicalAnd:
|
||||
case OpGroupNonUniformLogicalOr:
|
||||
case OpGroupNonUniformLogicalXor:
|
||||
case OpGroupNonUniformQuadSwap:
|
||||
case OpGroupNonUniformQuadBroadcast:
|
||||
emit_subgroup_op(instruction);
|
||||
|
Loading…
Reference in New Issue
Block a user