diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c index ece8cdbf..ab6e296c 100644 --- a/src/sna/gen6_render.c +++ b/src/sna/gen6_render.c @@ -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) { diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c index 0a35d95f..b1faac44 100644 --- a/src/sna/gen7_render.c +++ b/src/sna/gen7_render.c @@ -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) { diff --git a/src/sna/gen8_render.c b/src/sna/gen8_render.c index 392a107c..3cdbfd5f 100644 --- a/src/sna/gen8_render.c +++ b/src/sna/gen8_render.c @@ -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); }