PageRenderTime 51ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/gpuAPI/newGPU/inner_Blit.h

http://psx4m.googlecode.com/
C Header | 617 lines | 537 code | 56 blank | 24 comment | 26 complexity | f02d495adef86e0e21b70db2d13600f3 MD5 | raw file
Possible License(s): GPL-2.0
  1. #ifndef _INNER_BLIT_H_
  2. #define _INNER_BLIT_H_
  3. ///////////////////////////////////////////////////////////////////////////////
  4. // GPU Blitting code
  5. #define write2x(n) dst16[PSX4ALL_WIDTH+n] = dst16[n]
  6. #define write(n) dst16[n]
  7. #define bgr15torgb16(n) bgr2rgb[src16[n]]
  8. #define rgb24torgb16(n, r, g, b) gp2x_video_RGB_color16( src8[r], src8[g], src8[b] )
  9. #define LOOP_START_16_BASE(count) \
  10. u16* src16 = (u16*)src + (i<<10); \
  11. uCount = count; \
  12. #define LOOP_START_16(count) \
  13. for(int i = 0; i < h1; i++) \
  14. { \
  15. LOOP_START_16_BASE(count) \
  16. #define LOOP_START_16_240(count) \
  17. for(int i = 0; i < h1; i++) \
  18. { \
  19. LOOP_START_16_BASE(count) \
  20. #define LOOP_END_16 \
  21. } \
  22. #define LOOP_START_8_BASE(count) \
  23. u8* src8 = (u8*)src + (i<<11); \
  24. uCount = count; \
  25. #define LOOP_START_8(count) \
  26. for(int i = 0; i < h1; i++) \
  27. { \
  28. LOOP_START_8_BASE(count) \
  29. #define LOOP_START_8_240(count) \
  30. for(int i = 0; i < h1; i++) \
  31. { \
  32. LOOP_START_8_BASE(count) \
  33. #define LOOP_END_8 \
  34. } \
  35. void GPU_Blit_512_480_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  36. {
  37. u32 uCount;
  38. if((GPU_GP1 & 0x00200000) == 0)
  39. {
  40. LOOP_START_16(32)
  41. do{
  42. write(0) = bgr15torgb16(0);
  43. write(1) = bgr15torgb16(2);
  44. write(2) = bgr15torgb16(4);
  45. write(3) = bgr15torgb16(6);
  46. write(4) = bgr15torgb16(7);
  47. write(5) = bgr15torgb16(8);
  48. write(6) = bgr15torgb16(10);
  49. write(7) = bgr15torgb16(12);
  50. write(8) = bgr15torgb16(14);
  51. write(9) = bgr15torgb16(15);
  52. dst16 += 10;
  53. src16 += 16;
  54. }while(--uCount);
  55. i++;
  56. //dst16 += 160;
  57. LOOP_END_16
  58. }
  59. else
  60. {
  61. LOOP_START_8(32)
  62. do{
  63. write(0) = rgb24torgb16(0, 0, 1, 2 );
  64. write(1) = rgb24torgb16(1, 6, 7, 8 );
  65. write(2) = rgb24torgb16(2, 12, 13, 14 );
  66. write(3) = rgb24torgb16(3, 18, 19, 20 );
  67. write(4) = rgb24torgb16(4, 21, 22, 23 );
  68. write(5) = rgb24torgb16(5, 24, 25, 26 );
  69. write(6) = rgb24torgb16(6, 30, 31, 32 );
  70. write(7) = rgb24torgb16(7, 36, 37, 38 );
  71. write(8) = rgb24torgb16(8, 42, 43, 44 );
  72. write(9) = rgb24torgb16(9, 45, 46, 47 );
  73. dst16 += 10;
  74. src8 += 48;
  75. }while(--uCount);
  76. i++;
  77. //dst16 += 160;
  78. LOOP_END_8
  79. }
  80. }
  81. void GPU_Blit_384_480_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  82. {
  83. u32 uCount;
  84. if((GPU_GP1 & 0x00200000) == 0)
  85. {
  86. LOOP_START_16(32)
  87. do{
  88. write(0) = bgr15torgb16(0);
  89. write(1) = bgr15torgb16(1);
  90. write(2) = bgr15torgb16(2);
  91. write(3) = bgr15torgb16(3);
  92. write(4) = bgr15torgb16(5);
  93. write(5) = bgr15torgb16(6);
  94. write(6) = bgr15torgb16(7);
  95. write(7) = bgr15torgb16(9);
  96. write(8) = bgr15torgb16(10);
  97. write(9) = bgr15torgb16(11);
  98. dst16 += 10;
  99. src16 += 12;
  100. }while(--uCount);
  101. //dst16 += 160;
  102. i++;
  103. LOOP_END_16
  104. }
  105. else
  106. {
  107. LOOP_START_8(32)
  108. do{
  109. write(0) = rgb24torgb16(0, 0, 1, 2 );
  110. write(1) = rgb24torgb16(1, 3, 4, 5 );
  111. write(2) = rgb24torgb16(2, 6, 7, 8 );
  112. write(3) = rgb24torgb16(3, 9, 10, 11 );
  113. write(4) = rgb24torgb16(4, 15, 16, 17 );
  114. write(5) = rgb24torgb16(5, 18, 19, 20 );
  115. write(6) = rgb24torgb16(6, 21, 22, 23 );
  116. write(7) = rgb24torgb16(7, 27, 28, 29 );
  117. write(8) = rgb24torgb16(8, 30, 31, 32 );
  118. write(9) = rgb24torgb16(9, 33, 34, 35 );
  119. dst16 += 10;
  120. src8 += 36;
  121. }while(--uCount);
  122. //dst16 += 160;
  123. i++;
  124. LOOP_END_8
  125. }
  126. }
  127. void GPU_Blit_368_480_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  128. {
  129. u32 uCount;
  130. if((GPU_GP1 & 0x00200000) == 0)
  131. {
  132. LOOP_START_16(16)
  133. do{
  134. write(0) = bgr15torgb16(0);
  135. write(1) = bgr15torgb16(1);
  136. write(2) = bgr15torgb16(2);
  137. write(3) = bgr15torgb16(3);
  138. write(4) = bgr15torgb16(5);
  139. write(5) = bgr15torgb16(6);
  140. write(6) = bgr15torgb16(7);
  141. write(7) = bgr15torgb16(9);
  142. write(8) = bgr15torgb16(10);
  143. write(9) = bgr15torgb16(11);
  144. write(10) = bgr15torgb16(12);
  145. write(11) = bgr15torgb16(14);
  146. write(12) = bgr15torgb16(15);
  147. write(13) = bgr15torgb16(16);
  148. write(14) = bgr15torgb16(17);
  149. write(15) = bgr15torgb16(18);
  150. write(16) = bgr15torgb16(19);
  151. write(17) = bgr15torgb16(20);
  152. write(18) = bgr15torgb16(21);
  153. write(19) = bgr15torgb16(22);
  154. dst16 += 20;
  155. src16 += 23;
  156. }while(--uCount);
  157. //dst16 += 160;
  158. i++;
  159. LOOP_END_16
  160. }
  161. else
  162. {
  163. LOOP_START_8(16)
  164. do{
  165. write(0) = rgb24torgb16(0, 0, 1, 2 );
  166. write(1) = rgb24torgb16(1, 3, 4, 5 );
  167. write(2) = rgb24torgb16(2, 6, 7, 8 );
  168. write(3) = rgb24torgb16(3, 9, 10, 11 );
  169. write(4) = rgb24torgb16(4, 15, 16, 17 );
  170. write(5) = rgb24torgb16(5, 18, 19, 20 );
  171. write(6) = rgb24torgb16(6, 21, 22, 23 );
  172. write(7) = rgb24torgb16(7, 27, 28, 29 );
  173. write(8) = rgb24torgb16(8, 30, 31, 32 );
  174. write(9) = rgb24torgb16(9, 33, 34, 35 );
  175. write(10) = rgb24torgb16(10, 36, 37, 38 );
  176. write(11) = rgb24torgb16(11, 39, 40, 41 );
  177. write(12) = rgb24torgb16(12, 42, 43, 44 );
  178. write(13) = rgb24torgb16(13, 45, 46, 47 );
  179. write(14) = rgb24torgb16(14, 51, 52, 53 );
  180. write(15) = rgb24torgb16(15, 54, 55, 56 );
  181. write(16) = rgb24torgb16(16, 57, 58, 59 );
  182. write(17) = rgb24torgb16(17, 60, 61, 62 );
  183. write(18) = rgb24torgb16(18, 63, 64, 65 );
  184. write(19) = rgb24torgb16(19, 66, 67, 68 );
  185. dst16 += 20;
  186. src8 += 69;
  187. }while(--uCount);
  188. //dst16 += 160;
  189. i++;
  190. LOOP_END_8
  191. }
  192. }
  193. void GPU_Blit_256_480_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  194. {
  195. u32 uCount;
  196. if((GPU_GP1 & 0x00200000) == 0)
  197. {
  198. LOOP_START_16(32)
  199. do{
  200. write(0) = bgr15torgb16(0);
  201. write(2) = write(1) = bgr15torgb16(1);
  202. write(3) = bgr15torgb16(2);
  203. write(4) = bgr15torgb16(3);
  204. write(5) = bgr15torgb16(4);
  205. write(6) = bgr15torgb16(5);
  206. write(8) = write(7) = bgr15torgb16(6);
  207. write(9) = bgr15torgb16(7);
  208. dst16 += 10;
  209. src16 += 8;
  210. }while(--uCount);
  211. //dst16 += 160;
  212. i++;
  213. LOOP_END_16
  214. }
  215. else
  216. {
  217. LOOP_START_8(32)
  218. do{
  219. write(0) = rgb24torgb16(0, 0, 1, 2 );
  220. write(2) = write(1) = rgb24torgb16(1, 3, 4, 5 );
  221. write(3) = rgb24torgb16(2, 6, 7, 8 );
  222. write(4) = rgb24torgb16(3, 9, 10, 11 );
  223. write(5) = rgb24torgb16(4, 12, 13, 14 );
  224. write(6) = rgb24torgb16(5, 15, 16, 17 );
  225. write(8) = write(7) = rgb24torgb16(6, 18, 19, 20 );
  226. write(9) = rgb24torgb16(7, 21, 22, 23 );
  227. dst16 += 10;
  228. src8 += 24;
  229. }while(--uCount);
  230. //dst16 += 160;
  231. i++;
  232. LOOP_END_8
  233. }
  234. }
  235. void GPU_Blit_320_480_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  236. {
  237. u32 uCount;
  238. if((GPU_GP1 & 0x00200000) == 0)
  239. {
  240. LOOP_START_16(32)
  241. do{
  242. write(0) = bgr15torgb16(0);
  243. write(1) = bgr15torgb16(1);
  244. write(2) = bgr15torgb16(2);
  245. write(3) = bgr15torgb16(3);
  246. write(4) = bgr15torgb16(4);
  247. write(5) = bgr15torgb16(5);
  248. write(6) = bgr15torgb16(6);
  249. write(7) = bgr15torgb16(7);
  250. write(8) = bgr15torgb16(8);
  251. write(9) = bgr15torgb16(9);
  252. dst16 += 10;
  253. src16 += 10;
  254. }while(--uCount);
  255. //dst16 += 160;
  256. i++;
  257. LOOP_END_16
  258. }
  259. else
  260. {
  261. LOOP_START_8(32)
  262. do{
  263. write(0) = rgb24torgb16(0, 0, 1, 2 );
  264. write(1) = rgb24torgb16(1, 3, 4, 5 );
  265. write(2) = rgb24torgb16(2, 6, 7, 8 );
  266. write(3) = rgb24torgb16(3, 9, 10, 11 );
  267. write(4) = rgb24torgb16(4, 12, 13, 14 );
  268. write(5) = rgb24torgb16(5, 15, 16, 17 );
  269. write(6) = rgb24torgb16(6, 18, 19, 20 );
  270. write(7) = rgb24torgb16(7, 21, 22, 23 );
  271. write(8) = rgb24torgb16(8, 24, 25, 26 );
  272. write(9) = rgb24torgb16(9, 27, 28, 29 );
  273. dst16 += 10;
  274. src8 += 30;
  275. }while(--uCount);
  276. //dst16 += 160;
  277. i++;
  278. LOOP_END_8
  279. }
  280. }
  281. void GPU_Blit_640_480_ROT90CW(void* src, u16* dst16, u32 h1)
  282. {
  283. u32 uCount;
  284. if((GPU_GP1 & 0x00200000) == 0)
  285. {
  286. LOOP_START_16(40)
  287. do
  288. {
  289. write(0) = bgr15torgb16(0);
  290. write(1) = bgr15torgb16(2);
  291. write(2) = bgr15torgb16(4);
  292. write(3) = bgr15torgb16(6);
  293. write(4) = bgr15torgb16(8);
  294. write(5) = bgr15torgb16(10);
  295. write(6) = bgr15torgb16(12);
  296. write(7) = bgr15torgb16(14);
  297. dst16 += 8;
  298. src16 += 16;
  299. }while(--uCount);
  300. //dst16 += 160;
  301. i++;
  302. LOOP_END_16
  303. }
  304. else
  305. {
  306. LOOP_START_8(40)
  307. do
  308. {
  309. write(0) = rgb24torgb16(0, 0, 1, 2 );
  310. write(1) = rgb24torgb16(1, 6, 7, 8 );
  311. write(2) = rgb24torgb16(2, 12, 13, 14 );
  312. write(3) = rgb24torgb16(3, 18, 19, 20 );
  313. write(4) = rgb24torgb16(4, 24, 25, 26 );
  314. write(5) = rgb24torgb16(5, 30, 31, 32 );
  315. write(6) = rgb24torgb16(6, 36, 37, 38 );
  316. write(7) = rgb24torgb16(7, 42, 43, 44 );
  317. dst16 += 8;
  318. src8 += 48;
  319. }while(--uCount);
  320. //dst16 += 160;
  321. i++;
  322. LOOP_END_8
  323. }
  324. }
  325. void GPU_Blit_512_240_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  326. {
  327. u32 uCount;
  328. if((GPU_GP1 & 0x00200000) == 0)
  329. {
  330. LOOP_START_16(32)
  331. do{
  332. write(0) = bgr15torgb16(0);
  333. write(1) = bgr15torgb16(2);
  334. write(2) = bgr15torgb16(4);
  335. write(3) = bgr15torgb16(6);
  336. write(4) = bgr15torgb16(7);
  337. write(5) = bgr15torgb16(8);
  338. write(6) = bgr15torgb16(10);
  339. write(7) = bgr15torgb16(12);
  340. write(8) = bgr15torgb16(14);
  341. write(9) = bgr15torgb16(15);
  342. dst16 += 10;
  343. src16 += 16;
  344. }while(--uCount);
  345. //dst16 += 160;
  346. LOOP_END_16
  347. }
  348. else
  349. {
  350. LOOP_START_8(32)
  351. do{
  352. write(0) = rgb24torgb16(0, 0, 1, 2 );
  353. write(1) = rgb24torgb16(1, 6, 7, 8 );
  354. write(2) = rgb24torgb16(2, 12, 13, 14 );
  355. write(3) = rgb24torgb16(3, 18, 19, 20 );
  356. write(4) = rgb24torgb16(4, 21, 22, 23 );
  357. write(5) = rgb24torgb16(5, 24, 25, 26 );
  358. write(6) = rgb24torgb16(6, 30, 31, 32 );
  359. write(7) = rgb24torgb16(7, 36, 37, 38 );
  360. write(8) = rgb24torgb16(8, 42, 43, 44 );
  361. write(9) = rgb24torgb16(9, 45, 46, 47 );
  362. dst16 += 10;
  363. src8 += 48;
  364. }while(--uCount);
  365. //dst16 += 160;
  366. LOOP_END_8
  367. }
  368. }
  369. void GPU_Blit_384_240_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  370. {
  371. u32 uCount;
  372. if((GPU_GP1 & 0x00200000) == 0)
  373. {
  374. LOOP_START_16(32)
  375. do{
  376. write(0) = bgr15torgb16(0);
  377. write(1) = bgr15torgb16(1);
  378. write(2) = bgr15torgb16(2);
  379. write(3) = bgr15torgb16(3);
  380. write(4) = bgr15torgb16(5);
  381. write(5) = bgr15torgb16(6);
  382. write(6) = bgr15torgb16(7);
  383. write(7) = bgr15torgb16(9);
  384. write(8) = bgr15torgb16(10);
  385. write(9) = bgr15torgb16(11);
  386. dst16 += 10;
  387. src16 += 12;
  388. }while(--uCount);
  389. //dst16 += 160;
  390. LOOP_END_16
  391. }
  392. else
  393. {
  394. LOOP_START_8(32)
  395. do{
  396. write(0) = rgb24torgb16(0, 0, 1, 2 );
  397. write(1) = rgb24torgb16(1, 3, 4, 5 );
  398. write(2) = rgb24torgb16(2, 6, 7, 8 );
  399. write(3) = rgb24torgb16(3, 9, 10, 11 );
  400. write(4) = rgb24torgb16(4, 15, 16, 17 );
  401. write(5) = rgb24torgb16(5, 18, 19, 20 );
  402. write(6) = rgb24torgb16(6, 21, 22, 23 );
  403. write(7) = rgb24torgb16(7, 27, 28, 29 );
  404. write(8) = rgb24torgb16(8, 30, 31, 32 );
  405. write(9) = rgb24torgb16(9, 33, 34, 35 );
  406. dst16 += 10;
  407. src8 += 36;
  408. }while(--uCount);
  409. //dst16 += 160;
  410. LOOP_END_8
  411. }
  412. }
  413. void GPU_Blit_368_240_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  414. {
  415. u32 uCount;
  416. if((GPU_GP1 & 0x00200000) == 0)
  417. {
  418. LOOP_START_16(16)
  419. do{
  420. write(0) = bgr15torgb16(0);
  421. write(1) = bgr15torgb16(1);
  422. write(2) = bgr15torgb16(2);
  423. write(3) = bgr15torgb16(3);
  424. write(4) = bgr15torgb16(5);
  425. write(5) = bgr15torgb16(6);
  426. write(6) = bgr15torgb16(7);
  427. write(7) = bgr15torgb16(9);
  428. write(8) = bgr15torgb16(10);
  429. write(9) = bgr15torgb16(11);
  430. write(10) = bgr15torgb16(12);
  431. write(11) = bgr15torgb16(14);
  432. write(12) = bgr15torgb16(15);
  433. write(13) = bgr15torgb16(16);
  434. write(14) = bgr15torgb16(17);
  435. write(15) = bgr15torgb16(18);
  436. write(16) = bgr15torgb16(19);
  437. write(17) = bgr15torgb16(20);
  438. write(18) = bgr15torgb16(21);
  439. write(19) = bgr15torgb16(22);
  440. dst16 += 20;
  441. src16 += 23;
  442. }while(--uCount);
  443. //dst16 += 160;
  444. LOOP_END_16
  445. }
  446. else
  447. {
  448. LOOP_START_8(16)
  449. do{
  450. write(0) = rgb24torgb16(0, 0, 1, 2 );
  451. write(1) = rgb24torgb16(1, 3, 4, 5 );
  452. write(2) = rgb24torgb16(2, 6, 7, 8 );
  453. write(3) = rgb24torgb16(3, 9, 10, 11 );
  454. write(4) = rgb24torgb16(4, 15, 16, 17 );
  455. write(5) = rgb24torgb16(5, 18, 19, 20 );
  456. write(6) = rgb24torgb16(6, 21, 22, 23 );
  457. write(7) = rgb24torgb16(7, 27, 28, 29 );
  458. write(8) = rgb24torgb16(8, 30, 31, 32 );
  459. write(9) = rgb24torgb16(9, 33, 34, 35 );
  460. write(10) = rgb24torgb16(10, 36, 37, 38 );
  461. write(11) = rgb24torgb16(11, 39, 40, 41 );
  462. write(12) = rgb24torgb16(12, 42, 43, 44 );
  463. write(13) = rgb24torgb16(13, 45, 46, 47 );
  464. write(14) = rgb24torgb16(14, 51, 52, 53 );
  465. write(15) = rgb24torgb16(15, 54, 55, 56 );
  466. write(16) = rgb24torgb16(16, 57, 58, 59 );
  467. write(17) = rgb24torgb16(17, 60, 61, 62 );
  468. write(18) = rgb24torgb16(18, 63, 64, 65 );
  469. write(19) = rgb24torgb16(19, 66, 67, 68 );
  470. dst16 += 20;
  471. src8 += 69;
  472. }while(--uCount);
  473. //dst16 += 160;
  474. LOOP_END_8
  475. }
  476. }
  477. void GPU_Blit_256_240_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  478. {
  479. u32 uCount;
  480. if((GPU_GP1 & 0x00200000) == 0)
  481. {
  482. LOOP_START_16(32)
  483. do{
  484. write(0) = bgr15torgb16(0);
  485. write(2) = write(1) = bgr15torgb16(1);
  486. write(3) = bgr15torgb16(2);
  487. write(4) = bgr15torgb16(3);
  488. write(5) = bgr15torgb16(4);
  489. write(6) = bgr15torgb16(5);
  490. write(8) = write(7) = bgr15torgb16(6);
  491. write(9) = bgr15torgb16(7);
  492. dst16 += 10;
  493. src16 += 8;
  494. }while(--uCount);
  495. //dst16 += 160;
  496. LOOP_END_16
  497. }
  498. else
  499. {
  500. LOOP_START_8(32)
  501. do{
  502. write(0) = rgb24torgb16(0, 0, 1, 2 );
  503. write(2) = write(1) = rgb24torgb16(1, 3, 4, 5 );
  504. write(3) = rgb24torgb16(2, 6, 7, 8 );
  505. write(4) = rgb24torgb16(3, 9, 10, 11 );
  506. write(5) = rgb24torgb16(4, 12, 13, 14 );
  507. write(6) = rgb24torgb16(5, 15, 16, 17 );
  508. write(8) = write(7) = rgb24torgb16(6, 18, 19, 20 );
  509. write(9) = rgb24torgb16(7, 21, 22, 23 );
  510. dst16 += 10;
  511. src8 += 24;
  512. }while(--uCount);
  513. //dst16 += 160;
  514. LOOP_END_8
  515. }
  516. }
  517. void GPU_Blit_320_240_ROT90CW_2X(void* src, u16* dst16, u32 h1)
  518. {
  519. u32 uCount;
  520. if((GPU_GP1 & 0x00200000) == 0)
  521. {
  522. LOOP_START_16(32)
  523. do{
  524. write(0) = bgr15torgb16(0);
  525. write(1) = bgr15torgb16(1);
  526. write(2) = bgr15torgb16(2);
  527. write(3) = bgr15torgb16(3);
  528. write(4) = bgr15torgb16(4);
  529. write(5) = bgr15torgb16(5);
  530. write(6) = bgr15torgb16(6);
  531. write(7) = bgr15torgb16(7);
  532. write(8) = bgr15torgb16(8);
  533. write(9) = bgr15torgb16(9);
  534. dst16 += 10;
  535. src16 += 10;
  536. }while(--uCount);
  537. //dst16 += 160;
  538. LOOP_END_16
  539. }
  540. else
  541. {
  542. LOOP_START_8(32)
  543. do{
  544. write(0) = rgb24torgb16(0, 0, 1, 2 );
  545. write(1) = rgb24torgb16(1, 3, 4, 5 );
  546. write(2) = rgb24torgb16(2, 6, 7, 8 );
  547. write(3) = rgb24torgb16(3, 9, 10, 11 );
  548. write(4) = rgb24torgb16(4, 12, 13, 14 );
  549. write(5) = rgb24torgb16(5, 15, 16, 17 );
  550. write(6) = rgb24torgb16(6, 18, 19, 20 );
  551. write(7) = rgb24torgb16(7, 21, 22, 23 );
  552. write(8) = rgb24torgb16(8, 24, 25, 26 );
  553. write(9) = rgb24torgb16(9, 27, 28, 29 );
  554. dst16 += 10;
  555. src8 += 30;
  556. }while(--uCount);
  557. //dst16 += 160;
  558. LOOP_END_8
  559. }
  560. }
  561. #endif //_INNER_BLIT_H_