jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=05aee3e3706867605d3b1bb84c3a70ccafba0673

commit 05aee3e3706867605d3b1bb84c3a70ccafba0673
Author: Jean-Philippe Andre <[email protected]>
Date:   Thu Nov 13 11:27:50 2014 +0900

    Evas: Don't pass whole RGBA_Image to low-level render functions
    
    Idea originated from Cedric the b0rker.
    
    This is a big fat search-and-replace commit.
    This commit also introduces space changes... Sorry for the mix.
    
    NOTE: This commit may have one side effect as there was some very
          dubious code chaning the dst image's alpha flag in the
          Gfx get functions. Logically this didn't make sense (at
          draw time the dst alpha should already be well defined),
          so it should be safe.
---
 src/lib/evas/common/evas_blend_main.c              | 157 ++++++++++---------
 src/lib/evas/common/evas_blend_private.h           |  20 +--
 src/lib/evas/common/evas_font_draw.c               |   4 +-
 src/lib/evas/common/evas_line_main.c               |  20 +--
 src/lib/evas/common/evas_map_image_internal.c      |   8 +-
 src/lib/evas/common/evas_op_add_main_.c            | 146 ++++++++---------
 src/lib/evas/common/evas_op_blend_main_.c          | 156 +++++++++---------
 src/lib/evas/common/evas_op_copy_main_.c           | 174 ++++++++-------------
 src/lib/evas/common/evas_op_mask_main_.c           |  88 ++++-------
 src/lib/evas/common/evas_op_mul_main_.c            |  88 ++++-------
 src/lib/evas/common/evas_op_sub_main_.c            | 146 ++++++++---------
 src/lib/evas/common/evas_polygon_main.c            |   4 +-
 src/lib/evas/common/evas_rectangle_main.c          |   4 +-
 src/lib/evas/common/evas_scale_sample.c            |   8 +-
 .../evas/common/evas_scale_smooth_scaler_down.c    |   4 +-
 .../evas/common/evas_scale_smooth_scaler_noscale.c |   4 +-
 src/lib/evas/common/evas_scale_smooth_scaler_up.c  |   4 +-
 src/lib/evas/filters/evas_filter_blend.c           |   4 +-
 src/lib/evas/filters/evas_filter_mask.c            |   6 +-
 src/lib/evas/include/evas_common_private.h         |  22 +--
 20 files changed, 490 insertions(+), 577 deletions(-)

diff --git a/src/lib/evas/common/evas_blend_main.c 
b/src/lib/evas/common/evas_blend_main.c
index b0221b1..ebac8f3 100644
--- a/src/lib/evas/common/evas_blend_main.c
+++ b/src/lib/evas/common/evas_blend_main.c
@@ -24,43 +24,43 @@ evas_gfx_compositor_get(unsigned char op)
    RGBA_Gfx_Compositor  *comp;
 
    switch (op)
-      {
-       case _EVAS_RENDER_BLEND:
-          comp = evas_common_gfx_compositor_blend_get();
-          break;
-       case _EVAS_RENDER_BLEND_REL:
-          comp = evas_common_gfx_compositor_blend_rel_get();
-          break;
-       case _EVAS_RENDER_COPY:
-          comp = evas_common_gfx_compositor_copy_get();
-          break;
-       case _EVAS_RENDER_COPY_REL:
-          comp = evas_common_gfx_compositor_copy_rel_get();
-          break;
-/*
-       case _EVAS_RENDER_ADD:
-          comp = evas_common_gfx_compositor_add_get();
-          break;
-       case _EVAS_RENDER_ADD_REL:
-          comp = evas_common_gfx_compositor_add_rel_get();
-          break;
-       case _EVAS_RENDER_SUB:
-          comp = evas_common_gfx_compositor_sub_get();
-          break;
-       case _EVAS_RENDER_SUB_REL:
-          comp = evas_common_gfx_compositor_sub_rel_get();
-          break;
-*/
-       case _EVAS_RENDER_MASK:
-          comp = evas_common_gfx_compositor_mask_get();
-          break;
-       case _EVAS_RENDER_MUL:
-          comp = evas_common_gfx_compositor_mul_get();
-          break;
-       default:
-          comp = evas_common_gfx_compositor_blend_get();
-          break;
-      }
+     {
+      case _EVAS_RENDER_BLEND:
+        comp = evas_common_gfx_compositor_blend_get();
+        break;
+      case _EVAS_RENDER_BLEND_REL:
+        comp = evas_common_gfx_compositor_blend_rel_get();
+        break;
+      case _EVAS_RENDER_COPY:
+        comp = evas_common_gfx_compositor_copy_get();
+        break;
+      case _EVAS_RENDER_COPY_REL:
+        comp = evas_common_gfx_compositor_copy_rel_get();
+        break;
+        /*
+      case _EVAS_RENDER_ADD:
+        comp = evas_common_gfx_compositor_add_get();
+        break;
+      case _EVAS_RENDER_ADD_REL:
+        comp = evas_common_gfx_compositor_add_rel_get();
+        break;
+      case _EVAS_RENDER_SUB:
+        comp = evas_common_gfx_compositor_sub_get();
+        break;
+      case _EVAS_RENDER_SUB_REL:
+        comp = evas_common_gfx_compositor_sub_rel_get();
+        break;
+      */
+      case _EVAS_RENDER_MASK:
+        comp = evas_common_gfx_compositor_mask_get();
+        break;
+      case _EVAS_RENDER_MUL:
+        comp = evas_common_gfx_compositor_mul_get();
+        break;
+      default:
+        comp = evas_common_gfx_compositor_blend_get();
+        break;
+     }
    return comp;
 }
 
@@ -88,7 +88,7 @@ evas_common_blend_init(void)
    comp = evas_common_gfx_compositor_blend_rel_get();
    if (comp) comp->init();
 
-/*
+   /*
    comp = evas_common_gfx_compositor_add_get();
    if (comp) comp->init();
    comp = evas_common_gfx_compositor_add_rel_get();
@@ -120,7 +120,7 @@ evas_common_blend_shutdown(void)
    comp = evas_common_gfx_compositor_blend_rel_get();
    if (comp) comp->shutdown();
 
-/*
+   /*
    comp = evas_common_gfx_compositor_add_get();
    if (comp) comp->shutdown();
    comp = evas_common_gfx_compositor_add_rel_get();
@@ -129,7 +129,8 @@ evas_common_blend_shutdown(void)
    if (comp) comp->shutdown();
    comp = evas_common_gfx_compositor_sub_rel_get();
    if (comp) comp->shutdown();
-*/
+   */
+
    comp = evas_common_gfx_compositor_mask_get();
    if (comp) comp->shutdown();
 
@@ -139,12 +140,12 @@ evas_common_blend_shutdown(void)
 
 
 RGBA_Gfx_Func
-evas_common_gfx_func_composite_pixel_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels, int op)
+evas_common_gfx_func_composite_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Func        func = NULL;
 
-   if (src && (!src->cache_entry.flags.alpha))
+   if (!src_alpha)
      {
         if (op == _EVAS_RENDER_BLEND) op = _EVAS_RENDER_COPY;
         else if (op == _EVAS_RENDER_BLEND_REL) op = _EVAS_RENDER_COPY_REL;
@@ -152,14 +153,14 @@ evas_common_gfx_func_composite_pixel_span_get(RGBA_Image 
*src, RGBA_Image *dst,
 
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_pixel_span_get(src, dst, pixels);
+     func = comp->composite_pixel_span_get(src_alpha, src_sparse_alpha, 
dst_alpha, pixels);
    if (func)
-       return func;
+     return func;
    return _composite_span_nothing;
 }
 
 RGBA_Gfx_Func
-evas_common_gfx_func_composite_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels, int op)
+evas_common_gfx_func_composite_color_span_get(DATA32 col, Eina_Bool dst_alpha, 
int pixels, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Func        func = NULL;
@@ -171,80 +172,80 @@ evas_common_gfx_func_composite_color_span_get(DATA32 col, 
RGBA_Image *dst, int p
      }
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_color_span_get(col, dst, pixels);
+     func = comp->composite_color_span_get(col, dst_alpha, pixels);
    if (func)
-       return func;
+     return func;
    return _composite_span_nothing;
 }
 
 RGBA_Gfx_Func
