sna/gen6+: Tweak consideration of compositing on BLT
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 2 Jul 2014 10:31:54 +0000 (11:31 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 2 Jul 2014 11:47:14 +0000 (12:47 +0100)
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
src/sna/gen6_render.c
src/sna/gen7_render.c
src/sna/gen8_render.c

index ece8cdb..ab6e296 100644 (file)
@@ -1943,18 +1943,21 @@ try_blt(struct sna *sna,
        }
 
        bo = __sna_drawable_peek_bo(dst->pDrawable);
-       if (bo && bo->rq)
+       if (bo == NULL)
+               return true;
+       if (bo->rq)
                return RQ_IS_BLT(bo->rq);
 
-       if (sna_picture_is_solid(src, NULL) && can_switch_to_blt(sna, NULL, 0))
+       if (sna_picture_is_solid(src, NULL) && can_switch_to_blt(sna, bo, 0))
                return true;
 
        if (src->pDrawable) {
                bo = __sna_drawable_peek_bo(src->pDrawable);
                if (bo == NULL)
                        return true;
-               else if (bo->rq)
-                       return RQ_IS_BLT(bo->rq);
+
+               if (prefer_blt_bo(sna, bo))
+                       return true;
        }
 
        if (sna->kgem.ring == KGEM_BLT) {
index 0a35d95..b1faac4 100644 (file)
@@ -2195,18 +2195,21 @@ try_blt(struct sna *sna,
        }
 
        bo = __sna_drawable_peek_bo(dst->pDrawable);
-       if (bo && bo->rq)
+       if (bo == NULL)
+               return true;
+       if (bo->rq)
                return RQ_IS_BLT(bo->rq);
 
-       if (sna_picture_is_solid(src, NULL) && can_switch_to_blt(sna, NULL, 0))
+       if (sna_picture_is_solid(src, NULL) && can_switch_to_blt(sna, bo, 0))
                return true;
 
        if (src->pDrawable) {
                bo = __sna_drawable_peek_bo(src->pDrawable);
                if (bo == NULL)
                        return true;
-               else if (bo->rq)
-                       return RQ_IS_BLT(bo->rq);
+
+               if (prefer_blt_bo(sna, bo))
+                       return true;
        }
 
        if (sna->kgem.ring == KGEM_BLT) {
index 392a107..3cdbfd5 100644 (file)
@@ -2012,17 +2012,20 @@ try_blt(struct sna *sna,
        }
 
        bo = __sna_drawable_peek_bo(dst->pDrawable);
-       if (bo && bo->rq)
+       if (bo == NULL)
+               return true;
+       if (bo->rq)
                return RQ_IS_BLT(bo->rq);
 
-       if (sna_picture_is_solid(src, NULL) && can_switch_to_blt(sna, NULL, 0))
+       if (sna_picture_is_solid(src, NULL) && can_switch_to_blt(sna, bo, 0))
                return true;
 
        if (src->pDrawable) {
                bo = __sna_drawable_peek_bo(src->pDrawable);
                if (bo == NULL)
                        return true;
-               else if (bo->rq)
+
+               if (prefer_blt_bo(sna, bo))
                        return RQ_IS_BLT(bo->rq);
        }