From 58890ea199fee8108de0c7be1471bdc4cfd50951 Mon Sep 17 00:00:00 2001 From: Rohan Garg Date: Sun, 18 Apr 2021 23:17:44 +0200 Subject: [PATCH] i965: fix in fences backend for ext_external_objects edge case MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This ports adc575dbf667f3f60ed1790bb4b6e4c21c1385db to i965 Signed-off-by: Rohan Garg Reviewed-by: Tapani Pälli Reviewed-by: Eleni Maria Stea Part-of: --- 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