-evas_common_gfx_func_composite_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, int pixels, int op)
+evas_common_gfx_func_composite_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Func        func = NULL;
 
-   if ((src && (!src->cache_entry.flags.alpha)) && ((col & 0xff000000) == 
0xff000000))
+   if ((!src_alpha) && ((col & 0xff000000) == 0xff000000))
      {
-       if (op == _EVAS_RENDER_BLEND) op = _EVAS_RENDER_COPY;
-       else if (op == _EVAS_RENDER_BLEND_REL) op = _EVAS_RENDER_COPY_REL;
+        if (op == _EVAS_RENDER_BLEND) op = _EVAS_RENDER_COPY;
+        else if (op == _EVAS_RENDER_BLEND_REL) op = _EVAS_RENDER_COPY_REL;
      }
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_pixel_color_span_get(src, col, dst, pixels);
+     func = comp->composite_pixel_color_span_get(src_alpha, src_sparse_alpha, 
col, dst_alpha, pixels);
    if (func)
-       return func;
+     return func;
    return _composite_span_nothing;
 }
 
 RGBA_Gfx_Func
-evas_common_gfx_func_composite_mask_color_span_get(DATA32 col, RGBA_Image 
*dst, int pixels, int op)
+evas_common_gfx_func_composite_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Func        func = NULL;
 
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_mask_color_span_get(col, dst, pixels);
+     func = comp->composite_mask_color_span_get(col, dst_alpha, pixels);
    if (func)
-       return func;
+     return func;
    return _composite_span_nothing;
 }
 
 RGBA_Gfx_Func
-evas_common_gfx_func_composite_pixel_mask_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels, int op)
+evas_common_gfx_func_composite_pixel_mask_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int pixels, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Func        func = NULL;
 
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_pixel_mask_span_get(src, dst, pixels);
+     func = comp->composite_pixel_mask_span_get(src_alpha, src_sparse_alpha, 
dst_alpha, pixels);
    if (func)
-       return func;
+     return func;
    return _composite_span_nothing;
 }
 
 RGBA_Gfx_Pt_Func
-evas_common_gfx_func_composite_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst, int op)
+evas_common_gfx_func_composite_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool 
dst_alpha, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Pt_Func     func = NULL;
 
-   if (!src_flags.alpha)
+   if (!src_alpha)
      {
-       if (op == _EVAS_RENDER_BLEND) op = _EVAS_RENDER_COPY;
-       else if (op == _EVAS_RENDER_BLEND_REL) op = _EVAS_RENDER_COPY_REL;
+        if (op == _EVAS_RENDER_BLEND) op = _EVAS_RENDER_COPY;
+        else if (op == _EVAS_RENDER_BLEND_REL) op = _EVAS_RENDER_COPY_REL;
      }
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_pixel_pt_get(src_flags, dst);
+     func = comp->composite_pixel_pt_get(src_alpha, dst_alpha);
    if (func)
-       return func;
+     return func;
    return _composite_pt_nothing;
 }
 
 RGBA_Gfx_Pt_Func
-evas_common_gfx_func_composite_color_pt_get(DATA32 col, RGBA_Image *dst, int 
op)
+evas_common_gfx_func_composite_color_pt_get(DATA32 col, Eina_Bool dst_alpha, 
int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Pt_Func     func = NULL;
@@ -256,55 +257,55 @@ evas_common_gfx_func_composite_color_pt_get(DATA32 col, 
RGBA_Image *dst, int op)
      }
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_color_pt_get(col, dst);
+     func = comp->composite_color_pt_get(col, dst_alpha);
    if (func)
-       return func;
+     return func;
    return _composite_pt_nothing;
 }
 
 RGBA_Gfx_Pt_Func
-evas_common_gfx_func_composite_pixel_color_pt_get(Image_Entry_Flags src_flags, 
DATA32 col, RGBA_Image *dst, int op)
+evas_common_gfx_func_composite_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 
col, Eina_Bool dst_alpha, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Pt_Func     func = NULL;
 
-   if ((!src_flags.alpha) && ((col & 0xff000000) == 0xff000000))
+   if ((!src_alpha) && ((col & 0xff000000) == 0xff000000))
      {
         if (op == _EVAS_RENDER_BLEND) op = _EVAS_RENDER_COPY;
         else if (op == _EVAS_RENDER_BLEND_REL) op = _EVAS_RENDER_COPY_REL;
      }
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_pixel_color_pt_get(src_flags, col, dst);
+     func = comp->composite_pixel_color_pt_get(src_alpha, col, dst_alpha);
    if (func)
-       return func;
+     return func;
    return _composite_pt_nothing;
 }
 
 RGBA_Gfx_Pt_Func
-evas_common_gfx_func_composite_mask_color_pt_get(DATA32 col, RGBA_Image *dst, 
int op)
+evas_common_gfx_func_composite_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Pt_Func     func = NULL;
 
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_mask_color_pt_get(col, dst);
+     func = comp->composite_mask_color_pt_get(col, dst_alpha);
    if (func)
-       return func;
+     return func;
    return _composite_pt_nothing;
 }
 
 RGBA_Gfx_Pt_Func
-evas_common_gfx_func_composite_pixel_mask_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst, int op)
+evas_common_gfx_func_composite_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Pt_Func     func = NULL;
 
    comp = evas_gfx_compositor_get(op);
    if (comp)
-       func = comp->composite_pixel_mask_pt_get(src_flags, dst);
+     func = comp->composite_pixel_mask_pt_get(src_alpha, dst_alpha);
    if (func)
-       return func;
+     return func;
    return _composite_pt_nothing;
 }
diff --git a/src/lib/evas/common/evas_blend_private.h 
b/src/lib/evas/common/evas_blend_private.h
index 0029198..f96e004 100644
--- a/src/lib/evas/common/evas_blend_private.h
+++ b/src/lib/evas/common/evas_blend_private.h
@@ -15,17 +15,17 @@ RGBA_Gfx_Compositor 
*evas_common_gfx_compositor_sub_rel_get(void);
 RGBA_Gfx_Compositor *evas_common_gfx_compositor_mask_get                 
(void);
 RGBA_Gfx_Compositor *evas_common_gfx_compositor_mul_get                  
(void);
 
-RGBA_Gfx_Func        evas_common_gfx_func_composite_pixel_span_get       
(RGBA_Image *src, RGBA_Image *dst, int pixels, int op);
-RGBA_Gfx_Func        evas_common_gfx_func_composite_color_span_get       
(DATA32 col, RGBA_Image *dst, int pixels, int op);
-RGBA_Gfx_Func        evas_common_gfx_func_composite_pixel_color_span_get 
(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels, int op);
-RGBA_Gfx_Func        evas_common_gfx_func_composite_mask_color_span_get  
(DATA32 col, RGBA_Image *dst, int pixels, int op);
-RGBA_Gfx_Func        evas_common_gfx_func_composite_pixel_mask_span_get  
(RGBA_Image *src, RGBA_Image *dst, int pixels, int op);
+RGBA_Gfx_Func        evas_common_gfx_func_composite_pixel_span_get       
(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int 
pixels, int op);
+RGBA_Gfx_Func        evas_common_gfx_func_composite_color_span_get       
(DATA32 col, Eina_Bool dst_alpha, int pixels, int op);
+RGBA_Gfx_Func        evas_common_gfx_func_composite_pixel_color_span_get 
(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool 
dst_alpha, int pixels, int op);
+RGBA_Gfx_Func        evas_common_gfx_func_composite_mask_color_span_get  
(DATA32 col, Eina_Bool dst_alpha, int pixels, int op);
+RGBA_Gfx_Func        evas_common_gfx_func_composite_pixel_mask_span_get  
(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int 
pixels, int op);
 
-RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_pt_get         
(Image_Entry_Flags src_flags, RGBA_Image *dst, int op);
-RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_color_pt_get         
(DATA32 col, RGBA_Image *dst, int op);
-RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_color_pt_get   
(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst, int op);
-RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_mask_color_pt_get    
(DATA32 col, RGBA_Image *dst, int op);
-RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_mask_pt_get    
(Image_Entry_Flags src_flags, RGBA_Image *dst, int op);
+RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_pt_get         
(Eina_Bool src_alpha, Eina_Bool dst_alpha, int op);
+RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_color_pt_get         
(DATA32 col, Eina_Bool dst_alpha, int op);
+RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_color_pt_get   
(Eina_Bool src_alpha, DATA32 col, Eina_Bool dst_alpha, int op);
+RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_mask_color_pt_get    
(DATA32 col, Eina_Bool dst_alpha, int op);
+RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_mask_pt_get    
(Eina_Bool src_alpha, Eina_Bool dst_alpha, int op);
 
 /* Alpha/mask functions */
 Alpha_Gfx_Func       evas_common_alpha_func_get (int op);
diff --git a/src/lib/evas/common/evas_font_draw.c 
b/src/lib/evas/common/evas_font_draw.c
index 7ff2f23..b243667 100644
--- a/src/lib/evas/common/evas_font_draw.c
+++ b/src/lib/evas/common/evas_font_draw.c
@@ -255,7 +255,7 @@ evas_common_font_draw_cb(RGBA_Image *dst, RGBA_Draw_Context 
*dc, int x, int y, E
    im_h = dst->cache_entry.h;
 
 //   evas_common_font_size_use(fn);
-   func = evas_common_gfx_func_composite_mask_color_span_get(dc->col.col, dst, 
1, dc->render_op);
+   func = evas_common_gfx_func_composite_mask_color_span_get(dc->col.col, 
dst->cache_entry.flags.alpha, 1, dc->render_op);
 
    if (!dc->cutout.rects)
      {
@@ -366,7 +366,7 @@ evas_common_font_draw_prepare_cutout(Cutout_Rects **reuse, 
RGBA_Image *dst, RGBA
    im_w = dst->cache_entry.w;
    im_h = dst->cache_entry.h;
 
-   *func = evas_common_gfx_func_composite_mask_color_span_get(dc->col.col, 
dst, 1, dc->render_op);
+   *func = evas_common_gfx_func_composite_mask_color_span_get(dc->col.col, 
dst->cache_entry.flags.alpha, 1, dc->render_op);
 
    evas_common_draw_context_clip_clip(dc, 0, 0, im_w, im_h);
    if (dc->clip.w <= 0) return EINA_FALSE;
diff --git a/src/lib/evas/common/evas_line_main.c 
b/src/lib/evas/common/evas_line_main.c
index 9d3aa6b..8301dcc 100644
--- a/src/lib/evas/common/evas_line_main.c
+++ b/src/lib/evas/common/evas_line_main.c
@@ -49,7 +49,7 @@ _evas_draw_point(RGBA_Image *dst, RGBA_Draw_Context *dc, int 
x, int y)
 # endif     
 #endif
      {
-        pfunc = evas_common_gfx_func_composite_color_pt_get(dc->col.col, dst, 
dc->render_op);
+        pfunc = evas_common_gfx_func_composite_color_pt_get(dc->col.col, 
dst->cache_entry.flags.alpha, dc->render_op);
         if (pfunc)
           pfunc(0, 255, dc->col.col, dst->image.data + (dst->cache_entry.w * 
y) + x);
      }
@@ -70,7 +70,7 @@ evas_common_line_point_draw(RGBA_Image *dst, int clip_x, int 
clip_y, int clip_w,
    if ((!no_cuse) && (!IN_RECT(x, y, clip_x, clip_y, clip_w, clip_h)))
      return;
 
-   pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, render_op);
+   pfunc = evas_common_gfx_func_composite_color_pt_get(color, 
dst->cache_entry.flags.alpha, render_op);
    if (pfunc)
      pfunc(0, 255, color, dst->image.data + (dst->cache_entry.w * y) + x);
 }
@@ -147,7 +147,7 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context 
*dc, int x0, int y0, i
 # endif
 #endif
                {
-                  sfunc = evas_common_gfx_func_composite_color_span_get(color, 
dst, len, dc->render_op);
+                  sfunc = evas_common_gfx_func_composite_color_span_get(color, 
dst->cache_entry.flags.alpha, len, dc->render_op);
                   if (sfunc)
                     sfunc(NULL, NULL, color, p, len);
                }
@@ -155,7 +155,7 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context 
*dc, int x0, int y0, i
         return;
      }
 
-   pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, 
dc->render_op);
+   pfunc = evas_common_gfx_func_composite_color_pt_get(color, 
dst->cache_entry.flags.alpha, dc->render_op);
    if (!pfunc) return;
 
    if (dx == 0)
@@ -488,13 +488,13 @@ _draw_render_thread_simple_line(RGBA_Image *dst, int 
clip_x, int clip_y, int cli
 
              len = x1 - x0 + 1;
              p = dst->image.data + (dstw * y0) + x0;
-             sfunc = evas_common_gfx_func_composite_color_span_get(color, dst, 
len, render_op);
+             sfunc = evas_common_gfx_func_composite_color_span_get(color, 
dst->cache_entry.flags.alpha, len, render_op);
              if (sfunc) sfunc(NULL, NULL, color, p, len);
           }
         return;
      }
 
-   pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, render_op);
+   pfunc = evas_common_gfx_func_composite_color_pt_get(color, 
dst->cache_entry.flags.alpha, render_op);
    if (!pfunc) return;
 
    if (dx == 0)
@@ -767,7 +767,7 @@ evas_common_line_draw_line(RGBA_Image *dst, int clip_x, int 
clip_y, int clip_w,
        return;
      }
 
-   pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, render_op);
+   pfunc = evas_common_gfx_func_composite_color_pt_get(color, 
dst->cache_entry.flags.alpha, render_op);
    if (!pfunc) return;
 
    clx = clip_x;
@@ -896,7 +896,7 @@ _evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int 
x0, int y0, int x1,
      }
 
    color = dc->col.col;
-   pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, 
dc->render_op);
+   pfunc = evas_common_gfx_func_composite_color_pt_get(color, 
dst->cache_entry.flags.alpha, dc->render_op);
    if (!pfunc) return;
 
    clx = dc->clip.x;
@@ -1053,7 +1053,7 @@ evas_common_line_draw_line_aa(RGBA_Image *dst, int 
clip_x, int clip_y, int clip_
        return;
      }
 
-   pfunc = evas_common_gfx_func_composite_mask_color_pt_get(color, dst, 
render_op);
+   pfunc = evas_common_gfx_func_composite_mask_color_pt_get(color, 
dst->cache_entry.flags.alpha, render_op);
    if (!pfunc) return;
 
    clx = clip_x;
@@ -1202,7 +1202,7 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context 
*dc, int x0, int y0, int x
      }
 
    color = dc->col.col;
-   pfunc = evas_common_gfx_func_composite_mask_color_pt_get(color, dst, 
dc->render_op);
+   pfunc = evas_common_gfx_func_composite_mask_color_pt_get(color, 
dst->cache_entry.flags.alpha, dc->render_op);
    if (!pfunc) return;
 
    clx = dc->clip.x;
diff --git a/src/lib/evas/common/evas_map_image_internal.c 
b/src/lib/evas/common/evas_map_image_internal.c
index 9a53792..eb1b770 100644
--- a/src/lib/evas/common/evas_map_image_internal.c
+++ b/src/lib/evas/common/evas_map_image_internal.c
@@ -93,9 +93,9 @@ FUNC_NAME(RGBA_Image *src, RGBA_Image *dst,
         pa = src->cache_entry.flags.alpha;
         if (havea) src->cache_entry.flags.alpha = 1;
         if (mul_col != 0xffffffff)
-          func = evas_common_gfx_func_composite_pixel_color_span_get(src, 
mul_col, dst, cw, render_op);
+          func = 
evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha,
 src->cache_entry.flags.alpha_sparse, mul_col, dst->cache_entry.flags.alpha, 
cw, render_op);
         else
-          func = evas_common_gfx_func_composite_pixel_span_get(src, dst, cw, 
render_op);
+          func = 
evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, 
src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, cw, 
render_op);
         src->cache_entry.flags.alpha = pa;
      }
 
@@ -161,9 +161,9 @@ FUNC_NAME_DO(RGBA_Image *src, RGBA_Image *dst,
         pa = src->cache_entry.flags.alpha;
         if (ms->havea) src->cache_entry.flags.alpha = 1;
         if (dc->mul.use)
-          func = evas_common_gfx_func_composite_pixel_color_span_get(src, 
dc->mul.col, dst, cw, dc->render_op);
+          func = 
evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha,
 src->cache_entry.flags.alpha_sparse, dc->mul.col, 
dst->cache_entry.flags.alpha, cw, dc->render_op);
         else
-          func = evas_common_gfx_func_composite_pixel_span_get(src, dst, cw, 
dc->render_op);
+          func = 
evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, 
src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, cw, 
dc->render_op);
         src->cache_entry.flags.alpha = pa;
      }
 
diff --git a/src/lib/evas/common/evas_op_add_main_.c 
b/src/lib/evas/common/evas_op_add_main_.c
index 1a96380..19bb88e 100644
--- a/src/lib/evas/common/evas_op_add_main_.c
+++ b/src/lib/evas/common/evas_op_add_main_.c
@@ -5,17 +5,17 @@ static RGBA_Gfx_Pt_Func  
op_add_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU
 static void op_add_init(void);
 static void op_add_shutdown(void);
 
-static RGBA_Gfx_Func op_add_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_add_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels);
-static RGBA_Gfx_Func op_add_pixel_color_span_get(RGBA_Image *src, DATA32 col, 
RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_add_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_add_pixel_mask_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-
-static RGBA_Gfx_Pt_Func op_add_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_pixel_color_pt_get(Image_Entry_Flags src_flags, 
DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_pixel_mask_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
+static RGBA_Gfx_Func op_add_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_add_color_span_get(DATA32 col, Eina_Bool dst_alpha, 
int pixels);
+static RGBA_Gfx_Func op_add_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_add_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_add_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+
+static RGBA_Gfx_Pt_Func op_add_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_add_color_pt_get(DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_add_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 
col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_add_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_add_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_add = { "add",
  op_add_init, op_add_shutdown,
@@ -39,17 +39,17 @@ static RGBA_Gfx_Pt_Func  
op_add_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST]
 static void op_add_rel_init(void);
 static void op_add_rel_shutdown(void);
 
-static RGBA_Gfx_Func op_add_rel_pixel_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-static RGBA_Gfx_Func op_add_rel_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_add_rel_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_add_rel_mask_color_span_get(DATA32 col, RGBA_Image 
*dst, int pixels);
-static RGBA_Gfx_Func op_add_rel_pixel_mask_span_get(RGBA_Image *src, 
RGBA_Image *dst, int pixels);
+static RGBA_Gfx_Func op_add_rel_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_add_rel_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_add_rel_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_add_rel_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_add_rel_pixel_mask_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
 
-static RGBA_Gfx_Pt_Func op_add_rel_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_rel_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_rel_mask_color_pt_get(DATA32 col, RGBA_Image 
*dst);
-static RGBA_Gfx_Pt_Func op_add_rel_pixel_mask_pt_get(Image_Entry_Flags 
src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_add_rel_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_add_rel_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_add_rel_pixel_color_pt_get(Eina_Bool src_alpha, 
DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_add_rel_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_add_rel_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_add_rel = { "add_rel",
  op_add_rel_init, op_add_rel_shutdown,
@@ -141,19 +141,19 @@ add_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_add_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_add_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_add_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_add_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -163,17 +163,17 @@ op_add_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels EINA_UNUSED)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_add_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int 
pixels EINA_UNUSED)
+op_add_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -181,13 +181,13 @@ op_add_pixel_color_span_get(RGBA_Image *src, DATA32 col, 
RGBA_Image *dst, int pi
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_add_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_add_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -197,19 +197,19 @@ op_add_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_add_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_add_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
@@ -234,19 +234,19 @@ add_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_add_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_add_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -256,17 +256,17 @@ op_add_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image 
*dst)
+op_add_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -274,13 +274,13 @@ op_add_pixel_color_pt_get(Image_Entry_Flags src_flags, 
DATA32 col, RGBA_Image *d
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_add_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -290,19 +290,19 @@ op_add_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_add_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -365,19 +365,19 @@ add_rel_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_add_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_add_rel_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_add_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_add_rel_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -387,17 +387,17 @@ op_add_rel_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_add_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
+op_add_rel_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -405,13 +405,13 @@ op_add_rel_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, in
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_add_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_add_rel_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -421,19 +421,19 @@ op_add_rel_mask_color_span_get(DATA32 col, RGBA_Image 
*dst, int pixels EINA_UNUS
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_add_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_add_rel_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -458,19 +458,19 @@ add_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_add_rel_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_add_rel_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -480,17 +480,17 @@ op_add_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, 
RGBA_Image *dst)
+op_add_rel_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool 
dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -498,13 +498,13 @@ op_add_rel_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Imag
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_add_rel_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -514,19 +514,19 @@ op_add_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_add_rel_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/evas/common/evas_op_blend_main_.c 
b/src/lib/evas/common/evas_op_blend_main_.c
index 5c85673..aff6cdb 100644
--- a/src/lib/evas/common/evas_op_blend_main_.c
+++ b/src/lib/evas/common/evas_op_blend_main_.c
@@ -6,17 +6,17 @@ RGBA_Gfx_Pt_Func  
op_blend_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST
 static void op_blend_init(void);
 static void op_blend_shutdown(void);
 
-static RGBA_Gfx_Func op_blend_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_blend_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels);
-static RGBA_Gfx_Func op_blend_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_blend_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_blend_pixel_mask_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-
-static RGBA_Gfx_Pt_Func op_blend_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_mask_color_pt_get(DATA32 col, RGBA_Image 
*dst);
-static RGBA_Gfx_Pt_Func op_blend_pixel_mask_pt_get(Image_Entry_Flags 
src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Func op_blend_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha EINA_UNUSED, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_blend_color_span_get(DATA32 col, Eina_Bool dst_alpha, 
int pixels);
+static RGBA_Gfx_Func op_blend_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_blend_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_blend_pixel_mask_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha EINA_UNUSED, Eina_Bool dst_alpha, int pixels);
+
+static RGBA_Gfx_Pt_Func op_blend_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_blend_color_pt_get(DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_blend_pixel_color_pt_get(Eina_Bool src_alpha, 
DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_blend_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_blend_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_blend = { "blend",
  op_blend_init, op_blend_shutdown,
@@ -41,17 +41,17 @@ RGBA_Gfx_Pt_Func  
op_blend_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_
 static void op_blend_rel_init(void);
 static void op_blend_rel_shutdown(void);
 
-static RGBA_Gfx_Func op_blend_rel_pixel_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-static RGBA_Gfx_Func op_blend_rel_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_blend_rel_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_blend_rel_mask_color_span_get(DATA32 col, RGBA_Image 
*dst, int pixels);
-static RGBA_Gfx_Func op_blend_rel_pixel_mask_span_get(RGBA_Image *src, 
RGBA_Image *dst, int pixels);
+static RGBA_Gfx_Func op_blend_rel_pixel_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_blend_rel_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_blend_rel_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_blend_rel_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_blend_rel_pixel_mask_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
 
-static RGBA_Gfx_Pt_Func op_blend_rel_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_rel_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_rel_mask_color_pt_get(DATA32 col, RGBA_Image 
*dst);
-static RGBA_Gfx_Pt_Func op_blend_rel_pixel_mask_pt_get(Image_Entry_Flags 
src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_blend_rel_pixel_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_blend_rel_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_blend_rel_pixel_color_pt_get(Eina_Bool src_alpha, 
DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_blend_rel_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_blend_rel_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_blend_rel = { "blend_rel",
  op_blend_rel_init, op_blend_rel_shutdown,
@@ -190,23 +190,23 @@ blend_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_blend_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_blend_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha, 
Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
        s = SP;
-       if (src->cache_entry.flags.alpha_sparse)
+        if (src_sparse_alpha)
            s = SP_AS;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_blend_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_blend_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -216,20 +216,20 @@ op_blend_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels EINA_UNUSED)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_blend_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
+op_blend_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
        s = SP;
-       if (src->cache_entry.flags.alpha_sparse)
+        if (src_sparse_alpha)
            s = SP_AS;
      }
    if ((col >> 24) < 255)
@@ -238,13 +238,13 @@ op_blend_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, int
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_blend_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_blend_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -254,23 +254,23 @@ op_blend_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_blend_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_blend_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
        s = SP;
-       if (src->cache_entry.flags.alpha_sparse)
+        if (src_sparse_alpha)
            s = SP_AS;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
@@ -312,19 +312,19 @@ blend_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_blend_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_blend_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -334,17 +334,17 @@ op_blend_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, 
RGBA_Image *dst)
+op_blend_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool 
dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -352,13 +352,13 @@ op_blend_pixel_color_pt_get(Image_Entry_Flags src_flags, 
DATA32 col, RGBA_Image
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_blend_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -368,19 +368,19 @@ op_blend_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_blend_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -475,23 +475,23 @@ blend_rel_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_blend_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_blend_rel_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
        s = SP;
-       if (src->cache_entry.flags.alpha_sparse)
+        if (src_sparse_alpha)
            s = SP_AS;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_blend_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_blend_rel_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -501,17 +501,17 @@ op_blend_rel_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_blend_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image 
*dst, int pixels EINA_UNUSED)
+op_blend_rel_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -519,13 +519,13 @@ op_blend_rel_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst,
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_blend_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_blend_rel_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -535,23 +535,23 @@ op_blend_rel_mask_color_span_get(DATA32 col, RGBA_Image 
*dst, int pixels EINA_UN
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_blend_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_blend_rel_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
        s = SP;
-       if (src->cache_entry.flags.alpha_sparse)
+        if (src_sparse_alpha)
            s = SP_AS;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -592,19 +592,19 @@ blend_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_blend_rel_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_blend_rel_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -614,17 +614,17 @@ op_blend_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, 
RGBA_Image *dst)
+op_blend_rel_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool 
dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -632,13 +632,13 @@ op_blend_rel_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Im
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_blend_rel_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -648,19 +648,19 @@ op_blend_rel_mask_color_pt_get(DATA32 col, RGBA_Image 
*dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_blend_rel_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/evas/common/evas_op_copy_main_.c 
b/src/lib/evas/common/evas_op_copy_main_.c
index 9c48559..16fc3f1 100644
--- a/src/lib/evas/common/evas_op_copy_main_.c
+++ b/src/lib/evas/common/evas_op_copy_main_.c
@@ -7,17 +7,17 @@ static RGBA_Gfx_Pt_Func  
op_copy_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CP
 static void op_copy_init(void);
 static void op_copy_shutdown(void);
 
-static RGBA_Gfx_Func op_copy_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_copy_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels);
-static RGBA_Gfx_Func op_copy_pixel_color_span_get(RGBA_Image *src, DATA32 col, 
RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_copy_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_copy_pixel_mask_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-
-static RGBA_Gfx_Pt_Func op_copy_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_copy_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_copy_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_copy_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_copy_pixel_mask_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
+static RGBA_Gfx_Func op_copy_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_copy_color_span_get(DATA32 col, Eina_Bool dst_alpha, 
int pixels);
+static RGBA_Gfx_Func op_copy_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_copy_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_copy_pixel_mask_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+
+static RGBA_Gfx_Pt_Func op_copy_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_copy_color_pt_get(DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_copy_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 
col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_copy_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_copy_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_copy = { "copy",
  op_copy_init, op_copy_shutdown,
@@ -42,19 +42,19 @@ static RGBA_Gfx_Pt_Func  
op_copy_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST
 static void op_copy_rel_init(void);
 static void op_copy_rel_shutdown(void);
 
-static RGBA_Gfx_Func op_copy_rel_pixel_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-static RGBA_Gfx_Func op_copy_rel_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_copy_rel_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_copy_rel_mask_color_span_get(DATA32 col, RGBA_Image 
*dst, int pixels);
-static RGBA_Gfx_Func op_copy_rel_pixel_mask_span_get(RGBA_Image *src, 
RGBA_Image *dst, int pixels);
+static RGBA_Gfx_Func op_copy_rel_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha EINA_UNUSED, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_copy_rel_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_copy_rel_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_copy_rel_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_copy_rel_pixel_mask_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha EINA_UNUSED, Eina_Bool dst_alpha, int pixels);
 
-static RGBA_Gfx_Pt_Func op_copy_rel_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_copy_rel_pixel_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 /* XXX: doesn't exist
-static RGBA_Gfx_Pt_Func op_copy_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_copy_rel_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
  */
-static RGBA_Gfx_Pt_Func op_copy_rel_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_copy_rel_mask_color_pt_get(DATA32 col, RGBA_Image 
*dst);
-static RGBA_Gfx_Pt_Func op_copy_rel_pixel_mask_pt_get(Image_Entry_Flags 
src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_copy_rel_pixel_color_pt_get(Eina_Bool src_alpha, 
DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_copy_rel_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_copy_rel_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_copy_rel = { "copy_rel",
  op_copy_rel_init, op_copy_rel_shutdown,
@@ -178,73 +178,64 @@ copy_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_copy_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_copy_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
-       dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_copy_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_copy_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_copy_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int 
pixels EINA_UNUSED)
+op_copy_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_copy_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_copy_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha EINA_UNUSED, int 
pixels EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
        c = SC;
    if (col == ((col >> 24) * 0x01010101))
@@ -255,13 +246,11 @@ op_copy_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
 }
 
 static RGBA_Gfx_Func
-op_copy_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_copy_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha EINA_UNUSED, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
    return copy_gfx_span_func_cpu(s, m, c, d);
 }
@@ -294,73 +283,64 @@ copy_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_copy_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
      {
-       dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_copy_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image 
*dst)
+op_copy_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool 
dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_copy_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
        c = SC;
    if (col == ((col >> 24) * 0x01010101))
@@ -371,13 +351,11 @@ op_copy_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_copy_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    return copy_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -460,74 +438,64 @@ copy_rel_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_copy_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_copy_rel_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_copy_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_copy_rel_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_copy_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
+op_copy_rel_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_copy_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_copy_rel_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha EINA_UNUSED, 
int pixels EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
        c = SC;
    if (col == ((col >> 24) * 0x01010101))
@@ -538,13 +506,11 @@ op_copy_rel_mask_color_span_get(DATA32 col, RGBA_Image 
*dst, int pixels EINA_UNU
 }
 
 static RGBA_Gfx_Func
-op_copy_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_copy_rel_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha EINA_UNUSED, Eina_Bool dst_alpha EINA_UNUSED, int pixels 
EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
    return copy_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -577,24 +543,22 @@ copy_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_copy_rel_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 /* XXX: not used
 static RGBA_Gfx_Pt_Func
-op_copy_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_copy_rel_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -608,45 +572,39 @@ op_copy_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 */
 
 static RGBA_Gfx_Pt_Func
-op_copy_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, 
RGBA_Image *dst)
+op_copy_rel_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool 
dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return copy_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_copy_rel_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
        c = SC;
    if (col == ((col >> 24) * 0x01010101))
@@ -657,13 +615,11 @@ op_copy_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_copy_rel_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha 
EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    return copy_rel_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/evas/common/evas_op_mask_main_.c 
b/src/lib/evas/common/evas_op_mask_main_.c
index 8810dc9..0304d72 100644
--- a/src/lib/evas/common/evas_op_mask_main_.c
+++ b/src/lib/evas/common/evas_op_mask_main_.c
@@ -6,17 +6,17 @@ static RGBA_Gfx_Pt_Func  
op_mask_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CP
 static void op_mask_init(void);
 static void op_mask_shutdown(void);
 
-static RGBA_Gfx_Func op_mask_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_mask_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels);
-static RGBA_Gfx_Func op_mask_pixel_color_span_get(RGBA_Image *src, DATA32 col, 
RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_mask_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_mask_pixel_mask_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-
-static RGBA_Gfx_Pt_Func op_mask_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mask_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mask_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mask_pixel_mask_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
+static RGBA_Gfx_Func op_mask_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha, 
int pixels);
+static RGBA_Gfx_Func op_mask_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_mask_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_mask_pixel_mask_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+
+static RGBA_Gfx_Pt_Func op_mask_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_mask_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 
col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_mask_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_mask_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_mask = { "mask",
  op_mask_init, op_mask_shutdown,
@@ -109,73 +109,64 @@ mask_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_mask_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_mask_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
-       dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mask_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == (col | 0x00ffffff))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mask_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_mask_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int 
pixels EINA_UNUSED)
+op_mask_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == (col | 0x00ffffff))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mask_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_mask_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_mask_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha EINA_UNUSED, int 
pixels EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
        c = SC;
    if (col == (col | 0x00ffffff))
@@ -186,13 +177,11 @@ op_mask_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
 }
 
 static RGBA_Gfx_Func
-op_mask_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_mask_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha EINA_UNUSED, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
    return mask_gfx_span_func_cpu(s, m, c, d);
 }
@@ -217,73 +206,64 @@ mask_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_mask_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_mask_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
      {
-       dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mask_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == (col | 0x00ffffff))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mask_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_mask_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image 
*dst)
+op_mask_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool 
dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == (col | 0x00ffffff))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mask_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_mask_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_mask_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
        c = SC;
    if (col == (col | 0x00ffffff))
@@ -294,13 +274,11 @@ op_mask_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 }
 
 static RGBA_Gfx_Pt_Func
