From da0840246fd91134a61e35f1bd987d77111aed26 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Thu, 10 Aug 2017 20:47:53 -0700 Subject: [PATCH] i965: Clean up intel_batchbuffer_init(). MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Passing screen lets us get the kernel features, devinfo, and bufmgr, without needing container_of. This use of container_of could cause crashes due to issues with the "sample" macro parameter. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102062 Reviewed-by: Tapani Pälli Reviewed-by: Emil Velikov Reviewed-by: Iago Toral Quiroga --- src/mesa/drivers/dri/i965/brw_context.c | 2 +- src/mesa/drivers/dri/i965/intel_batchbuffer.c | 16 ++++++++-------- src/mesa/drivers/dri/i965/intel_batchbuffer.h | 5 ++--- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 60b14571ed0..2d8f34f7efa 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -934,7 +934,7 @@ brwCreateContext(gl_api api, intel_fbo_init(brw); - intel_batchbuffer_init(&brw->batch, brw->bufmgr, brw->has_llc); + intel_batchbuffer_init(screen, &brw->batch); if (brw->gen >= 6) { /* Create a new hardware context. Using a hardware context means that diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index 66b9a28129e..59488a2f969 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -58,13 +58,13 @@ uint_key_hash(const void *key) } void -intel_batchbuffer_init(struct intel_batchbuffer *batch, - struct brw_bufmgr *bufmgr, - bool has_llc) +intel_batchbuffer_init(struct intel_screen *screen, + struct intel_batchbuffer *batch) { - struct brw_context *brw = container_of(batch, brw, batch); + struct brw_bufmgr *bufmgr = screen->bufmgr; + const struct gen_device_info *devinfo = &screen->devinfo; - if (!has_llc) { + if (!devinfo->has_llc) { batch->cpu_map = malloc(BATCH_SZ); batch->map = batch->cpu_map; batch->map_next = batch->cpu_map; @@ -87,14 +87,14 @@ intel_batchbuffer_init(struct intel_batchbuffer *batch, } batch->use_batch_first = - brw->screen->kernel_features & KERNEL_ALLOWS_EXEC_BATCH_FIRST; + screen->kernel_features & KERNEL_ALLOWS_EXEC_BATCH_FIRST; /* PIPE_CONTROL needs a w/a but only on gen6 */ batch->valid_reloc_flags = EXEC_OBJECT_WRITE; - if (brw->gen == 6) + if (devinfo->gen == 6) batch->valid_reloc_flags |= EXEC_OBJECT_NEEDS_GTT; - intel_batchbuffer_reset(batch, bufmgr, has_llc); + intel_batchbuffer_reset(batch, bufmgr, devinfo->has_llc); } #define READ_ONCE(x) (*(volatile __typeof__(x) *)&(x)) diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.h b/src/mesa/drivers/dri/i965/intel_batchbuffer.h index 4661a2a9f66..99d2747f282 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.h +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.h @@ -38,9 +38,8 @@ extern "C" { struct intel_batchbuffer; -void intel_batchbuffer_init(struct intel_batchbuffer *batch, - struct brw_bufmgr *bufmgr, - bool has_llc); +void intel_batchbuffer_init(struct intel_screen *screen, + struct intel_batchbuffer *batch); void intel_batchbuffer_free(struct intel_batchbuffer *batch); void intel_batchbuffer_save_state(struct brw_context *brw); void intel_batchbuffer_reset_to_saved(struct brw_context *brw); -- 2.30.2