Cacheing the signal status complicates the code for questionable performance benefit. I added the cacheing long ago, and I now think it was the wrong decision.
When we later add support for fences based on sync fds (that is, a fd backed by struct sync_file in Linux 4.8), the cacheing becomes even more hairy. So it's best to eliminate it now. --- src/mesa/drivers/dri/i965/intel_syncobj.c | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_syncobj.c b/src/mesa/drivers/dri/i965/intel_syncobj.c index 4276f3f..ba8d3d0 100644 --- a/src/mesa/drivers/dri/i965/intel_syncobj.c +++ b/src/mesa/drivers/dri/i965/intel_syncobj.c @@ -47,9 +47,7 @@ struct brw_fence { struct brw_context *brw; /** The fence waits for completion of this batch. */ drm_intel_bo *batch_bo; - mtx_t mutex; - bool signalled; }; struct intel_gl_sync_object { @@ -78,7 +76,6 @@ static void brw_fence_insert(struct brw_context *brw, struct brw_fence *fence) { assert(!fence->batch_bo); - assert(!fence->signalled); brw_emit_mi_flush(brw); fence->batch_bo = brw->batch.bo; @@ -89,17 +86,7 @@ brw_fence_insert(struct brw_context *brw, struct brw_fence *fence) static bool brw_fence_has_completed_locked(struct brw_fence *fence) { - if (fence->signalled) - return true; - - if (fence->batch_bo && !drm_intel_bo_busy(fence->batch_bo)) { - drm_intel_bo_unreference(fence->batch_bo); - fence->batch_bo = NULL; - fence->signalled = true; - return true; - } - - return false; + return !drm_intel_bo_busy(fence->batch_bo); } static bool @@ -118,9 +105,6 @@ static bool brw_fence_client_wait_locked(struct brw_context *brw, struct brw_fence *fence, uint64_t timeout) { - if (fence->signalled) - return true; - assert(fence->batch_bo); /* DRM_IOCTL_I915_GEM_WAIT uses a signed 64 bit timeout and returns @@ -131,14 +115,7 @@ brw_fence_client_wait_locked(struct brw_context *brw, struct brw_fence *fence, if (timeout > INT64_MAX) timeout = INT64_MAX; - if (drm_intel_gem_bo_wait(fence->batch_bo, timeout) != 0) - return false; - - fence->signalled = true; - drm_intel_bo_unreference(fence->batch_bo); - fence->batch_bo = NULL; - - return true; + return drm_intel_gem_bo_wait(fence->batch_bo, timeout) == 0; } /** -- 2.10.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev