glsl.es320.subgroupShuffleRelative.comp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #version 320 es
  2. #extension GL_KHR_shader_subgroup_shuffle_relative: 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. } data[4];
  10. void main()
  11. {
  12. uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4u;
  13. data[0].f4.x = subgroupShuffleUp(data[0].f4.x, invocation);
  14. data[0].f4.xy = subgroupShuffleUp(data[1].f4.xy, invocation);
  15. data[0].f4.xyz = subgroupShuffleUp(data[2].f4.xyz, invocation);
  16. data[0].f4 = subgroupShuffleUp(data[3].f4, invocation);
  17. data[0].i4.x = subgroupShuffleUp(data[0].i4.x, invocation);
  18. data[0].i4.xy = subgroupShuffleUp(data[1].i4.xy, invocation);
  19. data[0].i4.xyz = subgroupShuffleUp(data[2].i4.xyz, invocation);
  20. data[0].i4 = subgroupShuffleUp(data[3].i4, invocation);
  21. data[1].u4.x = subgroupShuffleUp(data[0].u4.x, invocation);
  22. data[1].u4.xy = subgroupShuffleUp(data[1].u4.xy, invocation);
  23. data[1].u4.xyz = subgroupShuffleUp(data[2].u4.xyz, invocation);
  24. data[1].u4 = subgroupShuffleUp(data[3].u4, invocation);
  25. data[1].i4.x = int(subgroupShuffleUp(data[0].i4.x < 0, invocation));
  26. data[1].i4.xy = ivec2(subgroupShuffleUp(lessThan(data[1].i4.xy, ivec2(0)), invocation));
  27. data[1].i4.xyz = ivec3(subgroupShuffleUp(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
  28. data[1].i4 = ivec4(subgroupShuffleUp(lessThan(data[1].i4, ivec4(0)), invocation));
  29. data[2].f4.x = subgroupShuffleDown(data[0].f4.x, invocation);
  30. data[2].f4.xy = subgroupShuffleDown(data[1].f4.xy, invocation);
  31. data[2].f4.xyz = subgroupShuffleDown(data[2].f4.xyz, invocation);
  32. data[2].f4 = subgroupShuffleDown(data[3].f4, invocation);
  33. data[2].i4.x = subgroupShuffleDown(data[0].i4.x, invocation);
  34. data[2].i4.xy = subgroupShuffleDown(data[1].i4.xy, invocation);
  35. data[2].i4.xyz = subgroupShuffleDown(data[2].i4.xyz, invocation);
  36. data[2].i4 = subgroupShuffleDown(data[3].i4, invocation);
  37. data[3].u4.x = subgroupShuffleDown(data[0].u4.x, invocation);
  38. data[3].u4.xy = subgroupShuffleDown(data[1].u4.xy, invocation);
  39. data[3].u4.xyz = subgroupShuffleDown(data[2].u4.xyz, invocation);
  40. data[3].u4 = subgroupShuffleDown(data[3].u4, invocation);
  41. data[3].i4.x = int(subgroupShuffleDown(data[0].i4.x < 0, invocation));
  42. data[3].i4.xy = ivec2(subgroupShuffleDown(lessThan(data[1].i4.xy, ivec2(0)), invocation));
  43. data[3].i4.xyz = ivec3(subgroupShuffleDown(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
  44. data[3].i4 = ivec4(subgroupShuffleDown(lessThan(data[1].i4, ivec4(0)), invocation));
  45. }