src = src_clone;
if (mask_attr.n_params) free (mask_attr.params);  _cairo_glitz_pattern_release_surface (dst, mask, &mask_attr);
_cairo_glitz_surface_composite (cairo_operator_t op,				cairo_surface_t *generic_src,				cairo_surface_t *generic_mask,				void *abstract_dst,				int src_x,				int src_y,				int mask_x,				int mask_y,				int dst_x,				int dst_y,				unsigned int width,				unsigned int height){    cairo_glitz_surface_t *dst = abstract_dst;    cairo_glitz_surface_t *src = (cairo_glitz_surface_t *) generic_src;    cairo_glitz_surface_t *mask = (cairo_glitz_surface_t *) generic_mask;    cairo_glitz_surface_t *src_clone = NULL;    cairo_glitz_surface_t *mask_clone = NULL;    cairo_int_status_t status;    if (op == CAIRO_OPERATOR_SATURATE)	return CAIRO_INT_STATUS_UNSUPPORTED;    if (generic_src->backend != dst->base.backend) {	src_clone = _cairo_glitz_surface_clone_similar (dst, generic_src,							CAIRO_FORMAT_ARGB32);	if (!src_clone)	    return CAIRO_INT_STATUS_UNSUPPORTED;		src = src_clone;    }        if (generic_mask && (generic_mask->backend != dst->base.backend)) {	mask_clone = _cairo_glitz_surface_clone_similar (dst, generic_mask,							 CAIRO_FORMAT_A8);	if (!mask_clone)	    return CAIRO_INT_STATUS_UNSUPPORTED;		mask = mask_clone;    }    status = _glitz_composite (_glitz_operator (op),			       src->surface,			       (mask)? mask->surface: NULL,			       dst->surface,			       src_x, src_y,			       mask_x, mask_y,			       dst_x, dst_y,			       width, height,			       NULL, NULL);    if (src_clone)	cairo_surface_destroy (&src_clone->base);        if (mask_clone)	cairo_surface_destroy (&mask_clone->base);    return status;}