xf86-video-intel: src/sna/kgem.c src/sna/sna_accel.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Nov 8 01:53:03 PST 2011


 src/sna/kgem.c      |    2 +-
 src/sna/sna_accel.c |    9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

New commits:
commit 33256af40b3ce2cf8a899ced1fcbf40e316772e4
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Nov 8 09:55:07 2011 +0000

    sna: Fixes for DBG_NO_HW (i.e. simulated GPU hanges);
    
    A couple of the recent GPU paths were failing to check for !wedged.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index bdfefa8..75e7533 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1451,7 +1451,7 @@ struct kgem_bo *kgem_create_2d(struct kgem *kgem,
 	DBG(("%s(%dx%d, bpp=%d, tiling=%d, exact=%d, inactive=%d)\n", __FUNCTION__,
 	     width, height, bpp, tiling, !!exact, !!(flags & CREATE_INACTIVE)));
 
-	assert(_kgem_can_create_2d(kgem, width, height, bpp, tiling));
+	assert(_kgem_can_create_2d(kgem, width, height, bpp, exact ? -tiling : tiling));
 	size = kgem_surface_size(kgem, width, height, bpp, tiling, &pitch);
 	assert(size && size <= kgem->max_object_size);
 	if (flags & CREATE_INACTIVE)
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 9fddd4f..11ae4d2 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(&region, 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(&region))
 		return NULL;
 
+	if (wedged(sna))
+		goto fallback;
+
 	if (sna_drawable_use_gpu_bo(dst, &region.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, &region, true);


More information about the xorg-commit mailing list