[PATCH 33/36] drm: replace use of _cairo_clip_to_boxes()

"Enrico Weigelt, metux IT consult" <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
_cairo_clip_to_boxes() doesnt exist anymore, but we also dont need to copy box lists at all.

Signed-off-by: Enrico Weigelt, metux IT consult <[email protected]>
---
 src/drm/cairo-drm-i915-surface.c | 37 +++++++--------------------------
 src/drm/cairo-drm-i965-glyphs.c  | 10 ++++-----
 src/drm/cairo-drm-i965-surface.c | 45 ++++++----------------------------------
 3 files changed, 18 insertions(+), 74 deletions(-)

diff --git a/src/drm/cairo-drm-i915-surface.c b/src/drm/cairo-drm-i915-surface.c
index 9d07bcb..3f62e9e 100644
--- a/src/drm/cairo-drm-i915-surface.c
+++ b/src/drm/cairo-drm-i915-surface.c
@@ -102,6 +102,7 @@
 
 #include "cairo-boxes-private.h"
 #include "cairo-cache-private.h"
+#include "cairo-clip-inline.h"
 #include "cairo-composite-rectangles-private.h"
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
@@ -1877,9 +1878,7 @@ i915_surface_fill_with_alpha (void			*abstract_dst,
     i915_surface_t *dst = abstract_dst;
     cairo_composite_rectangles_t extents;
     composite_polygon_info_t info;
-    cairo_box_t boxes_stack[32], *clip_boxes = boxes_stack;
     cairo_clip_t *local_clip = NULL;
-    int num_boxes = ARRAY_LENGTH (boxes_stack);
     cairo_int_status_t status;
 
     status = _cairo_composite_rectangles_init_for_fill (&extents,
@@ -1908,7 +1907,6 @@ i915_surface_fill_with_alpha (void			*abstract_dst,
     if (clip != NULL)
 	clip = local_clip = _cairo_clip_copy (clip);
 
-    status = _cairo_clip_to_boxes (&clip, &extents, &clip_boxes, &num_boxes);
     if (unlikely (status)) {
 	_cairo_clip_destroy (local_clip);
 
@@ -1921,7 +1919,7 @@ i915_surface_fill_with_alpha (void			*abstract_dst,
 	cairo_boxes_t boxes;
 
 	_cairo_boxes_init (&boxes);
-	_cairo_boxes_limit (&boxes, clip_boxes, num_boxes);
+	_cairo_boxes_limit (&boxes, extents.clip->boxes, extents.clip->num_boxes);
 	cairo_status_t stat = _cairo_path_fixed_fill_rectilinear_to_boxes (path,
 							      fill_rule,
 							      CAIRO_ANTIALIAS_DEFAULT,
@@ -1939,7 +1937,7 @@ i915_surface_fill_with_alpha (void			*abstract_dst,
 	    goto CLEANUP_BOXES;
     }
 
-    _cairo_polygon_init (&info.polygon, clip_boxes, num_boxes);
+    _cairo_polygon_init (&info.polygon, extents.clip->boxes, extents.clip->num_boxes);
 
     status = _cairo_path_fixed_fill_to_polygon (path, tolerance, &info.polygon);
     if (unlikely (status))
@@ -1970,9 +1968,6 @@ CLEANUP_POLYGON:
     _cairo_polygon_fini (&info.polygon);
 
 CLEANUP_BOXES:
-    if (clip_boxes != boxes_stack)
-	free (clip_boxes);
-
     _cairo_clip_destroy (local_clip);
 
     return status;
@@ -1989,9 +1984,6 @@ i915_surface_paint_with_alpha (void			*abstract_dst,
     cairo_composite_rectangles_t extents;
     cairo_clip_t *local_clip = NULL;
     cairo_clip_path_t *clip_path;
-    cairo_boxes_t boxes;
-    int num_boxes = ARRAY_LENGTH (boxes.boxes_embedded);
-    cairo_box_t *clip_boxes = boxes.boxes_embedded;
     cairo_status_t status;
 
     status = _cairo_composite_rectangles_init_for_paint (&extents,
@@ -2008,13 +2000,6 @@ i915_surface_paint_with_alpha (void			*abstract_dst,
     if (clip != NULL)
 	clip = local_clip = _cairo_clip_copy (clip);
 
-    status = _cairo_clip_to_boxes (&clip, &extents, &clip_boxes, &num_boxes);
-    if (unlikely (status)) {
-	_cairo_clip_destroy (local_clip);
-
-	return status;
-    }
-
     /* If the clip cannot be reduced to a set of boxes, we will need to
      * use a clipmask. Paint is special as it is the only operation that
      * does not implicitly use a mask, so we may be able to reduce this
@@ -2033,13 +2018,12 @@ i915_surface_paint_with_alpha (void			*abstract_dst,
     }
     else
     {
-	_cairo_boxes_init_for_array (&boxes, clip_boxes, num_boxes);
+	cairo_boxes_t boxes;
+	_cairo_boxes_init_for_array (&boxes, extents.clip->boxes, extents.clip->num_boxes);
 	status = _clip_and_composite_boxes (dst, op, source,
 					    &boxes, CAIRO_ANTIALIAS_DEFAULT,
 					    &extents, clip, opacity);
     }
-    if (clip_boxes != boxes.boxes_embedded)
-	free (clip_boxes);
 
     _cairo_clip_destroy (local_clip);
 
@@ -2213,8 +2197,6 @@ i915_surface_stroke (void			*abstract_dst,
     i915_surface_t *dst = abstract_dst;
     cairo_composite_rectangles_t extents;
     composite_polygon_info_t info;
-    cairo_box_t boxes_stack[32], *clip_boxes = boxes_stack;
-    int num_boxes = ARRAY_LENGTH (boxes_stack);
     cairo_clip_t *local_clip = NULL;
     cairo_int_status_t status;
 
@@ -2235,7 +2217,6 @@ i915_surface_stroke (void			*abstract_dst,
     if (clip != NULL)
 	clip = local_clip = _cairo_clip_copy (clip);
 
-    status = _cairo_clip_to_boxes (&clip, &extents, &clip_boxes, &num_boxes);
     if (unlikely (status)) {
 	_cairo_clip_destroy (local_clip);
 
@@ -2246,12 +2227,13 @@ i915_surface_stroke (void			*abstract_dst,
 	cairo_boxes_t boxes;
 
 	_cairo_boxes_init (&boxes);
-	_cairo_boxes_limit (&boxes, clip_boxes, num_boxes);
+	_cairo_boxes_limit (&boxes, extents.clip->boxes, extents.clip->num_boxes);
 	cairo_status_t stat = _cairo_path_fixed_stroke_rectilinear_to_boxes (path,
 								stroke_style,
 								ctm,
 								CAIRO_ANTIALIAS_DEFAULT,
 								&boxes);
+
 	if (likely (stat == CAIRO_STATUS_SUCCESS)) {
 	    status = _clip_and_composite_boxes (dst, op, source,
 						&boxes, antialias,
@@ -2264,7 +2246,7 @@ i915_surface_stroke (void			*abstract_dst,
 	    goto CLEANUP_BOXES;
     }
 
-    _cairo_polygon_init (&info.polygon, clip_boxes, num_boxes);
+    _cairo_polygon_init (&info.polygon, extents.clip->boxes, extents.clip->num_boxes);
 
     status = _cairo_path_fixed_stroke_to_polygon (path,
 						  stroke_style,
@@ -2299,9 +2281,6 @@ CLEANUP_POLYGON:
     _cairo_polygon_fini (&info.polygon);
 
 CLEANUP_BOXES:
-    if (clip_boxes != boxes_stack)
-	free (clip_boxes);
-
     _cairo_clip_destroy (local_clip);
 
     return status;
diff --git a/src/drm/cairo-drm-i965-glyphs.c b/src/drm/cairo-drm-i965-glyphs.c
index fd54cd4..5b4e1fa 100644
--- a/src/drm/cairo-drm-i965-glyphs.c
+++ b/src/drm/cairo-drm-i965-glyphs.c
@@ -165,13 +165,12 @@ i965_surface_mask_internal (i965_surface_t *dst,
     shader.mask.base.stride = mask->intel.drm.stride;
 
     if (clip != NULL) {
-	status = _cairo_clip_get_region (clip, &clip_region);
-	assert (status == CAIRO_STATUS_SUCCESS || status == CAIRO_INT_STATUS_UNSUPPORTED);
+	clip_region = _cairo_clip_get_region (clip);
 
 	if (clip_region != NULL && cairo_region_num_rectangles (clip_region) == 1)
 	    clip_region = NULL;
 
-	if (status == CAIRO_INT_STATUS_UNSUPPORTED)
+	if (clip_region == NULL)
 	    i965_shader_set_clip (&shader, clip);
     }
 
@@ -318,10 +317,9 @@ i965_surface_glyphs (void			*abstract_surface,
 	    return status;
 
 	if (clip != NULL) {
-	    status = _cairo_clip_get_region (clip, &clip_region);
-	    assert (status == CAIRO_STATUS_SUCCESS || status == CAIRO_INT_STATUS_UNSUPPORTED);
+	    clip_region = _cairo_clip_get_region (clip);
 
-	    if (status == CAIRO_INT_STATUS_UNSUPPORTED)
+	    if (clip_region == NULL)
 		i965_shader_set_clip (&glyphs.shader, clip);
 	}
     }
diff --git a/src/drm/cairo-drm-i965-surface.c b/src/drm/cairo-drm-i965-surface.c
index 7a01b9d..9d465a1 100644
--- a/src/drm/cairo-drm-i965-surface.c
+++ b/src/drm/cairo-drm-i965-surface.c
@@ -989,7 +989,6 @@ _composite_boxes (i965_surface_t *dst,
 		  const cairo_clip_t *clip,
 		  const cairo_composite_rectangles_t *extents)
 {
-    cairo_region_t *clip_region = NULL;
     const struct _cairo_boxes_chunk *chunk;
     cairo_int_status_t status;
     i965_shader_t shader;
@@ -1012,7 +1011,7 @@ _composite_boxes (i965_surface_t *dst,
 	return status;
 
     if (clip != NULL) {
-	clip_region = _cairo_clip_get_region (clip);
+	cairo_region_t *clip_region = _cairo_clip_get_region (clip);
 	if (clip_region == NULL)
 	    i965_shader_set_clip (&shader, clip);
     }
@@ -1090,9 +1089,7 @@ i965_surface_paint (void			*abstract_dst,
     i965_surface_t *dst = cairo_abstract_surface_cast_i965(abstract_dst);
     cairo_composite_rectangles_t extents;
     cairo_boxes_t boxes;
-    cairo_box_t *clip_boxes = boxes.boxes_embedded;
     cairo_clip_t *local_clip = NULL;
-    int num_boxes = ARRAY_LENGTH (boxes.boxes_embedded);
     cairo_status_t status;
 
     /* XXX unsupported operators? use pixel shader blending, eventually */
@@ -1110,18 +1107,10 @@ i965_surface_paint (void			*abstract_dst,
     if (clip != NULL)
 	clip = local_clip = _cairo_clip_copy (clip);
 
-    status = _cairo_clip_to_boxes (&clip, &extents, &clip_boxes, &num_boxes);
-    if (unlikely (status)) {
-	_cairo_clip_destroy (local_clip);
-	return status;
-    }
-
-    _cairo_boxes_init_for_array (&boxes, clip_boxes, num_boxes);
+    _cairo_boxes_init_for_array (&boxes, extents.clip->boxes, extents.clip->num_boxes);
     status = _clip_and_composite_boxes (dst, op, source,
 					&boxes, CAIRO_ANTIALIAS_DEFAULT,
 					&extents, clip);
-    if (clip_boxes != boxes.boxes_embedded)
-	free (clip_boxes);
 
     _cairo_clip_destroy (local_clip);
 
@@ -1266,8 +1255,6 @@ i965_surface_stroke (void			*abstract_dst,
     i965_surface_t *dst = abstract_dst;
     cairo_composite_rectangles_t extents;
     composite_polygon_info_t info;
-    cairo_box_t boxes_stack[32], *clip_boxes = boxes_stack;
-    int num_boxes = ARRAY_LENGTH (boxes_stack);
     cairo_clip_t *local_clip = NULL;
     cairo_int_status_t status;
 
@@ -1285,17 +1272,11 @@ i965_surface_stroke (void			*abstract_dst,
     if (clip != NULL)
 	clip = local_clip = _cairo_clip_copy (clip);
 
-    status = _cairo_clip_to_boxes (&clip, &extents, &clip_boxes, &num_boxes);
-    if (unlikely (status)) {
-	_cairo_clip_destroy (local_clip);
-	return status;
-    }
-
     if (_cairo_path_fixed_stroke_is_rectilinear (path)) {
 	cairo_boxes_t boxes;
 
 	_cairo_boxes_init (&boxes);
-	_cairo_boxes_limit (&boxes, clip_boxes, num_boxes);
+	_cairo_boxes_limit (&boxes, extents.clip->boxes, extents.clip->num_boxes);
 	status = _cairo_path_fixed_stroke_rectilinear_to_boxes (path,
 								stroke_style,
 								ctm,
@@ -1313,7 +1294,7 @@ i965_surface_stroke (void			*abstract_dst,
 	    goto CLEANUP_BOXES;
     }
 
-    _cairo_polygon_init (&info.polygon, clip_boxes, num_boxes);
+    _cairo_polygon_init (&info.polygon, extents.clip->boxes, extents.clip->num_boxes);
 
     status = _cairo_path_fixed_stroke_to_polygon (path,
 						  stroke_style,
@@ -1346,9 +1327,6 @@ CLEANUP_POLYGON:
     _cairo_polygon_fini (&info.polygon);
 
 CLEANUP_BOXES:
-    if (clip_boxes != boxes_stack)
-	free (clip_boxes);
-
     _cairo_clip_destroy (local_clip);
 
     return status;
@@ -1367,9 +1345,7 @@ i965_surface_fill (void			*abstract_dst,
     i965_surface_t *dst = cairo_abstract_surface_cast_i965(abstract_dst);
     cairo_composite_rectangles_t extents;
     composite_polygon_info_t info;
-    cairo_box_t boxes_stack[32], *clip_boxes = boxes_stack;
     cairo_clip_t *local_clip = NULL;
-    int num_boxes = ARRAY_LENGTH (boxes_stack);
     cairo_int_status_t status;
 
     status = _cairo_composite_rectangles_init_for_fill (&extents,
@@ -1387,19 +1363,13 @@ i965_surface_fill (void			*abstract_dst,
     if (clip != NULL)
 	clip = local_clip = _cairo_clip_copy (clip);
 
-    status = _cairo_clip_to_boxes (&clip, &extents, &clip_boxes, &num_boxes);
-    if (unlikely (status)) {
-	_cairo_clip_destroy (local_clip);
-	return status;
-    }
-
     assert (! _cairo_path_fixed_fill_is_empty (path));
 
     if (_cairo_path_fixed_fill_is_rectilinear (path)) {
 	cairo_boxes_t boxes;
 
 	_cairo_boxes_init (&boxes);
-	_cairo_boxes_limit (&boxes, clip_boxes, num_boxes);
+	_cairo_boxes_limit (&boxes, extents.clip->boxes, extents.clip->num_boxes);
 	status = _cairo_path_fixed_fill_rectilinear_to_boxes (path,
 							      fill_rule,
 							      antialias,
@@ -1416,7 +1386,7 @@ i965_surface_fill (void			*abstract_dst,
 	    goto CLEANUP_BOXES;
     }
 
-    _cairo_polygon_init (&info.polygon, clip_boxes, num_boxes);
+    _cairo_polygon_init (&info.polygon, extents.clip->boxes, extents.clip->num_boxes);
 
     status = _cairo_path_fixed_fill_to_polygon (path, tolerance, &info.polygon);
     if (unlikely (status))
@@ -1445,9 +1415,6 @@ CLEANUP_POLYGON:
     _cairo_polygon_fini (&info.polygon);
 
 CLEANUP_BOXES:
-    if (clip_boxes != boxes_stack)
-	free (clip_boxes);
-
     _cairo_clip_destroy (local_clip);
 
     return status;
-- 
2.6.4.442.g545299f

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.