glamor_render: Don't fallback when rendering glyphs with OpOver.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
This commit is contained in:
parent
7acbe89561
commit
ea4c22716c
|
@ -996,7 +996,8 @@ Bool glamor_composite_choose_shader(CARD8 op,
|
||||||
&source_solid_color[2],
|
&source_solid_color[2],
|
||||||
&source_solid_color[3],
|
&source_solid_color[3],
|
||||||
PICT_a8r8g8b8);
|
PICT_a8r8g8b8);
|
||||||
}
|
} else
|
||||||
|
goto fail;
|
||||||
} else {
|
} else {
|
||||||
key.source = SHADER_SOURCE_TEXTURE_ALPHA;
|
key.source = SHADER_SOURCE_TEXTURE_ALPHA;
|
||||||
}
|
}
|
||||||
|
@ -1012,7 +1013,8 @@ Bool glamor_composite_choose_shader(CARD8 op,
|
||||||
&mask_solid_color[1],
|
&mask_solid_color[1],
|
||||||
&mask_solid_color[2],
|
&mask_solid_color[2],
|
||||||
&mask_solid_color[3], PICT_a8r8g8b8);
|
&mask_solid_color[3], PICT_a8r8g8b8);
|
||||||
}
|
} else
|
||||||
|
goto fail;
|
||||||
} else {
|
} else {
|
||||||
key.mask = SHADER_MASK_TEXTURE_ALPHA;
|
key.mask = SHADER_MASK_TEXTURE_ALPHA;
|
||||||
}
|
}
|
||||||
|
@ -1921,6 +1923,7 @@ glamor_composite_glyph_rects(CARD8 op,
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
glamor_composite_rect_t *r;
|
glamor_composite_rect_t *r;
|
||||||
|
Bool ok;
|
||||||
|
|
||||||
ValidatePicture(src);
|
ValidatePicture(src);
|
||||||
ValidatePicture(dst);
|
ValidatePicture(dst);
|
||||||
|
@ -1936,10 +1939,29 @@ glamor_composite_glyph_rects(CARD8 op,
|
||||||
mask_pixmap_priv = glamor_get_pixmap_private(glamor_get_drawable_pixmap(mask->pDrawable));
|
mask_pixmap_priv = glamor_get_pixmap_private(glamor_get_drawable_pixmap(mask->pDrawable));
|
||||||
if (src->pDrawable)
|
if (src->pDrawable)
|
||||||
src_pixmap_priv = glamor_get_pixmap_private(glamor_get_drawable_pixmap(src->pDrawable));
|
src_pixmap_priv = glamor_get_pixmap_private(glamor_get_drawable_pixmap(src->pDrawable));
|
||||||
|
|
||||||
|
if (mask && mask->componentAlpha) {
|
||||||
|
if (op == PictOpOver) {
|
||||||
|
ok = glamor_composite_with_shader(PictOpOutReverse,
|
||||||
|
src, mask, dst, src_pixmap_priv,
|
||||||
|
mask_pixmap_priv, dst_pixmap_priv, nrect, rects);
|
||||||
|
if (!ok)
|
||||||
|
goto fallback;
|
||||||
|
ok |= glamor_composite_with_shader(PictOpAdd,
|
||||||
|
src, mask, dst, src_pixmap_priv,
|
||||||
|
mask_pixmap_priv, dst_pixmap_priv, nrect, rects);
|
||||||
|
if (ok)
|
||||||
|
return;
|
||||||
|
assert(0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if (glamor_composite_with_shader(op, src, mask, dst, src_pixmap_priv,
|
if (glamor_composite_with_shader(op, src, mask, dst, src_pixmap_priv,
|
||||||
mask_pixmap_priv, dst_pixmap_priv, nrect, rects))
|
mask_pixmap_priv, dst_pixmap_priv, nrect, rects))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fallback:
|
||||||
n = nrect;
|
n = nrect;
|
||||||
r = rects;
|
r = rects;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user