-op_mask_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_mask_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    return mask_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/evas/common/evas_op_mul_main_.c 
b/src/lib/evas/common/evas_op_mul_main_.c
index 7c15807..8d70e2a 100644
--- a/src/lib/evas/common/evas_op_mul_main_.c
+++ b/src/lib/evas/common/evas_op_mul_main_.c
@@ -6,17 +6,17 @@ static RGBA_Gfx_Pt_Func  
op_mul_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU
 static void op_mul_init(void);
 static void op_mul_shutdown(void);
 
-static RGBA_Gfx_Func op_mul_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_mul_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels);
-static RGBA_Gfx_Func op_mul_pixel_color_span_get(RGBA_Image *src, DATA32 col, 
RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_mul_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_mul_pixel_mask_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-
-static RGBA_Gfx_Pt_Func op_mul_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mul_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mul_pixel_color_pt_get(Image_Entry_Flags src_flags, 
DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mul_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mul_pixel_mask_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
+static RGBA_Gfx_Func op_mul_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_mul_color_span_get(DATA32 col, Eina_Bool dst_alpha, 
int pixels);
+static RGBA_Gfx_Func op_mul_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_mul_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_mul_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+
+static RGBA_Gfx_Pt_Func op_mul_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_mul_color_pt_get(DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_mul_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 
col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_mul_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_mul_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_mul = { "mul",
  op_mul_init, op_mul_shutdown,
@@ -108,73 +108,64 @@ mul_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_mul_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_mul_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
-       dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mul_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_mul_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_mul_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == (col | 0x00ffffff))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mul_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_mul_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int 
pixels EINA_UNUSED)
+op_mul_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == (col | 0x00ffffff))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mul_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_mul_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_mul_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha EINA_UNUSED, int 
pixels EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
        c = SC;
    if (col == (col | 0x00ffffff))
@@ -185,13 +176,11 @@ op_mul_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
 }
 
 static RGBA_Gfx_Func
