[Pixman] [PATCH 08/14] Add generic fast path for over_n_8888
Siarhei Siamashka
siarhei.siamashka at gmail.com
Sun Oct 13 18:36:22 PDT 2013
On Wed, 2 Oct 2013 00:00:28 +0100
Ben Avison <bavison at riscosopen.org> wrote:
> lowlevel-blt-bench results for over_n_8888 (on ARMv6):
> Before After
> Mean StdDev Mean StdDev Confidence Change
> L1 11.3 0.1 21.3 0.1 100.0% +89.0%
> L2 10.0 0.1 17.5 0.5 100.0% +73.9%
> M 8.6 0.0 14.1 0.0 100.0% +63.0%
> HT 5.1 0.0 12.7 0.1 100.0% +148.8%
> VT 4.9 0.0 12.4 0.1 100.0% +151.3%
> R 4.8 0.0 12.0 0.1 100.0% +148.6%
> RT 2.1 0.0 8.2 0.1 100.0% +290.1%
>
> Trimmed cairo-pref-traces does not show any significant change for this patch,
> reflecting the fact that over_n_8888 is barely used in the traces.
I guess that there must be some other good reason to have it added as
both generic fast patch and armv6 optimisation, which is just left out
from the commit message.
Maybe we are missing a cairo trace for some use case, which is
important for you?
> ---
> pixman/pixman-fast-path.c | 41 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 41 insertions(+)
>
> diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
> index 5d52b4a..680149c 100644
> --- a/pixman/pixman-fast-path.c
> +++ b/pixman/pixman-fast-path.c
> @@ -1182,6 +1182,43 @@ fast_composite_src_memcpy (pixman_implementation_t *imp,
> }
> }
>
> +static void
> +fast_composite_over_n_8888 (pixman_implementation_t *imp,
> + pixman_composite_info_t *info)
> +{
> + PIXMAN_COMPOSITE_ARGS (info);
> + uint32_t src, srca;
> + uint32_t *dst_line, *dst;
> + int dst_stride;
> + int32_t w;
> +
> + src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format);
> +
> + srca = src >> 24;
> + if (src == 0)
> + return;
> + if (srca == 0xff)
> + {
> + fast_composite_solid_fill (imp, info);
> + return;
> + }
> +
> + PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
> +
> + while (height--)
> + {
> + dst = dst_line;
> + dst_line += dst_stride;
> + w = width;
> +
> + while (w--)
> + {
> + *dst = over (src, *dst);
> + dst++;
> + }
> + }
> +}
> +
> FAST_NEAREST (8888_8888_cover, 8888, 8888, uint32_t, uint32_t, SRC, COVER)
> FAST_NEAREST (8888_8888_none, 8888, 8888, uint32_t, uint32_t, SRC, NONE)
> FAST_NEAREST (8888_8888_pad, 8888, 8888, uint32_t, uint32_t, SRC, PAD)
> @@ -1838,9 +1875,13 @@ static const pixman_fast_path_t c_fast_paths[] =
> PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, a8, a8r8g8b8, fast_composite_over_x888_8_8888),
> PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, a8, x8b8g8r8, fast_composite_over_x888_8_8888),
> PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, a8, a8b8g8r8, fast_composite_over_x888_8_8888),
> + PIXMAN_STD_FAST_PATH (OVER, solid, null, a8r8g8b8, fast_composite_over_n_8888),
> + PIXMAN_STD_FAST_PATH (OVER, solid, null, x8r8g8b8, fast_composite_over_n_8888),
> PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, fast_composite_over_8888_8888),
> PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, fast_composite_over_8888_8888),
> PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, r5g6b5, fast_composite_over_8888_0565),
> + PIXMAN_STD_FAST_PATH (OVER, solid, null, a8b8g8r8, fast_composite_over_n_8888),
> + PIXMAN_STD_FAST_PATH (OVER, solid, null, x8b8g8r8, fast_composite_over_n_8888),
> PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, fast_composite_over_8888_8888),
> PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, fast_composite_over_8888_8888),
> PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, b5g6r5, fast_composite_over_8888_0565),
--
Best regards,
Siarhei Siamashka
More information about the Pixman
mailing list