diff options
Diffstat (limited to 'src/sna/sna_accel.c')
-rw-r--r-- | src/sna/sna_accel.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 9fddd4f0..11ae4d25 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -1647,6 +1647,7 @@ sna_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, int w, int h, int left, int format, char *bits) { + struct sna *sna = to_sna_from_drawable(drawable); PixmapPtr pixmap = get_drawable_pixmap(drawable); struct sna_pixmap *priv = sna_pixmap(pixmap); RegionRec region; @@ -1680,6 +1681,9 @@ sna_put_image(DrawablePtr drawable, GCPtr gc, int depth, RegionTranslate(®ion, dx, dy); + if (wedged(sna)) + goto fallback; + switch (format) { case ZPixmap: if (!PM_IS_SOLID(drawable, gc->planemask)) @@ -3124,6 +3128,7 @@ sna_copy_plane(DrawablePtr src, DrawablePtr dst, GCPtr gc, int dst_x, int dst_y, unsigned long bit) { + struct sna *sna = to_sna_from_drawable(dst); RegionRec region; struct sna_damage **damage; @@ -3145,6 +3150,9 @@ sna_copy_plane(DrawablePtr src, DrawablePtr dst, GCPtr gc, if (!RegionNotEmpty(®ion)) return NULL; + if (wedged(sna)) + goto fallback; + if (sna_drawable_use_gpu_bo(dst, ®ion.extents, &damage)) { struct sna_pixmap *priv = sna_pixmap(get_drawable_pixmap(dst)); if (priv->gpu_bo->tiling != I915_TILING_Y) { @@ -3158,6 +3166,7 @@ sna_copy_plane(DrawablePtr src, DrawablePtr dst, GCPtr gc, } } +fallback: DBG(("%s: fallback\n", __FUNCTION__)); sna_gc_move_to_cpu(gc, dst); sna_drawable_move_region_to_cpu(dst, ®ion, true); |