intel/blorp: Plumb through access to the workaround BO
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 5 Jun 2017 21:19:28 +0000 (14:19 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 7 Jun 2017 15:54:54 +0000 (08:54 -0700)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101283
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/intel/blorp/blorp_genX_exec.h
src/intel/vulkan/genX_blorp_exec.c
src/mesa/drivers/dri/i965/genX_blorp_exec.c

index 2276d7c06bbaba91a5b312b10651af4076181c2c..7c8a9416c58768a78d164b12bae53af04b274f6c 100644 (file)
@@ -27,6 +27,7 @@
 #include "blorp_priv.h"
 #include "common/gen_device_info.h"
 #include "common/gen_sample_positions.h"
+#include "genxml/gen_macros.h"
 
 /**
  * This file provides the blorp pipeline setup and execution functionality.
@@ -59,6 +60,11 @@ static void *
 blorp_alloc_vertex_buffer(struct blorp_batch *batch, uint32_t size,
                           struct blorp_address *addr);
 
+#if GEN_GEN >= 8
+static struct blorp_address
+blorp_get_workaround_page(struct blorp_batch *batch);
+#endif
+
 static void
 blorp_alloc_binding_table(struct blorp_batch *batch, unsigned num_entries,
                           unsigned state_size, unsigned state_alignment,
@@ -82,8 +88,6 @@ blorp_emit_pipeline(struct blorp_batch *batch,
 
 /***** BEGIN blorp_exec implementation ******/
 
-#include "genxml/gen_macros.h"
-
 static uint64_t
 _blorp_combine_address(struct blorp_batch *batch, void *location,
                        struct blorp_address address, uint32_t delta)
@@ -1497,6 +1501,7 @@ blorp_emit_gen8_hiz_op(struct blorp_batch *batch,
     */
    blorp_emit(batch, GENX(PIPE_CONTROL), pc) {
       pc.PostSyncOperation = WriteImmediateData;
+      pc.Address = blorp_get_workaround_page(batch);
    }
 
    blorp_emit(batch, GENX(3DSTATE_WM_HZ_OP), hzp);
index eb338991456b40cf43c5e1ec9e7bce0b3d5316f2..04c5499a08c83ed988a30c809ac32e8e01527286 100644 (file)
@@ -139,6 +139,18 @@ blorp_alloc_vertex_buffer(struct blorp_batch *batch, uint32_t size,
    return vb_state.map;
 }
 
+#if GEN_GEN >= 8
+static struct blorp_address
+blorp_get_workaround_page(struct blorp_batch *batch)
+{
+   struct anv_cmd_buffer *cmd_buffer = batch->driver_batch;
+
+   return (struct blorp_address) {
+      .buffer = &cmd_buffer->device->workaround_bo,
+   };
+}
+#endif
+
 static void
 blorp_flush_range(struct blorp_batch *batch, void *start, size_t size)
 {
index 3451d7187eb292f25ed819374ec07ff198bc60c6..dc0cd7e466cfa297c6813a08ff0f049ccb5b6da4 100644 (file)
@@ -150,6 +150,19 @@ blorp_alloc_vertex_buffer(struct blorp_batch *batch, uint32_t size,
    return data;
 }
 
+#if GEN_GEN >= 8
+static struct blorp_address
+blorp_get_workaround_page(struct blorp_batch *batch)
+{
+   assert(batch->blorp->driver_ctx == batch->driver_batch);
+   struct brw_context *brw = batch->driver_batch;
+
+   return (struct blorp_address) {
+      .buffer = brw->workaround_bo,
+   };
+}
+#endif
+
 static void
 blorp_flush_range(struct blorp_batch *batch, void *start, size_t size)
 {