virgl: push uint64_t fence_id down into each context's fence_retire

uint64_t fence_id is now the standard for the virglrenderer abstraction,
forcing each context to decide what to do with it on their own. For now
each context casts their void* back to uintptr_t. There shouldn't be any
functional change from this, since contexts previously got a void*
directly from the VMM.

Signed-off-by: Ryan Neph <ryanneph@google.com>
Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/806>
diff --git a/src/drm/drm_fence.c b/src/drm/drm_fence.c
index edde328..d6be03b 100644
--- a/src/drm/drm_fence.c
+++ b/src/drm/drm_fence.c
@@ -81,7 +81,7 @@
       if (ret == 1) {
          drm_dbg("fence signaled: %p (%p)", fence, fence->fence_cookie);
          timeline->vctx->fence_retire(timeline->vctx, timeline->ring_idx,
-                                      fence->fence_cookie);
+                                      (uintptr_t)fence->fence_cookie);
          write_eventfd(timeline->eventfd, 1);
          drm_fence_destroy(fence);
       } else if (ret != 0) {
diff --git a/src/drm/msm/msm_renderer.c b/src/drm/msm/msm_renderer.c
index 8de7d50..2bc3466 100644
--- a/src/drm/msm/msm_renderer.c
+++ b/src/drm/msm/msm_renderer.c
@@ -1201,7 +1201,7 @@
     * already passed.. so just immediate signal:
     */
    if (queue_id == 0) {
-      vctx->fence_retire(vctx, queue_id, fence_cookie);
+      vctx->fence_retire(vctx, queue_id, fence_id);
       return 0;
    }
 
diff --git a/src/proxy/proxy_context.c b/src/proxy/proxy_context.c
index cce5a1d..95ca798 100644
--- a/src/proxy/proxy_context.c
+++ b/src/proxy/proxy_context.c
@@ -128,7 +128,7 @@
       if (!proxy_fence_is_signaled(fence, timeline->cur_seqno) && !force_retire_all)
          return false;
 
-      ctx->base.fence_retire(&ctx->base, ring_idx, fence->cookie);
+      ctx->base.fence_retire(&ctx->base, ring_idx, (uintptr_t)fence->cookie);
 
       list_del(&fence->head);
       proxy_context_free_fence(ctx, fence);
diff --git a/src/venus/vkr_context.c b/src/venus/vkr_context.c
index 7d6b27b..28cef51 100644
--- a/src/venus/vkr_context.c
+++ b/src/venus/vkr_context.c
@@ -193,7 +193,8 @@
    /* retire syncs from destroyed devices */
    LIST_FOR_EACH_ENTRY_SAFE (sync, sync_tmp, &ctx->signaled_syncs, head) {
       /* queue_id might have already get reused but is opaque to the clients */
-      ctx->base.fence_retire(&ctx->base, sync->queue_id, sync->fence_cookie);
+      ctx->base.fence_retire(&ctx->base, sync->queue_id,
+                             (uintptr_t)sync->fence_cookie);
       free(sync);
    }
    list_inithead(&ctx->signaled_syncs);
@@ -212,7 +213,8 @@
       vkr_queue_get_signaled_syncs(queue, &retired_syncs, &queue_empty);
 
       LIST_FOR_EACH_ENTRY_SAFE (sync, sync_tmp, &retired_syncs, head) {
-         ctx->base.fence_retire(&ctx->base, sync->queue_id, sync->fence_cookie);
+         ctx->base.fence_retire(&ctx->base, sync->queue_id,
+                                (uintptr_t)sync->fence_cookie);
          vkr_device_free_queue_sync(dev, sync);
       }
 
diff --git a/src/venus/vkr_queue.c b/src/venus/vkr_queue.c
index 9309d7b..fb83a44 100644
--- a/src/venus/vkr_queue.c
+++ b/src/venus/vkr_queue.c
@@ -131,7 +131,8 @@
    struct vn_device_proc_table *vk = &dev->proc_table;
 
    if (vkr_renderer_flags & VKR_RENDERER_ASYNC_FENCE_CB) {
-      ctx->base.fence_retire(&ctx->base, sync->queue_id, sync->fence_cookie);
+      ctx->base.fence_retire(&ctx->base, sync->queue_id,
+                             (uintptr_t)sync->fence_cookie);
       vkr_device_free_queue_sync(dev, sync);
    } else {
       vk->DestroyFence(dev->base.handle.device, sync->fence, NULL);
@@ -225,7 +226,8 @@
       list_del(&sync->head);
 
       if (vkr_renderer_flags & VKR_RENDERER_ASYNC_FENCE_CB) {
-         ctx->base.fence_retire(&ctx->base, sync->queue_id, sync->fence_cookie);
+         ctx->base.fence_retire(&ctx->base, sync->queue_id,
+                                (uintptr_t)sync->fence_cookie);
          vkr_device_free_queue_sync(queue->device, sync);
       } else {
          list_addtail(&sync->head, &queue->signaled_syncs);
diff --git a/src/virgl_context.h b/src/virgl_context.h
index e347b52..4bf1370 100644
--- a/src/virgl_context.h
+++ b/src/virgl_context.h
@@ -53,7 +53,7 @@
 
 typedef void (*virgl_context_fence_retire)(struct virgl_context *ctx,
                                            uint64_t queue_id,
-                                           void *fence_cookie);
+                                           uint64_t fence_id);
 
 /**
  * Base class for renderer contexts.  For example, vrend_decode_ctx is a
diff --git a/src/virglrenderer.c b/src/virglrenderer.c
index ca89e4e..d2bd8f4 100644
--- a/src/virglrenderer.c
+++ b/src/virglrenderer.c
@@ -186,12 +186,12 @@
 
 static void per_context_fence_retire(struct virgl_context *ctx,
                                      uint64_t queue_id,
-                                     void *fence_cookie)
+                                     uint64_t fence_id)
 {
    state.cbs->write_context_fence(state.cookie,
                                   ctx->ctx_id,
                                   queue_id,
-                                  (uint64_t)(uintptr_t)fence_cookie);
+                                  fence_id);
 }
 
 int virgl_renderer_context_create_with_flags(uint32_t ctx_id,
diff --git a/src/vrend_decode.c b/src/vrend_decode.c
index 6c447d7..9b4d5ce 100644
--- a/src/vrend_decode.c
+++ b/src/vrend_decode.c
@@ -1510,7 +1510,7 @@
                                           void *retire_data)
 {
    struct vrend_decode_ctx *dctx = retire_data;
-   dctx->base.fence_retire(&dctx->base, 0, fence_cookie);
+   dctx->base.fence_retire(&dctx->base, 0, (uintptr_t)fence_cookie);
 }
 
 struct virgl_context *vrend_renderer_context_create(uint32_t handle,