hlsl.rw.atomics.frag 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. SamplerState g_sSamp;
  2. RWTexture1D <float> g_tTex1df1;
  3. RWTexture1D <int> g_tTex1di1;
  4. RWTexture1D <uint> g_tTex1du1;
  5. RWTexture2D <float> g_tTex2df1;
  6. RWTexture2D <int> g_tTex2di1;
  7. RWTexture2D <uint> g_tTex2du1;
  8. RWTexture3D <float> g_tTex3df1;
  9. RWTexture3D <int> g_tTex3di1;
  10. RWTexture3D <uint> g_tTex3du1;
  11. RWTexture1DArray <float> g_tTex1df1a;
  12. RWTexture1DArray <int> g_tTex1di1a;
  13. RWTexture1DArray <uint> g_tTex1du1a;
  14. RWTexture2DArray <float> g_tTex2df1a;
  15. RWTexture2DArray <int> g_tTex2di1a;
  16. RWTexture2DArray <uint> g_tTex2du1a;
  17. RWBuffer <float> g_tBuffF;
  18. RWBuffer <int> g_tBuffI;
  19. RWBuffer <uint> g_tBuffU;
  20. struct PS_OUTPUT
  21. {
  22. float4 Color : SV_Target0;
  23. };
  24. uniform uint u1;
  25. uniform uint2 u2;
  26. uniform uint3 u3;
  27. uniform uint u1b;
  28. uniform uint u1c;
  29. uniform int i1;
  30. uniform int2 i2;
  31. uniform int3 i3;
  32. uniform int i1b;
  33. uniform int i1c;
  34. PS_OUTPUT main()
  35. {
  36. uint out_u1;
  37. int out_i1;
  38. // 1D int
  39. InterlockedAdd(g_tTex1di1[i1], i1b);
  40. InterlockedAdd(g_tTex1di1[i1], i1, out_i1);
  41. InterlockedAnd(g_tTex1di1[i1], i1b);
  42. InterlockedAnd(g_tTex1di1[i1], i1, out_i1);
  43. InterlockedCompareExchange(g_tTex1di1[i1], i1b, i1c, out_i1);
  44. InterlockedExchange(g_tTex1di1[i1], i1, out_i1);
  45. InterlockedMax(g_tTex1di1[i1], i1b);
  46. InterlockedMax(g_tTex1di1[i1], i1, out_i1);
  47. InterlockedMin(g_tTex1di1[i1], i1b);
  48. InterlockedMin(g_tTex1di1[i1], i1, out_i1);
  49. InterlockedOr(g_tTex1di1[i1], i1b);
  50. InterlockedOr(g_tTex1di1[i1], i1, out_i1);
  51. InterlockedXor(g_tTex1di1[i1], i1b);
  52. InterlockedXor(g_tTex1di1[i1], i1, out_i1);
  53. // 1D uint
  54. InterlockedAdd(g_tTex1du1[u1], u1);
  55. InterlockedAdd(g_tTex1du1[u1], u1, out_u1);
  56. InterlockedAnd(g_tTex1du1[u1], u1);
  57. InterlockedAnd(g_tTex1du1[u1], u1, out_u1);
  58. InterlockedCompareExchange(g_tTex1du1[u1], u1b, u1c, out_u1);
  59. InterlockedExchange(g_tTex1du1[u1], u1, out_u1);
  60. InterlockedMax(g_tTex1du1[u1], u1);
  61. InterlockedMax(g_tTex1du1[u1], u1, out_u1);
  62. InterlockedMin(g_tTex1du1[u1], u1);
  63. InterlockedMin(g_tTex1du1[u1], u1, out_u1);
  64. InterlockedOr(g_tTex1du1[u1], u1);
  65. InterlockedOr(g_tTex1du1[u1], u1, out_u1);
  66. InterlockedXor(g_tTex1du1[u1], u1);
  67. InterlockedXor(g_tTex1du1[u1], u1, out_u1);
  68. // 2D int
  69. InterlockedAdd(g_tTex2di1[i2], i1b);
  70. InterlockedAdd(g_tTex2di1[i2], i1, out_i1);
  71. InterlockedAnd(g_tTex2di1[i2], i1b);
  72. InterlockedAnd(g_tTex2di1[i2], i1, out_i1);
  73. InterlockedCompareExchange(g_tTex2di1[i2], i1b, i1c, out_i1);
  74. InterlockedExchange(g_tTex2di1[i2], i1, out_i1);
  75. InterlockedMax(g_tTex2di1[i2], i1b);
  76. InterlockedMax(g_tTex2di1[i2], i1, out_i1);
  77. InterlockedMin(g_tTex2di1[i2], i1b);
  78. InterlockedMin(g_tTex2di1[i2], i1, out_i1);
  79. InterlockedOr(g_tTex2di1[i2], i1b);
  80. InterlockedOr(g_tTex2di1[i2], i1, out_i1);
  81. InterlockedXor(g_tTex2di1[i2], i1b);
  82. InterlockedXor(g_tTex2di1[i2], i1, out_i1);
  83. // 2D uint
  84. InterlockedAdd(g_tTex2du1[u2], u1);
  85. InterlockedAdd(g_tTex2du1[u2], u1, out_u1);
  86. InterlockedAnd(g_tTex2du1[u2], u1);
  87. InterlockedAnd(g_tTex2du1[u2], u1, out_u1);
  88. InterlockedCompareExchange(g_tTex2du1[u2], u1b, u1c, out_u1);
  89. InterlockedExchange(g_tTex2du1[u2], u1, out_u1);
  90. InterlockedMax(g_tTex2du1[u2], u1);
  91. InterlockedMax(g_tTex2du1[u2], u1, out_u1);
  92. InterlockedMin(g_tTex2du1[u2], u1);
  93. InterlockedMin(g_tTex2du1[u2], u1, out_u1);
  94. InterlockedOr(g_tTex2du1[u2], u1);
  95. InterlockedOr(g_tTex2du1[u2], u1, out_u1);
  96. InterlockedXor(g_tTex2du1[u2], u1);
  97. InterlockedXor(g_tTex2du1[u2], u1, out_u1);
  98. // 3D int
  99. InterlockedAdd(g_tTex3di1[i3], i1b);
  100. InterlockedAdd(g_tTex3di1[i3], i1, out_i1);
  101. InterlockedAnd(g_tTex3di1[i3], i1b);
  102. InterlockedAnd(g_tTex3di1[i3], i1, out_i1);
  103. InterlockedCompareExchange(g_tTex3di1[i3], i1b, i1c, out_i1);
  104. InterlockedExchange(g_tTex3di1[i3], i1, out_i1);
  105. InterlockedMax(g_tTex3di1[i3], i1b);
  106. InterlockedMax(g_tTex3di1[i3], i1, out_i1);
  107. InterlockedMin(g_tTex3di1[i3], i1b);
  108. InterlockedMin(g_tTex3di1[i3], i1, out_i1);
  109. InterlockedOr(g_tTex3di1[i3], i1b);
  110. InterlockedOr(g_tTex3di1[i3], i1, out_i1);
  111. InterlockedXor(g_tTex3di1[i3], i1b);
  112. InterlockedXor(g_tTex3di1[i3], i1, out_i1);
  113. // 3D uint
  114. InterlockedAdd(g_tTex3du1[u3], u1);
  115. InterlockedAdd(g_tTex3du1[u3], u1, out_u1);
  116. InterlockedAnd(g_tTex3du1[u3], u1);
  117. InterlockedAnd(g_tTex3du1[u3], u1, out_u1);
  118. InterlockedCompareExchange(g_tTex3du1[u3], u1b, u1c, out_u1);
  119. InterlockedExchange(g_tTex3du1[u3], u1, out_u1);
  120. InterlockedMax(g_tTex3du1[u3], u1);
  121. InterlockedMax(g_tTex3du1[u3], u1, out_u1);
  122. InterlockedMin(g_tTex3du1[u3], u1);
  123. InterlockedMin(g_tTex3du1[u3], u1, out_u1);
  124. InterlockedOr(g_tTex3du1[u3], u1);
  125. InterlockedOr(g_tTex3du1[u3], u1, out_u1);
  126. InterlockedXor(g_tTex3du1[u3], u1);
  127. InterlockedXor(g_tTex3du1[u3], u1, out_u1);
  128. // 1D array int
  129. InterlockedAdd(g_tTex1di1a[i2], i1b);
  130. InterlockedAdd(g_tTex1di1a[i2], i1, out_i1);
  131. InterlockedAnd(g_tTex1di1a[i2], i1b);
  132. InterlockedAnd(g_tTex1di1a[i2], i1, out_i1);
  133. InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1);
  134. InterlockedExchange(g_tTex1di1a[i2], i1, out_i1);
  135. InterlockedMax(g_tTex1di1a[i2], i1b);
  136. InterlockedMax(g_tTex1di1a[i2], i1, out_i1);
  137. InterlockedMin(g_tTex1di1a[i2], i1b);
  138. InterlockedMin(g_tTex1di1a[i2], i1, out_i1);
  139. InterlockedOr(g_tTex1di1a[i2], i1b);
  140. InterlockedOr(g_tTex1di1a[i2], i1, out_i1);
  141. InterlockedXor(g_tTex1di1a[i2], i1b);
  142. InterlockedXor(g_tTex1di1a[i2], i1, out_i1);
  143. // 1D array uint
  144. InterlockedAdd(g_tTex1du1a[u2], u1);
  145. InterlockedAdd(g_tTex1du1a[u2], u1, out_u1);
  146. InterlockedAnd(g_tTex1du1a[u2], u1);
  147. InterlockedAnd(g_tTex1du1a[u2], u1, out_u1);
  148. InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1);
  149. InterlockedExchange(g_tTex1du1a[u2], u1, out_u1);
  150. InterlockedMax(g_tTex1du1a[u2], u1);
  151. InterlockedMax(g_tTex1du1a[u2], u1, out_u1);
  152. InterlockedMin(g_tTex1du1a[u2], u1);
  153. InterlockedMin(g_tTex1du1a[u2], u1, out_u1);
  154. InterlockedOr(g_tTex1du1a[u2], u1);
  155. InterlockedOr(g_tTex1du1a[u2], u1, out_u1);
  156. InterlockedXor(g_tTex1du1a[u2], u1);
  157. InterlockedXor(g_tTex1du1a[u2], u1, out_u1);
  158. // 2D array int
  159. InterlockedAdd(g_tTex1di1a[i2], i1b);
  160. InterlockedAdd(g_tTex1di1a[i2], i1, out_i1);
  161. InterlockedAnd(g_tTex1di1a[i2], i1b);
  162. InterlockedAnd(g_tTex1di1a[i2], i1, out_i1);
  163. InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1);
  164. InterlockedExchange(g_tTex1di1a[i2], i1, out_i1);
  165. InterlockedMax(g_tTex1di1a[i2], i1b);
  166. InterlockedMax(g_tTex1di1a[i2], i1, out_i1);
  167. InterlockedMin(g_tTex1di1a[i2], i1b);
  168. InterlockedMin(g_tTex1di1a[i2], i1, out_i1);
  169. InterlockedOr(g_tTex1di1a[i2], i1b);
  170. InterlockedOr(g_tTex1di1a[i2], i1, out_i1);
  171. InterlockedXor(g_tTex1di1a[i2], i1b);
  172. InterlockedXor(g_tTex1di1a[i2], i1, out_i1);
  173. // 2D array uint
  174. InterlockedAdd(g_tTex1du1a[u2], u1);
  175. InterlockedAdd(g_tTex1du1a[u2], u1, out_u1);
  176. InterlockedAnd(g_tTex1du1a[u2], u1);
  177. InterlockedAnd(g_tTex1du1a[u2], u1, out_u1);
  178. InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1);
  179. InterlockedExchange(g_tTex1du1a[u2], u1, out_u1);
  180. InterlockedMax(g_tTex1du1a[u2], u1);
  181. InterlockedMax(g_tTex1du1a[u2], u1, out_u1);
  182. InterlockedMin(g_tTex1du1a[u2], u1);
  183. InterlockedMin(g_tTex1du1a[u2], u1, out_u1);
  184. InterlockedOr(g_tTex1du1a[u2], u1);
  185. InterlockedOr(g_tTex1du1a[u2], u1, out_u1);
  186. InterlockedXor(g_tTex1du1a[u2], u1);
  187. InterlockedXor(g_tTex1du1a[u2], u1, out_u1);
  188. // buffer int
  189. InterlockedAdd(g_tBuffI[i1], i1b);
  190. InterlockedAdd(g_tBuffI[i1], i1, out_i1);
  191. InterlockedAnd(g_tBuffI[i1], i1b);
  192. InterlockedAnd(g_tBuffI[i1], i1, out_i1);
  193. InterlockedCompareExchange(g_tBuffI[i1], i1b, i1c, out_i1);
  194. InterlockedExchange(g_tBuffI[i1], i1, out_i1);
  195. InterlockedMax(g_tBuffI[i1], i1b);
  196. InterlockedMax(g_tBuffI[i1], i1, out_i1);
  197. InterlockedMin(g_tBuffI[i1], i1b);
  198. InterlockedMin(g_tBuffI[i1], i1, out_i1);
  199. InterlockedOr(g_tBuffI[i1], i1b);
  200. InterlockedOr(g_tBuffI[i1], i1, out_i1);
  201. InterlockedXor(g_tBuffI[i1], i1b);
  202. InterlockedXor(g_tBuffI[i1], i1, out_i1);
  203. // buffer uint
  204. InterlockedAdd(g_tBuffU[u1], u1);
  205. InterlockedAdd(g_tBuffU[u1], u1, out_u1);
  206. InterlockedAnd(g_tBuffU[u1], u1);
  207. InterlockedAnd(g_tBuffU[u1], u1, out_u1);
  208. InterlockedCompareExchange(g_tBuffU[u1], u1b, u1c, out_u1);
  209. InterlockedExchange(g_tBuffU[u1], u1, out_u1);
  210. InterlockedMax(g_tBuffU[u1], u1);
  211. InterlockedMax(g_tBuffU[u1], u1, out_u1);
  212. InterlockedMin(g_tBuffU[u1], u1);
  213. InterlockedMin(g_tBuffU[u1], u1, out_u1);
  214. InterlockedOr(g_tBuffU[u1], u1);
  215. InterlockedOr(g_tBuffU[u1], u1, out_u1);
  216. InterlockedXor(g_tBuffU[u1], u1);
  217. InterlockedXor(g_tBuffU[u1], u1, out_u1);
  218. PS_OUTPUT psout;
  219. psout.Color = 1.0;
  220. return psout;
  221. }