i965: Don't bother trying to extend the current vertex buffers.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 27 Oct 2012 03:36:50 +0000 (20:36 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 1 Nov 2012 02:54:36 +0000 (19:54 -0700)
This essentially reverts the following:

  commit c625aa19cb53ed27f91bfd16fea6ea727e9a5bbd
  Author: Chris Wilson <chris@chris-wilson.co.uk>
  Date:   Fri Feb 18 10:37:43 2011 +0000

      intel: extend current vertex buffers

While working on optimizing an upcoming Steam title, I broke this code.
Eric expressed his doubts about this optimization, and noted that the
original commit offered no performance data.

I ran before and after benchmarks on Xonotic and Citybench, and found
that this code made no difference.  So, remove it to reduce complexity
and make future work simpler.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_draw_upload.c
src/mesa/drivers/dri/i965/brw_vtbl.c

index 9232a72b90932191faca87728713d9c2d598f9d3..19c6af712001a34094706886a44f185600e8649f 100644 (file)
@@ -773,16 +773,10 @@ struct brw_context
    struct {
       struct brw_vertex_element inputs[VERT_ATTRIB_MAX];
       struct brw_vertex_buffer buffers[VERT_ATTRIB_MAX];
-      struct {
-             uint32_t handle;
-             uint32_t offset;
-             uint32_t stride;
-             uint32_t step_rate;
-      } current_buffers[VERT_ATTRIB_MAX];
 
       struct brw_vertex_element *enabled[VERT_ATTRIB_MAX];
       GLuint nr_enabled;
-      GLuint nr_buffers, nr_current_buffers;
+      GLuint nr_buffers;
 
       /* Summary of size and varying of active arrays, so we can check
        * for changes to this state:
index 4a4237ddd5cba1890aaafb11e3c2752f41021cc5..722166ce1a854448b23f37dc2cba083046300263 100644 (file)
@@ -536,34 +536,6 @@ static void brw_prepare_vertices(struct brw_context *brw)
       upload[i]->offset = 0;
    }
 
-   /* can we simply extend the current vb? */
-   if (j == brw->vb.nr_current_buffers) {
-      int delta = 0;
-      for (i = 0; i < j; i++) {
-        int d;
-
-        if (brw->vb.current_buffers[i].handle != brw->vb.buffers[i].bo->handle ||
-            brw->vb.current_buffers[i].stride != brw->vb.buffers[i].stride ||
-            brw->vb.current_buffers[i].step_rate != brw->vb.buffers[i].step_rate)
-           break;
-
-        d = brw->vb.buffers[i].offset - brw->vb.current_buffers[i].offset;
-        if (d < 0)
-           break;
-        if (i == 0)
-           delta = d / brw->vb.current_buffers[i].stride;
-        if (delta * brw->vb.current_buffers[i].stride != d)
-           break;
-      }
-
-      if (i == j) {
-        brw->vb.start_vertex_bias += delta;
-        while (--j >= 0)
-           drm_intel_bo_unreference(brw->vb.buffers[j].bo);
-        j = 0;
-      }
-   }
-
    brw->vb.nr_buffers = j;
 }
 
@@ -644,13 +616,7 @@ static void brw_emit_vertices(struct brw_context *brw)
         } else
            OUT_BATCH(0);
         OUT_BATCH(buffer->step_rate);
-
-        brw->vb.current_buffers[i].handle = buffer->bo->handle;
-        brw->vb.current_buffers[i].offset = buffer->offset;
-        brw->vb.current_buffers[i].stride = buffer->stride;
-        brw->vb.current_buffers[i].step_rate = buffer->step_rate;
       }
-      brw->vb.nr_current_buffers = i;
       ADVANCE_BATCH();
    }
 
index ca2e7a9a5baa8b48584de6c0914cede95bf793ef..3709777a10780953a1d56fce8c31ee1d3472cf52 100644 (file)
@@ -196,7 +196,6 @@ static void brw_new_batch( struct intel_context *intel )
     */
    brw->sol.offset_0_batch_start = brw->sol.svbi_0_starting_index;
 
-   brw->vb.nr_current_buffers = 0;
    brw->ib.type = -1;
 
    /* Mark that the current program cache BO has been used by the GPU.