6 * 2013-04-02 Move from scaler_x2.c
10 #include "simd_types.h"
11 #include "sdl_cpuid.h"
12 #include "cache_wrapper.h"
14 extern BOOL bFullScan;
16 static void Scaler_DrawLine(v4hi *dst, Uint32 *src, int ww, int repeat, int pitch)
28 #if AG_BIG_ENDIAN != 1
29 const v4ui bb = {0xff000000, 0xff000000, 0xff000000, 0xff000000};
31 const v4ui bb = {0x000000ff, 0x000000ff, 0x000000ff, 0x000000ff};
34 if(repeat <= 0) return;
37 pitch2 = pitch / sizeof(v4hi);
38 if((bFullScan) || (repeat < 2)) {
39 v4hi r3, r4, r5, r6, r7, r8;
40 for(xx = 0; xx < ww; xx += 8) {
44 // 76543210 -> 7776666555444333222111000
45 r3.uv = (v4ui){r1.i[0], r1.i[0], r1.i[0], r1.i[1]};
46 r4.uv = (v4ui){r1.i[1], r1.i[1], r1.i[2], r1.i[2]};
47 r5.uv = (v4ui){r1.i[2], r1.i[3], r1.i[3], r1.i[3]};
49 r6.uv = (v4ui){r2.i[0], r2.i[0], r2.i[0], r2.i[1]};
50 r7.uv = (v4ui){r2.i[1], r2.i[1], r2.i[2], r2.i[2]};
51 r8.uv = (v4ui){r2.i[2], r2.i[3], r2.i[3], r2.i[3]};
52 for(yy = 0; yy < repeat; yy++) {
65 v4hi r3, r4, r5, r6, r7, r8;
66 for(xx = 0; xx < ww; xx += 8) {
70 // 76543210 -> 777766666555544444333322222111100000
71 r3.uv = (v4ui){r1.i[0], r1.i[0], r1.i[0], r1.i[1]};
72 r4.uv = (v4ui){r1.i[1], r1.i[1], r1.i[2], r1.i[2]};
73 r5.uv = (v4ui){r1.i[2], r1.i[3], r1.i[3], r1.i[3]};
75 r6.uv = (v4ui){r2.i[0], r2.i[0], r2.i[0], r2.i[1]};
76 r7.uv = (v4ui){r2.i[1], r2.i[1], r2.i[2], r2.i[2]};
77 r8.uv = (v4ui){r2.i[2], r2.i[3], r2.i[3], r2.i[3]};
78 for(yy = 0; yy < repeat - 1; yy++) {
102 void pVram2RGB_x3_Line(Uint32 *src, Uint8 *dst, int xbegin, int xend, int y, int yrep)
105 AG_Surface *Surface = GetDrawSurface();
120 if(Surface == NULL) return;
126 // if(ww > (w / 2)) ww = w / 2;
131 #if AG_BIG_ENDIAN != 1
136 // yrep = yrep * 16.0f;
140 d1 = (Uint32 *)((Uint8 *)dst + x * 3 * Surface->format->BytesPerPixel);
141 d2 = &src[x + y * 640];
142 Scaler_DrawLine((v4hi *)d1, (Uint32 *)d2, ww, yrep2, Surface->pitch);
143 // AG_SurfaceUnlock(Surface);