glsl.es320.subgroupClustered.comp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #version 320 es
  2. #extension GL_KHR_shader_subgroup_clustered: enable
  3. layout (local_size_x = 8) 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 = subgroupClusteredAdd(data[0].f4.x, 1u);
  14. data[0].f4.xy = subgroupClusteredAdd(data[1].f4.xy, 1u);
  15. data[0].f4.xyz = subgroupClusteredAdd(data[2].f4.xyz, 1u);
  16. data[0].f4 = subgroupClusteredAdd(data[3].f4, 1u);
  17. data[1].i4.x = subgroupClusteredAdd(data[0].i4.x, 1u);
  18. data[1].i4.xy = subgroupClusteredAdd(data[1].i4.xy, 1u);
  19. data[1].i4.xyz = subgroupClusteredAdd(data[2].i4.xyz, 1u);
  20. data[1].i4 = subgroupClusteredAdd(data[3].i4, 1u);
  21. data[2].u4.x = subgroupClusteredAdd(data[0].u4.x, 1u);
  22. data[2].u4.xy = subgroupClusteredAdd(data[1].u4.xy, 1u);
  23. data[2].u4.xyz = subgroupClusteredAdd(data[2].u4.xyz, 1u);
  24. data[2].u4 = subgroupClusteredAdd(data[3].u4, 1u);
  25. data[3].f4.x = subgroupClusteredMul(data[0].f4.x, 1u);
  26. data[3].f4.xy = subgroupClusteredMul(data[1].f4.xy, 1u);
  27. data[3].f4.xyz = subgroupClusteredMul(data[2].f4.xyz, 1u);
  28. data[3].f4 = subgroupClusteredMul(data[3].f4, 1u);
  29. data[0].i4.x = subgroupClusteredMul(data[0].i4.x, 1u);
  30. data[0].i4.xy = subgroupClusteredMul(data[1].i4.xy, 1u);
  31. data[0].i4.xyz = subgroupClusteredMul(data[2].i4.xyz, 1u);
  32. data[0].i4 = subgroupClusteredMul(data[3].i4, 1u);
  33. data[1].u4.x = subgroupClusteredMul(data[0].u4.x, 1u);
  34. data[1].u4.xy = subgroupClusteredMul(data[1].u4.xy, 1u);
  35. data[1].u4.xyz = subgroupClusteredMul(data[2].u4.xyz, 1u);
  36. data[1].u4 = subgroupClusteredMul(data[3].u4, 1u);
  37. data[2].f4.x = subgroupClusteredMin(data[0].f4.x, 1u);
  38. data[2].f4.xy = subgroupClusteredMin(data[1].f4.xy, 1u);
  39. data[2].f4.xyz = subgroupClusteredMin(data[2].f4.xyz, 1u);
  40. data[2].f4 = subgroupClusteredMin(data[3].f4, 1u);
  41. data[3].i4.x = subgroupClusteredMin(data[0].i4.x, 1u);
  42. data[3].i4.xy = subgroupClusteredMin(data[1].i4.xy, 1u);
  43. data[3].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 1u);
  44. data[3].i4 = subgroupClusteredMin(data[3].i4, 1u);
  45. data[0].u4.x = subgroupClusteredMin(data[0].u4.x, 1u);
  46. data[0].u4.xy = subgroupClusteredMin(data[1].u4.xy, 1u);
  47. data[0].u4.xyz = subgroupClusteredMin(data[2].u4.xyz, 1u);
  48. data[0].u4 = subgroupClusteredMin(data[3].u4, 1u);
  49. data[1].f4.x = subgroupClusteredMax(data[0].f4.x, 1u);
  50. data[1].f4.xy = subgroupClusteredMax(data[1].f4.xy, 1u);
  51. data[1].f4.xyz = subgroupClusteredMax(data[2].f4.xyz, 1u);
  52. data[1].f4 = subgroupClusteredMax(data[3].f4, 1u);
  53. data[2].i4.x = subgroupClusteredMax(data[0].i4.x, 1u);
  54. data[2].i4.xy = subgroupClusteredMax(data[1].i4.xy, 1u);
  55. data[2].i4.xyz = subgroupClusteredMax(data[2].i4.xyz, 1u);
  56. data[2].i4 = subgroupClusteredMax(data[3].i4, 1u);
  57. data[3].u4.x = subgroupClusteredMax(data[0].u4.x, 1u);
  58. data[3].u4.xy = subgroupClusteredMax(data[1].u4.xy, 1u);
  59. data[3].u4.xyz = subgroupClusteredMax(data[2].u4.xyz, 1u);
  60. data[3].u4 = subgroupClusteredMax(data[3].u4, 1u);
  61. data[0].i4.x = subgroupClusteredAnd(data[0].i4.x, 1u);
  62. data[0].i4.xy = subgroupClusteredAnd(data[1].i4.xy, 1u);
  63. data[0].i4.xyz = subgroupClusteredAnd(data[2].i4.xyz, 1u);
  64. data[0].i4 = subgroupClusteredAnd(data[3].i4, 1u);
  65. data[1].u4.x = subgroupClusteredAnd(data[0].u4.x, 1u);
  66. data[1].u4.xy = subgroupClusteredAnd(data[1].u4.xy, 1u);
  67. data[1].u4.xyz = subgroupClusteredAnd(data[2].u4.xyz, 1u);
  68. data[1].u4 = subgroupClusteredAnd(data[3].u4, 1u);
  69. data[2].i4.x = int(subgroupClusteredAnd(data[0].i4.x < 0, 1u));
  70. data[2].i4.xy = ivec2(subgroupClusteredAnd(lessThan(data[1].i4.xy, ivec2(0)), 1u));
  71. data[2].i4.xyz = ivec3(subgroupClusteredAnd(lessThan(data[1].i4.xyz, ivec3(0)), 1u));
  72. data[2].i4 = ivec4(subgroupClusteredAnd(lessThan(data[1].i4, ivec4(0)), 1u));
  73. data[3].i4.x = subgroupClusteredOr(data[0].i4.x, 1u);
  74. data[3].i4.xy = subgroupClusteredOr(data[1].i4.xy, 1u);
  75. data[3].i4.xyz = subgroupClusteredOr(data[2].i4.xyz, 1u);
  76. data[3].i4 = subgroupClusteredOr(data[3].i4, 1u);
  77. data[0].u4.x = subgroupClusteredOr(data[0].u4.x, 1u);
  78. data[0].u4.xy = subgroupClusteredOr(data[1].u4.xy, 1u);
  79. data[0].u4.xyz = subgroupClusteredOr(data[2].u4.xyz, 1u);
  80. data[0].u4 = subgroupClusteredOr(data[3].u4, 1u);
  81. data[1].i4.x = int(subgroupClusteredOr(data[0].i4.x < 0, 1u));
  82. data[1].i4.xy = ivec2(subgroupClusteredOr(lessThan(data[1].i4.xy, ivec2(0)), 1u));
  83. data[1].i4.xyz = ivec3(subgroupClusteredOr(lessThan(data[1].i4.xyz, ivec3(0)), 1u));
  84. data[1].i4 = ivec4(subgroupClusteredOr(lessThan(data[1].i4, ivec4(0)), 1u));
  85. data[2].i4.x = subgroupClusteredXor(data[0].i4.x, 1u);
  86. data[2].i4.xy = subgroupClusteredXor(data[1].i4.xy, 1u);
  87. data[2].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1u);
  88. data[2].i4 = subgroupClusteredXor(data[3].i4, 1u);
  89. data[3].u4.x = subgroupClusteredXor(data[0].u4.x, 1u);
  90. data[3].u4.xy = subgroupClusteredXor(data[1].u4.xy, 1u);
  91. data[3].u4.xyz = subgroupClusteredXor(data[2].u4.xyz, 1u);
  92. data[3].u4 = subgroupClusteredXor(data[3].u4, 1u);
  93. data[0].i4.x = int(subgroupClusteredXor(data[0].i4.x < 0, 1u));
  94. data[0].i4.xy = ivec2(subgroupClusteredXor(lessThan(data[1].i4.xy, ivec2(0)), 1u));
  95. data[0].i4.xyz = ivec3(subgroupClusteredXor(lessThan(data[1].i4.xyz, ivec3(0)), 1u));
  96. data[0].i4 = ivec4(subgroupClusteredXor(lessThan(data[1].i4, ivec4(0)), 1u));
  97. }