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
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.