-op_mul_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_mul_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha EINA_UNUSED, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
    return mul_gfx_span_func_cpu(s, m, c, d);
 }
@@ -216,73 +205,64 @@ mul_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_mul_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_mul_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
      {
-       dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mul_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_mul_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_mul_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == (col | 0x00ffffff))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mul_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_mul_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image 
*dst)
+op_mul_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        s = SP;
      }
    if ((col >> 24) < 255)
      {
-       if (dst)
-          dst->cache_entry.flags.alpha = 1;
        c = SC;
      }
    if (col == (col | 0x00ffffff))
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return mul_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_mul_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_mul_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
        c = SC;
    if (col == (col | 0x00ffffff))
@@ -293,13 +273,11 @@ op_mul_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 }
 
 static RGBA_Gfx_Pt_Func
-op_mul_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_mul_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
-   if (dst)
-       dst->cache_entry.flags.alpha = 1;
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    return mul_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/evas/common/evas_op_sub_main_.c 
b/src/lib/evas/common/evas_op_sub_main_.c
index 5045a12..cd26e91 100644
--- a/src/lib/evas/common/evas_op_sub_main_.c
+++ b/src/lib/evas/common/evas_op_sub_main_.c
@@ -6,17 +6,17 @@ static RGBA_Gfx_Pt_Func  
op_sub_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU
 static void op_sub_init(void);
 static void op_sub_shutdown(void);
 
