diff options
-rw-r--r-- | src/sna/sna_composite.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/sna/sna_composite.c b/src/sna/sna_composite.c index 3a8e8684..f7a44d56 100644 --- a/src/sna/sna_composite.c +++ b/src/sna/sna_composite.c @@ -649,15 +649,15 @@ sna_composite(CARD8 op, CARD16 width, CARD16 height) { PixmapPtr pixmap = get_drawable_pixmap(dst->pDrawable); - struct sna *sna = to_sna_from_pixmap(pixmap); struct sna_pixmap *priv; struct sna_composite_op tmp; RegionRec region; + struct sna *sna; int dx, dy; DBG(("%s(pixmap=%ld, op=%d, src=%ld+(%d, %d), mask=%ld+(%d, %d), dst=%ld+(%d, %d)+(%d, %d), size=(%d, %d)\n", __FUNCTION__, - pixmap->drawable.serialNumber, op, + pixmap ? pixmap->drawable.serialNumber : 0, op, get_picture_id(src), src_x, src_y, get_picture_id(mask), mask_x, mask_y, get_picture_id(dst), dst_x, dst_y, @@ -672,8 +672,7 @@ sna_composite(CARD8 op, if (op == PictOpClear) { DBG(("%s: discarding source and mask for clear\n", __FUNCTION__)); mask = NULL; - if (sna->clear) - src = sna->clear; + src = NULL; } if (!sna_compute_composite_region(®ion, @@ -694,11 +693,6 @@ sna_composite(CARD8 op, if (NO_COMPOSITE) goto fallback; - if (wedged(sna)) { - DBG(("%s: fallback -- wedged\n", __FUNCTION__)); - goto fallback; - } - if (!can_render_to_picture(dst)) { DBG(("%s: fallback due to unhandled picture\n", __FUNCTION__)); goto fallback; @@ -711,6 +705,15 @@ sna_composite(CARD8 op, goto fallback; } + sna = to_sna_from_pixmap(pixmap); + if (wedged(sna)) { + DBG(("%s: fallback -- wedged\n", __FUNCTION__)); + goto fallback; + } + + if (op == PictOpClear) + src = sna->clear; + if (use_cpu(pixmap, priv, op, width, height) && !picture_is_gpu(sna, src, PREFER_GPU_RENDER) && !picture_is_gpu(sna, mask, PREFER_GPU_RENDER)) { |