summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYiwei Zhang <zzyiwei@chromium.org>2023-01-17 14:53:29 -0800
committerMarge Bot <emma+marge@anholt.net>2023-02-01 01:18:07 +0000
commitac2331cc240c05f84d1b424f35e6fad9569f8e37 (patch)
treee89dfccf4e137621f7dccde4aeff9def0ad5af6c
parentc2f17cc7b508c820e4ff72c266a05b03eacb60ad (diff)
vkr: add vkr_renderer_callbacks to simplify server interface
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/973>
-rw-r--r--server/render_state.c17
-rw-r--r--src/venus/vkr_renderer.c12
-rw-r--r--src/venus/vkr_renderer.h13
3 files changed, 22 insertions, 20 deletions
diff --git a/server/render_state.c b/server/render_state.c
index 5e8e79e..c101d84 100644
--- a/server/render_state.c
+++ b/server/render_state.c
@@ -94,7 +94,7 @@ render_state_lookup_context(uint32_t ctx_id)
}
static void
-render_state_debug_callback(const char *fmt, va_list ap)
+render_state_cb_debug_logger(const char *fmt, va_list ap)
{
char buf[1024];
vsnprintf(buf, sizeof(buf), fmt, ap);
@@ -102,10 +102,7 @@ render_state_debug_callback(const char *fmt, va_list ap)
}
static void
-render_state_cb_write_context_fence(UNUSED void *cookie,
- uint32_t ctx_id,
- uint32_t ring_idx,
- uint64_t fence_id)
+render_state_cb_retire_fence(uint32_t ctx_id, uint32_t ring_idx, uint64_t fence_id)
{
struct render_context *ctx = render_state_lookup_context(ctx_id);
assert(ctx);
@@ -114,9 +111,9 @@ render_state_cb_write_context_fence(UNUSED void *cookie,
render_context_update_timeline(ctx, ring_idx, seqno);
}
-static const struct virgl_renderer_callbacks render_state_cbs = {
- .version = VIRGL_RENDERER_CALLBACKS_VERSION,
- .write_context_fence = render_state_cb_write_context_fence,
+static const struct vkr_renderer_callbacks render_state_cbs = {
+ .debug_logger = render_state_cb_debug_logger,
+ .retire_fence = render_state_cb_retire_fence,
};
static void
@@ -156,7 +153,7 @@ render_state_init(uint32_t init_flags)
/* always use sync thread and async fence cb for low latency */
static const uint32_t vkr_flags =
VKR_RENDERER_THREAD_SYNC | VKR_RENDERER_ASYNC_FENCE_CB;
- if (!vkr_renderer_init(vkr_flags, render_state_debug_callback, &render_state_cbs))
+ if (!vkr_renderer_init(vkr_flags, &render_state_cbs))
return false;
list_inithead(&state.contexts);
@@ -245,7 +242,7 @@ render_state_import_resource(uint32_t ctx_id,
}
void
-render_state_destroy_resource(UNUSED uint32_t ctx_id, uint32_t res_id)
+render_state_destroy_resource(uint32_t ctx_id, uint32_t res_id)
{
SCOPE_LOCK_RENDERER();
vkr_renderer_destroy_resource(ctx_id, res_id);
diff --git a/src/venus/vkr_renderer.c b/src/venus/vkr_renderer.c
index c38f75f..b9304fe 100644
--- a/src/venus/vkr_renderer.c
+++ b/src/venus/vkr_renderer.c
@@ -12,7 +12,7 @@
#include "vkr_context.h"
-const struct virgl_renderer_callbacks *vkr_renderer_cbs;
+const struct vkr_renderer_callbacks *vkr_renderer_cbs;
size_t
vkr_get_capset(void *capset)
@@ -50,9 +50,7 @@ vkr_get_capset(void *capset)
}
bool
-vkr_renderer_init(uint32_t flags,
- virgl_debug_callback_type debug_cb,
- const struct virgl_renderer_callbacks *cbs)
+vkr_renderer_init(uint32_t flags, const struct vkr_renderer_callbacks *cbs)
{
TRACE_INIT();
TRACE_FUNC();
@@ -62,7 +60,7 @@ vkr_renderer_init(uint32_t flags,
if ((flags & required_flags) != required_flags)
return false;
- virgl_log_set_logger(debug_cb);
+ virgl_log_set_logger(cbs->debug_logger);
vkr_renderer_cbs = cbs;
@@ -95,7 +93,7 @@ vkr_renderer_retire_fence(struct virgl_context *ctx, uint32_t ring_idx, uint64_t
{
TRACE_FUNC();
- vkr_renderer_cbs->write_context_fence(NULL, ctx->ctx_id, ring_idx, fence_id);
+ vkr_renderer_cbs->retire_fence(ctx->ctx_id, ring_idx, fence_id);
}
bool
@@ -167,7 +165,7 @@ vkr_renderer_submit_fence(uint32_t ctx_id,
if (!ctx)
return false;
- assert(vkr_renderer_cbs->write_context_fence);
+ assert(vkr_renderer_cbs->retire_fence);
return !ctx->submit_fence(ctx, flags, ring_idx, fence_id);
}
diff --git a/src/venus/vkr_renderer.h b/src/venus/vkr_renderer.h
index 0137bc2..713c15a 100644
--- a/src/venus/vkr_renderer.h
+++ b/src/venus/vkr_renderer.h
@@ -17,13 +17,20 @@
#define VKR_RENDERER_THREAD_SYNC (1u << 0)
#define VKR_RENDERER_ASYNC_FENCE_CB (1u << 1)
+typedef void (*vkr_renderer_retire_fence_callback_type)(uint32_t ctx_id,
+ uint32_t ring_idx,
+ uint64_t fence_id);
+
+struct vkr_renderer_callbacks {
+ virgl_debug_callback_type debug_logger;
+ vkr_renderer_retire_fence_callback_type retire_fence;
+};
+
size_t
vkr_get_capset(void *capset);
bool
-vkr_renderer_init(uint32_t flags,
- virgl_debug_callback_type debug_cb,
- const struct virgl_renderer_callbacks *cbs);
+vkr_renderer_init(uint32_t flags, const struct vkr_renderer_callbacks *cbs);
void
vkr_renderer_fini(void);