summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Avison <bavison@riscosopen.org>2014-05-26 21:49:24 +0100
committerBen Avison <bavison@riscosopen.org>2015-10-15 13:55:53 +0100
commit8196065fcba654e88aa5547d68dd69a203b5111e (patch)
tree7f6a33575403c32cd3546fd06af8aa1b3a1309d2
parente77f84ab88fc93f6acd9b81c7e862462494f9b11 (diff)
pixman-fast-path: Add in_8888_8 fast path
This is a C fast path, useful for reference or for platforms that don't have their own fast path for this operation. lowlevel-blt-bench results on ARMv6: Before After Mean StdDev Mean StdDev Confidence Change L1 12.4 0.1 24.4 0.3 100.0% +97.8% L2 9.5 0.1 14.1 0.2 100.0% +48.1% M 9.6 0.0 14.7 0.0 100.0% +53.1% HT 7.9 0.0 12.0 0.1 100.0% +52.3% VT 7.7 0.0 11.6 0.1 100.0% +49.8% R 7.4 0.0 10.8 0.1 100.0% +47.2% RT 4.1 0.0 6.1 0.1 100.0% +48.2%
-rw-r--r--pixman/pixman-fast-path.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
index 4c099fa..2185e90 100644
--- a/pixman/pixman-fast-path.c
+++ b/pixman/pixman-fast-path.c
@@ -262,6 +262,43 @@ fast_composite_in_8_8 (pixman_implementation_t *imp,
}
static void
+fast_composite_in_8888_8 (pixman_implementation_t *imp,
+ pixman_composite_info_t *info)
+{
+ PIXMAN_COMPOSITE_ARGS (info);
+ uint8_t *dst_line, *dst;
+ uint32_t *src_line, *src;
+ int dst_stride, src_stride;
+ int32_t w;
+ uint8_t s;
+ uint16_t t;
+
+ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
+ PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint8_t, dst_stride, dst_line, 1);
+
+ while (height--)
+ {
+ dst = dst_line;
+ dst_line += dst_stride;
+ src = src_line;
+ src_line += src_stride;
+ w = width;
+
+ while (w--)
+ {
+ s = *src++ >> 24;
+
+ if (s == 0)
+ *dst = 0;
+ else if (s != 0xff)
+ *dst = MUL_UN8 (s, *dst, t);
+
+ dst++;
+ }
+ }
+}
+
+static void
fast_composite_over_n_8_8888 (pixman_implementation_t *imp,
pixman_composite_info_t *info)
{
@@ -1948,6 +1985,9 @@ static const pixman_fast_path_t c_fast_paths[] =
PIXMAN_STD_FAST_PATH (SRC, a1r5g5b5, null, x1r5g5b5, fast_composite_src_memcpy),
PIXMAN_STD_FAST_PATH (SRC, a8, null, a8, fast_composite_src_memcpy),
PIXMAN_STD_FAST_PATH (IN, a8, null, a8, fast_composite_in_8_8),
+ PIXMAN_STD_FAST_PATH (IN, a8r8g8b8, null, a8, fast_composite_in_8888_8),
+ PIXMAN_STD_FAST_PATH (IN, a8b8g8r8, null, a8, fast_composite_in_8888_8),
+ PIXMAN_STD_FAST_PATH (IN, a8r8g8b8_sRGB, null, a8, fast_composite_in_8888_8),
PIXMAN_STD_FAST_PATH (IN, solid, a8, a8, fast_composite_in_n_8_8),
SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, 8888_8888),