Re: [PATCH] cairo-gl: Make VBO size run-time settable

Chris Wilson <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
On Wed, Sep 04, 2013 at 01:36:04AM +0000, Bryce W. Harrington wrote:
> On Fri, Aug 30, 2013 at 10:11:12AM +0100, Chris Wilson wrote:
> > On Thu, Aug 29, 2013 at 06:56:21PM -0400, Behdad Esfahbod wrote:
> > > On 13-08-29 01:55 PM, Bryce W. Harrington wrote:
> > > > Chris, btw, sort of an aside question...
> > > > 
> > > > As I've been running various performance tests for each of the GL
> > > > compositors, I am noticing that spans and traps basically have identical
> > > > performance (any differences are in the noise).  I'm aware of the
> > > > implementational differences between the two, and I've expected to see
> > > > spans perform better than traps on at least a few of these tests, but
> > > > nothing so far.  I'm guessing the tests simply aren't exercising spans'
> > > > talents, or I'm not running the right tests.
> > 
> > This is what I measured on one of my systems:
> > 
> > old: gl-traps
> > new: gl-spans
> > Speedups
> > ========
> >    gl           firefox-fishtank: 55.16x speedup
> >    gl             grads-heat-map: 16.03x speedup
> >    gl             firefox-canvas: 12.33x speedup
> >    gl         swfdec-giant-steps: 11.99x speedup
> >    gl       firefox-canvas-alpha: 11.55x speedup
> >    gl         firefox-chalkboard:  8.96x speedup
> >    gl          firefox-paintball:  7.02x speedup
> >    gl               firefox-tron:  6.93x speedup
> >    gl       gnome-system-monitor:  6.10x speedup
> >    gl          firefox-particles:  5.63x speedup
> >    gl           firefox-fishbowl:  5.43x speedup
> >    gl          firefox-talos-svg:  5.41x speedup
> > etc.
> 
> Thanks; I don't get anywhere near these differences, so assume that
> means I'm not running the tests properly.  I'll poke around and
> hopefully figure it out.
> 
> One question though, if spans is so much better than traps, why do we
> still have traps as an option?  Are there cases where spans may
> underperform, or situations it can't handle and we must fall back to
> traps?

Traps isn't really an option for cairo-gl, I had to add a couple of
missing routines for it to even run standalone. Traps should only be used
by cairo-gl for the composite_glyphs routine. (We could move that out
into its own compositor to avoid the confusion).

I guess what you are seeing instead is the mask compositor which renders
the mask using spans on the CPU rather than emitting the spans as
geometry.
 
> > > Speaking of which, Chris, can you explain to those of us not following cairo
> > > closely these days how all the various new compositors work?
> > 
> > The difference between the compositors of cairo-1.12 and the single
> > trapezoid compositor of cairo-1.0 is that are more of them! The surface
> > backends have to plug directly into the high level surface API (the old
> > low level compositor API is removed) and explicitly decide how they want
> > to render each individual operation. We have a few common strategies,
> > the trapezoid compositor (based on the original Xrender approach), the
> > spans scanline compositor (efficient for image based software
> > rendering), and a "mask" compositor (where the backend can render the
> > various channels separator and the horrible logic of combining mask with
> > the clip with the source onto the destination is handled by the
> > compositor).
> > 
> > For example, with cairo-gl it will first use its msaa compositor,
> > falling back to the spans compositors, and then to a mask compositor
> > (with a stage for glyphs to use the code from the traps compositor),
> > with a final fallback to the CPU.
> 
> 'traps' being the final fallback here?

No, the final fallback is to create a temporary image, read back the
destination into that image, render the operation using the image backend, 
and then copy it back. Typically if we hit a CPU fallback, we switch to
using the CPU for all future operations until the surface is flushed, as
the read-modify-write for every operation is usually an order of
magnitude slower than the actual operation itself.
-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.