sna/gen4+: Clear redirect bo before falling back to BLT paths
Just in case we later try to take action on the already freed redirection. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
bb3ea102ca
commit
31f559820d
|
|
@ -2411,8 +2411,13 @@ fallback_blt:
|
|||
kgem_submit(&sna->kgem);
|
||||
if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL)) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
|
||||
if (tmp.redirect.real_bo)
|
||||
tmp.src.bo = NULL;
|
||||
|
||||
if (tmp.redirect.real_bo) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
|
||||
tmp.redirect.real_bo = NULL;
|
||||
}
|
||||
|
||||
goto fallback_blt;
|
||||
}
|
||||
}
|
||||
|
|
@ -2441,9 +2446,12 @@ fallback_blt:
|
|||
return true;
|
||||
|
||||
fallback_tiled_dst:
|
||||
if (tmp.redirect.real_bo)
|
||||
if (tmp.redirect.real_bo) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
|
||||
tmp.redirect.real_bo = NULL;
|
||||
}
|
||||
fallback_tiled:
|
||||
assert(tmp.src.bo == NULL);
|
||||
if (sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
|
||||
sna_blt_copy_boxes(sna, alu,
|
||||
src_bo, src_dx, src_dy,
|
||||
|
|
|
|||
|
|
@ -2371,8 +2371,13 @@ fallback_blt:
|
|||
if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL)) {
|
||||
DBG(("%s: aperture check failed\n", __FUNCTION__));
|
||||
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
|
||||
if (tmp.redirect.real_bo)
|
||||
tmp.src.bo = NULL;
|
||||
|
||||
if (tmp.redirect.real_bo) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
|
||||
tmp.redirect.real_bo = NULL;
|
||||
}
|
||||
|
||||
goto fallback_blt;
|
||||
}
|
||||
}
|
||||
|
|
@ -2421,9 +2426,12 @@ fallback_blt:
|
|||
return true;
|
||||
|
||||
fallback_tiled_dst:
|
||||
if (tmp.redirect.real_bo)
|
||||
if (tmp.redirect.real_bo) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
|
||||
tmp.redirect.real_bo = NULL;
|
||||
}
|
||||
fallback_tiled:
|
||||
assert(tmp.src.bo == NULL);
|
||||
if (sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
|
||||
sna_blt_copy_boxes(sna, alu,
|
||||
src_bo, src_dx, src_dy,
|
||||
|
|
|
|||
|
|
@ -2785,8 +2785,11 @@ fallback_blt:
|
|||
__FUNCTION__));
|
||||
if (tmp.src.bo != src_bo)
|
||||
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
|
||||
if (tmp.redirect.real_bo)
|
||||
tmp.src.bo = NULL;
|
||||
if (tmp.redirect.real_bo) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
|
||||
tmp.redirect.real_bo = NULL;
|
||||
}
|
||||
goto fallback_blt;
|
||||
}
|
||||
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
|
||||
|
|
@ -2831,9 +2834,12 @@ fallback_blt:
|
|||
return true;
|
||||
|
||||
fallback_tiled_dst:
|
||||
if (tmp.redirect.real_bo)
|
||||
if (tmp.redirect.real_bo) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
|
||||
tmp.redirect.real_bo = NULL;
|
||||
}
|
||||
fallback_tiled:
|
||||
assert(tmp.src.bo == NULL);
|
||||
if (sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
|
||||
sna_blt_copy_boxes(sna, alu,
|
||||
src_bo, src_dx, src_dy,
|
||||
|
|
|
|||
|
|
@ -3040,8 +3040,11 @@ fallback_blt:
|
|||
if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, tmp.src.bo, NULL)) {
|
||||
if (tmp.src.bo != src_bo)
|
||||
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
|
||||
if (tmp.redirect.real_bo)
|
||||
tmp.src.bo = NULL;
|
||||
if (tmp.redirect.real_bo) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
|
||||
tmp.redirect.real_bo = NULL;
|
||||
}
|
||||
goto fallback_blt;
|
||||
}
|
||||
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
|
||||
|
|
@ -3086,10 +3089,13 @@ fallback_blt:
|
|||
return true;
|
||||
|
||||
fallback_tiled_dst:
|
||||
if (tmp.redirect.real_bo)
|
||||
if (tmp.redirect.real_bo) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
|
||||
tmp.redirect.real_bo = NULL;
|
||||
}
|
||||
fallback_tiled:
|
||||
DBG(("%s: fallback tiled\n", __FUNCTION__));
|
||||
assert(tmp.src.bo == NULL);
|
||||
if (sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
|
||||
sna_blt_copy_boxes(sna, alu,
|
||||
src_bo, src_dx, src_dy,
|
||||
|
|
@ -3351,8 +3357,13 @@ gen7_render_fill_boxes(struct sna *sna,
|
|||
kgem_submit(&sna->kgem);
|
||||
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
|
||||
if (tmp.redirect.real_bo)
|
||||
tmp.src.bo = NULL;
|
||||
|
||||
if (tmp.redirect.real_bo) {
|
||||
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
|
||||
tmp.redirect.real_bo = NULL;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
|
||||
|
|
|
|||
Loading…
Reference in New Issue