diff options
-rw-r--r-- | src/sna/sna_glyphs.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/sna/sna_glyphs.c b/src/sna/sna_glyphs.c index 71625b8b..95cc8c06 100644 --- a/src/sna/sna_glyphs.c +++ b/src/sna/sna_glyphs.c @@ -1233,11 +1233,16 @@ sna_glyphs(CARD8 op, goto fallback; } + _mask = mask; /* XXX discard the mask for non-overlapping glyphs? */ - if (!mask || + /* XXX more shader breakage?: CA to dst is fubar on ilk */ + if (sna->kgem.gen == 50 && !_mask) + _mask = list[0].format; + + if (!_mask || (((nlist == 1 && list->len == 1) || op == PictOpAdd) && - dst->format == (mask->depth << 24 | mask->format))) { + dst->format == (_mask->depth << 24 | _mask->format))) { if (glyphs_to_dst(sna, op, src, dst, src_x, src_y, @@ -1245,7 +1250,6 @@ sna_glyphs(CARD8 op, return; } - _mask = mask; if (!_mask) _mask = glyphs_format(nlist, list, glyphs); if (_mask) { |