i915tex: Better procedure for dropping batchbuffer on virtual resolution change.
authorMichel Dänzer <michel@tungstengraphics.com>
Tue, 10 Jul 2007 09:02:18 +0000 (11:02 +0200)
committerMichel Dänzer <michel@tungstengraphics.com>
Tue, 10 Jul 2007 09:14:46 +0000 (11:14 +0200)
The previous procedure would often result in a GPU lockup.

src/mesa/drivers/dri/i915tex/intel_context.c

index 5334efd..40ea756 100644 (file)
@@ -681,37 +681,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;
-      }
-
-      intel_batchbuffer_reset(intel->batch);
+      if (intel->Fallback)
+        _swrast_flush(&intel->ctx);
 
-      if (batchMap == NULL) {
-        driBOUnmap(intel->batch->buffer);
-        intel->batch->map = NULL;
-      }
+      INTEL_FIREVERTICES(intel);
 
-      /* lose all primitives */
-      intel->prim.primitive = ~0;
-      intel->prim.start_ptr = 0;
-      intel->prim.flush = 0;
+      if (intel->batch->map != intel->batch->ptr)
+        intel_batchbuffer_flush(intel->batch);
 
-      /* re-emit all state */
-      intel->vtbl.lost_hardware(intel);
+      intel->numClipRects = numClipRects;
 
       /* force window update */
       intel->lastStamp = 0;