49 lines
1.5 KiB
Plaintext
49 lines
1.5 KiB
Plaintext
#version 450
|
|
#extension GL_KHR_shader_subgroup_basic : require
|
|
#extension GL_KHR_shader_subgroup_ballot : require
|
|
#extension GL_KHR_shader_subgroup_vote : require
|
|
|
|
layout(local_size_x = 1) in;
|
|
|
|
layout(std430, binding = 0) buffer SSBO
|
|
{
|
|
float FragColor;
|
|
};
|
|
|
|
void main()
|
|
{
|
|
// basic
|
|
FragColor = float(gl_NumSubgroups);
|
|
FragColor = float(gl_SubgroupID);
|
|
FragColor = float(gl_SubgroupSize);
|
|
FragColor = float(gl_SubgroupInvocationID);
|
|
subgroupBarrier();
|
|
subgroupMemoryBarrier();
|
|
subgroupMemoryBarrierBuffer();
|
|
subgroupMemoryBarrierShared();
|
|
subgroupMemoryBarrierImage();
|
|
bool elected = subgroupElect();
|
|
|
|
// ballot
|
|
FragColor = float(gl_SubgroupEqMask);
|
|
FragColor = float(gl_SubgroupGeMask);
|
|
FragColor = float(gl_SubgroupGtMask);
|
|
FragColor = float(gl_SubgroupLeMask);
|
|
FragColor = float(gl_SubgroupLtMask);
|
|
vec4 broadcasted = subgroupBroadcast(vec4(10.0), 8u);
|
|
vec3 first = subgroupBroadcastFirst(vec3(20.0));
|
|
uvec4 ballot_value = subgroupBallot(true);
|
|
bool inverse_ballot_value = subgroupInverseBallot(ballot_value);
|
|
bool bit_extracted = subgroupBallotBitExtract(uvec4(10u), 8u);
|
|
uint bit_count = subgroupBallotBitCount(ballot_value);
|
|
uint inclusive_bit_count = subgroupBallotInclusiveBitCount(ballot_value);
|
|
uint exclusive_bit_count = subgroupBallotExclusiveBitCount(ballot_value);
|
|
uint lsb = subgroupBallotFindLSB(ballot_value);
|
|
uint msb = subgroupBallotFindMSB(ballot_value);
|
|
|
|
// vote
|
|
bool has_all = subgroupAll(true);
|
|
bool has_any = subgroupAny(true);
|
|
bool has_equal_bool = subgroupAllEqual(true);
|
|
bool has_equal_T = subgroupAllEqual(uvec3(5u));
|
|
} |