summaryrefslogtreecommitdiff
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorRohan Garg <rohan.garg@collabora.com>2021-04-18 23:17:44 +0200
committerRohan Garg <rohan@garg.io>2021-04-28 13:48:03 +0000
commit58890ea199fee8108de0c7be1471bdc4cfd50951 (patch)
tree9a66af09c73286840dfbaedd7a00c0f9e67b1d2b /src/mesa/drivers
parent3a9786d4eef583ee3dae4bba3669fe8ad7ca3670 (diff)
i965: fix in fences backend for ext_external_objects edge case
This ports adc575dbf667f3f60ed1790bb4b6e4c21c1385db to i965 Signed-off-by: Rohan Garg <rohan.garg@collabora.com> Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Eleni Maria Stea <elene.mst@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5594>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/brw_batch.c6
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.h1
-rw-r--r--src/mesa/drivers/dri/i965/brw_sync.c1
3 files changed, 7 insertions, 1 deletions
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