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