spv.subgroupVote.comp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #version 450
  2. #extension GL_KHR_shader_subgroup_vote: 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. int r;
  11. } data[4];
  12. void main()
  13. {
  14. uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
  15. if (subgroupAll(data[invocation].r < 0))
  16. {
  17. data[invocation].r = int(subgroupAllEqual(data[0].f4.x));
  18. data[invocation].r = int(subgroupAllEqual(data[1].f4.xy));
  19. data[invocation].r = int(subgroupAllEqual(data[2].f4.xyz));
  20. data[invocation].r = int(subgroupAllEqual(data[3].f4));
  21. data[invocation].r = int(subgroupAllEqual(data[0].i4.x));
  22. data[invocation].r = int(subgroupAllEqual(data[1].i4.xy));
  23. data[invocation].r = int(subgroupAllEqual(data[2].i4.xyz));
  24. data[invocation].r = int(subgroupAllEqual(data[3].i4));
  25. data[invocation].r = int(subgroupAllEqual(data[0].u4.x));
  26. data[invocation].r = int(subgroupAllEqual(data[1].u4.xy));
  27. data[invocation].r = int(subgroupAllEqual(data[2].u4.xyz));
  28. data[invocation].r = int(subgroupAllEqual(data[3].u4));
  29. }
  30. else if (subgroupAny(data[invocation].r < 0))
  31. {
  32. data[invocation].r = int(subgroupAllEqual(data[0].d4.x));
  33. data[invocation].r = int(subgroupAllEqual(data[1].d4.xy));
  34. data[invocation].r = int(subgroupAllEqual(data[2].d4.xyz));
  35. data[invocation].r = int(subgroupAllEqual(data[3].d4));
  36. data[invocation].r = int(int(subgroupAllEqual(data[0].i4.x < 0)));
  37. data[invocation].r = int(ivec2(subgroupAllEqual(lessThan(data[1].i4.xy, ivec2(0)))));
  38. data[invocation].r = int(ivec3(subgroupAllEqual(lessThan(data[1].i4.xyz, ivec3(0)))));
  39. data[invocation].r = int(ivec4(subgroupAllEqual(lessThan(data[1].i4, ivec4(0)))));
  40. }
  41. }