summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Avison <bavison@riscosopen.org>2015-07-29 20:57:53 +0100
committerBen Avison <bavison@riscosopen.org>2015-10-15 15:14:02 +0100
commit20daf3b0221c45dcea39c7271c80a06c8336c620 (patch)
treeb1ad8bd0642be416fec6e8efa5b72ccb6f6cc6c2
parent013eb98a57f7cf59fa0dad5761d758a5e6f5ed48 (diff)
armv7: Add bilinear scaled x8r8g8b8 fetcher
-rw-r--r--pixman/pixman-arm-neon-asm-bilinear.S22
-rw-r--r--pixman/pixman-arm-neon.c2
2 files changed, 24 insertions, 0 deletions
diff --git a/pixman/pixman-arm-neon-asm-bilinear.S b/pixman/pixman-arm-neon-asm-bilinear.S
index 4b1c2a4..72ddd05 100644
--- a/pixman/pixman-arm-neon-asm-bilinear.S
+++ b/pixman/pixman-arm-neon-asm-bilinear.S
@@ -1214,9 +1214,31 @@ generate_bilinear_scanline_func \
/******************************************************************************/
+.macro init_x8r8g8b8_a8r8g8b8
+ vpush {d14-d15}
+ vmov.u32 q7, #0xff000000
+.endm
+
+.macro final_x8r8g8b8_a8r8g8b8
+ vpop {d14-d15}
+.endm
+
+.macro convert_x8r8g8b8_a8r8g8b8_8pix_internal out, in
+ vorr.i32 q&out, q&in, q7
+.endm
+
+.macro convert_x8r8g8b8_a8r8g8b8_8pix out, in
+ convert_x8r8g8b8_a8r8g8b8_8pix_internal %((out) / 2), %((in) / 2)
+ convert_x8r8g8b8_a8r8g8b8_8pix_internal %((out) / 2 + 1), %((in) / 2 + 1)
+.endm
+
generate_bilinear_scaled_cover_functions \
32, a8r8g8b8, 4, 4, 4, 4, 4, 4, 4, 4
+generate_bilinear_scaled_cover_functions \
+ 32, x8r8g8b8, 4, 4, 4, 4, 4, 4, 4, 4, convert_x8r8g8b8_a8r8g8b8_8pix, \
+ nop_macro, init_x8r8g8b8_a8r8g8b8, final_x8r8g8b8_a8r8g8b8
+
/* void
* pixman_get_scanline_bilinear_scaled_cover_pass2_asm_neon (
* uint32_t width,
diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
index 4c2ccfa..e5bdcb5 100644
--- a/pixman/pixman-arm-neon.c
+++ b/pixman/pixman-arm-neon.c
@@ -225,6 +225,7 @@ PIXMAN_ARM_DECLARE_BILINEAR_SCALED_SUPPORT(neon)
#define PIXMAN_ARM_BILINEAR_PADDING_BITS (15 - BILINEAR_INTERPOLATION_BITS)
PIXMAN_ARM_BIND_GET_SCANLINE_BILINEAR_SCALED_COVER(neon, a8r8g8b8, uint32_t)
+PIXMAN_ARM_BIND_GET_SCANLINE_BILINEAR_SCALED_COVER(neon, x8r8g8b8, uint32_t)
void
pixman_composite_src_n_8_asm_neon (int32_t w,
@@ -531,6 +532,7 @@ static const pixman_iter_info_t arm_neon_iters[] =
PIXMAN_ARM_BILINEAR_SCALED_FETCHER (neon, a8r8g8b8),
PIXMAN_ARM_NEAREST_SCALED_COVER_FETCHER (neon, x8r8g8b8),
+ PIXMAN_ARM_BILINEAR_SCALED_FETCHER (neon, x8r8g8b8),
PIXMAN_ARM_UNTRANSFORMED_COVER_FETCHER (neon, r5g6b5),
PIXMAN_ARM_NEAREST_SCALED_COVER_FETCHER (neon, r5g6b5),