Mesa (master): i965: fix in fences backend for ext_external_objects edge case

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Apr 28 15:02:48 UTC 2021


Module: Mesa
Branch: master
Commit: 58890ea199fee8108de0c7be1471bdc4cfd50951
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=58890ea199fee8108de0c7be1471bdc4cfd50951

Author: Rohan Garg <rohan.garg at collabora.com>
Date:   Sun Apr 18 23:17:44 2021 +0200

i965: fix in fences backend for ext_external_objects edge case

This ports adc575dbf667f3f60ed1790bb4b6e4c21c1385db to i965

Signed-off-by: Rohan Garg <rohan.garg at collabora.com>
Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
Reviewed-by: Eleni Maria Stea <elene.mst at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5594>

---

 src/mesa/drivers/dri/i965/brw_batch.c   | 6 +++++-
 src/mesa/drivers/dri/i965/brw_context.h | 1 +
 src/mesa/drivers/dri/i965/brw_sync.c    | 1 +
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/brw_batch.c b/src/mesa/drivers/dri/i965/brw_batch.c
index cbb7b6ba0bf..6800c8a9708 100644
--- a/src/mesa/drivers/dri/i965/brw_batch.c
+++ b/src/mesa/drivers/dri/i965/brw_batch.c
@@ -155,6 +155,7 @@ brw_batch_init(struct brw_context *brw)
       malloc(batch->exec_array_size * sizeof(batch->exec_bos[0]));
    batch->validation_list =
       malloc(batch->exec_array_size * sizeof(batch->validation_list[0]));
+   batch->contains_fence_signal = false;
 
    if (INTEL_DEBUG & DEBUG_BATCH) {
       batch->state_batch_sizes =
@@ -292,6 +293,9 @@ brw_batch_reset(struct brw_context *brw)
    struct brw_bo *identifier_bo = brw->workaround_bo;
    if (identifier_bo)
       add_exec_bo(batch, identifier_bo);
+
+   if (batch->contains_fence_signal)
+      batch->contains_fence_signal = false;
 }
 
 static void
@@ -878,7 +882,7 @@ _brw_batch_flush_fence(struct brw_context *brw,
 {
    int ret;
 
-   if (USED_BATCH(brw->batch) == 0)
+   if (USED_BATCH(brw->batch) == 0 && !brw->batch.contains_fence_signal)
       return 0;
 
    /* Check that we didn't just wrap our batchbuffer at a bad time. */
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index a8a0cf3ca4e..b39c4a7d76d 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -504,6 +504,7 @@ struct brw_batch {
    bool needs_sol_reset;
    bool state_base_address_emitted;
    bool no_wrap;
+   bool contains_fence_signal;
 
    struct brw_reloc_list batch_relocs;
    struct brw_reloc_list state_relocs;
diff --git a/src/mesa/drivers/dri/i965/brw_sync.c b/src/mesa/drivers/dri/i965/brw_sync.c
index cd4ec8432ca..97cb9e7f078 100644
--- a/src/mesa/drivers/dri/i965/brw_sync.c
+++ b/src/mesa/drivers/dri/i965/brw_sync.c
@@ -136,6 +136,7 @@ intel_semaphoreobj_signal(struct gl_context *ctx,
       util_dynarray_grow(&brw->batch.exec_fences, struct drm_i915_gem_exec_fence *, 1);
    fence->flags = I915_EXEC_FENCE_SIGNAL;
    fence->handle = iSemObj->syncobj->handle;
+   brw->batch.contains_fence_signal = true;
 }
 
 static void



More information about the mesa-commit mailing list