Quoting Kenneth Graunke (2017-09-13 21:54:13) > +/** > + * Target sizes of the batch and state buffers. We create the initial > + * buffers at these sizes, and flush when they're nearly full. If we > + * underestimate how close we are to the end, and suddenly need more space > + * in the middle of a draw, we can grow the buffers, and finish the draw. > + * At that point, we'll be over our target size, so the next operation > + * should flush. Each time we flush the batch, we recreate both buffers > + * at the original target size, so it doesn't grow without bound. > + */ > #define BATCH_SZ (8192*sizeof(uint32_t)) > #define STATE_SZ (8192*sizeof(uint32_t)) > > +/* The kernel assumes batchbuffers are smaller than 256kB. */ > +#define MAX_BATCH_SIZE (256 * 1024) > + > +/* 3DSTATE_BINDING_TABLE_POINTERS has a U16 offset from Surface State Base > + * Address, which means that we can't put binding tables beyond 64kB. This > + * effectively limits the maximum statebuffer size to 64kB. > + */ > +#define MAX_STATE_SIZE (64 * 1024)
> +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) > +{ > + struct intel_batchbuffer *batch = &brw->batch; > + struct brw_bufmgr *bufmgr = brw->bufmgr; > + > + uint32_t *old_map = *map_ptr; > + struct brw_bo *old_bo = *bo_ptr; > + > + struct brw_bo *new_bo = brw_bo_alloc(bufmgr, old_bo->name, new_size, > 4096); > + uint32_t *new_map; > + > + 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); What I was thinking was for the cpu_map, you know the max size and the allocation is persistent, so just allocate the max upfront and skip the realloc (+ implicit copy) of the shadow. -Chris _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev