summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Avison <bavison@riscosopen.org>2015-09-15 19:40:22 +0100
committerSiarhei Siamashka <siarhei.siamashka@gmail.com>2016-04-05 00:48:35 +0300
commit9e00a382842b3d9f9e9b9b8591e523cd033a9caa (patch)
tree7cef34f69eb3364ee381fa81dcb9b04c84831b7e
parentf36948842c6b514689eb7a5c773ee1d84833947e (diff)
armv6: Add optimised scanline fetcher for x8r8g8b8
This supports x8r8g8b8 source images. lowlevel-blt-bench results for src_x888_8888 with PIXMAN_DISABLE=wholeops on a Raspberry Pi 1: Before After Mean StdDev Mean StdDev Confidence Change L1 55.5 0.98 147.5 5.82 100.00% +165.8% L2 25.2 0.84 46.7 2.83 100.00% +85.5% M 27.8 0.15 57.5 0.06 100.00% +106.7% HT 14.5 0.10 24.2 0.19 100.00% +66.8% VT 14.2 0.11 23.2 0.20 100.00% +63.0% R 13.5 0.07 22.0 0.24 100.00% +63.3% RT 5.5 0.05 7.8 0.24 100.00% +41.8% lowlevel-blt-bench results for src_x888_8888 with PIXMAN_DISABLE=wholeops on a Raspberry Pi 2 (ARMv7): Before After Mean StdDev Mean StdDev Confidence Change L1 135.8 2.43 236.4 6.68 100.00% +74.0% L2 122.8 1.09 201.4 2.01 100.00% +64.1% M 94.1 1.15 145.2 0.59 100.00% +54.3% HT 41.1 0.53 52.4 0.38 100.00% +27.5% VT 36.5 0.53 51.7 0.38 100.00% +41.7% R 30.3 0.42 40.9 0.29 100.00% +34.7% RT 13.7 0.24 17.5 0.25 100.00% +28.2% The before case was using the fetcher iterator defined in pixman-access.c. Note that it does not appear to be worthwhile to create an additional ARMv7 version of this fetcher. If we construct one using the src_x888_8888 macros the results are as follows on a Raspberry Pi 2: Before After Mean StdDev Mean StdDev Confidence Change L1 236.4 6.68 259.0 3.58 100.00% +9.6% L2 201.4 2.01 209.8 2.17 100.00% +4.2% M 145.2 0.59 139.4 1.06 100.00% -4.0% HT 52.4 0.38 51.4 0.56 100.00% -1.9% VT 51.7 0.38 47.8 0.86 100.00% -7.6% R 40.9 0.29 35.3 0.40 100.00% -13.5% RT 17.5 0.25 16.5 0.26 100.00% -6.2%
-rw-r--r--pixman/pixman-arm-simd-asm.S10
-rw-r--r--pixman/pixman-arm-simd.c3
2 files changed, 13 insertions, 0 deletions
diff --git a/pixman/pixman-arm-simd-asm.S b/pixman/pixman-arm-simd-asm.S
index f2bf936..fcfdb60 100644
--- a/pixman/pixman-arm-simd-asm.S
+++ b/pixman/pixman-arm-simd-asm.S
@@ -210,6 +210,16 @@ generate_composite_function \
pixman_composite_src_x888_8888_process_head, \
pixman_composite_src_x888_8888_process_tail
+generate_composite_function_single_scanline \
+ pixman_get_scanline_x8r8g8b8_asm_armv6, 32, 0, 32, \
+ FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_PROCESS_PRESERVES_SCRATCH, \
+ 3, /* prefetch distance */ \
+ nop_macro, /* init */ \
+ nop_macro, /* newline */ \
+ nop_macro, /* cleanup */ \
+ pixman_composite_src_x888_8888_process_head, \
+ pixman_composite_src_x888_8888_process_tail
+
/******************************************************************************/
.macro src_8888_8888_8888_init
diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
index 0d58254..ab3bb3c 100644
--- a/pixman/pixman-arm-simd.c
+++ b/pixman/pixman-arm-simd.c
@@ -98,6 +98,7 @@ PIXMAN_ARM_BIND_COMBINE_U (armv6, out)
PIXMAN_ARM_BIND_COMBINE_U (armv6, out_reverse)
PIXMAN_ARM_BIND_COMBINE_U (armv6, add)
+PIXMAN_ARM_BIND_GET_SCANLINE (armv6, x8r8g8b8)
PIXMAN_ARM_BIND_GET_SCANLINE (armv6, r5g6b5)
PIXMAN_ARM_BIND_WRITE_BACK (armv6, r5g6b5)
PIXMAN_ARM_BIND_GET_SCANLINE (armv6, a1r5g5b5)
@@ -321,6 +322,8 @@ static const pixman_fast_path_t arm_simd_fast_paths[] =
static const pixman_iter_info_t arm_simd_iters[] =
{
+ PIXMAN_ARM_UNTRANSFORMED_COVER_FETCHER (armv6, x8r8g8b8),
+
PIXMAN_ARM_UNTRANSFORMED_COVER_FETCHER (armv6, r5g6b5),
PIXMAN_ARM_WRITEBACK (armv6, r5g6b5),