i965: Make unsynchronized maps unsynchronized on non-LLC
authorMatt Turner <mattst88@gmail.com>
Thu, 1 Jun 2017 04:14:15 +0000 (21:14 -0700)
committerMatt Turner <mattst88@gmail.com>
Tue, 6 Jun 2017 18:47:47 +0000 (11:47 -0700)
On Broxton, the performance of Unigine Valley 1.0 is improved by
13.3067% +/- 0.144322% (n=40) at 1280x720/QUALITY_LOW, and by
1.68478% +/- 0.484226% (n=3) at 1920x1080/QUALITY_LOW.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_bufmgr.c
src/mesa/drivers/dri/i965/intel_buffer_objects.c

index 4ab72cd3e513e2871b67e417de01d5242519f725..15610dba5b9a2b0b1250d8e1d42b47555190955b 100644 (file)
@@ -772,19 +772,7 @@ brw_bo_map_gtt(struct brw_context *brw, struct brw_bo *bo, unsigned flags)
 void *
 brw_bo_map_unsynchronized(struct brw_context *brw, struct brw_bo *bo)
 {
-   struct brw_bufmgr *bufmgr = bo->bufmgr;
-
-   /* If the CPU cache isn't coherent with the GTT, then use a
-    * regular synchronized mapping.  The problem is that we don't
-    * track where the buffer was last used on the CPU side in
-    * terms of brw_bo_map_cpu vs brw_bo_map_gtt, so
-    * we would potentially corrupt the buffer even when the user
-    * does reasonable things.
-    */
-   if (!bufmgr->has_llc)
-      return brw_bo_map_gtt(brw, bo, MAP_READ | MAP_WRITE);
-   else
-      return brw_bo_map_gtt(brw, bo, MAP_READ | MAP_WRITE | MAP_ASYNC);
+   return brw_bo_map_gtt(brw, bo, MAP_READ | MAP_WRITE | MAP_ASYNC);
 }
 
 static bool
index 5813989ce4894f822a1548f2d0b9ae622e19b874..fcf04ebfdd6de2b95a71226e844f78d8610aa3c8 100644 (file)
@@ -400,15 +400,8 @@ brw_map_buffer_range(struct gl_context *ctx,
       return obj->Mappings[index].Pointer;
    }
 
-   void *map;
-   if (access & GL_MAP_UNSYNCHRONIZED_BIT) {
-      if (!brw->has_llc && brw->perf_debug &&
-          brw_bo_busy(intel_obj->buffer)) {
-         perf_debug("MapBufferRange with GL_MAP_UNSYNCHRONIZED_BIT stalling (it's actually synchronized on non-LLC platforms)\n");
-      }
-      map = brw_bo_map_unsynchronized(brw, intel_obj->buffer);
-   } else {
-      map = brw_bo_map(brw, intel_obj->buffer, access);
+   void *map = brw_bo_map(brw, intel_obj->buffer, access);
+   if (!(access & GL_MAP_UNSYNCHRONIZED_BIT)) {
       mark_buffer_inactive(intel_obj);
    }