diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c index ee1686fc..401041c2 100644 --- a/src/sna/gen6_render.c +++ b/src/sna/gen6_render.c @@ -3622,10 +3622,19 @@ gen6_render_context_switch(struct kgem *kgem, int new_mode) { if (kgem->nbatch) { - DBG(("%s: from %d to %d\n", __FUNCTION__, kgem->mode, new_mode)); + DBG(("%s: from %d to %d, submit batch\n", __FUNCTION__, kgem->mode, new_mode)); _kgem_submit(kgem); } + if (kgem->nexec) { + DBG(("%s: from %d to %d, reset incomplete batch\n", __FUNCTION__, kgem->mode, new_mode)); + kgem_reset(kgem); + } + + assert(kgem->nbatch == 0); + assert(kgem->nreloc == 0); + assert(kgem->nexec == 0); + kgem->ring = new_mode; } diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c index 30e1cc1b..e17fc949 100644 --- a/src/sna/gen7_render.c +++ b/src/sna/gen7_render.c @@ -3844,11 +3844,19 @@ gen7_render_context_switch(struct kgem *kgem, int new_mode) { if (kgem->nbatch) { - DBG(("%s: switch rings %d -> %d\n", - __FUNCTION__, kgem->mode, new_mode)); + DBG(("%s: from %d to %d, submit batch\n", __FUNCTION__, kgem->mode, new_mode)); _kgem_submit(kgem); } + if (kgem->nexec) { + DBG(("%s: from %d to %d, reset incomplete batch\n", __FUNCTION__, kgem->mode, new_mode)); + kgem_reset(kgem); + } + + assert(kgem->nbatch == 0); + assert(kgem->nreloc == 0); + assert(kgem->nexec == 0); + kgem->ring = new_mode; }