iris: Add a timeout_nsec parameter, rename check_syncpt to wait_syncpt
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 7 Feb 2019 17:40:00 +0000 (09:40 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:11 +0000 (10:26 -0800)
I want to be able to wait with a non-zero timeout from elsewhere.

src/gallium/drivers/iris/iris_fence.c
src/gallium/drivers/iris/iris_fence.h
src/gallium/drivers/iris/iris_query.c

index b050090675f9c91131e070d90d3f9d69bdd6b7aa..06452f709669d905e77daeffe402682e6d3f4fc9 100644 (file)
@@ -139,8 +139,9 @@ iris_fence_reference(struct pipe_screen *p_screen,
 }
 
 bool
-iris_check_syncpt(struct pipe_screen *p_screen,
-                  struct iris_syncpt *syncpt)
+iris_wait_syncpt(struct pipe_screen *p_screen,
+                 struct iris_syncpt *syncpt,
+                 int64_t timeout_nsec)
 {
    if (!syncpt)
       return false;
@@ -149,6 +150,7 @@ iris_check_syncpt(struct pipe_screen *p_screen,
    struct drm_syncobj_wait args = {
       .handles = (uintptr_t)&syncpt->handle,
       .count_handles = 1,
+      .timeout_nsec = timeout_nsec,
    };
    return drm_ioctl(screen->fd, DRM_IOCTL_SYNCOBJ_WAIT, &args);
 }
@@ -175,7 +177,7 @@ iris_fence_flush(struct pipe_context *ctx,
    pipe_reference_init(&fence->ref, 1);
 
    for (unsigned b = 0; b < IRIS_BATCH_COUNT; b++) {
-      if (!iris_check_syncpt(ctx->screen, ice->batches[b].last_syncpt))
+      if (!iris_wait_syncpt(ctx->screen, ice->batches[b].last_syncpt, 0))
          continue;
 
       iris_syncpt_reference(screen, &fence->syncpt[fence->count++],
index 056db864f26cd1a038e885b765e0fd5680a9b60b..f14940fdc537844284ac0878089f7a4dc045abbe 100644 (file)
@@ -41,8 +41,9 @@ void iris_syncpt_destroy(struct iris_screen *, struct iris_syncpt *);
 void iris_batch_add_syncpt(struct iris_batch *batch,
                            struct iris_syncpt *syncpt,
                            unsigned flags);
-bool iris_check_syncpt(struct pipe_screen *screen,
-                       struct iris_syncpt *syncpt);
+bool iris_wait_syncpt(struct pipe_screen *screen,
+                      struct iris_syncpt *syncpt,
+                      int64_t timeout_nsec);
 static inline void
 iris_syncpt_reference(struct iris_screen *screen,
                       struct iris_syncpt **dst,
index 2e6cc34c534a33e4f4ac316a262723e868b42833..6e8062f3b4ed5e3716fa0ee18925515b404e416f 100644 (file)
@@ -876,7 +876,7 @@ iris_get_query_result(struct pipe_context *ctx,
 
       while (!q->map->snapshots_landed) {
          if (wait)
-            iris_check_syncpt(ctx->screen, q->syncpt);
+            iris_wait_syncpt(ctx->screen, q->syncpt, 0);
          else
             return false;
       }