No performance difference on glamor with copywinwin10 (n=40) on my gm45.
---
 src/mesa/drivers/dri/i965/brw_context.h       |  6 ++++--
 src/mesa/drivers/dri/i965/brw_curbe.c         | 31 +++------------------------
 src/mesa/drivers/dri/i965/intel_batchbuffer.c |  1 -
 3 files changed, 7 insertions(+), 31 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_context.h 
b/src/mesa/drivers/dri/i965/brw_context.h
index 283c576..b84b2a2 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -1223,11 +1223,13 @@ struct brw_context
       GLuint vs_size;
       GLuint total_size;
 
+      /**
+       * Pointer to the (intel_upload.c-generated) BO containing the uniforms
+       * for upload to the CURBE.
+       */
       drm_intel_bo *curbe_bo;
       /** Offset within curbe_bo of space for current curbe entry */
       GLuint curbe_offset;
-      /** Offset within curbe_bo of space for next curbe entry */
-      GLuint curbe_next_offset;
 
       /**
        * Copy of the last set of CURBEs uploaded.  Frequently we'll end up
diff --git a/src/mesa/drivers/dri/i965/brw_curbe.c 
b/src/mesa/drivers/dri/i965/brw_curbe.c
index e5ca2ce..b776bdc 100644
--- a/src/mesa/drivers/dri/i965/brw_curbe.c
+++ b/src/mesa/drivers/dri/i965/brw_curbe.c
@@ -39,6 +39,7 @@
 #include "program/prog_print.h"
 #include "program/prog_statevars.h"
 #include "intel_batchbuffer.h"
+#include "intel_buffer_objects.h"
 #include "brw_context.h"
 #include "brw_defines.h"
 #include "brw_state.h"
@@ -264,34 +265,8 @@ brw_upload_constant_buffer(struct brw_context *brw)
       memcpy(brw->curbe.last_buf, buf, bufsz);
       brw->curbe.last_bufsz = bufsz;
 
-      if (brw->curbe.curbe_bo != NULL &&
-         brw->curbe.curbe_next_offset + bufsz > brw->curbe.curbe_bo->size)
-      {
-        drm_intel_gem_bo_unmap_gtt(brw->curbe.curbe_bo);
-        drm_intel_bo_unreference(brw->curbe.curbe_bo);
-        brw->curbe.curbe_bo = NULL;
-      }
-
-      if (brw->curbe.curbe_bo == NULL) {
-        /* Allocate a single page for CURBE entries for this batchbuffer.
-         * They're generally around 64b.
-         */
-        brw->curbe.curbe_bo = drm_intel_bo_alloc(brw->bufmgr, "CURBE",
-                                                 4096, 1 << 6);
-        brw->curbe.curbe_next_offset = 0;
-        drm_intel_gem_bo_map_gtt(brw->curbe.curbe_bo);
-        assert(bufsz < 4096);
-      }
-
-      brw->curbe.curbe_offset = brw->curbe.curbe_next_offset;
-      brw->curbe.curbe_next_offset += bufsz;
-      brw->curbe.curbe_next_offset = ALIGN(brw->curbe.curbe_next_offset, 64);
-
-      /* Copy data to the buffer:
-       */
-      memcpy(brw->curbe.curbe_bo->virtual + brw->curbe.curbe_offset,
-            buf,
-            bufsz);
+      intel_upload_data(brw, buf, bufsz, 64,
+                        &brw->curbe.curbe_bo, &brw->curbe.curbe_offset);
    }
 
    /* Because this provokes an action (ie copy the constants into the
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 818ac61..cba81bc 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -225,7 +225,6 @@ brw_finish_batch(struct brw_context *brw)
       brw_perf_monitor_finish_batch(brw);
 
    if (brw->curbe.curbe_bo) {
-      drm_intel_gem_bo_unmap_gtt(brw->curbe.curbe_bo);
       drm_intel_bo_unreference(brw->curbe.curbe_bo);
       brw->curbe.curbe_bo = NULL;
    }
-- 
2.0.0.rc2

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to