Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/lib/engines/common


Modified Files:
        evas_blend_pixel_pixel.c evas_image_main.c 
        evas_scale_smooth_scaler.c evas_scale_smooth_scaler_noscale.c 


Log Message:


span lists were a failure. sloweer than the current brute force method - and
slower to boot.

ooh.. found i was fuckign up the memcpy's. fixed :) and much faster too :)

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_blend_pixel_pixel.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- evas_blend_pixel_pixel.c    26 May 2004 02:45:40 -0000      1.11
+++ evas_blend_pixel_pixel.c    27 Jan 2005 10:05:41 -0000      1.12
@@ -204,13 +204,13 @@
    src_ptr = src;
    dst_ptr = dst;
    dst_end_ptr = dst + len;
-   dst_end_ptr_pre = dst + ((len / 10) * 10);
+   dst_end_ptr_pre = dst + ((len / 16) * 16);
    
    while (dst_ptr < dst_end_ptr_pre)
      {
-       MOVE_10DWORDS_MMX(src_ptr, dst_ptr);
-       src_ptr+=10;
-       dst_ptr+=10;
+       MOVE_16DWORDS_MMX(src_ptr, dst_ptr);
+       src_ptr+=16;
+       dst_ptr+=16;
      }
    while (dst_ptr < dst_end_ptr)
      {
@@ -310,15 +310,14 @@
    src_ptr = src;
    dst_ptr = dst;
    dst_end_ptr = dst + len;
-   dst_end_ptr_pre = dst + ((len / 10) * 10);
+   dst_end_ptr_pre = dst + ((len / 16) * 16);
 
    while (dst_ptr < dst_end_ptr_pre)
      {
-       prefetch(&src_ptr[128]);
-       prefetch(&dst_ptr[128]);
-       MOVE_10DWORDS_MMX(src_ptr, dst_ptr);
-       src_ptr+=10;
-       dst_ptr+=10;
+       prefetch(&src_ptr[16]);
+       MOVE_16DWORDS_MMX(src_ptr, dst_ptr);
+       src_ptr+=16;
+       dst_ptr+=16;
      }
    while (dst_ptr < dst_end_ptr)
      {
@@ -373,21 +372,21 @@
 {
    DATA32 *src_ptr, *dst_ptr, *dst_end_ptr, *dst_end_ptr_pre;
    
-   src_ptr = src + len - 10;
-   dst_ptr = dst + len - 10;
+   src_ptr = src + len - 16;
+   dst_ptr = dst + len - 16;
    dst_end_ptr = dst;
-   dst_end_ptr_pre = dst + len - ((len / 10) * 10);
+   dst_end_ptr_pre = dst + len - ((len / 16) * 16);
    
-   if (len >= 10)
+   if (len >= 16)
      {
        while (dst_ptr >= dst_end_ptr_pre)
          {
-            MOVE_10DWORDS_MMX(src_ptr, dst_ptr);
-            src_ptr-=10;
-            dst_ptr-=10;
+            MOVE_16DWORDS_MMX(src_ptr, dst_ptr);
+            src_ptr-=16;
+            dst_ptr-=16;
          }
-       src_ptr+=9;
-       dst_ptr+=9;
+       src_ptr+=15;
+       dst_ptr+=15;
        while (dst_ptr >= dst_end_ptr)
          {
             *dst_ptr = *src_ptr;
@@ -415,23 +414,22 @@
 {
    DATA32 *src_ptr, *dst_ptr, *dst_end_ptr, *dst_end_ptr_pre;
    
-   src_ptr = src + len - 10;
-   dst_ptr = dst + len - 10;
+   src_ptr = src + len - 16;
+   dst_ptr = dst + len - 16;
    dst_end_ptr = dst;
-   dst_end_ptr_pre = dst + len - ((len / 10) * 10);
+   dst_end_ptr_pre = dst + len - ((len / 16) * 16);
 
-   if (len >= 10)
+   if (len >= 16)
      {
        while (dst_ptr >= dst_end_ptr_pre)
          {
-            prefetch(&src_ptr[-128]);
-            prefetch(&dst_ptr[-128]);
+            prefetch(&src_ptr[-16]);
             MOVE_10DWORDS_MMX(src_ptr, dst_ptr);
-            src_ptr-=10;
-            dst_ptr-=10;
+            src_ptr-=16;
+            dst_ptr-=16;
          }
-       src_ptr+=9;
-       dst_ptr+=9;
+       src_ptr+=15;
+       dst_ptr+=15;
        while (dst_ptr >= dst_end_ptr)
          {
             *dst_ptr = *src_ptr;
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_image_main.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- evas_image_main.c   26 Jan 2005 16:42:28 -0000      1.15
+++ evas_image_main.c   27 Jan 2005 10:05:41 -0000      1.16
@@ -76,22 +76,13 @@
 #endif
 }
 
-/* alpha tiles! - asctually span lists - need to do it as span lists */
+#if 0
 void
 evas_common_image_surface_alpha_tiles_calc(RGBA_Surface *is, int tsize)
 {
    int x, y;
    DATA32 *ptr;
 
-#if 1  
-   return;
-#endif   
-   /* hmm i only get about a 15% speedup on my "best cases". the complexity
-    * imho isn't worth the small gain, so i have disabled it here :( (this
-    * is best case scenario - average case will be much less gain)
-    * 
-    * thought for now the only case is 
-    */
    if (is->spans) return;
    if (!(is->im->flags & RGBA_IMAGE_HAS_ALPHA)) return;
    /* FIXME: dont handle alpha only images yet */
@@ -149,26 +140,7 @@
          }
      }
 }
-
-void
-evas_common_image_surface_alpha_tiles_free(RGBA_Surface *is)
-{
-   int i;
-   
-   if (!is->spans) return;
-   for (i = 0; i < is->h; i++)
-     {
-       while (is->spans[i])
-         {
-            RGBA_Image_Span *sp;
-            
-            sp = is->spans[i];
-            is->spans[i] = evas_object_list_remove(sp, sp);
-            free(sp);
-         }
-     }
-   free(is->spans);
-}
+#endif   
 
 RGBA_Surface *
 evas_common_image_surface_new(RGBA_Image *im)
@@ -219,7 +191,6 @@
        free(is->data);
        is->data = NULL;
      }
-   evas_common_image_surface_alpha_tiles_free(is);
 }
 
 RGBA_Image *
@@ -524,7 +495,6 @@
 {
    int i;
    
-   if (im->image) evas_common_image_surface_alpha_tiles_free(im->image);
    evas_common_image_unstore(im);
    im->flags |= RGBA_IMAGE_IS_DIRTY;
 }
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_scale_smooth_scaler.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- evas_scale_smooth_scaler.c  26 Jan 2005 16:42:30 -0000      1.8
+++ evas_scale_smooth_scaler.c  27 Jan 2005 10:05:41 -0000      1.9
@@ -209,8 +209,6 @@
  * -:- 
  *
  */
-   /* 8x8 tiles - this will incurr about a < 2% memory overhead */
-   evas_common_image_surface_alpha_tiles_calc(src->image, 8);
    
    /* if 1:1 scale */
    if ((dst_region_w == src_region_w) && 
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_scale_smooth_scaler_noscale.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- evas_scale_smooth_scaler_noscale.c  26 Jan 2005 16:42:30 -0000      1.2
+++ evas_scale_smooth_scaler_noscale.c  27 Jan 2005 10:05:41 -0000      1.3
@@ -32,63 +32,11 @@
        Gfx_Func_Blend_Src_Dst func;
        
        func = evas_common_draw_func_blend_get(src, dst, dst_clip_w);
-#if 0
-       /* part of the spans experiemnt. doesnt seem to help much on top of
-        * what we already have
-        */
-       if (src->image->spans)
+       for (y = 0; y < dst_clip_h; y++)
          {
-            int x2, y2;
-            int xoff, woff;
-            RGBA_Image_Flags pflags;
-            Gfx_Func_Blend_Src_Dst func_solid;
-            
-            pflags = src->flags;
-            src->flags &= ~RGBA_IMAGE_HAS_ALPHA;
-            func_solid = evas_common_draw_func_blend_get(src, dst, dst_clip_w);
-            src->flags = pflags;
-            
-            x2 = (dst_clip_x - dst_region_x) + src_region_x;
-            y2 = (dst_clip_y - dst_region_y) + src_region_y;
-            for (y = 0; y < dst_clip_h; y++, y2++)
-              {
-                 Evas_Object_List *l;
-                 
-                 for (l = src->image->spans[y2]; l; l = l->next)
-                   {
-                      RGBA_Image_Span *sp;
-                      
-                      sp = l;
-                      if ((sp->x + sp->w) > x2)
-                        {
-                           xoff = sp->x - x2;
-                           woff = sp->w;
-                           if (xoff < 0)
-                             {
-                                woff += xoff;
-                                xoff = 0;
-                             }
-                           if ((xoff + woff) > (dst_clip_w))
-                             woff += (dst_clip_w) - (xoff + woff);
-                           if (sp->v == 2)
-                             func_solid(ptr + xoff, dst_ptr + xoff, woff);
-                           else
-                             func(ptr + xoff, dst_ptr + xoff, woff);
-                        }
-                   }
-                 ptr += src_w;
-                 dst_ptr += dst_w;
-              }
-         }
-       else
-#endif   
-         {
-            for (y = 0; y < dst_clip_h; y++)
-              {
-                 func(ptr, dst_ptr, dst_clip_w);
-                 ptr += src_w;
-                 dst_ptr += dst_w;
-              }
+            func(ptr, dst_ptr, dst_clip_w);
+            ptr += src_w;
+            dst_ptr += dst_w;
          }
      }
 }




-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to