Patches 1-3 are:
Reviewed-by: Iago Toral Quiroga <ito...@igalia.com>

I think you want someone else to have a look at the 4th one, but I'll 
try to review it tomorrow if nobody beats me to it.

Iago

On Mon, 2018-01-08 at 13:30 -0800, Kenneth Graunke wrote:
> Having a boolean for "we're using malloc'd shadow copies for all
> buffers" is cleaner than having a cpu_map pointer for each.  It was
> okay when we had one buffer, but this is more obvious.
> ---
>  src/mesa/drivers/dri/i965/brw_context.h       |  2 +-
>  src/mesa/drivers/dri/i965/intel_batchbuffer.c | 39 +++++++++++++--
> ------------
>  2 files changed, 20 insertions(+), 21 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h
> b/src/mesa/drivers/dri/i965/brw_context.h
> index 0f0aad85348..4d29e2ef082 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -473,7 +473,6 @@ struct brw_reloc_list {
>  struct brw_growing_bo {
>     struct brw_bo *bo;
>     uint32_t *map;
> -   uint32_t *cpu_map;
>  };
>  
>  struct intel_batchbuffer {
> @@ -492,6 +491,7 @@ struct intel_batchbuffer {
>     uint32_t state_used;
>  
>     enum brw_gpu_ring ring;
> +   bool use_shadow_copy;
>     bool use_batch_first;
>     bool needs_sol_reset;
>     bool state_base_address_emitted;
> diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> index a17e1699254..bfb50053e73 100644
> --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> @@ -83,12 +83,12 @@ intel_batchbuffer_init(struct brw_context *brw)
>     struct intel_batchbuffer *batch = &brw->batch;
>     const struct gen_device_info *devinfo = &screen->devinfo;
>  
> -   if (!devinfo->has_llc) {
> -      batch->batch.cpu_map = malloc(BATCH_SZ);
> -      batch->batch.map = batch->batch.cpu_map;
> +   batch->use_shadow_copy = !devinfo->has_llc;
> +
> +   if (batch->use_shadow_copy) {
> +      batch->batch.map = malloc(BATCH_SZ);
>        batch->map_next = batch->batch.map;
> -      batch->state.cpu_map = malloc(STATE_SZ);
> -      batch->state.map = batch->state.cpu_map;
> +      batch->state.map = malloc(STATE_SZ);
>     }
>  
>     init_reloc_list(&batch->batch_relocs, 250);
> @@ -174,7 +174,7 @@ intel_batchbuffer_reset(struct brw_context *brw)
>     batch->last_bo = batch->batch.bo;
>  
>     batch->batch.bo = brw_bo_alloc(bufmgr, "batchbuffer", BATCH_SZ,
> 4096);
> -   if (!batch->batch.cpu_map) {
> +   if (!batch->use_shadow_copy) {
>        batch->batch.map =
>           brw_bo_map(brw, batch->batch.bo, MAP_READ | MAP_WRITE);
>     }
> @@ -183,7 +183,7 @@ intel_batchbuffer_reset(struct brw_context *brw)
>     batch->state.bo = brw_bo_alloc(bufmgr, "statebuffer", STATE_SZ,
> 4096);
>     batch->state.bo->kflags =
>        can_do_exec_capture(screen) ? EXEC_OBJECT_CAPTURE : 0;
> -   if (!batch->state.cpu_map) {
> +   if (!batch->use_shadow_copy) {
>        batch->state.map =
>           brw_bo_map(brw, batch->state.bo, MAP_READ | MAP_WRITE);
>     }
> @@ -243,8 +243,10 @@ intel_batchbuffer_reset_to_saved(struct
> brw_context *brw)
>  void
>  intel_batchbuffer_free(struct intel_batchbuffer *batch)
>  {
> -   free(batch->batch.cpu_map);
> -   free(batch->state.cpu_map);
> +   if (batch->use_shadow_copy) {
> +      free(batch->batch.map);
> +      free(batch->state.map);
> +   }
>  
>     for (int i = 0; i < batch->exec_count; i++) {
>        brw_bo_unreference(batch->exec_bos[i]);
> @@ -284,7 +286,6 @@ static void
>  grow_buffer(struct brw_context *brw,
>              struct brw_bo **bo_ptr,
>              uint32_t **map_ptr,
> -            uint32_t **cpu_map_ptr,
>              unsigned existing_bytes,
>              unsigned new_size)
>  {
> @@ -301,8 +302,8 @@ grow_buffer(struct brw_context *brw,
>     perf_debug("Growing %s - ran out of space\n", old_bo->name);
>  
>     /* Copy existing data to the new larger buffer */
> -   if (*cpu_map_ptr) {
> -      *cpu_map_ptr = new_map = realloc(*cpu_map_ptr, new_size);
> +   if (batch->use_shadow_copy) {
> +      new_map = realloc(*map_ptr, new_size);
>     } else {
>        new_map = brw_bo_map(brw, new_bo, MAP_READ | MAP_WRITE);
>        memcpy(new_map, old_map, existing_bytes);
> @@ -373,7 +374,7 @@ intel_batchbuffer_require_space(struct
> brw_context *brw, GLuint sz,
>           MIN2(batch->batch.bo->size + batch->batch.bo->size / 2,
>                MAX_BATCH_SIZE);
>        grow_buffer(brw, &batch->batch.bo, &batch->batch.map,
> -                  &batch->batch.cpu_map, batch_used, new_size);
> +                  batch_used, new_size);
>        batch->map_next = (void *) batch->batch.map + batch_used;
>        assert(batch_used + sz < batch->batch.bo->size);
>     }
> @@ -806,14 +807,12 @@ submit_batch(struct brw_context *brw, int
> in_fence_fd, int *out_fence_fd)
>     struct intel_batchbuffer *batch = &brw->batch;
>     int ret = 0;
>  
> -   if (batch->batch.cpu_map) {
> +   if (batch->use_shadow_copy) {
>        void *bo_map = brw_bo_map(brw, batch->batch.bo, MAP_WRITE);
> -      memcpy(bo_map, batch->batch.cpu_map, 4 * USED_BATCH(*batch));
> -   }
> +      memcpy(bo_map, batch->batch.map, 4 * USED_BATCH(*batch));
>  
> -   if (batch->state.cpu_map) {
> -      void *bo_map = brw_bo_map(brw, batch->state.bo, MAP_WRITE);
> -      memcpy(bo_map, batch->state.cpu_map, batch->state_used);
> +      bo_map = brw_bo_map(brw, batch->state.bo, MAP_WRITE);
> +      memcpy(bo_map, batch->state.map, batch->state_used);
>     }
>  
>     brw_bo_unmap(batch->batch.bo);
> @@ -1077,7 +1076,7 @@ brw_state_batch(struct brw_context *brw,
>           MIN2(batch->state.bo->size + batch->state.bo->size / 2,
>                MAX_STATE_SIZE);
>        grow_buffer(brw, &batch->state.bo, &batch->state.map,
> -                  &batch->state.cpu_map, batch->state_used,
> new_size);
> +                  batch->state_used, new_size);
>        assert(offset + size < batch->state.bo->size);
>     }
>  
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to