Now that we have write-combining maps, our writes to the batch should be reasonably fast. (In the past, we only had uncached maps, which were slow...so we kept a CPU-side shadow copy for write combining purposes.)
There are a few places that still read back a DWord or so from the batch, which will unfortunately now have uncached performance. We should eliminate those. XXX: benchmark, see if this is something we can live with for now, or if we really need to fix it right away. --- src/mesa/drivers/dri/i965/brw_context.h | 1 - src/mesa/drivers/dri/i965/intel_batchbuffer.c | 34 +++++---------------------- 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 92fc16de136..b3a8fa01aff 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -448,7 +448,6 @@ struct intel_batchbuffer { uint16_t reserved_space; uint32_t *map_next; uint32_t *map; - uint32_t *cpu_map; uint32_t state_batch_offset; enum brw_gpu_ring ring; diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index a7243a27aeb..9b37470f926 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -44,8 +44,7 @@ static void intel_batchbuffer_reset(struct intel_batchbuffer *batch, - struct brw_bufmgr *bufmgr, - bool has_llc); + struct brw_bufmgr *bufmgr); static bool uint_key_compare(const void *a, const void *b) @@ -66,12 +65,6 @@ intel_batchbuffer_init(struct intel_screen *screen, struct brw_bufmgr *bufmgr = screen->bufmgr; const struct gen_device_info *devinfo = &screen->devinfo; - if (!devinfo->has_llc) { - batch->cpu_map = malloc(BATCH_SZ); - batch->map = batch->cpu_map; - batch->map_next = batch->cpu_map; - } - batch->reloc_count = 0; batch->reloc_array_size = 250; batch->relocs = malloc(batch->reloc_array_size * @@ -96,7 +89,7 @@ intel_batchbuffer_init(struct intel_screen *screen, if (devinfo->gen == 6) batch->valid_reloc_flags |= EXEC_OBJECT_NEEDS_GTT; - intel_batchbuffer_reset(batch, bufmgr, devinfo->has_llc); + intel_batchbuffer_reset(batch, bufmgr); } #define READ_ONCE(x) (*(volatile __typeof__(x) *)&(x)) @@ -144,8 +137,7 @@ add_exec_bo(struct intel_batchbuffer *batch, struct brw_bo *bo) static void intel_batchbuffer_reset(struct intel_batchbuffer *batch, - struct brw_bufmgr *bufmgr, - bool has_llc) + struct brw_bufmgr *bufmgr) { if (batch->last_bo != NULL) { brw_bo_unreference(batch->last_bo); @@ -154,9 +146,7 @@ intel_batchbuffer_reset(struct intel_batchbuffer *batch, batch->last_bo = batch->bo; batch->bo = brw_bo_alloc(bufmgr, "batchbuffer", BATCH_SZ, 4096); - if (has_llc) { - batch->map = brw_bo_map(NULL, batch->bo, MAP_READ | MAP_WRITE); - } + batch->map = brw_bo_map(NULL, batch->bo, MAP_READ | MAP_WRITE); batch->map_next = batch->map; add_exec_bo(batch, batch->bo); @@ -179,9 +169,7 @@ intel_batchbuffer_reset(struct intel_batchbuffer *batch, static void intel_batchbuffer_reset_and_clear_render_cache(struct brw_context *brw) { - const struct gen_device_info *devinfo = &brw->screen->devinfo; - - intel_batchbuffer_reset(&brw->batch, brw->bufmgr, devinfo->has_llc); + intel_batchbuffer_reset(&brw->batch, brw->bufmgr); brw_render_cache_set_clear(brw); } @@ -629,17 +617,7 @@ do_flush_locked(struct brw_context *brw, int in_fence_fd, int *out_fence_fd) struct intel_batchbuffer *batch = &brw->batch; int ret = 0; - if (devinfo->has_llc) { - brw_bo_unmap(batch->bo); - } else { - ret = brw_bo_subdata(batch->bo, 0, 4 * USED_BATCH(*batch), batch->map); - if (ret == 0 && batch->state_batch_offset != batch->bo->size) { - ret = brw_bo_subdata(batch->bo, - batch->state_batch_offset, - batch->bo->size - batch->state_batch_offset, - (char *)batch->map + batch->state_batch_offset); - } - } + brw_bo_unmap(batch->bo); if (!brw->screen->no_hw) { /* The requirement for using I915_EXEC_NO_RELOC are: -- 2.14.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev