hlsl.wavereduction.comp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. struct Types
  2. {
  3. uint4 u;
  4. int4 i;
  5. float4 f;
  6. double4 d;
  7. };
  8. RWStructuredBuffer<Types> data;
  9. [numthreads(32, 16, 1)]
  10. void CSMain(uint3 dti : SV_DispatchThreadID)
  11. {
  12. data[dti.x].u = WaveActiveSum(data[dti.x].u);
  13. data[dti.x].u.x = WaveActiveSum(data[dti.x].u.x);
  14. data[dti.x].u.xy = WaveActiveSum(data[dti.x].u.xy);
  15. data[dti.x].u.xyz = WaveActiveSum(data[dti.x].u.xyz);
  16. data[dti.x].i = WaveActiveSum(data[dti.x].i);
  17. data[dti.x].i.x = WaveActiveSum(data[dti.x].i.x);
  18. data[dti.x].i.xy = WaveActiveSum(data[dti.x].i.xy);
  19. data[dti.x].i.xyz = WaveActiveSum(data[dti.x].i.xyz);
  20. data[dti.x].f = WaveActiveSum(data[dti.x].f);
  21. data[dti.x].f.x = WaveActiveSum(data[dti.x].f.x);
  22. data[dti.x].f.xy = WaveActiveSum(data[dti.x].f.xy);
  23. data[dti.x].f.xyz = WaveActiveSum(data[dti.x].f.xyz);
  24. data[dti.x].d = WaveActiveSum(data[dti.x].d);
  25. data[dti.x].d.x = WaveActiveSum(data[dti.x].d.x);
  26. data[dti.x].d.xy = WaveActiveSum(data[dti.x].d.xy);
  27. data[dti.x].d.xyz = WaveActiveSum(data[dti.x].d.xyz);
  28. data[dti.x].u = WaveActiveProduct(data[dti.x].u);
  29. data[dti.x].u.x = WaveActiveProduct(data[dti.x].u.x);
  30. data[dti.x].u.xy = WaveActiveProduct(data[dti.x].u.xy);
  31. data[dti.x].u.xyz = WaveActiveProduct(data[dti.x].u.xyz);
  32. data[dti.x].i = WaveActiveProduct(data[dti.x].i);
  33. data[dti.x].i.x = WaveActiveProduct(data[dti.x].i.x);
  34. data[dti.x].i.xy = WaveActiveProduct(data[dti.x].i.xy);
  35. data[dti.x].i.xyz = WaveActiveProduct(data[dti.x].i.xyz);
  36. data[dti.x].f = WaveActiveProduct(data[dti.x].f);
  37. data[dti.x].f.x = WaveActiveProduct(data[dti.x].f.x);
  38. data[dti.x].f.xy = WaveActiveProduct(data[dti.x].f.xy);
  39. data[dti.x].f.xyz = WaveActiveProduct(data[dti.x].f.xyz);
  40. data[dti.x].d = WaveActiveProduct(data[dti.x].d);
  41. data[dti.x].d.x = WaveActiveProduct(data[dti.x].d.x);
  42. data[dti.x].d.xy = WaveActiveProduct(data[dti.x].d.xy);
  43. data[dti.x].d.xyz = WaveActiveProduct(data[dti.x].d.xyz);
  44. data[dti.x].u = WaveActiveMin(data[dti.x].u);
  45. data[dti.x].u.x = WaveActiveMin(data[dti.x].u.x);
  46. data[dti.x].u.xy = WaveActiveMin(data[dti.x].u.xy);
  47. data[dti.x].u.xyz = WaveActiveMin(data[dti.x].u.xyz);
  48. data[dti.x].i = WaveActiveMin(data[dti.x].i);
  49. data[dti.x].i.x = WaveActiveMin(data[dti.x].i.x);
  50. data[dti.x].i.xy = WaveActiveMin(data[dti.x].i.xy);
  51. data[dti.x].i.xyz = WaveActiveMin(data[dti.x].i.xyz);
  52. data[dti.x].f = WaveActiveMin(data[dti.x].f);
  53. data[dti.x].f.x = WaveActiveMin(data[dti.x].f.x);
  54. data[dti.x].f.xy = WaveActiveMin(data[dti.x].f.xy);
  55. data[dti.x].f.xyz = WaveActiveMin(data[dti.x].f.xyz);
  56. data[dti.x].d = WaveActiveMin(data[dti.x].d);
  57. data[dti.x].d.x = WaveActiveMin(data[dti.x].d.x);
  58. data[dti.x].d.xy = WaveActiveMin(data[dti.x].d.xy);
  59. data[dti.x].d.xyz = WaveActiveMin(data[dti.x].d.xyz);
  60. data[dti.x].u = WaveActiveMax(data[dti.x].u);
  61. data[dti.x].u.x = WaveActiveMax(data[dti.x].u.x);
  62. data[dti.x].u.xy = WaveActiveMax(data[dti.x].u.xy);
  63. data[dti.x].u.xyz = WaveActiveMax(data[dti.x].u.xyz);
  64. data[dti.x].i = WaveActiveMax(data[dti.x].i);
  65. data[dti.x].i.x = WaveActiveMax(data[dti.x].i.x);
  66. data[dti.x].i.xy = WaveActiveMax(data[dti.x].i.xy);
  67. data[dti.x].i.xyz = WaveActiveMax(data[dti.x].i.xyz);
  68. data[dti.x].f = WaveActiveMax(data[dti.x].f);
  69. data[dti.x].f.x = WaveActiveMax(data[dti.x].f.x);
  70. data[dti.x].f.xy = WaveActiveMax(data[dti.x].f.xy);
  71. data[dti.x].f.xyz = WaveActiveMax(data[dti.x].f.xyz);
  72. data[dti.x].d = WaveActiveMax(data[dti.x].d);
  73. data[dti.x].d.x = WaveActiveMax(data[dti.x].d.x);
  74. data[dti.x].d.xy = WaveActiveMax(data[dti.x].d.xy);
  75. data[dti.x].d.xyz = WaveActiveMax(data[dti.x].d.xyz);
  76. data[dti.x].u = WaveActiveBitAnd(data[dti.x].u);
  77. data[dti.x].u.x = WaveActiveBitAnd(data[dti.x].u.x);
  78. data[dti.x].u.xy = WaveActiveBitAnd(data[dti.x].u.xy);
  79. data[dti.x].u.xyz = WaveActiveBitAnd(data[dti.x].u.xyz);
  80. data[dti.x].i = WaveActiveBitAnd(data[dti.x].i);
  81. data[dti.x].i.x = WaveActiveBitAnd(data[dti.x].i.x);
  82. data[dti.x].i.xy = WaveActiveBitAnd(data[dti.x].i.xy);
  83. data[dti.x].i.xyz = WaveActiveBitAnd(data[dti.x].i.xyz);
  84. data[dti.x].u = WaveActiveBitOr(data[dti.x].u);
  85. data[dti.x].u.x = WaveActiveBitOr(data[dti.x].u.x);
  86. data[dti.x].u.xy = WaveActiveBitOr(data[dti.x].u.xy);
  87. data[dti.x].u.xyz = WaveActiveBitOr(data[dti.x].u.xyz);
  88. data[dti.x].i = WaveActiveBitOr(data[dti.x].i);
  89. data[dti.x].i.x = WaveActiveBitOr(data[dti.x].i.x);
  90. data[dti.x].i.xy = WaveActiveBitOr(data[dti.x].i.xy);
  91. data[dti.x].i.xyz = WaveActiveBitOr(data[dti.x].i.xyz);
  92. data[dti.x].u = WaveActiveBitXor(data[dti.x].u);
  93. data[dti.x].u.x = WaveActiveBitXor(data[dti.x].u.x);
  94. data[dti.x].u.xy = WaveActiveBitXor(data[dti.x].u.xy);
  95. data[dti.x].u.xyz = WaveActiveBitXor(data[dti.x].u.xyz);
  96. data[dti.x].i = WaveActiveBitXor(data[dti.x].i);
  97. data[dti.x].i.x = WaveActiveBitXor(data[dti.x].i.x);
  98. data[dti.x].i.xy = WaveActiveBitXor(data[dti.x].i.xy);
  99. data[dti.x].i.xyz = WaveActiveBitXor(data[dti.x].i.xyz);
  100. data[dti.x].u.x = WaveActiveCountBits(data[dti.x].u.x == 0);
  101. }