summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sna/sna_blt.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c
index 98bd49b9..99cb7d29 100644
--- a/src/sna/sna_blt.c
+++ b/src/sna/sna_blt.c
@@ -2804,8 +2804,13 @@ fill:
if (!tmp->dst.bo) {
DBG(("%s: fallback -- unaccelerated read back\n",
__FUNCTION__));
+fallback:
if (flags & COMPOSITE_FALLBACK || !kgem_bo_is_busy(bo))
goto put;
+ } else if (!kgem_bo_can_blt(&sna->kgem, bo)) {
+ DBG(("%s: fallback -- cannot blit from source\n",
+ __FUNCTION__));
+ goto fallback;
} else if (bo->snoop && tmp->dst.bo->snoop) {
DBG(("%s: fallback -- can not copy between snooped bo\n",
__FUNCTION__));
@@ -2813,12 +2818,11 @@ fill:
} else if (!kgem_bo_can_blt(&sna->kgem, tmp->dst.bo)) {
DBG(("%s: fallback -- unaccelerated upload\n",
__FUNCTION__));
- if (flags & COMPOSITE_FALLBACK || !kgem_bo_is_busy(bo))
- goto put;
+ goto fallback;
} else {
ret = prepare_blt_copy(sna, tmp, bo, alpha_fixup);
- if (flags & COMPOSITE_FALLBACK && !ret)
- goto put;
+ if (!ret)
+ goto fallback;
}
} else {
RegionRec region;