iris: hack to avoid memorybarriers out the wazoo
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 19 Oct 2018 08:40:06 +0000 (01:40 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:09 +0000 (10:26 -0800)
we don't want to emit piles of pipe controls to a compute batch if
it isn't necessary...

prevents double-batch-wraps in cs-op-selection-bool-bvec4-bvec4
(but it's still kinda a big ol' hack...)

src/gallium/drivers/iris/iris_pipe_control.c

index fe93761415022f75d4f86aa77964261e0da83b10..5b9935398d3d0c90745b85a1a95d95e5eadac920 100644 (file)
@@ -182,10 +182,14 @@ iris_memory_barrier(struct pipe_context *ctx, unsigned flags)
    }
 
    // XXX: MAPPED_BUFFER, QUERY_BUFFER, STREAMOUT_BUFFER, GLOBAL_BUFFER?
-   // XXX: compute batch?
 
-   iris_emit_pipe_control_flush(&ice->render_batch, bits);
-   iris_emit_pipe_control_flush(&ice->compute_batch, bits);
+   // XXX: don't unconditionally emit flushes in both engines, we don't
+   // even know if we're even using e.g. the compute engine...
+
+   if (ice->render_batch.contains_draw)
+      iris_emit_pipe_control_flush(&ice->render_batch, bits);
+   if (ice->compute_batch.contains_draw)
+      iris_emit_pipe_control_flush(&ice->compute_batch, bits);
 }
 
 void