if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
+ return false;
}
gen2_emit_fill_composite_state(sna, &tmp, pixel);
if (!kgem_check_bo(&sna->kgem, bo, NULL)) {
kgem_submit(&sna->kgem);
+
if (gen2_render_fill_one_try_blt(sna, dst, bo, color,
x1, y1, x2, y2, alu))
return true;
- assert(kgem_check_bo(&sna->kgem, bo, NULL));
+
+ if (!kgem_check_bo(&sna->kgem, bo, NULL))
+ return false;
}
tmp.op = alu;
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
+ return false;
}
gen3_align_vertex(sna, &tmp);
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
+ return false;
}
tmp->blt = gen3_render_fill_op_blt;
if (!kgem_check_bo(&sna->kgem, bo, NULL)) {
kgem_submit(&sna->kgem);
+
if (gen3_render_fill_one_try_blt(sna, dst, bo, color,
x1, y1, x2, y2, alu))
return true;
+
+ if (!kgem_check_bo(&sna->kgem, bo, NULL))
+ return false;
}
gen3_align_vertex(sna, &tmp);
if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL))
+ return false;
}
gen4_align_vertex(sna, &tmp);
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
+ return false;
}
gen4_align_vertex(sna, &tmp);
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
+ kgem_bo_destroy(&sna->kgem, op->base.src.bo);
+ return false;
+ }
}
gen4_align_vertex(sna, &op->base);
if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL))
+ return false;
}
gen5_align_vertex(sna, &tmp);
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
+ kgem_bo_destroy(&sna->kgem, tmp.src.bo);
+ return false;
+ }
}
gen5_align_vertex(sna, &tmp);
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
+ kgem_bo_destroy(&sna->kgem, op->base.src.bo);
+ return false;
+ }
}
gen5_align_vertex(sna, &op->base);
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
return false;
}
- assert(kgem_check_bo(&sna->kgem, bo, NULL));
}
gen5_align_vertex(sna, &tmp);
kgem_set_mode(&sna->kgem, KGEM_RENDER, tmp.dst.bo);
if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL))
+ return false;
+
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
kgem_set_mode(&sna->kgem, KGEM_RENDER, dst_bo);
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
+ kgem_bo_destroy(&sna->kgem, tmp.src.bo);
+ if (tmp.redirect.real_bo)
+ kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ return false;
+ }
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
kgem_set_mode(&sna->kgem, KGEM_RENDER, dst_bo);
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
- assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
+ kgem_bo_destroy(&sna->kgem, op->base.src.bo);
+ return false;
+ }
+
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
kgem_set_mode(&sna->kgem, KGEM_RENDER, bo);
if (!kgem_check_bo(&sna->kgem, bo, NULL)) {
kgem_submit(&sna->kgem);
- if (kgem_check_bo(&sna->kgem, bo, NULL)) {
+ if (!kgem_check_bo(&sna->kgem, bo, NULL)) {
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
return false;
}
static inline bool kgem_flush(struct kgem *kgem, bool flush)
{
+ if (unlikely(kgem->wedged))
+ return false;
+
if (kgem->nreloc == 0)
return true;
if (!kgem_check_reloc(kgem, 1)) {
_kgem_submit(kgem);
+ if (!kgem_check_bo_fenced(kgem, bo))
+ return false;
_kgem_set_mode(kgem, KGEM_BLT);
}
if (!kgem_check_reloc(kgem, 1)) {
_kgem_submit(kgem);
+ if (!kgem_check_bo_fenced(&sna->kgem, bo))
+ return false;
_kgem_set_mode(kgem, KGEM_BLT);
}