i965: Clean up intel_batchbuffer_init().
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 11 Aug 2017 03:47:53 +0000 (20:47 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 12 Aug 2017 08:41:24 +0000 (01:41 -0700)
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 <tapani.palli@intel.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/i965/intel_batchbuffer.c
src/mesa/drivers/dri/i965/intel_batchbuffer.h

index 60b14571ed0d6ad98eca837c9fe17aacbf6049b9..2d8f34f7efa89a2de0b021b894e5717d70dafe5f 100644 (file)
@@ -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
index 66b9a28129e195171f2a56f104cd219bc0743a7a..59488a2f9692d1ffe4bcc0a14e003c75028dbb59 100644 (file)
@@ -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))
index 4661a2a9f669fa172f8ff27b4a3c025783e1a557..99d2747f282e161b087e99b21a2e12f5340c7f0f 100644 (file)
@@ -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);