You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

274 lines
6.2KB

  1. /*
  2. Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at>
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program; if not, write to the Free Software
  13. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  14. */
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <inttypes.h>
  18. #include "rgb2rgb.h"
  19. #include "../cpudetect.h"
  20. #define SIZE 1000
  21. #define srcByte 0x55
  22. #define dstByte 0xBB
  23. main(int argc, char **argv)
  24. {
  25. int i, funcNum;
  26. uint8_t *srcBuffer= (uint8_t*)memalign(128, SIZE);
  27. uint8_t *dstBuffer= (uint8_t*)memalign(128, SIZE);
  28. int failedNum=0;
  29. int passedNum=0;
  30. printf("memory corruption test ...\n");
  31. if(argc==2){
  32. GetCpuCaps(&gCpuCaps);
  33. printf("testing mmx\n");
  34. }
  35. for(funcNum=0; funcNum<100; funcNum++){
  36. int width;
  37. int failed=0;
  38. int srcBpp=0;
  39. int dstBpp=0;
  40. printf("."); fflush(stdout);
  41. memset(srcBuffer, srcByte, SIZE);
  42. for(width=32; width<64; width++){
  43. int dstOffset;
  44. for(dstOffset=128; dstOffset<196; dstOffset++){
  45. int srcOffset;
  46. memset(dstBuffer, dstByte, SIZE);
  47. for(srcOffset=128; srcOffset<196; srcOffset++){
  48. uint8_t *src= srcBuffer+srcOffset;
  49. uint8_t *dst= dstBuffer+dstOffset;
  50. char *name=NULL;
  51. if(failed) break; //dont fill the screen with shit ...
  52. switch(funcNum){
  53. case 0:
  54. srcBpp=2;
  55. dstBpp=2;
  56. name="rgb15to16";
  57. rgb15to16(src, dst, width*srcBpp);
  58. break;
  59. case 1:
  60. srcBpp=2;
  61. dstBpp=3;
  62. name="rgb15to24";
  63. rgb15to24(src, dst, width*srcBpp);
  64. break;
  65. case 2:
  66. srcBpp=2;
  67. dstBpp=4;
  68. name="rgb15to32";
  69. rgb15to32(src, dst, width*srcBpp);
  70. break;
  71. case 3:
  72. srcBpp=2;
  73. dstBpp=3;
  74. name="rgb16to24";
  75. rgb16to24(src, dst, width*srcBpp);
  76. break;
  77. case 4:
  78. srcBpp=2;
  79. dstBpp=4;
  80. name="rgb16to32";
  81. rgb16to32(src, dst, width*srcBpp);
  82. break;
  83. case 5:
  84. srcBpp=3;
  85. dstBpp=2;
  86. name="rgb24to15";
  87. rgb24to15(src, dst, width*srcBpp);
  88. break;
  89. case 6:
  90. srcBpp=3;
  91. dstBpp=2;
  92. name="rgb24to16";
  93. rgb24to16(src, dst, width*srcBpp);
  94. break;
  95. case 7:
  96. srcBpp=3;
  97. dstBpp=4;
  98. name="rgb24to32";
  99. rgb24to32(src, dst, width*srcBpp);
  100. break;
  101. case 8:
  102. srcBpp=4;
  103. dstBpp=2;
  104. name="rgb32to15";
  105. rgb32to15(src, dst, width*srcBpp);
  106. break;
  107. case 9:
  108. srcBpp=4;
  109. dstBpp=2;
  110. name="rgb32to16";
  111. rgb32to16(src, dst, width*srcBpp);
  112. break;
  113. case 10:
  114. srcBpp=4;
  115. dstBpp=3;
  116. name="rgb32to24";
  117. rgb32to24(src, dst, width*srcBpp);
  118. break;
  119. case 11:
  120. srcBpp=2;
  121. dstBpp=2;
  122. name="rgb16to15";
  123. rgb16to15(src, dst, width*srcBpp);
  124. break;
  125. case 14:
  126. srcBpp=2;
  127. dstBpp=2;
  128. name="rgb15tobgr15";
  129. rgb15tobgr15(src, dst, width*srcBpp);
  130. break;
  131. case 15:
  132. srcBpp=2;
  133. dstBpp=2;
  134. name="rgb15tobgr16";
  135. rgb15tobgr16(src, dst, width*srcBpp);
  136. break;
  137. case 16:
  138. srcBpp=2;
  139. dstBpp=3;
  140. name="rgb15tobgr24";
  141. rgb15tobgr24(src, dst, width*srcBpp);
  142. break;
  143. case 17:
  144. srcBpp=2;
  145. dstBpp=4;
  146. name="rgb15tobgr32";
  147. rgb15tobgr32(src, dst, width*srcBpp);
  148. break;
  149. case 18:
  150. srcBpp=2;
  151. dstBpp=2;
  152. name="rgb16tobgr15";
  153. rgb16tobgr15(src, dst, width*srcBpp);
  154. break;
  155. case 19:
  156. srcBpp=2;
  157. dstBpp=2;
  158. name="rgb16tobgr16";
  159. rgb16tobgr16(src, dst, width*srcBpp);
  160. break;
  161. case 20:
  162. srcBpp=2;
  163. dstBpp=3;
  164. name="rgb16tobgr24";
  165. rgb16tobgr24(src, dst, width*srcBpp);
  166. break;
  167. case 21:
  168. srcBpp=2;
  169. dstBpp=4;
  170. name="rgb16tobgr32";
  171. rgb16tobgr32(src, dst, width*srcBpp);
  172. break;
  173. case 22:
  174. srcBpp=3;
  175. dstBpp=2;
  176. name="rgb24tobgr15";
  177. rgb24tobgr15(src, dst, width*srcBpp);
  178. break;
  179. case 23:
  180. srcBpp=3;
  181. dstBpp=2;
  182. name="rgb24tobgr16";
  183. rgb24tobgr16(src, dst, width*srcBpp);
  184. break;
  185. case 24:
  186. srcBpp=3;
  187. dstBpp=3;
  188. name="rgb24tobgr24";
  189. rgb24tobgr24(src, dst, width*srcBpp);
  190. break;
  191. case 25:
  192. srcBpp=3;
  193. dstBpp=4;
  194. name="rgb24tobgr32";
  195. rgb24tobgr32(src, dst, width*srcBpp);
  196. break;
  197. case 26:
  198. srcBpp=4;
  199. dstBpp=2;
  200. name="rgb32tobgr15";
  201. rgb32tobgr15(src, dst, width*srcBpp);
  202. break;
  203. case 27:
  204. srcBpp=4;
  205. dstBpp=2;
  206. name="rgb32tobgr16";
  207. rgb32tobgr16(src, dst, width*srcBpp);
  208. break;
  209. case 28:
  210. srcBpp=4;
  211. dstBpp=3;
  212. name="rgb32tobgr24";
  213. rgb32tobgr24(src, dst, width*srcBpp);
  214. break;
  215. case 29:
  216. srcBpp=4;
  217. dstBpp=4;
  218. name="rgb32tobgr32";
  219. rgb32tobgr32(src, dst, width*srcBpp);
  220. break;
  221. }
  222. if(!srcBpp) break;
  223. for(i=0; i<SIZE; i++){
  224. if(srcBuffer[i]!=srcByte){
  225. printf("src damaged at %d w:%d src:%d dst:%d %s\n",
  226. i, width, srcOffset, dstOffset, name);
  227. failed=1;
  228. break;
  229. }
  230. }
  231. for(i=0; i<dstOffset; i++){
  232. if(dstBuffer[i]!=dstByte){
  233. printf("dst damaged at %d w:%d src:%d dst:%d %s\n",
  234. i, width, srcOffset, dstOffset, name);
  235. failed=1;
  236. break;
  237. }
  238. }
  239. for(i=dstOffset + width*dstBpp; i<SIZE; i++){
  240. if(dstBuffer[i]!=dstByte){
  241. printf("dst damaged at %d w:%d src:%d dst:%d %s\n",
  242. i, width, srcOffset, dstOffset, name);
  243. failed=1;
  244. break;
  245. }
  246. }
  247. }
  248. }
  249. }
  250. if(failed) failedNum++;
  251. else if(srcBpp) passedNum++;
  252. }
  253. printf("%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum);
  254. return failedNum;
  255. }