summaryrefslogtreecommitdiff
path: root/src/sna/gen7_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sna/gen7_render.c')
-rw-r--r--src/sna/gen7_render.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index ff046315..e2486c65 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2036,6 +2036,7 @@ gen7_render_video(struct sna *sna,
kgem_set_mode(&sna->kgem, KGEM_RENDER);
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));
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
@@ -2662,6 +2663,10 @@ gen7_render_composite(struct sna *sna,
tmp->dst.bo, tmp->src.bo, tmp->mask.bo,
NULL)) {
kgem_submit(&sna->kgem);
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->dst.bo, tmp->src.bo, tmp->mask.bo,
+ NULL))
+ goto cleanup_mask;
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
@@ -2669,6 +2674,9 @@ gen7_render_composite(struct sna *sna,
gen7_align_vertex(sna, tmp);
return TRUE;
+cleanup_mask:
+ if (tmp->mask.bo)
+ kgem_bo_destroy(&sna->kgem, tmp->mask.bo);
cleanup_src:
if (tmp->src.bo)
kgem_bo_destroy(&sna->kgem, tmp->src.bo);
@@ -3065,6 +3073,10 @@ gen7_render_composite_spans(struct sna *sna,
tmp->base.dst.bo, tmp->base.src.bo,
NULL)) {
kgem_submit(&sna->kgem);
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->base.dst.bo, tmp->base.src.bo,
+ NULL))
+ goto cleanup_src;
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
@@ -3072,6 +3084,9 @@ gen7_render_composite_spans(struct sna *sna,
gen7_align_vertex(sna, &tmp->base);
return TRUE;
+cleanup_src:
+ if (tmp->base.src.bo)
+ kgem_bo_destroy(&sna->kgem, tmp->base.src.bo);
cleanup_dst:
if (tmp->base.redirect.real_bo)
kgem_bo_destroy(&sna->kgem, tmp->base.dst.bo);
@@ -3252,6 +3267,8 @@ fallback:
kgem_set_mode(&sna->kgem, KGEM_RENDER);
if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL)) {
kgem_submit(&sna->kgem);
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
+ goto fallback;
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
@@ -3412,6 +3429,8 @@ fallback:
kgem_set_mode(&sna->kgem, KGEM_RENDER);
if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL)) {
kgem_submit(&sna->kgem);
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
+ goto fallback;
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
@@ -3564,8 +3583,10 @@ gen7_render_fill_boxes(struct sna *sna,
tmp.u.gen7.nr_inputs = 1;
tmp.u.gen7.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
+ assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ }
gen7_emit_fill_state(sna, &tmp);
gen7_align_vertex(sna, &tmp);
@@ -3761,8 +3782,10 @@ gen7_render_fill(struct sna *sna, uint8_t alu,
op->base.u.gen7.nr_inputs = 1;
op->base.u.gen7.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_submit(&sna->kgem);
+ assert(kgem_check_bo(&sna->kgem, dst_bo, NULL));
+ }
gen7_emit_fill_state(sna, &op->base);
gen7_align_vertex(sna, &op->base);
@@ -3852,8 +3875,10 @@ gen7_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
tmp.u.gen7.nr_inputs = 1;
tmp.u.gen7.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, bo, NULL))
+ if (!kgem_check_bo(&sna->kgem, bo, NULL)) {
_kgem_submit(&sna->kgem);
+ assert(kgem_check_bo(&sna->kgem, bo, NULL));
+ }
gen7_emit_fill_state(sna, &tmp);
gen7_align_vertex(sna, &tmp);
@@ -3949,8 +3974,10 @@ gen7_render_clear(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo)
tmp.u.gen7.nr_inputs = 1;
tmp.u.gen7.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, bo, NULL))
+ if (!kgem_check_bo(&sna->kgem, bo, NULL)) {
_kgem_submit(&sna->kgem);
+ assert(kgem_check_bo(&sna->kgem, bo, NULL));
+ }
gen7_emit_fill_state(sna, &tmp);
gen7_align_vertex(sna, &tmp);