Mesa (main): v3d: add fence wait function

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Aug 3 09:46:48 UTC 2021


Module: Mesa
Branch: main
Commit: e928aece5087e8d70bef5ad7d21bf264f52e4d47
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e928aece5087e8d70bef5ad7d21bf264f52e4d47

Author: Juan A. Suarez Romero <jasuarez at igalia.com>
Date:   Thu Apr 22 10:10:25 2021 +0200

v3d: add fence wait function

Waits for a V3D fence to be signaled.

Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
Signed-off-by: Juan A. Suarez Romero <jasuarez at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10666>

---

 src/gallium/drivers/v3d/v3d_context.h |  4 ++++
 src/gallium/drivers/v3d/v3d_fence.c   | 27 ++++++++++++++++++---------
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/v3d/v3d_context.h b/src/gallium/drivers/v3d/v3d_context.h
index 56e5b87a2f9..984a78cfeb1 100644
--- a/src/gallium/drivers/v3d/v3d_context.h
+++ b/src/gallium/drivers/v3d/v3d_context.h
@@ -750,6 +750,10 @@ v3d_fence_unreference(struct v3d_fence **fence);
 
 struct v3d_fence *v3d_fence_create(struct v3d_context *v3d);
 
+bool v3d_fence_wait(struct v3d_screen *screen,
+                    struct v3d_fence *fence,
+                    uint64_t timeout_ns);
+
 void v3d_update_primitive_counters(struct v3d_context *v3d);
 
 bool v3d_line_smoothing_enabled(struct v3d_context *v3d);
diff --git a/src/gallium/drivers/v3d/v3d_fence.c b/src/gallium/drivers/v3d/v3d_fence.c
index 7076c58f9b7..3abfcd7c750 100644
--- a/src/gallium/drivers/v3d/v3d_fence.c
+++ b/src/gallium/drivers/v3d/v3d_fence.c
@@ -72,17 +72,14 @@ v3d_fence_unreference(struct v3d_fence **fence)
         v3d_fence_reference(NULL, (struct pipe_fence_handle **)fence, NULL);
 }
 
-static bool
-v3d_fence_finish(struct pipe_screen *pscreen,
-		 struct pipe_context *ctx,
-                 struct pipe_fence_handle *pf,
-                 uint64_t timeout_ns)
+bool
+v3d_fence_wait(struct v3d_screen *screen,
+               struct v3d_fence *fence,
+               uint64_t timeout_ns)
 {
-        struct v3d_screen *screen = v3d_screen(pscreen);
-        struct v3d_fence *f = (struct v3d_fence *)pf;
         int ret;
-
         unsigned syncobj;
+
         ret = drmSyncobjCreate(screen->fd, 0, &syncobj);
         if (ret) {
                 fprintf(stderr, "Failed to create syncobj to wait on: %d\n",
@@ -90,7 +87,7 @@ v3d_fence_finish(struct pipe_screen *pscreen,
                 return false;
         }
 
-        ret = drmSyncobjImportSyncFile(screen->fd, syncobj, f->fd);
+        ret = drmSyncobjImportSyncFile(screen->fd, syncobj, fence->fd);
         if (ret) {
                 fprintf(stderr, "Failed to import fence to syncobj: %d\n", ret);
                 return false;
@@ -107,6 +104,18 @@ v3d_fence_finish(struct pipe_screen *pscreen,
         return ret >= 0;
 }
 
+static bool
+v3d_fence_finish(struct pipe_screen *pscreen,
+		 struct pipe_context *ctx,
+                 struct pipe_fence_handle *pf,
+                 uint64_t timeout_ns)
+{
+        struct v3d_screen *screen = v3d_screen(pscreen);
+        struct v3d_fence *fence = (struct v3d_fence *)pf;
+
+        return v3d_fence_wait(screen, fence, timeout_ns);
+}
+
 struct v3d_fence *
 v3d_fence_create(struct v3d_context *v3d)
 {



More information about the mesa-commit mailing list