summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2018-04-13 15:35:56 -0700
committerKenneth Graunke <[email protected]>2018-05-02 09:26:55 -0700
commit5c049718318bfd9957aaa8f232d40286e101f02f (patch)
tree7bf79e9ab8afaf6cbb74d4ea0cab634c2eb81c10 /src/mesa
parentec5df73803f101276973eeb780d1591462e5e0a6 (diff)
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 <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/drivers/dri/i965/intel_batchbuffer.c12
1 files 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);
}