diff options
author | Rohan Garg <rohan.garg@collabora.com> | 2021-04-18 23:17:44 +0200 |
---|---|---|
committer | Rohan Garg <rohan@garg.io> | 2021-04-28 13:48:03 +0000 |
commit | 58890ea199fee8108de0c7be1471bdc4cfd50951 (patch) | |
tree | 9a66af09c73286840dfbaedd7a00c0f9e67b1d2b /src/mesa/drivers | |
parent | 3a9786d4eef583ee3dae4bba3669fe8ad7ca3670 (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.c | 6 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_sync.c | 1 |
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 |