From fdefc2bbda9d76576a7473c7d76f9ac7c94ccc87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Tue, 10 Jul 2007 11:02:18 +0200 Subject: [PATCH] i915tex: Better procedure for dropping batchbuffer on virtual resolution change. The previous procedure would often result in a GPU lockup. --- src/mesa/drivers/dri/i915tex/intel_context.c | 30 +++++++------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/mesa/drivers/dri/i915tex/intel_context.c b/src/mesa/drivers/dri/i915tex/intel_context.c index e1d35b7a9cf..093b3b416b4 100644 --- a/src/mesa/drivers/dri/i915tex/intel_context.c +++ b/src/mesa/drivers/dri/i915tex/intel_context.c @@ -669,37 +669,27 @@ intelContendedLock(struct intel_context *intel, GLuint flags) if (sarea->width != intel->width || sarea->height != intel->height || sarea->rotation != intel->current_rotation) { - - void *batchMap = intel->batch->map; - + int numClipRects = intel->numClipRects; + /* * FIXME: Really only need to do this when drawing to a * common back- or front buffer. */ /* - * This will drop the outstanding batchbuffer on the floor + * This will essentially drop the outstanding batchbuffer on the floor. */ + intel->numClipRects = 0; - if (batchMap != NULL) { - driBOUnmap(intel->batch->buffer); - intel->batch->map = NULL; - } + if (intel->Fallback) + _swrast_flush(&intel->ctx); - intel_batchbuffer_reset(intel->batch); + INTEL_FIREVERTICES(intel); - if (batchMap == NULL) { - driBOUnmap(intel->batch->buffer); - intel->batch->map = NULL; - } + if (intel->batch->map != intel->batch->ptr) + intel_batchbuffer_flush(intel->batch); - /* lose all primitives */ - intel->prim.primitive = ~0; - intel->prim.start_ptr = 0; - intel->prim.flush = 0; - - /* re-emit all state */ - intel->vtbl.lost_hardware(intel); + intel->numClipRects = numClipRects; /* force window update */ intel->lastStamp = 0;