[Pixman] [PATCH 0/5] Simple repeat

Taekyun Kim podain77 at gmail.com
Tue Aug 30 05:48:36 PDT 2011


From: Taekyun Kim <tkq.kim at 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(-)



More information about the Pixman mailing list