llvmpipe: correctly handle waiting in llvmpipe_fence_finish
authorEmil Velikov <emil.l.velikov@gmail.com>
Thu, 25 Apr 2019 17:42:03 +0000 (18:42 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Fri, 26 Apr 2019 10:26:33 +0000 (11:26 +0100)
Currently if the timeout differs from 0, we'll end up with infinite
wait... even if the user is perfectly clear they don't want that.

Use the new lp_fence_timedwait() helper guarding both waits in an
!lp_fence_signalled block like the rest of llvmpipe.

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/drivers/llvmpipe/lp_screen.c

index 8426427e397b669cbc106c8ee50a767cc10bcc49..510346d2abf05aefbddd5e3f677a7bbc50229173 100644 (file)
@@ -637,7 +637,12 @@ llvmpipe_fence_finish(struct pipe_screen *screen,
    if (!timeout)
       return lp_fence_signalled(f);
 
-   lp_fence_wait(f);
+   if (!lp_fence_signalled(f)) {
+      if (timeout != PIPE_TIMEOUT_INFINITE)
+         return lp_fence_timedwait(f, timeout);
+
+      lp_fence_wait(f);
+   }
    return TRUE;
 }