From 5c049718318bfd9957aaa8f232d40286e101f02f Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 13 Apr 2018 15:35:56 -0700 Subject: [PATCH] i965: Allocate shadow batches to explicitly be the BO size. This unfortunately makes it malloc/realloc on every new batch, rather than once at startup. But it ensures that the shadow buffer's size will absolutely match the BO size. Otherwise, as we tune BATCH_SZ/STATE_SZ or bufmgr cache bucket sizes, we may get a BO size that's rounded up, and fail to allocate the shadow buffer large enough. This doesn't fix any bugs today, as BATCH_SZ/STATE_SZ are the size of a cache bucket, but it's better to be safe than sorry. Reported-by: James Xiong Reviewed-by: Lionel Landwerlin --- src/mesa/drivers/dri/i965/intel_batchbuffer.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index d745c2a3113..b511be37419 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -107,15 +107,11 @@ intel_batchbuffer_init(struct brw_context *brw) 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.map = malloc(STATE_SZ); - } - init_reloc_list(&batch->batch_relocs, 250); init_reloc_list(&batch->state_relocs, 250); + batch->batch.map = NULL; + batch->state.map = NULL; batch->exec_count = 0; batch->exec_array_size = 100; batch->exec_bos = @@ -196,7 +192,9 @@ recreate_growing_buffer(struct brw_context *brw, grow->partial_bo_map = NULL; grow->partial_bytes = 0; - if (!batch->use_shadow_copy) + if (batch->use_shadow_copy) + grow->map = realloc(grow->map, grow->bo->size); + else grow->map = brw_bo_map(brw, grow->bo, MAP_READ | MAP_WRITE); } -- 2.11.0