1617a3babSopenharmony_ci#version 450 2617a3babSopenharmony_ci 3617a3babSopenharmony_ci#extension GL_KHR_shader_subgroup_ballot: enable 4617a3babSopenharmony_ci 5617a3babSopenharmony_cilayout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in; 6617a3babSopenharmony_ci 7617a3babSopenharmony_cilayout(binding = 0) buffer Buffers 8617a3babSopenharmony_ci{ 9617a3babSopenharmony_ci vec4 f4; 10617a3babSopenharmony_ci ivec4 i4; 11617a3babSopenharmony_ci uvec4 u4; 12617a3babSopenharmony_ci dvec4 d4; 13617a3babSopenharmony_ci} data[4]; 14617a3babSopenharmony_ci 15617a3babSopenharmony_civoid main() 16617a3babSopenharmony_ci{ 17617a3babSopenharmony_ci uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4; 18617a3babSopenharmony_ci 19617a3babSopenharmony_ci uvec4 relMask = gl_SubgroupEqMask + 20617a3babSopenharmony_ci gl_SubgroupGeMask + 21617a3babSopenharmony_ci gl_SubgroupGtMask + 22617a3babSopenharmony_ci gl_SubgroupLeMask + 23617a3babSopenharmony_ci gl_SubgroupLtMask; 24617a3babSopenharmony_ci 25617a3babSopenharmony_ci uvec4 result = subgroupBallot(true); 26617a3babSopenharmony_ci 27617a3babSopenharmony_ci data[invocation].u4.x = subgroupBallotBitCount(result); 28617a3babSopenharmony_ci data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0; 29617a3babSopenharmony_ci data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result); 30617a3babSopenharmony_ci data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result); 31617a3babSopenharmony_ci 32617a3babSopenharmony_ci data[invocation].f4.x = subgroupBroadcast(data[0].f4.x, invocation); // ERROR: not constant 33617a3babSopenharmony_ci} 34