From: Taekyun Kim <tkq....@samsung.com> Hi,
I modified previous simple repeat patches for ARM backend to cover other backends. Soren suggested a good point of handling different backends at common place. We can look up COVER_CLIP composite functions and stitch source scanlines to support PIXMAN_REPEAT_NORMAL. One thing that I concern is that if we get general_composite_rect() from lookup, is it beneficial to do stitching? general_composite_rect() itself can handle normal repeat. So we might get regressions. And if we write good fetchers for normal repeat, it might be good to bypass repeat handling to general_composite_rect(). We can also bypass repeat handling if the composite function can handle the repeat. I added the fast path entry in the C fast path entry table like this. { PIXMAN_OP_any, PIXMAN_any, (FAST_PATH_STANDARD_FLAGS | FAST_PATH_ID_TRANSFORM | FAST_PATH_BITS_IMAGE | FAST_PATH_NORMAL_REPEAT), PIXMAN_any, 0, PIXMAN_any, FAST_PATH_STD_DEST_FLAGS, fast_composite_tiled_repeat }, Would it be good to explicitly specify dedicated entry for each path? Or just bypassing general_composite_rect() would be sufficient? If we are to somehow bypass repeat handling, we need to know fast path flags of the function returned by lookup. _pixman_lookup_composite_function() may have to return such flags too. Comments welcome!! And here're the performance numbers. - sse2: Intel E5200 @ 2.5GHz- ///////////////////////////////////////////////////////////// // op=SRC, src=a8r8g8b8, mask=None, dst=a8r8g8b8 ////////////////////////////////////////////////////////////// << Reference Compositing Performance 2000x2000 to 2000x2000 >> Non-scaled : 371.58 Mpix/s << src = 1 x 512 dst = 512 x 512 >> before : 55.49 Mpix/s after : 537.09 Mpix/s << src = 15 x 15 dst = 512 x 512 >> before : 385.69 Mpix/s after : 706.71 Mpix/s << src = 63 x 63 dst = 512 x 512 >> before : 835.54 Mpix/s after : 843.42 Mpix/s ///////////////////////////////////////////////////////////// // op=SRC, src=r5g6b5, mask=None, dst=r5g6b5 ////////////////////////////////////////////////////////////// << Reference Compositing Performance 2000x2000 to 2000x2000 >> Non-scaled : 738.28 Mpix/s << src = 1 x 512 dst = 512 x 512 >> before : 41.01 Mpix/s after : 682.52 Mpix/s << src = 15 x 15 dst = 512 x 512 >> before : 102.71 Mpix/s after : 864.06 Mpix/s << src = 63 x 63 dst = 512 x 512 >> before : 113.10 Mpix/s after : 1078.24 Mpix/s - NEON: ARM cortex-a9 @ 1.2GHz - ///////////////////////////////////////////////////////////// // op=SRC, src=a8r8g8b8, mask=None, dst=a8r8g8b8 ////////////////////////////////////////////////////////////// << Reference Compositing Performance 2000x2000 to 2000x2000 >> Non-scaled : 176.92 Mpix/s << src = 1 x 512 dst = 512 x 512 >> before : 19.40 Mpix/s after : 237.73 Mpix/s << src = 15 x 15 dst = 512 x 512 >> before : 161.03 Mpix/s after : 270.45 Mpix/s << src = 63 x 63 dst = 512 x 512 >> before : 293.81 Mpix/s after : 343.30 Mpix/s ///////////////////////////////////////////////////////////// // op=SRC, src=r5g6b5, mask=None, dst=r5g6b5 ////////////////////////////////////////////////////////////// << Reference Compositing Performance 2000x2000 to 2000x2000 >> Non-scaled : 350.06 Mpix/s << src = 1 x 512 dst = 512 x 512 >> before : 19.55 Mpix/s after : 299.50 Mpix/s << src = 15 x 15 dst = 512 x 512 >> before : 44.91 Mpix/s after : 330.83 Mpix/s << src = 63 x 63 dst = 512 x 512 >> before : 43.35 Mpix/s after : 462.82 Mpix/s -- Best Regards, Taekyun Kim Søren Sandmann Pedersen (2): Add src, mask, and dest flags to the composite args struct. Move _pixman_lookup_composite_function() to pixman-utils.c Taekyun Kim (3): Add new fast path flag FAST_PATH_BITS_IMAGE Simple repeat fast path Simple repeat: Extend too short source scanlines into temporary buffer pixman/pixman-fast-path.c | 177 +++++++++++++++++++++++++++++++++++++++++++++ pixman/pixman-image.c | 1 + pixman/pixman-private.h | 17 ++++- pixman/pixman-utils.c | 112 ++++++++++++++++++++++++++++ pixman/pixman.c | 123 ++----------------------------- 5 files changed, 313 insertions(+), 117 deletions(-) _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pixman