[Pixman] [PATCH 01/11] Add ITER_SRC and ITER_DEST iter flags

Søren Sandmann Pedersen soren.sandmann at gmail.com
Wed May 22 06:45:10 PDT 2013


These indicate whether the iterator is for a source or a destination
image. Note iterator initializers are allowed to rely on one of these
being set, so they can't be left out the way it's generally harmless
(aside from potentil performance degradation) to leave out a
particular fast path flag.
---
 pixman/pixman-general.c | 14 +++++++++-----
 pixman/pixman-image.c   |  2 +-
 pixman/pixman-private.h |  8 +++++++-
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
index 93a1b9a..a4935c7 100644
--- a/pixman/pixman-general.c
+++ b/pixman/pixman-general.c
@@ -154,7 +154,7 @@ general_composite_rect  (pixman_implementation_t *imp,
     }
     
     /* src iter */
-    src_iter_flags = narrow | op_flags[op].src;
+    src_iter_flags = narrow | op_flags[op].src | ITER_SRC;
 
     _pixman_implementation_src_iter_init (imp->toplevel, &src_iter, src_image,
 					  src_x, src_y, width, height,
@@ -177,13 +177,17 @@ general_composite_rect  (pixman_implementation_t *imp,
         PIXMAN_FORMAT_RGB (mask_image->bits.format);
 
     _pixman_implementation_src_iter_init (
-	imp->toplevel, &mask_iter, mask_image, mask_x, mask_y, width, height,
-	mask_buffer, narrow | (component_alpha? 0 : ITER_IGNORE_RGB), info->mask_flags);
+	imp->toplevel, &mask_iter,
+	mask_image, mask_x, mask_y, width, height, mask_buffer,
+	ITER_SRC | narrow | (component_alpha? 0 : ITER_IGNORE_RGB),
+	info->mask_flags);
 
     /* dest iter */
     _pixman_implementation_dest_iter_init (
-	imp->toplevel, &dest_iter, dest_image, dest_x, dest_y, width, height,
-	dest_buffer, narrow | op_flags[op].dst, info->dest_flags);
+	imp->toplevel, &dest_iter,
+	dest_image, dest_x, dest_y, width, height, dest_buffer,
+	ITER_DEST | narrow | op_flags[op].dst,
+	info->dest_flags);
 
     compose = _pixman_implementation_lookup_combiner (
 	imp->toplevel, op, component_alpha, narrow);
diff --git a/pixman/pixman-image.c b/pixman/pixman-image.c
index 65041b4..ebf55cd 100644
--- a/pixman/pixman-image.c
+++ b/pixman/pixman-image.c
@@ -921,7 +921,7 @@ _pixman_image_get_solid (pixman_implementation_t *imp,
 	_pixman_implementation_src_iter_init (
 	    imp, &iter, image, 0, 0, 1, 1,
 	    (uint8_t *)&result,
-	    ITER_NARROW, image->common.flags);
+	    ITER_NARROW | ITER_SRC, image->common.flags);
 	
 	result = *iter.get_scanline (&iter, NULL);
     }
diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
index 6d9c053..9b6353e 100644
--- a/pixman/pixman-private.h
+++ b/pixman/pixman-private.h
@@ -231,7 +231,13 @@ typedef enum
      */
     ITER_LOCALIZED_ALPHA =	(1 << 1),
     ITER_IGNORE_ALPHA =		(1 << 2),
-    ITER_IGNORE_RGB =		(1 << 3)
+    ITER_IGNORE_RGB =		(1 << 3),
+
+    /* These indicate whether the iterator is for a source
+     * or a destination image
+     */
+    ITER_SRC =			(1 << 4),
+    ITER_DEST =			(1 << 5)
 } iter_flags_t;
 
 struct pixman_iter_t
-- 
1.7.11.7



More information about the Pixman mailing list