From: Siarhei Siamashka <siarhei.siamas...@nokia.com>

Serves no real practical purpose other than testing a8 mask support
in bilinear scaling main loop template.
---
 pixman/pixman-fast-path.c |   80 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 80 insertions(+), 0 deletions(-)

diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
index 1e3094e..a2125c0 100644
--- a/pixman/pixman-fast-path.c
+++ b/pixman/pixman-fast-path.c
@@ -1594,6 +1594,82 @@ FAST_BILINEAR_MAINLOOP_COMMON (8888_8888_none_SRC,
                               uint32_t, uint32_t, uint32_t,
                               NONE, FALSE, FALSE)
 
+static void
+bilinear_interpolate_a8_line (uint32_t *       dst,
+                             const uint8_t *  mask,
+                             const uint32_t * top_row,
+                             const uint32_t * bottom_row,
+                             int              wt,
+                             int              wb,
+                             pixman_fixed_t   x,
+                             pixman_fixed_t   ux,
+                             int              width)
+{
+    while (--width >= 0)
+    {
+       uint8_t m = *mask++;
+       if (m)
+       {
+           uint32_t s;
+           uint32_t tl, tr, bl, br;
+           int distx;
+
+           tl = top_row [pixman_fixed_to_int (x)];
+           tr = top_row [pixman_fixed_to_int (x) + 1];
+           bl = bottom_row [pixman_fixed_to_int (x)];
+           br = bottom_row [pixman_fixed_to_int (x) + 1];
+
+           distx = (x >> 8) & 0xff;
+
+           s = bilinear_interpolation (tl, tr, bl, br, distx, wt, wb);
+           if (m == 0xff)
+           {
+               *dst = s;
+           }
+           else
+           {
+               *dst = in (s, m);
+           }
+       }
+       else
+       {
+           *dst = 0;
+       }
+       x += ux;
+       dst++;
+    }
+}
+
+static force_inline void
+scaled_bilinear_scanline_8888_8_8888_SRC (uint32_t *       dst,
+                                         const uint8_t *  mask,
+                                         const uint32_t * src_top,
+                                         const uint32_t * src_bottom,
+                                         int32_t          w,
+                                         int              wt,
+                                         int              wb,
+                                         pixman_fixed_t   vx,
+                                         pixman_fixed_t   unit_x,
+                                         pixman_fixed_t   max_vx,
+                                         pixman_bool_t    zero_src)
+{
+    bilinear_interpolate_a8_line (dst, mask, src_top, src_bottom,
+                                 wt, wb, vx, unit_x, w);
+}
+
+FAST_BILINEAR_MAINLOOP_COMMON (8888_8_8888_cover_SRC,
+                             scaled_bilinear_scanline_8888_8_8888_SRC,
+                             uint32_t, uint8_t, uint32_t,
+                             COVER, TRUE, FALSE)
+FAST_BILINEAR_MAINLOOP_COMMON (8888_8_8888_pad_SRC,
+                             scaled_bilinear_scanline_8888_8_8888_SRC,
+                             uint32_t, uint8_t, uint32_t,
+                             PAD, TRUE, FALSE)
+FAST_BILINEAR_MAINLOOP_COMMON (8888_8_8888_none_SRC,
+                             scaled_bilinear_scanline_8888_8_8888_SRC,
+                             uint32_t, uint8_t, uint32_t,
+                             NONE, TRUE, FALSE)
+
 static force_inline uint32_t
 fetch_nearest (pixman_repeat_t src_repeat,
               pixman_format_code_t format,
@@ -2117,6 +2193,10 @@ static const pixman_fast_path_t c_fast_paths[] =
     SIMPLE_BILINEAR_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, 8888_8888),
     SIMPLE_BILINEAR_FAST_PATH (SRC, x8b8g8r8, x8b8g8r8, 8888_8888),
 
+    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, 8888_8_8888),
+    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, 8888_8_8888),
+    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, 8888_8_8888),
+
 #define NEAREST_FAST_PATH(op,s,d)              \
     {   PIXMAN_OP_ ## op,                      \
        PIXMAN_ ## s, SCALED_NEAREST_FLAGS,     \
-- 
1.7.3.4

_______________________________________________
Pixman mailing list
Pixman@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pixman

Reply via email to