From de096f56a524ce32b598c6b5902252c62ddc8f9b Mon Sep 17 00:00:00 2001 From: Cameron Cawley Date: Mon, 16 Dec 2019 19:21:22 +0000 Subject: GRAPHICS: Remove unused scaler code --- graphics/scaler/Normal2xARM.s | 228 ------------------------------------------ graphics/scaler/aspect.cpp | 97 ------------------ graphics/scaler/aspect.h | 15 --- 3 files changed, 340 deletions(-) (limited to 'graphics') diff --git a/graphics/scaler/Normal2xARM.s b/graphics/scaler/Normal2xARM.s index c5684c30e6..f83ce5b21e 100644 --- a/graphics/scaler/Normal2xARM.s +++ b/graphics/scaler/Normal2xARM.s @@ -23,7 +23,6 @@ .text .global Normal2xARM - .global Normal2xAspectMask @ Assumes dst is aligned (so did the C) @@ -83,230 +82,3 @@ thin: BGT yloop LDMFD r13!,{r4-r11,PC} - - - @ Horrid filter calculations - @ AAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEE - @ <-+-><-+-><-+-><-+-><-+-><-+-><-+-><-+-><-+-><-+-><-+-><-+-> - @ Ideal: A,A,(A*2+B*3)/5,B,(B*4+C)/5,C,C,(C+D*4)/5,D,(D*3+E*2)/5,E,E - @ Actual: A,A,(A*3+B*5)/8,B,(B*7+C)/8,C,C,(C+D*7)/8,D,(D*5+E*3)/8,E,E - - @ Assumes dst is aligned (so did the C) - @ Assumes 16bit (so did the C) - .align 2 -Normal2xAspectMask: - @ r0 = src - @ r1 = srcPitch - @ r2 = dst - @ r3 = dstPitch - @ r4 = w - @ r5 = h - @ r12= mask - STMFD r13!,{r4-r11,r14} - LDR r4, [r13,#4*9] @ r4 = w - LDR r5, [r13,#4*10] @ r5 = h - LDR r12,[r13,#4*11] @ r12= mask - MOV r11,#2 - SUB r11,r11,r1, LSL #2 @ r11= 2-srcPitch*4 - MOV r14,#4 - SUB r14,r14,r3, LSL #3 - SUB r14,r14,r3, LSL #1 - SUB r14,r14,r3 @ r14 = 4-dstPitch*11 - SUBS r5, r5, #4 - BLE last_few_lines -yloop_aspect: -xloop_aspect: - LDRH r6, [r0], r1 @ r6 = A - LDRH r7, [r0], r1 @ r7 = B - LDRH r8, [r0], r1 @ r8 = C - LDRH r9, [r0], r1 @ r9 = D - LDRH r10,[r0], r11 @ r10= E - ORR r6, r6, r6, LSL #16 @ r6 = output 0, 1 - ORR r7, r7, r7, LSL #16 @ r7 = output 3 - ORR r8, r8, r8, LSL #16 @ r8 = output 5,6 - ORR r9, r9, r9, LSL #16 @ r9 = output 8 - ORR r10,r10,r10,LSL #16 @ r10= output 10, 11 - STR r6, [r2], r3 @ output 0 (A) - STR r6, [r2], r3 @ output 1 (A) - AND r6, r6, r12 @ r6 = A split - ADD r6, r6, r6, LSL #1 @ r6 = A*3 - STR r7, [r2, r3] @ output 3 (B) - AND r7, r7, r12 @ r7 = B split - ADD r6, r6, r7 @ r6 = A*3 + B - ADD r6, r6, r7, LSL #2 @ r6 = A*3 + B*5 - AND r6, r12,r6, LSR #3 @ r6 = (A*3 + B*5)>>3 - ORR r6, r6, r6, ROR #16 @ r6 = output 2 - STR r6, [r2], r3, LSL #1 @ output 2 (A*3+B*5)>>3 - RSB r7, r7, r7, LSL #3 @ r7 = B*7 - AND r6, r8, r12 @ r6 = C split - ADD r7, r7, r6 @ r7 = B*7+C - AND r7, r12,r7, LSR #3 @ r7 = (B*7 + C)>>3 - ORR r7, r7, r7, ROR #16 @ r7 = output 4 - STR r7, [r2], r3 @ output 4 (B*7+C)>>3 - STR r8, [r2], r3 @ output 5 (C) - STR r8, [r2], r3 @ output 6 (C) - STR r9, [r2, r3] @ output 8 (D) - AND r9, r9, r12 @ r9 = D split - RSB r7, r9, r9, LSL #3 @ r7 = D*7 - ADD r6, r6, r7 @ r6 = C+D*7 - AND r6, r12,r6, LSR #3 @ r6 = (C + D*7)>>3 - ORR r6, r6, r6, ROR #16 @ r6 = output 7 - STR r6, [r2], r3, LSL #1 @ output 7 (C+D*7)>>3 - ADD r9, r9, r9, LSL #2 @ r9 = D*5 - AND r6, r10,r12 @ r6 = E split - ADD r9, r9, r6 @ r9 = D*5+E - ADD r9, r9, r6, LSL #1 @ r9 = D*5+E*3 - AND r9, r12,r9, LSR #3 @ r9 = (D*5 + E*3)>>3 - ORR r9, r9, r9, ROR #16 @ r9 = output 9 - STR r9, [r2], r3 @ output 9 (D*5+E*3)>>3 - STR r10,[r2], r3 @ output 10 (E) - STR r10,[r2], r14 @ output 11 (E) - SUBS r4, r4, #1 - BGT xloop_aspect - LDR r4, [r13,#4*9] @ r4 = w - ADD r0, r0, r1, LSL #2 - ADD r0, r0, r1 - SUB r0, r0, r4, LSL #1 - ADD r2, r2, r3, LSL #3 - ADD r2, r2, r3, LSL #2 - SUB r2, r2, r4, LSL #2 - SUBS r5, r5, #5 - BGT yloop_aspect -last_few_lines: - @ r5 = -4 => done, -3 => 1 left, -2 = 2 left, -1 = 3 left, 0 = 4 left - ADDS r5, r5, #3 - @ r5 = -1 => done, 0 => 1 left, 1 = 2 left, 2 = 3 left, 3 = 4 left - LDMLTFD r13!,{r4-r11,PC} - BEQ last1lines - CMP r5, #2 - BEQ last3lines - BGT last4lines -last2lines: - ADD r11,r11,r1 - ADD r14,r14,r3 - ADD r11,r11,r1, LSL #1 - ADD r14,r14,r3, LSL #3 -xloop_aspect2: - LDRH r6, [r0], r1 @ r6 = A - LDRH r7, [r0], r11 @ r7 = B - SUBS r4, r4, #1 - ORR r6, r6, r6, LSL #16 @ r6 = output 0, 1 - ORR r7, r7, r7, LSL #16 @ r7 = output 3 - STR r6, [r2], r3 @ output 0 (A) - STR r6, [r2], r3 @ output 1 (A) - AND r6, r6, r12 @ r6 = A split - ADD r6, r6, r6, LSL #1 @ r6 = A*3 - STR r7, [r2, r3] @ output 3 (B) - AND r7, r7, r12 @ r7 = B split - ADD r6, r6, r7 @ r6 = A*3 + B - ADD r6, r6, r7, LSL #2 @ r6 = A*3 + B*5 - AND r6, r12,r6, LSR #3 @ r6 = (A*3 + B*5)>>3 - ORR r6, r6, r6, ROR #16 @ r6 = output 2 - STR r6, [r2], r14 @ output 2 (A*3+B*5)>>3 - BGT xloop_aspect2 - - LDMFD r13!,{r4-r11,PC} - -last1lines: -xloop_aspect1: - LDRH r6, [r0], #2 @ r6 = A - ORR r6, r6, r6, LSL #16 @ r6 = output 0, 1 - STR r6, [r2, r3] @ output 0 (A) - STR r6, [r2], #4 @ output 1 (A) - SUBS r4, r4, #1 - BGT xloop_aspect1 - - LDMFD r13!,{r4-r11,PC} - -last3lines: - ADD r14,r14,r3, LSL #2 - ADD r11,r11,r1 -xloop_aspect3: - LDRH r6, [r0], r1 @ r6 = A - LDRH r7, [r0], r1 @ r7 = B - LDRH r8, [r0], r1 @ r8 = C - LDRH r9, [r0], r11 @ r9 = D - ORR r6, r6, r6, LSL #16 @ r6 = output 0, 1 - ORR r7, r7, r7, LSL #16 @ r7 = output 3 - ORR r8, r8, r8, LSL #16 @ r8 = output 5,6 - ORR r9, r9, r9, LSL #16 @ r9 = output 8 - STR r6, [r2], r3 @ output 0 (A) - STR r6, [r2], r3 @ output 1 (A) - AND r6, r6, r12 @ r6 = A split - ADD r6, r6, r6, LSL #1 @ r6 = A*3 - STR r7, [r2, r3] @ output 3 (B) - AND r7, r7, r12 @ r7 = B split - ADD r6, r6, r7 @ r6 = A*3 + B - ADD r6, r6, r7, LSL #2 @ r6 = A*3 + B*5 - AND r6, r12,r6, LSR #3 @ r6 = (A*3 + B*5)>>3 - ORR r6, r6, r6, ROR #16 @ r6 = output 2 - STR r6, [r2], r3, LSL #1 @ output 2 (A*3+B*5)>>3 - RSB r7, r7, r7, LSL #3 @ r7 = B*7 - AND r6, r8, r12 @ r6 = C split - ADD r7, r7, r6 @ r7 = B*7+C - AND r7, r12,r7, LSR #3 @ r7 = (B*7 + C)>>3 - ORR r7, r7, r7, ROR #16 @ r7 = output 4 - STR r7, [r2], r3 @ output 4 (B*7+C)>>3 - STR r8, [r2], r3 @ output 5 (C) - STR r8, [r2], r3 @ output 6 (C) - AND r9, r9, r12 @ r9 = D split - RSB r7, r9, r9, LSL #3 @ r7 = D*7 - ADD r6, r6, r7 @ r6 = C+D*7 - AND r6, r12,r6, LSR #3 @ r6 = (C + D*7)>>3 - ORR r6, r6, r6, ROR #16 @ r6 = output 7 - STR r6, [r2], r14 @ output 7 (C+D*7)>>3 - SUBS r4, r4, #1 - BGT xloop_aspect3 - - LDMFD r13!,{r4-r11,PC} - -last4lines: - ADD r14,r14,r3, LSL #1 -xloop_aspect4: - LDRH r6, [r0], r1 @ r6 = A - LDRH r7, [r0], r1 @ r7 = B - LDRH r8, [r0], r1 @ r8 = C - LDRH r9, [r0], r1 @ r9 = D - LDRH r10,[r0], r11 @ r10= E - ORR r6, r6, r6, LSL #16 @ r6 = output 0, 1 - ORR r7, r7, r7, LSL #16 @ r7 = output 3 - ORR r8, r8, r8, LSL #16 @ r8 = output 5,6 - ORR r9, r9, r9, LSL #16 @ r9 = output 8 - ORR r10,r10,r10,LSL #16 @ r10= output 10, 11 - STR r6, [r2], r3 @ output 0 (A) - STR r6, [r2], r3 @ output 1 (A) - AND r6, r6, r12 @ r6 = A split - ADD r6, r6, r6, LSL #1 @ r6 = A*3 - STR r7, [r2, r3] @ output 3 (B) - AND r7, r7, r12 @ r7 = B split - ADD r6, r6, r7 @ r6 = A*3 + B - ADD r6, r6, r7, LSL #2 @ r6 = A*3 + B*5 - AND r6, r12,r6, LSR #3 @ r6 = (A*3 + B*5)>>3 - ORR r6, r6, r6, ROR #16 @ r6 = output 2 - STR r6, [r2], r3, LSL #1 @ output 2 (A*3+B*5)>>3 - RSB r7, r7, r7, LSL #3 @ r7 = B*7 - AND r6, r8, r12 @ r6 = C split - ADD r7, r7, r6 @ r7 = B*7+C - AND r7, r12,r7, LSR #3 @ r7 = (B*7 + C)>>3 - ORR r7, r7, r7, ROR #16 @ r7 = output 4 - STR r7, [r2], r3 @ output 4 (B*7+C)>>3 - STR r8, [r2], r3 @ output 5 (C) - STR r8, [r2], r3 @ output 6 (C) - STR r9, [r2, r3] @ output 8 (D) - AND r9, r9, r12 @ r9 = D split - RSB r7, r9, r9, LSL #3 @ r7 = D*7 - ADD r6, r6, r7 @ r6 = C+D*7 - AND r6, r12,r6, LSR #3 @ r6 = (C + D*7)>>3 - ORR r6, r6, r6, ROR #16 @ r6 = output 7 - STR r6, [r2], r3, LSL #1 @ output 7 (C+D*7)>>3 - ADD r9, r9, r9, LSL #2 @ r9 = D*5 - AND r6, r10,r12 @ r6 = E split - ADD r9, r9, r6 @ r9 = D*5+E - ADD r9, r9, r6, LSL #1 @ r9 = D*5+E*3 - AND r9, r12,r9, LSR #3 @ r9 = (D*5 + E*3)>>3 - ORR r9, r9, r9, ROR #16 @ r9 = output 9 - STR r9, [r2], r14 @ output 9 (D*5+E*3)>>3 - SUBS r4, r4, #1 - BGT xloop_aspect4 - - LDMFD r13!,{r4-r11,PC} diff --git a/graphics/scaler/aspect.cpp b/graphics/scaler/aspect.cpp index 0f2b2aed40..dae1d41079 100644 --- a/graphics/scaler/aspect.cpp +++ b/graphics/scaler/aspect.cpp @@ -279,100 +279,3 @@ int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, i } #endif } - -template -void Normal1xAspectTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { - - for (int y = 0; y < (height * 6 / 5); ++y) { - -#if ASPECT_MODE == kSuperFastAndUglyAspectMode - if ((y % 6) == 5) - srcPtr -= srcPitch; - memcpy(dstPtr, srcPtr, sizeof(uint16) * width); -#else - // Bilinear filter five input lines onto six output lines - switch (y % 6) { - case 0: - // First output line is copied from first input line - memcpy(dstPtr, srcPtr, sizeof(uint16) * width); - break; - case 1: - // Second output line is mixed from first and second input line - interpolate5Line((uint16 *)dstPtr, (const uint16 *)(srcPtr - srcPitch), (const uint16 *)srcPtr, width); - break; - case 2: - // Third output line is mixed from second and third input line - interpolate5Line((uint16 *)dstPtr, (const uint16 *)(srcPtr - srcPitch), (const uint16 *)srcPtr, width); - break; - case 3: - // Fourth output line is mixed from third and fourth input line - interpolate5Line((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - srcPitch), width); - break; - case 4: - // Fifth output line is mixed from fourth and fifth input line - interpolate5Line((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - srcPitch), width); - break; - case 5: - // Sixth (and last) output line is copied from fifth (and last) input line - srcPtr -= srcPitch; - memcpy(dstPtr, srcPtr, sizeof(uint16) * width); - break; - default: - break; - } -#endif - - srcPtr += srcPitch; - dstPtr += dstPitch; - } -} - -void Normal1xAspect(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { - extern int gBitFormat; - if (gBitFormat == 565) - Normal1xAspectTemplate >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); - else - Normal1xAspectTemplate >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); -} - -#ifdef USE_ARM_SCALER_ASM -extern "C" void Normal2xAspectMask(const uint8 *srcPtr, - uint32 srcPitch, - uint8 *dstPtr, - uint32 dstPitch, - int width, - int height, - uint32 mask); - -/** - * A 2x scaler which also does aspect ratio correction. - * This is Normal2x combined with vertical stretching, - * so it will scale a 320x200 surface to a 640x480 surface. - */ -void Normal2xAspect(const uint8 *srcPtr, - uint32 srcPitch, - uint8 *dstPtr, - uint32 dstPitch, - int width, - int height) { - extern int gBitFormat; - if (gBitFormat == 565) { - Normal2xAspectMask(srcPtr, - srcPitch, - dstPtr, - dstPitch, - width, - height, - 0x07e0F81F); - } else { - Normal2xAspectMask(srcPtr, - srcPitch, - dstPtr, - dstPitch, - width, - height, - 0x03e07C1F); - } -} - -#endif // USE_ARM_SCALER_ASM diff --git a/graphics/scaler/aspect.h b/graphics/scaler/aspect.h index bb082ebba0..93201c3d40 100644 --- a/graphics/scaler/aspect.h +++ b/graphics/scaler/aspect.h @@ -58,19 +58,4 @@ int stretch200To240(uint8 *buf, int origSrcY, bool interpolate); - -/** - * This filter (up)scales the source image vertically by a factor of 6/5. - * For example, a 320x200 image is scaled to 320x240. - * - * The main difference to the code in graphics/scaler/aspect.cpp is the - * out-of-place operation, omitting a straight blit step the sdl backend - * does. Also, tests show unaligned access errors with the stock aspect scaler. - */ -DECLARE_SCALER(Normal1xAspect); - -#ifdef USE_ARM_SCALER_ASM -DECLARE_SCALER(Normal2xAspect); -#endif - #endif -- cgit v1.2.3