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