iris: cross batch flushing
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 7 Nov 2018 05:34:58 +0000 (21:34 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:09 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_batch.c

index 8f53dacb9dde7a2202c0d71f93caecc1bdbaafc4..7196691f73c5313c092f1da96cb3f682a874621c 100644 (file)
@@ -205,6 +205,16 @@ add_exec_bo(struct iris_batch *batch, struct iris_bo *bo)
          return index;
    }
 
+   /* This is the first time our batch has seen this BO.  Before we use it,
+    * we need to see if other batches reference it - if so, we should flush
+    * those first.
+    */
+   for (int b = 0; b < ARRAY_SIZE(batch->other_batches); b++) {
+      if (iris_batch_references(batch->other_batches[b], bo))
+         iris_batch_flush(batch->other_batches[b]);
+   }
+
+   /* Now, take a reference and add it to the validation list. */
    iris_bo_reference(bo);
 
    if (batch->exec_count == batch->exec_array_size) {