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