spv.subgroupBallotNeg.comp 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. #version 450
  2. #extension GL_KHR_shader_subgroup_ballot: enable
  3. layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
  4. layout(binding = 0) buffer Buffers
  5. {
  6. vec4 f4;
  7. ivec4 i4;
  8. uvec4 u4;
  9. dvec4 d4;
  10. } data[4];
  11. void main()
  12. {
  13. uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
  14. uvec4 relMask = gl_SubgroupEqMask +
  15. gl_SubgroupGeMask +
  16. gl_SubgroupGtMask +
  17. gl_SubgroupLeMask +
  18. gl_SubgroupLtMask;
  19. uvec4 result = subgroupBallot(true);
  20. data[invocation].u4.x = subgroupBallotBitCount(result);
  21. data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0;
  22. data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);
  23. data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);
  24. data[invocation].f4.x = subgroupBroadcast(data[0].f4.x, invocation); // ERROR: not constant
  25. }