summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Avison <bavison@riscosopen.org>2015-07-29 22:05:25 +0100
committerBen Avison <bavison@riscosopen.org>2015-10-15 15:15:07 +0100
commit4ace79ec24be191421115fec7fa593a8829c89ef (patch)
tree6ccce1351d70706ca21e3fb0d343086a0f5b23dd
parentd9a9b2e532a52210780ec1f2b41b0155ac01da83 (diff)
armv7: Add bilinear scaled a8 fetcher
-rw-r--r--pixman/pixman-arm-neon-asm-bilinear.S20
-rw-r--r--pixman/pixman-arm-neon.c2
2 files changed, 22 insertions, 0 deletions
diff --git a/pixman/pixman-arm-neon-asm-bilinear.S b/pixman/pixman-arm-neon-asm-bilinear.S
index c0a6e3d..1f6d801 100644
--- a/pixman/pixman-arm-neon-asm-bilinear.S
+++ b/pixman/pixman-arm-neon-asm-bilinear.S
@@ -1259,6 +1259,23 @@ generate_bilinear_scanline_func \
.endr
.endm
+.macro my_vshll qd, dm, imm
+ vshll.i&imm q&qd, d&dm, #imm
+.endm
+
+.macro convert_a8_a8r8g8b8_8pix_step1 out, in
+ my_vshll %((out)/2+1), %(in), 8
+.endm
+
+.macro convert_a8_a8r8g8b8_8pix_step2 base0, base1
+ my_vshll %((base0)/2), %((base0)+2), 16
+ my_vshll %((base0)/2+1), %((base0)+3), 16
+ .ifnc "base1",""
+ my_vshll %((base1)/2), %((base1)+2), 16
+ my_vshll %((base1)/2+1), %((base1)+3), 16
+ .endif
+.endm
+
generate_bilinear_scaled_cover_functions \
32, a8r8g8b8, 4, 4, 4, 4, 4, 4, 4, 4
@@ -1269,6 +1286,9 @@ generate_bilinear_scaled_cover_functions \
generate_bilinear_scaled_cover_functions \
16, r5g6b5, 4, 4, 4, 4, 4, 4, 4, 4, convert_r5g6b5_a8r8g8b8_8pix, pack_planar
+generate_bilinear_scaled_cover_functions \
+ 8, a8, 4, 4, 4, 4, 4, 4, 4, 4, convert_a8_a8r8g8b8_8pix_step1, convert_a8_a8r8g8b8_8pix_step2
+
/* 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 364a896..55be3ba 100644
--- a/pixman/pixman-arm-neon.c
+++ b/pixman/pixman-arm-neon.c
@@ -227,6 +227,7 @@ PIXMAN_ARM_DECLARE_BILINEAR_SCALED_SUPPORT(neon)
PIXMAN_ARM_BIND_GET_SCANLINE_BILINEAR_SCALED_COVER(neon, a8r8g8b8, uint32_t)
PIXMAN_ARM_BIND_GET_SCANLINE_BILINEAR_SCALED_COVER(neon, x8r8g8b8, uint32_t)
PIXMAN_ARM_BIND_GET_SCANLINE_BILINEAR_SCALED_COVER(neon, r5g6b5, uint16_t)
+PIXMAN_ARM_BIND_GET_SCANLINE_BILINEAR_SCALED_COVER(neon, a8, uint8_t)
void
pixman_composite_src_n_8_asm_neon (int32_t w,
@@ -543,6 +544,7 @@ static const pixman_iter_info_t arm_neon_iters[] =
PIXMAN_ARM_UNTRANSFORMED_COVER_FETCHER (neon, a1r5g5b5),
PIXMAN_ARM_NEAREST_SCALED_COVER_FETCHER (neon, a8),
+ PIXMAN_ARM_BILINEAR_SCALED_FETCHER (neon, a8),
{ PIXMAN_null },
};