spv.loops.frag 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. #version 140
  2. in vec4 bigColor;
  3. in vec4 bigColor1_1;
  4. in vec4 bigColor1_2;
  5. in vec4 bigColor1_3;
  6. in vec4 bigColor2;
  7. in vec4 bigColor3;
  8. in vec4 bigColor4;
  9. in vec4 bigColor5;
  10. in vec4 bigColor6;
  11. in vec4 bigColor7;
  12. in vec4 bigColor8;
  13. in vec4 BaseColor;
  14. in float d;
  15. in float d2;
  16. in float d3;
  17. in float d4;
  18. in float d5;
  19. in float d6;
  20. in float d7;
  21. in float d8;
  22. in float d9;
  23. in float d10;
  24. in float d11;
  25. in float d12;
  26. in float d14;
  27. in float d15;
  28. in float d16;
  29. in float d17;
  30. in float d18;
  31. flat in int Count;
  32. void main()
  33. {
  34. vec4 color = BaseColor;
  35. // Not a real loop
  36. while (true) {
  37. if (color.x < 0.33) {
  38. color += vec4(0.33);
  39. break;
  40. }
  41. if (color.x < 0.66) {
  42. color += vec4(0.66);
  43. break;
  44. }
  45. color += vec4(0.33);
  46. break;
  47. }
  48. // While
  49. while (color.x < d) {
  50. color += bigColor;
  51. }
  52. // While (latchy)
  53. while (color.z < d) {
  54. color += bigColor1_1;
  55. if (color.w < d)
  56. continue;
  57. color += bigColor1_1;
  58. }
  59. // While (constant)
  60. while (color.x < 42.0) {
  61. ++color;
  62. }
  63. // While (complicated-conditional)
  64. while (color.w < d2 && color.y < d3) {
  65. color += bigColor1_2;
  66. }
  67. // While (multi-exit)
  68. while (color.z < d3) {
  69. color += bigColor1_3;
  70. if (color.y < d4)
  71. break;
  72. color += bigColor1_3;
  73. }
  74. // For (dynamic)
  75. for (int i = 0; i < Count; ++i) {
  76. color += bigColor2;
  77. }
  78. // Do while
  79. do {
  80. color += bigColor3;
  81. } while (color.x < d2);
  82. // For (static)
  83. for (int i = 0; i < 42; ++i) {
  84. color.z += d3;
  85. }
  86. // For (static) flow-control
  87. for (int i = 0; i < 100; ++i) {
  88. if (color.z < 20.0)
  89. color.x++;
  90. else
  91. color.y++;
  92. if (color.w < 20.0)
  93. if (color.z > color.y)
  94. 0; // do nothing
  95. }
  96. // For (static) flow-control with latch merge
  97. for (int i = 0; i < 120; ++i) {
  98. if (color.z < 20.0)
  99. color.x++;
  100. else
  101. color.y++;
  102. }
  103. // For (static) latchy
  104. for (int i = 0; i < 42; ++i) {
  105. color.z += d3;
  106. if (color.x < d4)
  107. continue;
  108. ++color.w;
  109. }
  110. // For (static) multi-exit
  111. for (int i = 0; i < 42; ++i) {
  112. color.z += d3;
  113. if (color.x < d4)
  114. break;
  115. ++color.w;
  116. }
  117. // Latchy
  118. do {
  119. color += bigColor4;
  120. if (color.x < d4)
  121. continue;
  122. if (color.y < d4)
  123. color.y += d4;
  124. else
  125. color.x += d4;
  126. } while (color.z < d4);
  127. // Do while flow control
  128. do {
  129. color += bigColor5;
  130. if (color.y < d5)
  131. color.y += d5;
  132. } while (color.x < d5);
  133. // If then loop
  134. if (color.x < d6) {
  135. while (color.y < d6)
  136. color += bigColor6;
  137. } else {
  138. while (color.z < d6)
  139. color.z += bigColor6.z;
  140. }
  141. // If then multi-exit
  142. if (color.x < d6) {
  143. while (color.y < d6) {
  144. color += bigColor6;
  145. if (d7 < 1.0)
  146. break;
  147. }
  148. } else {
  149. while (color.z < d6)
  150. color.z += bigColor6.z;
  151. }
  152. // Multi-exit
  153. do {
  154. if (d7 < 0.0)
  155. break;
  156. color += bigColor7;
  157. if (d7 < 1.0) {
  158. color.z++;
  159. break;
  160. }
  161. color += BaseColor;
  162. } while (true);
  163. // Multi-exit2
  164. do {
  165. // invariant conditional break at the top of the loop. This could be a
  166. // situation where unswitching the loop has no real increases in code
  167. // size.
  168. if (d8 < 0.0)
  169. break;
  170. color += bigColor7;
  171. if (d8 < 1.0) {
  172. color.z++;
  173. if (d8 < 2.0) {
  174. color.y++;
  175. } else {
  176. color.x++;
  177. }
  178. break;
  179. }
  180. color += BaseColor;
  181. } while (color.z < d8);
  182. // Deep exit
  183. while (color.w < d9) {
  184. if (d9 > d8) {
  185. if (color.x <= d7) {
  186. if (color.z == 5.0)
  187. color.w++;
  188. else
  189. break;
  190. }
  191. }
  192. }
  193. // No end loop-back.
  194. while (color.z < d10) {
  195. color.y++;
  196. if (color.y < d11) {
  197. color.z++;
  198. if (color.w < d12)
  199. color.w++;
  200. else
  201. color.x++;
  202. continue;
  203. }
  204. color++;
  205. break;
  206. }
  207. // Multi-continue
  208. while (color.x < 10.0) {
  209. color += bigColor8;
  210. if (color.z < d8)
  211. if (color.w < d6)
  212. continue;
  213. color.y += bigColor8.x;
  214. }
  215. color++;
  216. gl_FragColor = color;
  217. // Early Return
  218. while (color.x < d14) {
  219. if (color.y < d15) {
  220. return;
  221. }
  222. else
  223. color++;
  224. }
  225. color++;
  226. while (color.w < d16) {
  227. color.w++;
  228. }
  229. // While (complicated-conditional)
  230. while (color.w < d2 && color.y < d3) {
  231. color += bigColor1_2;
  232. if (color.z < d3)
  233. return;
  234. }
  235. do {
  236. if (color.y < d18)
  237. return;
  238. color++;
  239. } while (color.x < d17);
  240. // Early Discard
  241. while (color.y < d16) {
  242. if (color.w < d16) {
  243. discard;
  244. } else
  245. color++;
  246. }
  247. color++;
  248. gl_FragColor = color;
  249. }