[intel] Re-allocate backing buffer objects on BufferData.
authorEric Anholt <eric@anholt.net>
Wed, 9 Jan 2008 22:30:09 +0000 (14:30 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 9 Jan 2008 22:41:55 +0000 (14:41 -0800)
This may allow better concurrency (noop in openarena performance now), but is
also important for the previous commit -- otherwise, we may end up with
BufferData, draw_prims, BufferData and the draw_prims would use the new VBO
data instead of old.  This could still occur with user-supplied VBOs and poor
use of MapBuffer without BufferData.

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

index 89b489e28a3521bd6c7ab3318ad199b5e9ac2f80..bd1b2ca1b14bcdcb7a8e27e129eac7c86a7ba038 100644 (file)
@@ -135,19 +135,12 @@ intel_bufferobj_data(GLcontext * ctx,
    if (intel_obj->region)
       intel_bufferobj_release_region(intel, intel_obj);
 
-   /* While it would seem to make sense to always reallocate the buffer here,
-    * since it should allow us better concurrency between rendering and
-    * map-cpu write-unmap, doing so was a minor (~10%) performance loss
-    * for both classic and TTM mode with openarena.  That may change with
-    * improved buffer manager algorithms.
-    */
-   if (intel_obj->buffer != NULL && intel_obj->buffer->size != size) {
+   if (intel_obj->buffer != NULL) {
       dri_bo_unreference(intel_obj->buffer);
       intel_obj->buffer = NULL;
    }
    if (size != 0) {
-      if (intel_obj->buffer == NULL)
-        intel_bufferobj_alloc_buffer(intel, intel_obj);
+      intel_bufferobj_alloc_buffer(intel, intel_obj);
 
       if (data != NULL)
         dri_bo_subdata(intel_obj->buffer, 0, size, data);