Re: [patch] gl: fix bug when mask/source surface are not created within a same context as dst surface
Chris Wilson <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <1343232645_673@CP5-2952> |
On Wed, 25 Jul 2012 00:24:14 +0000, "Henry (Yu) Song - SISA" <[email protected]> wrote: > commit 3bf82304fda6a9e2a09753f2b3c5ac66baa02140 > Author: Henry Song <[email protected]> > Date: Tue Jul 24 17:13:46 2012 -0700 > > gl: when mask/source and dst are all GL surfaces, and they do not have a same > device (they are created from different context/display), we cannot use > mask/source texture directly. > > This fixes bug for gl-surface-source test case in GL backend. Ideally, > instead of falling back, we should download the texture from mask/source and > then upload it to a texture that is created in the same context as the dst. > However, this requires release the current dst's device and acquire it again > once we finish downloading. Given the device might be recursively locked and > a single release does not do the job, so let's fallback. > > diff --git a/src/cairo-mask-compositor.c b/src/cairo-mask-compositor.c > index 7976a79..acfb01a 100644 > --- a/src/cairo-mask-compositor.c > +++ b/src/cairo-mask-compositor.c > @@ -813,6 +813,11 @@ upload_boxes (const cairo_mask_compositor_t *compositor, > if (!(src->type == CAIRO_SURFACE_TYPE_IMAGE || src->type == dst->type)) > return CAIRO_INT_STATUS_UNSUPPORTED; > > + if (src->type == CAIRO_SURFACE_TYPE_GL && extents->surface->type == CAIRO_SURFACE_TYPE_GL) { > + if (src->device != extents->surface->device) > + return CAIRO_INT_STATUS_UNSUPPORTED; > + } So we should be doing the GL specific checks in the GL layer, so I pushed this patch down into cairo-gl-spans-compositor.c::copy_boxes) Thanks, -Chris -- Chris Wilson, Intel Open Source Technology Centre -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo