iris: Use iris_flush_bits_for_history in iris_transfer_flush_region
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 20 Jun 2019 04:01:21 +0000 (23:01 -0500)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 20 Jun 2019 18:32:15 +0000 (13:32 -0500)
Instead of using the combined iris_flush_and_dirty_for_history, use
iris_flush_bits_for_history directly - we were already using the split
out iris_dirty_for_history.  There's no need to dirty twice, and we can
avoid the looping altogether for non-buffers.

src/gallium/drivers/iris/iris_resource.c

index f088f259f19427be6607896597c7eab24782e742..1f7ed3e270baf10ca27598c6aa6ddc5d9eaad605 100644 (file)
@@ -1472,12 +1472,19 @@ iris_transfer_flush_region(struct pipe_context *ctx,
    if (map->staging)
       iris_flush_staging_region(xfer, box);
 
+   uint32_t history_flush = 0;
+
+   if (res->base.target == PIPE_BUFFER) {
+      history_flush |= iris_flush_bits_for_history(res) |
+                       PIPE_CONTROL_RENDER_TARGET_FLUSH;
+   }
+
    for (int i = 0; i < IRIS_BATCH_COUNT; i++) {
-      if (ice->batches[i].contains_draw ||
-          ice->batches[i].cache.render->entries) {
-         iris_batch_maybe_flush(&ice->batches[i], 24);
-         iris_flush_and_dirty_for_history(ice, &ice->batches[i], res,
-                                          "cache history: transfer flush");
+      struct iris_batch *batch = &ice->batches[i];
+      if (batch->contains_draw || batch->cache.render->entries) {
+         iris_batch_maybe_flush(batch, 24);
+         iris_emit_pipe_control_flush(batch, "cache history: transfer flush",
+                                      history_flush);
       }
    }