iris: Add wait fences to properly sync between render/compute
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 8 Nov 2018 22:51:16 +0000 (14:51 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:10 +0000 (10:26 -0800)
When flushing a batch due to a data dependency, we need to not only
kick off the other batch's work, but stall our execution until it
completes.  Just wait on last_syncpt after flushing it.

src/gallium/drivers/iris/iris_batch.c

index 85051186980acb3f4ee1cdc8c71296ea207a6930..cc346ca0029c7370b7b938ca2c2627fec62343b1 100644 (file)
@@ -299,6 +299,8 @@ iris_use_pinned_bo(struct iris_batch *batch,
       if (other_entry &&
           ((other_entry->flags & EXEC_OBJECT_WRITE) || writable)) {
          iris_batch_flush(batch->other_batches[b]);
+         iris_batch_add_syncpt(batch, batch->other_batches[b]->last_syncpt,
+                               I915_EXEC_FENCE_WAIT);
       }
    }