summaryrefslogtreecommitdiff
path: root/src/cairo-spans-private.h
Commit message (Collapse)AuthorAgeFilesLines
* core: reintroduce bot-scan-converter functionsEnrico Weigelt, metux IT consult2016-01-131-0/+4
| | | | | | | | | | | | These functions have been accidentially removed by commit: 494cfd7eb9d994a5e2024e299986e66a3ef9a562. They're still needed by the DRM backend. (will be used by subsequent patches) Signed-off-by: Enrico Weigelt, metux IT consult <enrico.weigelt@gr13.net> Reviewed-by: Bryce Harrington <bryce@osg.samsung.com> Cc: Uli Schlachter <psychon@znc.in>
* src : Fix warn_unused_result warnings from gccRavi Nanjundappa2014-06-051-1/+1
| | | | | | | | | | | | Fix 'unused-result' warning messages by - replacing cairo_private to cairo_private_no_warn in the declaration of the cairo private apis '_cairo_surface_unmap_image', '_cairo_polygon_add_line', '_cairo_polygon_add_external_edge' and '_cairo_polygon_add_contour' - removing cairo_warn for 'render_rows' member function pointer in 'struct _cairo_span_renderer' Signed-off-by: Ravi Nanjundappa <nravi.n@samsung.com>
* Introduce a new compositor architectureChris Wilson2011-09-121-19/+36
| | | | | | | | | | | | | | | | | | Having spent the last dev cycle looking at how we could specialize the compositors for various backends, we once again look for the commonalities in order to reduce the duplication. In part this is motivated by the idea that spans is a good interface for both the existent GL backend and pixman, and so they deserve a dedicated compositor. xcb/xlib target an identical rendering system and so they should be using the same compositor, and it should be possible to run that same compositor locally against pixman to generate reference tests. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> P.S. This brings massive upheaval (read breakage) I've tried delaying in order to fix as many things as possible but now this one patch does far, far, far too much. Apologies in advance for breaking your favourite backend, but trust me in that the end result will be much better. :)
* Remove _cairo_surface_composite_trapezoids_as_polygon()Benjamin Otte2010-06-071-12/+0
| | | | | | The function computed the composite rectangles wrong and was only used in a gl fallback anyway. So instead of trying to fix it, just remove it and make sure gl doesn't fallback.
* spans: Add a rectangular scan converterChris Wilson2010-01-221-0/+25
| | | | | | | | | This is a highly specialised scan converter for the relatively common case of where the input geometry is known to be a series of rectangles. Generally not device aligned (or else we would most likely have chosen an even higher performance path that does not require a coverage mask), this optimised converter can simply compute the analytical coverage by utilising a special case Bentley-Ottmann intersection finder.
* spans: Add a Bentley-Ottmann variant on the Tor scan converterChris Wilson2010-01-221-0/+23
| | | | | | | | | | | | | | | | | | | | This variant uses the Bentley-Ottmann algorithm to only maintain the active edge list upon edge events and so can efficiently skip areas where no change occurs. This means that it can be much quicker than the Tor algorithm (which is still used to compute the coverages from the active edges) for geometries consisting of long straight lines with few intersections. However due to the computational overhead of the Bentley-Ottmann event processing, for dense curvy paths, simply updating the active edge list in sync with computing the coverages is a win. Due to advantageous adaptive step size, the scan converter can be run at a much higher subsampling with little extra overhead compared with Tor, currently it uses a 256x256 subsampling grid to avoid any impedance mismatch with path precision. Given the current status of implementations, this scan converter [botor] is likely to be advantage where detecting large regions of unchanged span data will result in improved performance, for instance the drm backends which convert the scan data into rectangles.
* spans: Pass multiple rows of identical spans to the renders.Chris Wilson2010-01-221-13/+11
| | | | | | | | It is quite common amongst our geometry to have rows of repeated span data, for example a rounded rectangle will have repeating data between the top and bottom rounded corners. By passing the repeat length to the renderers, they may be able to use that information more efficiently, and the scan converters can avoid recomputing the same span data.
* traps-as-spansChris Wilson2009-08-291-0/+19
| | | | | | | | Add an interface to spans that accepts trapezoids. This allows backends that have an efficient span-line interface but lack efficient handling of boxes (partly due to the current poor compositor interface) to redirect composite_trapezoids() to composite_polygon() and the span-renderer.
* Eliminate self-intersecting strokes.Chris Wilson2009-08-291-27/+18
| | | | | | | | | | | | | | | | | | | | We refactor the surface fallbacks to convert full strokes and fills to the intermediate polygon representation (as opposed to before where we returned the trapezoidal representation). This allow greater flexibility to choose how then to rasterize the polygon. Where possible we use the local spans rasteriser for its increased performance, but still have the option to use the tessellator instead (for example, with the current Render protocol which does not yet have a polygon image). In order to accommodate this, the spans interface is tweaked to accept whole polygons instead of a path and the tessellator is tweaked for speed. Performance Impact ================== ... Still measuring, expecting some severe regressions. ...
* Remove clip handling from generic surface layer.Chris Wilson2009-07-231-9/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Handling clip as part of the surface state, as opposed to being part of the operation state, is cumbersome and a hindrance to providing true proxy surface support. For example, the clip must be copied from the surface onto the fallback image, but this was forgotten causing undue hassle in each backend. Another example is the contortion the meta surface endures to ensure the clip is correctly recorded. By contrast passing the clip along with the operation is quite simple and enables us to write generic handlers for providing surface wrappers. (And in the future, we should be able to write more esoteric wrappers, e.g. automatic 2x FSAA, trivially.) In brief, instead of the surface automatically applying the clip before calling the backend, the backend can call into a generic helper to apply clipping. For raster surfaces, clip regions are handled automatically as part of the composite interface. For vector surfaces, a clip helper is introduced to replay and callback into an intersect_clip_path() function as necessary. Whilst this is not primarily a performance related change (the change should just move the computation of the clip from the moment it is applied by the user to the moment it is required by the backend), it is important to track any potential regression: ppc: Speedups ======== image-rgba evolution-20090607-0 1026085.22 0.18% -> 672972.07 0.77%: 1.52x speedup ▌ image-rgba evolution-20090618-0 680579.98 0.12% -> 573237.66 0.16%: 1.19x speedup ▎ image-rgba swfdec-fill-rate-4xaa-0 460296.92 0.36% -> 407464.63 0.42%: 1.13x speedup ▏ image-rgba swfdec-fill-rate-2xaa-0 128431.95 0.47% -> 115051.86 0.42%: 1.12x speedup ▏ Slowdowns ========= image-rgba firefox-periodic-table-0 56837.61 0.78% -> 66055.17 3.20%: 1.09x slowdown ▏
* [cairo-spans] New cairo_tor_scan_converter_t.M Joonas Pihlaja2008-12-061-0/+10
| | | | | | | | | | | | | | Imports a new polygon scan converter implementation from the repository at http://cgit.freedesktop.org/~joonas/glitter-paths/ Glitter paths is a stand alone polygon rasteriser derived from David Turner's reimplementation of Tor Anderssons's 15x17 supersampling rasteriser from the Apparition graphics library. The main new feature in this implementation is cheaply choosing per-scan line between doing fully analytical coverage computation for an entire row at a time vs. using a supersampling approach.
* [cairo-spans] New _cairo_path_fixed_fill_using_spans().M Joonas Pihlaja2008-12-061-0/+10
| | | | | Adds a helper function for backends to use for filling a path using spans.
* [cairo-spans] New abstract types for scan converting polygons.M Joonas Pihlaja2008-12-061-0/+124
A cairo_span_renderer_t implementation can be provided by a surface if it wants to render paths as horizontal spans of the alpha component of a mask. Its job is to composite a source pattern to the destination surface when given spans of alpha coverage for a row while taking care of backend specific clipping. A cairo_scan_converter_t takes edges of a flattened path and generates spans for a span renderer to render.