Re: [PATCH] gl/msaa: Add a fast path for fills that are simple quads

Chris Wilson <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
On Tue, Jan 22, 2013 at 08:36:47PM -0800, Martin Robinson wrote:
> Sending this one to the list because it touches some code used
> outside the MSAA compositor.
> 
> From e3ec524717225437be3caf1ffa48bd620c30b65a Mon Sep 17 00:00:00 2001
> From: Martin Robinson <[email protected]>
> Date: Tue, 22 Jan 2013 20:09:01 -0800
> Subject: [PATCH] gl/msaa: Add a fast path for fills that are simple quads
> 
> Instead of invoking Bentley-Ottman for fills that are simple
> quadrilaterals, just pass the geometry straight to OpenGL.
> ---

> @@ -1265,22 +1258,107 @@ _cairo_path_fixed_is_box (const cairo_path_fixed_t *path,
>  	}
>      }
>  
> +    points[0] = buf->points[0];
> +    points[1] = buf->points[1];
> +    points[2] = buf->points[2];
> +    points[3] = buf->points[3];

These copies are not required.

> +    return TRUE;
> +}
> +
> +
> +/* Determine whether two lines A->B and C->D intersect based on the 
> + * algorithm described here: http://paulbourke.net/geometry/lineline2d/ */
> +static cairo_bool_t
> +_lines_intersect_or_are_coincident (cairo_point_t a,
> +				    cairo_point_t b,
> +				    cairo_point_t c,
> +				    cairo_point_t d)

Passing 4x2x4 bytes on the stack, otoh populating a cacheline... However
your inputs are already in a cacheline...

> +{
> +    cairo_fixed_t numerator_a, numerator_b, denominator;
> +
> +    denominator = _cairo_fixed_mul (d.y - c.y, b.x - a.x) -
> +		  _cairo_fixed_mul (d.x - c.x, b.y - a.y);
> +    numerator_a = _cairo_fixed_mul (d.x - c.x, a.y - c.y) -
> +		  _cairo_fixed_mul (d.y - c.y, a.x - c.x);
> +    numerator_b = _cairo_fixed_mul (b.x - a.x, a.y - c.y) -
> +		  _cairo_fixed_mul (b.y - a.y, a.x - c.x);

This and the following computations disregard the precision required.
Compare and contrast with _cairo_slope_compare(), for a simple example.
Even there we are effectively limiting the valid precision of our
inputs, just not as severely as the above.

I think you may want to do the simple box check first, then simple quad.
The former being cheaper and more prevalent.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
-- 
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.