hlsl.wavequad.comp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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 = QuadReadLaneAt(data[dti.x].u, 0);
  13. data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 0);
  14. data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 0);
  15. data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 0);
  16. data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 0);
  17. data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 0);
  18. data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 0);
  19. data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 0);
  20. data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 0);
  21. data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 0);
  22. data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 0);
  23. data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 0);
  24. data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 0);
  25. data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 0);
  26. data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 0);
  27. data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 0);
  28. data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 1);
  29. data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 1);
  30. data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 1);
  31. data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 1);
  32. data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 1);
  33. data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 1);
  34. data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 1);
  35. data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 1);
  36. data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 1);
  37. data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 1);
  38. data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 1);
  39. data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 1);
  40. data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 1);
  41. data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 1);
  42. data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 1);
  43. data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 1);
  44. data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 2);
  45. data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 2);
  46. data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 2);
  47. data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 2);
  48. data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 2);
  49. data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 2);
  50. data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 2);
  51. data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 2);
  52. data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 2);
  53. data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 2);
  54. data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 2);
  55. data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 2);
  56. data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 2);
  57. data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 2);
  58. data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 2);
  59. data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 2);
  60. data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 3);
  61. data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 3);
  62. data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 3);
  63. data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 3);
  64. data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 3);
  65. data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 3);
  66. data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 3);
  67. data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 3);
  68. data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 3);
  69. data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 3);
  70. data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 3);
  71. data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 3);
  72. data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 3);
  73. data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 3);
  74. data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 3);
  75. data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 3);
  76. data[dti.x].u = QuadReadAcrossX(data[dti.x].u);
  77. data[dti.x].u.x = QuadReadAcrossX(data[dti.x].u.x);
  78. data[dti.x].u.xy = QuadReadAcrossX(data[dti.x].u.xy);
  79. data[dti.x].u.xyz = QuadReadAcrossX(data[dti.x].u.xyz);
  80. data[dti.x].i = QuadReadAcrossX(data[dti.x].i);
  81. data[dti.x].i.x = QuadReadAcrossX(data[dti.x].i.x);
  82. data[dti.x].i.xy = QuadReadAcrossX(data[dti.x].i.xy);
  83. data[dti.x].i.xyz = QuadReadAcrossX(data[dti.x].i.xyz);
  84. data[dti.x].f = QuadReadAcrossX(data[dti.x].f);
  85. data[dti.x].f.x = QuadReadAcrossX(data[dti.x].f.x);
  86. data[dti.x].f.xy = QuadReadAcrossX(data[dti.x].f.xy);
  87. data[dti.x].f.xyz = QuadReadAcrossX(data[dti.x].f.xyz);
  88. data[dti.x].d = QuadReadAcrossX(data[dti.x].d);
  89. data[dti.x].d.x = QuadReadAcrossX(data[dti.x].d.x);
  90. data[dti.x].d.xy = QuadReadAcrossX(data[dti.x].d.xy);
  91. data[dti.x].d.xyz = QuadReadAcrossX(data[dti.x].d.xyz);
  92. data[dti.x].u = QuadReadAcrossY(data[dti.x].u);
  93. data[dti.x].u.x = QuadReadAcrossY(data[dti.x].u.x);
  94. data[dti.x].u.xy = QuadReadAcrossY(data[dti.x].u.xy);
  95. data[dti.x].u.xyz = QuadReadAcrossY(data[dti.x].u.xyz);
  96. data[dti.x].i = QuadReadAcrossY(data[dti.x].i);
  97. data[dti.x].i.x = QuadReadAcrossY(data[dti.x].i.x);
  98. data[dti.x].i.xy = QuadReadAcrossY(data[dti.x].i.xy);
  99. data[dti.x].i.xyz = QuadReadAcrossY(data[dti.x].i.xyz);
  100. data[dti.x].f = QuadReadAcrossY(data[dti.x].f);
  101. data[dti.x].f.x = QuadReadAcrossY(data[dti.x].f.x);
  102. data[dti.x].f.xy = QuadReadAcrossY(data[dti.x].f.xy);
  103. data[dti.x].f.xyz = QuadReadAcrossY(data[dti.x].f.xyz);
  104. data[dti.x].d = QuadReadAcrossY(data[dti.x].d);
  105. data[dti.x].d.x = QuadReadAcrossY(data[dti.x].d.x);
  106. data[dti.x].d.xy = QuadReadAcrossY(data[dti.x].d.xy);
  107. data[dti.x].d.xyz = QuadReadAcrossY(data[dti.x].d.xyz);
  108. data[dti.x].u = QuadReadAcrossDiagonal(data[dti.x].u);
  109. data[dti.x].u.x = QuadReadAcrossDiagonal(data[dti.x].u.x);
  110. data[dti.x].u.xy = QuadReadAcrossDiagonal(data[dti.x].u.xy);
  111. data[dti.x].u.xyz = QuadReadAcrossDiagonal(data[dti.x].u.xyz);
  112. data[dti.x].i = QuadReadAcrossDiagonal(data[dti.x].i);
  113. data[dti.x].i.x = QuadReadAcrossDiagonal(data[dti.x].i.x);
  114. data[dti.x].i.xy = QuadReadAcrossDiagonal(data[dti.x].i.xy);
  115. data[dti.x].i.xyz = QuadReadAcrossDiagonal(data[dti.x].i.xyz);
  116. data[dti.x].f = QuadReadAcrossDiagonal(data[dti.x].f);
  117. data[dti.x].f.x = QuadReadAcrossDiagonal(data[dti.x].f.x);
  118. data[dti.x].f.xy = QuadReadAcrossDiagonal(data[dti.x].f.xy);
  119. data[dti.x].f.xyz = QuadReadAcrossDiagonal(data[dti.x].f.xyz);
  120. data[dti.x].d = QuadReadAcrossDiagonal(data[dti.x].d);
  121. data[dti.x].d.x = QuadReadAcrossDiagonal(data[dti.x].d.x);
  122. data[dti.x].d.xy = QuadReadAcrossDiagonal(data[dti.x].d.xy);
  123. data[dti.x].d.xyz = QuadReadAcrossDiagonal(data[dti.x].d.xyz);
  124. }