[intel] Bug #14575: Unmap buffers when deleting/dataing as required.
authorEric Anholt <eric@anholt.net>
Thu, 28 Feb 2008 23:45:46 +0000 (15:45 -0800)
committerEric Anholt <eric@anholt.net>
Fri, 29 Feb 2008 00:01:15 +0000 (16:01 -0800)
Otherwise, we would assertion error when doing the final unreference of the
buffer with an outstanding map (catching the memory leak).

src/mesa/drivers/dri/intel/intel_buffer_objects.c

index bd1b2ca..951b8cb 100644 (file)
 #include "intel_regions.h"
 #include "dri_bufmgr.h"
 
+static GLboolean intel_bufferobj_unmap(GLcontext * ctx,
+                                      GLenum target,
+                                      struct gl_buffer_object *obj);
+
 /** Allocates a new dri_bo to store the data for the buffer object. */
 static void
 intel_bufferobj_alloc_buffer(struct intel_context *intel,
@@ -101,6 +105,12 @@ intel_bufferobj_free(GLcontext * ctx, struct gl_buffer_object *obj)
 
    assert(intel_obj);
 
+   /* Buffer objects are automatically unmapped when deleting according
+    * to the spec.
+    */
+   if (obj->Pointer)
+      intel_bufferobj_unmap(ctx, 0, obj);
+
    if (intel_obj->region) {
       intel_bufferobj_release_region(intel, intel_obj);
    }
@@ -132,6 +142,12 @@ intel_bufferobj_data(GLcontext * ctx,
    intel_obj->Base.Size = size;
    intel_obj->Base.Usage = usage;
 
+   /* Buffer objects are automatically unmapped when creating new data buffers
+    * according to the spec.
+    */
+   if (obj->Pointer)
+      intel_bufferobj_unmap(ctx, 0, obj);
+
    if (intel_obj->region)
       intel_bufferobj_release_region(intel, intel_obj);