diff options
author | Ben Avison <bavison@riscosopen.org> | 2015-09-15 19:40:22 +0100 |
---|---|---|
committer | Siarhei Siamashka <siarhei.siamashka@gmail.com> | 2016-04-05 00:48:35 +0300 |
commit | 9e00a382842b3d9f9e9b9b8591e523cd033a9caa (patch) | |
tree | 7cef34f69eb3364ee381fa81dcb9b04c84831b7e | |
parent | f36948842c6b514689eb7a5c773ee1d84833947e (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.S | 10 | ||||
-rw-r--r-- | pixman/pixman-arm-simd.c | 3 |
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), |