if (!can_do_blit(info))
                return false;
 
-       fd_fence_ref(&ctx->last_fence, NULL);
-
        batch = fd_bc_alloc_batch(&ctx->screen->batch_cache, ctx, true);
 
        fd6_emit_restore(batch, batch->draw);
 
        fd_screen_unlock(ctx->screen);
 
+       /* Clearing last_fence must come after the batch dependency tracking
+        * (resource_read()/resource_write()), as that can trigger a flush,
+        * re-populating last_fence
+        */
+       fd_fence_ref(&ctx->last_fence, NULL);
+
        fd_batch_set_stage(batch, FD_STAGE_BLIT);
 
        fd_log_stream(batch, stream, util_dump_blit_info(stream, info));
 
                return;
        }
 
-       fd_fence_ref(&ctx->last_fence, NULL);
-
        /* Upload a user index buffer. */
        struct pipe_resource *indexbuf = NULL;
        unsigned index_offset = 0;
        /* and any buffers used, need to be resolved: */
        batch->resolve |= buffers;
 
+       /* Clearing last_fence must come after the batch dependency tracking
+        * (resource_read()/resource_written()), as that can trigger a flush,
+        * re-populating last_fence
+        */
+       fd_fence_ref(&ctx->last_fence, NULL);
+
        DBG("%p: %x %ux%u num_draws=%u (%s/%s)", batch, buffers,
                pfb->width, pfb->height, batch->num_draws,
                util_format_short_name(pipe_surface_format(pfb->cbufs[0])),
        if (!fd_render_condition_check(pctx))
                return;
 
-       fd_fence_ref(&ctx->last_fence, NULL);
-
        if (ctx->in_discard_blit) {
                fd_batch_reset(batch);
                fd_context_all_dirty(ctx);
 
        fd_screen_unlock(ctx->screen);
 
+       /* Clearing last_fence must come after the batch dependency tracking
+        * (resource_read()/resource_written()), as that can trigger a flush,
+        * re-populating last_fence
+        */
+       fd_fence_ref(&ctx->last_fence, NULL);
+
        DBG("%p: %x %ux%u depth=%f, stencil=%u (%s/%s)", batch, buffers,
                pfb->width, pfb->height, depth, stencil,
                util_format_short_name(pipe_surface_format(pfb->cbufs[0])),