-static RGBA_Gfx_Func op_sub_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_sub_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels);
-static RGBA_Gfx_Func op_sub_pixel_color_span_get(RGBA_Image *src, DATA32 col, 
RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_sub_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_sub_pixel_mask_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-
-static RGBA_Gfx_Pt_Func op_sub_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_pixel_color_pt_get(Image_Entry_Flags src_flags, 
DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_pixel_mask_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
+static RGBA_Gfx_Func op_sub_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_sub_color_span_get(DATA32 col, Eina_Bool dst_alpha, 
int pixels);
+static RGBA_Gfx_Func op_sub_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_sub_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_sub_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha EINA_UNUSED, Eina_Bool dst_alpha, int pixels);
+
+static RGBA_Gfx_Pt_Func op_sub_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_sub_color_pt_get(DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_sub_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 
col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_sub_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_sub_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_sub = { "sub",
  op_sub_init, op_sub_shutdown,
@@ -40,17 +40,17 @@ static RGBA_Gfx_Pt_Func  
op_sub_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST]
 static void op_sub_rel_init(void);
 static void op_sub_rel_shutdown(void);
 
-static RGBA_Gfx_Func op_sub_rel_pixel_span_get(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-static RGBA_Gfx_Func op_sub_rel_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels);
-static RGBA_Gfx_Func op_sub_rel_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, int pixels);
-static RGBA_Gfx_Func op_sub_rel_mask_color_span_get(DATA32 col, RGBA_Image 
*dst, int pixels);
-static RGBA_Gfx_Func op_sub_rel_pixel_mask_span_get(RGBA_Image *src, 
RGBA_Image *dst, int pixels);
+static RGBA_Gfx_Func op_sub_rel_pixel_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_sub_rel_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_sub_rel_pixel_color_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+static RGBA_Gfx_Func op_sub_rel_mask_color_span_get(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+static RGBA_Gfx_Func op_sub_rel_pixel_mask_span_get(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
 
-static RGBA_Gfx_Pt_Func op_sub_rel_pixel_pt_get(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_rel_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_rel_mask_color_pt_get(DATA32 col, RGBA_Image 
*dst);
-static RGBA_Gfx_Pt_Func op_sub_rel_pixel_mask_pt_get(Image_Entry_Flags 
src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_sub_rel_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_sub_rel_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_sub_rel_pixel_color_pt_get(Eina_Bool src_alpha, 
DATA32 col, Eina_Bool dst_alpha);
+static RGBA_Gfx_Pt_Func op_sub_rel_mask_color_pt_get(DATA32 col, Eina_Bool 
dst_alpha);
+static RGBA_Gfx_Pt_Func op_sub_rel_pixel_mask_pt_get(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 
 static RGBA_Gfx_Compositor  _composite_sub_rel = { "sub_rel",
  op_sub_rel_init, op_sub_rel_shutdown,
@@ -142,19 +142,19 @@ sub_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_sub_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_sub_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_sub_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_sub_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -164,17 +164,17 @@ op_sub_color_span_get(DATA32 col, RGBA_Image *dst, int 
pixels EINA_UNUSED)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_sub_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int 
pixels EINA_UNUSED)
+op_sub_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -182,13 +182,13 @@ op_sub_pixel_color_span_get(RGBA_Image *src, DATA32 col, 
RGBA_Image *dst, int pi
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_sub_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_sub_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -198,19 +198,19 @@ op_sub_mask_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_sub_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_sub_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
@@ -235,19 +235,19 @@ sub_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_sub_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_sub_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -257,17 +257,17 @@ op_sub_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image 
*dst)
+op_sub_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -275,13 +275,13 @@ op_sub_pixel_color_pt_get(Image_Entry_Flags src_flags, 
DATA32 col, RGBA_Image *d
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_sub_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -291,19 +291,19 @@ op_sub_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_sub_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -366,19 +366,19 @@ sub_rel_gfx_span_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Func
-op_sub_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_sub_rel_pixel_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_sub_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels EINA_UNUSED)
+op_sub_rel_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -388,17 +388,17 @@ op_sub_rel_color_span_get(DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_sub_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, 
int pixels EINA_UNUSED)
+op_sub_rel_pixel_color_span_get(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha EINA_UNUSED, DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -406,13 +406,13 @@ op_sub_rel_pixel_color_span_get(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, in
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_sub_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_sub_rel_mask_color_span_get(DATA32 col, Eina_Bool dst_alpha, int pixels 
EINA_UNUSED)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -422,19 +422,19 @@ op_sub_rel_mask_color_span_get(DATA32 col, RGBA_Image 
*dst, int pixels EINA_UNUS
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Func
-op_sub_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels 
EINA_UNUSED)
+op_sub_rel_pixel_mask_span_get(Eina_Bool src_alpha, Eina_Bool src_sparse_alpha 
EINA_UNUSED, Eina_Bool dst_alpha, int pixels EINA_UNUSED)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && src->cache_entry.flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -459,19 +459,19 @@ sub_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_sub_rel_pixel_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_sub_rel_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
 
@@ -481,17 +481,17 @@ op_sub_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, 
RGBA_Image *dst)
+op_sub_rel_pixel_color_pt_get(Eina_Bool src_alpha, DATA32 col, Eina_Bool 
dst_alpha)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
    if ((col >> 24) < 255)
        c = SC;
@@ -499,13 +499,13 @@ op_sub_rel_pixel_color_pt_get(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Imag
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
+op_sub_rel_mask_color_pt_get(DATA32 col, Eina_Bool dst_alpha)
 {
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
 
@@ -515,19 +515,19 @@ op_sub_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
        c = SC_AA;
    if (col == 0xffffffff)
        c = SC_N;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
+op_sub_rel_pixel_mask_pt_get(Eina_Bool src_alpha, Eina_Bool dst_alpha)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags.alpha)
+   if (src_alpha)
        s = SP;
-   if (dst && dst->cache_entry.flags.alpha)
+   if (dst_alpha)
        d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/evas/common/evas_polygon_main.c 
b/src/lib/evas/common/evas_polygon_main.c
index 2d14e8d..db56cdb 100644
--- a/src/lib/evas/common/evas_polygon_main.c
+++ b/src/lib/evas/common/evas_polygon_main.c
@@ -279,7 +279,7 @@ evas_common_polygon_draw(RGBA_Image *dst, RGBA_Draw_Context 
*dc, RGBA_Polygon_Po
    free(point);
    free(sorted_index);
 
-   func = evas_common_gfx_func_composite_color_span_get(dc->col.col, dst, 1, 
dc->render_op);
+   func = evas_common_gfx_func_composite_color_span_get(dc->col.col, 
dst->cache_entry.flags.alpha, 1, dc->render_op);
    if (spans)
      {
        RGBA_Span *span;
@@ -435,7 +435,7 @@ evas_common_polygon_rgba_draw(RGBA_Image *dst, int ext_x, 
int ext_y, int ext_w,
    free(point);
    free(sorted_index);
 
-   func = evas_common_gfx_func_composite_color_span_get(col, dst, 1, 
render_op);
+   func = evas_common_gfx_func_composite_color_span_get(col, 
dst->cache_entry.flags.alpha, 1, render_op);
    if (spans)
      {
        RGBA_Span *span;
diff --git a/src/lib/evas/common/evas_rectangle_main.c 
b/src/lib/evas/common/evas_rectangle_main.c
index 34df871..68a5ffc 100644
--- a/src/lib/evas/common/evas_rectangle_main.c
+++ b/src/lib/evas/common/evas_rectangle_main.c
@@ -132,7 +132,7 @@ rectangle_draw_internal(RGBA_Image *dst, RGBA_Draw_Context 
*dc, int x, int y, in
 # endif     
 #endif
      {
-        func = evas_common_gfx_func_composite_color_span_get(dc->col.col, dst, 
w, dc->render_op);
+        func = evas_common_gfx_func_composite_color_span_get(dc->col.col, 
dst->cache_entry.flags.alpha, w, dc->render_op);
         ptr = dst->image.data + (y * dst->cache_entry.w) + x;
         for (yy = 0; yy < h; yy++)
           {
@@ -150,7 +150,7 @@ evas_common_rectangle_rgba_draw(RGBA_Image *dst, DATA32 
color, int render_op, in
    DATA32 *ptr;
    int yy;
 
-   func = evas_common_gfx_func_composite_color_span_get(color, dst, w, 
render_op);
+   func = evas_common_gfx_func_composite_color_span_get(color, 
dst->cache_entry.flags.alpha, w, render_op);
    ptr = dst->image.data + (y * dst->cache_entry.w) + x;
    for (yy = 0; yy < h; yy++)
      {
diff --git a/src/lib/evas/common/evas_scale_sample.c 
b/src/lib/evas/common/evas_scale_sample.c
index 8b52280..f462da5 100644
--- a/src/lib/evas/common/evas_scale_sample.c
+++ b/src/lib/evas/common/evas_scale_sample.c
@@ -199,9 +199,9 @@ evas_common_scale_rgba_sample_draw(RGBA_Image *src, 
RGBA_Image *dst, int dst_cli
    dst_ptr = dst_data + dst_clip_x + (dst_clip_y * dst_w);
 
    if (mul_col != 0xffffffff)
-     func = evas_common_gfx_func_composite_pixel_color_span_get(src, mul_col, 
dst, dst_clip_w, render_op);
+     func = 
evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha,
 src->cache_entry.flags.alpha_sparse, mul_col, dst->cache_entry.flags.alpha, 
dst_clip_w, render_op);
    else
-     func = evas_common_gfx_func_composite_pixel_span_get(src, dst, 
dst_clip_w, render_op);
+     func = 
evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, 
src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, dst_clip_w, 
render_op);
 
    if ((dst_region_w == src_region_w) && (dst_region_h == src_region_h))
      {
@@ -396,9 +396,9 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, 
RGBA_Image *dst,
    dst_ptr = dst_data + dst_clip_x + (dst_clip_y * dst_w);
 
    if (dc->mul.use)
-     func = evas_common_gfx_func_composite_pixel_color_span_get(src, 
dc->mul.col, dst, dst_clip_w, dc->render_op);
+     func = 
evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha,
 src->cache_entry.flags.alpha_sparse, dc->mul.col, 
dst->cache_entry.flags.alpha, dst_clip_w, dc->render_op);
    else
-     func = evas_common_gfx_func_composite_pixel_span_get(src, dst, 
dst_clip_w, dc->render_op);
+     func = 
evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, 
src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, dst_clip_w, 
dc->render_op);
 
    if ((dst_region_w == src_region_w) && (dst_region_h == src_region_h))
      {
diff --git a/src/lib/evas/common/evas_scale_smooth_scaler_down.c 
b/src/lib/evas/common/evas_scale_smooth_scaler_down.c
index e113c0f..057e526 100644
--- a/src/lib/evas/common/evas_scale_smooth_scaler_down.c
+++ b/src/lib/evas/common/evas_scale_smooth_scaler_down.c
@@ -19,9 +19,9 @@
    buf = alloca(dst_clip_w * sizeof(DATA32));
 
    if (mul_col != 0xffffffff)
-      func = evas_common_gfx_func_composite_pixel_color_span_get(src, mul_col, 
dst, dst_clip_w, render_op);
+      func = 
evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha,
 src->cache_entry.flags.alpha_sparse, mul_col, dst->cache_entry.flags.alpha, 
dst_clip_w, render_op);
    else
-      func = evas_common_gfx_func_composite_pixel_span_get(src, dst, 
dst_clip_w, render_op);
+      func = 
evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, 
src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, dst_clip_w, 
render_op);
    /* scaling down vertically */
    if ((dst_region_w >= src_region_w) &&
        (dst_region_h <  src_region_h))
diff --git a/src/lib/evas/common/evas_scale_smooth_scaler_noscale.c 
b/src/lib/evas/common/evas_scale_smooth_scaler_noscale.c
index 83835bb..484575f 100644
--- a/src/lib/evas/common/evas_scale_smooth_scaler_noscale.c
+++ b/src/lib/evas/common/evas_scale_smooth_scaler_noscale.c
@@ -4,9 +4,9 @@
 
    ptr = src->image.data + ((dst_clip_y - dst_region_y + src_region_y) * 
src_w) + (dst_clip_x - dst_region_x) + src_region_x;
    if (mul_col != 0xffffffff)
-     func = evas_common_gfx_func_composite_pixel_color_span_get(src, mul_col, 
dst, dst_clip_w, render_op);
+     func = 
evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha,
 src->cache_entry.flags.alpha_sparse, mul_col, dst->cache_entry.flags.alpha, 
dst_clip_w, render_op);
    else
-     func = evas_common_gfx_func_composite_pixel_span_get(src, dst, 
dst_clip_w, render_op);
+     func = 
evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, 
src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, dst_clip_w, 
render_op);
 
    while (dst_clip_h--)
      {
diff --git a/src/lib/evas/common/evas_scale_smooth_scaler_up.c 
b/src/lib/evas/common/evas_scale_smooth_scaler_up.c
index 4b21d59..3921d01 100644
--- a/src/lib/evas/common/evas_scale_smooth_scaler_up.c
+++ b/src/lib/evas/common/evas_scale_smooth_scaler_up.c
@@ -34,9 +34,9 @@
      {
        buf = alloca(dst_clip_w * sizeof(DATA32));
        if (mul_col != 0xffffffff)
-          func = evas_common_gfx_func_composite_pixel_color_span_get(src, 
mul_col, dst, dst_clip_w, render_op);
+           func = 
evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha,
 src->cache_entry.flags.alpha_sparse, mul_col, dst->cache_entry.flags.alpha, 
dst_clip_w, render_op);
        else
-          func  = evas_common_gfx_func_composite_pixel_span_get(src, dst, 
dst_clip_w, render_op);
+           func  = 
evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, 
src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, dst_clip_w, 
render_op);
      }
    else
        buf = pdst;
diff --git a/src/lib/evas/filters/evas_filter_blend.c 
b/src/lib/evas/filters/evas_filter_blend.c
index 1e5260d..4c90a92 100644
--- a/src/lib/evas/filters/evas_filter_blend.c
+++ b/src/lib/evas/filters/evas_filter_blend.c
@@ -69,7 +69,7 @@ _image_draw_cpu_alpha2rgba(void *data EINA_UNUSED, void 
*context,
    EINA_SAFETY_ON_FALSE_RETURN_VAL((src_w == dst_w) && (src_h == dst_h), 
EINA_FALSE);
 
    func = evas_common_gfx_func_composite_mask_color_span_get
-     (dc->color, surface, 1, dc->render_op);
+     (dc->color, dst->cache_entry.flags.alpha, 1, dc->render_op);
    EINA_SAFETY_ON_NULL_RETURN_VAL(func, EINA_FALSE);
 
    sw = src->cache_entry.w;
@@ -208,7 +208,7 @@ _image_draw_cpu_rgba2rgba(void *data EINA_UNUSED, void 
*context,
 
    EINA_SAFETY_ON_FALSE_RETURN_VAL((src_w == dst_w) && (src_h == dst_h), 
EINA_FALSE);
 
-   func = evas_common_gfx_func_composite_pixel_span_get(image, surface, 1, 
dc->render_op);
+   func = 
evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, 
src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, 1, 
dc->render_op);
    EINA_SAFETY_ON_NULL_RETURN_VAL(func, EINA_FALSE);
 
    sw = src->cache_entry.w;
diff --git a/src/lib/evas/filters/evas_filter_mask.c 
b/src/lib/evas/filters/evas_filter_mask.c
index b12e381..8c900d0 100644
--- a/src/lib/evas/filters/evas_filter_mask.c
+++ b/src/lib/evas/filters/evas_filter_mask.c
@@ -220,8 +220,8 @@ _mask_cpu_alpha_rgba_rgba(Evas_Filter_Command *cmd)
    stepcount = w / stepsize;
    span = malloc(stepsize * sizeof(DATA32));
 
-   func1 = evas_common_gfx_func_composite_pixel_mask_span_get(mask, out, 1, 
EVAS_RENDER_COPY);
-   func2 = evas_common_gfx_func_composite_pixel_color_span_get(mask, color2, 
out, 1, op);
+   func1 = 
evas_common_gfx_func_composite_pixel_mask_span_get(mask->cache_entry.flags.alpha,
 mask->cache_entry.flags.alpha_sparse, out->cache_entry.flags.alpha, 1, 
EVAS_RENDER_COPY);
+   func2 = 
evas_common_gfx_func_composite_pixel_color_span_get(mask->cache_entry.flags.alpha,
 mask->cache_entry.flags.alpha_sparse, color2, out->cache_entry.flags.alpha, 1, 
op);
 
    // Apply mask using Gfx functions
    for (y = 0, my = 0; y < h; y++, my++, msk += mw)
@@ -313,7 +313,7 @@ _mask_cpu_alpha_alpha_rgba(Evas_Filter_Command *cmd)
    stepcount = w / stepsize;
    span = malloc(stepsize * sizeof(DATA8));
 
-   func = evas_common_gfx_func_composite_mask_color_span_get(color, out, 1, 
op);
+   func = evas_common_gfx_func_composite_mask_color_span_get(color, 
out->cache_entry.flags.alpha, 1, op);
    span_func = evas_common_alpha_func_get(EVAS_RENDER_MASK);
 
    for (y = 0, my = 0; y < h; y++, my++, msk += mw)
diff --git a/src/lib/evas/include/evas_common_private.h 
b/src/lib/evas/include/evas_common_private.h
index b79cf43..e9a25f4 100644
--- a/src/lib/evas/include/evas_common_private.h
+++ b/src/lib/evas/include/evas_common_private.h
@@ -1011,17 +1011,17 @@ struct _RGBA_Gfx_Compositor
    void              (*init)(void);
    void              (*shutdown)(void);
 
-   RGBA_Gfx_Func  (*composite_pixel_span_get)(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-   RGBA_Gfx_Func  (*composite_color_span_get)(DATA32 col, RGBA_Image *dst, int 
pixels);
-   RGBA_Gfx_Func  (*composite_pixel_color_span_get)(RGBA_Image *src, DATA32 
col, RGBA_Image *dst, int pixels);
-   RGBA_Gfx_Func  (*composite_mask_color_span_get)(DATA32 col, RGBA_Image 
*dst, int pixels);
-   RGBA_Gfx_Func  (*composite_pixel_mask_span_get)(RGBA_Image *src, RGBA_Image 
*dst, int pixels);
-
-   RGBA_Gfx_Pt_Func  (*composite_pixel_pt_get)(Image_Entry_Flags src_flags, 
RGBA_Image *dst);
-   RGBA_Gfx_Pt_Func  (*composite_color_pt_get)(DATA32 col, RGBA_Image *dst);
-   RGBA_Gfx_Pt_Func  (*composite_pixel_color_pt_get)(Image_Entry_Flags 
src_flags, DATA32 col, RGBA_Image *dst);
-   RGBA_Gfx_Pt_Func  (*composite_mask_color_pt_get)(DATA32 col, RGBA_Image 
*dst);
-   RGBA_Gfx_Pt_Func  (*composite_pixel_mask_pt_get)(Image_Entry_Flags 
src_flags, RGBA_Image *dst);
+   RGBA_Gfx_Func  (*composite_pixel_span_get)(Eina_Bool src_alpha, Eina_Bool 
src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+   RGBA_Gfx_Func  (*composite_color_span_get)(DATA32 col, Eina_Bool dst_alpha, 
int pixels);
+   RGBA_Gfx_Func  (*composite_pixel_color_span_get)(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, DATA32 col, Eina_Bool dst_alpha, int pixels);
+   RGBA_Gfx_Func  (*composite_mask_color_span_get)(DATA32 col, Eina_Bool 
dst_alpha, int pixels);
+   RGBA_Gfx_Func  (*composite_pixel_mask_span_get)(Eina_Bool src_alpha, 
Eina_Bool src_sparse_alpha, Eina_Bool dst_alpha, int pixels);
+
+   RGBA_Gfx_Pt_Func  (*composite_pixel_pt_get)(Eina_Bool src_alpha, Eina_Bool 
dst_alpha);
+   RGBA_Gfx_Pt_Func  (*composite_color_pt_get)(DATA32 col, Eina_Bool 
dst_alpha);
+   RGBA_Gfx_Pt_Func  (*composite_pixel_color_pt_get)(Eina_Bool src_alpha, 
DATA32 col, Eina_Bool dst_alpha);
+   RGBA_Gfx_Pt_Func  (*composite_mask_color_pt_get)(DATA32 col, Eina_Bool 
dst_alpha);
+   RGBA_Gfx_Pt_Func  (*composite_pixel_mask_pt_get)(Eina_Bool src_alpha, 
Eina_Bool dst_alpha);
 };
 
 #define EVAS_RECT_SPLIT 1

-- 


Reply via email to