freedreno: use fd_pipe_wait_timeout()
authorRob Clark <robclark@freedesktop.org>
Tue, 18 Aug 2015 19:07:02 +0000 (15:07 -0400)
committerRob Clark <robclark@freedesktop.org>
Tue, 18 Aug 2015 19:36:30 +0000 (15:36 -0400)
To properly support the case of waiting on a fence with a 0 timeout, we
still need to call down to the kernel.  Which requires the use of the
new fd_pipe_wait_timeout() API.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
configure.ac
src/gallium/drivers/freedreno/freedreno_fence.c
src/gallium/drivers/freedreno/freedreno_fence.h

index 4b76246..1c4e4c2 100644 (file)
@@ -74,7 +74,7 @@ LIBDRM_AMDGPU_REQUIRED=2.4.63
 LIBDRM_INTEL_REQUIRED=2.4.61
 LIBDRM_NVVIEUX_REQUIRED=2.4.33
 LIBDRM_NOUVEAU_REQUIRED=2.4.62
-LIBDRM_FREEDRENO_REQUIRED=2.4.57
+LIBDRM_FREEDRENO_REQUIRED=2.4.64
 DRI2PROTO_REQUIRED=2.6
 DRI3PROTO_REQUIRED=1.0
 PRESENTPROTO_REQUIRED=1.0
index 337359c..5125f09 100644 (file)
@@ -50,29 +50,11 @@ fd_screen_fence_ref(struct pipe_screen *pscreen,
        *ptr = pfence;
 }
 
-/* TODO we need to spiff out libdrm_freedreno a bit to allow passing
- * the timeout.. and maybe a better way to check if fence has been
- * signaled.  The current implementation is a bit lame for now to
- * avoid bumping libdrm version requirement.
- */
-
-boolean fd_screen_fence_signalled(struct pipe_screen *screen,
-               struct pipe_fence_handle *fence)
-{
-       uint32_t timestamp = fd_ringbuffer_timestamp(fence->ctx->ring);
-
-       /* TODO util helper for compare w/ rollover? */
-       return timestamp >= fence->timestamp;
-}
-
 boolean fd_screen_fence_finish(struct pipe_screen *screen,
                struct pipe_fence_handle *fence,
                uint64_t timeout)
 {
-       if (!timeout)
-               return fd_screen_fence_signalled(screen, fence);
-
-       if (fd_pipe_wait(fence->screen->pipe, fence->timestamp))
+       if (fd_pipe_wait_timeout(fence->screen->pipe, fence->timestamp, timeout))
                return false;
 
        return true;
index 9bb3e21..06c314a 100644 (file)
@@ -34,8 +34,6 @@
 void fd_screen_fence_ref(struct pipe_screen *pscreen,
                struct pipe_fence_handle **ptr,
                struct pipe_fence_handle *pfence);
-boolean fd_screen_fence_signalled(struct pipe_screen *screen,
-               struct pipe_fence_handle *pfence);
 boolean fd_screen_fence_finish(struct pipe_screen *screen,
                struct pipe_fence_handle *pfence,
                uint64_t timeout);