diff options
Diffstat (limited to 'src/drm/cairo-drm-gallium-surface.c')
-rw-r--r-- | src/drm/cairo-drm-gallium-surface.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/drm/cairo-drm-gallium-surface.c b/src/drm/cairo-drm-gallium-surface.c index 7597b9f3..393c80f5 100644 --- a/src/drm/cairo-drm-gallium-surface.c +++ b/src/drm/cairo-drm-gallium-surface.c @@ -925,22 +925,25 @@ gallium_surface_paint (void *abstract_surface, } static cairo_int_status_t -gallium_surface_mask (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_pattern_t *mask, - cairo_clip_t *clip) +gallium_surface_mask (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_pattern_t *mask, + cairo_clip_t *clip) { gallium_surface_t *surface = abstract_surface; + cairo_status_t status = CAIRO_INT_STATUS_UNSUPPORTED; - if (surface->fallback == NULL) { - /* XXX insert magic */ - surface->fallback = gallium_surface_map_to_image (surface); + if (mask->type == CAIRO_PATTERN_TYPE_SOLID) { + cairo_solid_pattern_t *solid_mask = (cairo_solid_pattern_t *) mask; + float alpha = surface->paint.solid_color[4]; + + surface->paint.solid_color[4] = solid_mask->color.alpha; + status = gallium_surface_paint(abstract_surface, op, source, clip); + surface->paint.solid_color[4] = alpha; } - return _cairo_surface_mask (surface->fallback, - op, source, mask, - clip); + return status; } static cairo_int_status_t |