v3d: add fence wait function
Waits for a V3D fence to be signaled. Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10666>
This commit is contained in:
parent
c59d8a1798
commit
e928aece50
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue