diff options
author | Louis-Francis Ratté-Boulianne <lfrb@collabora.com> | 2021-07-09 01:17:22 -0400 |
---|---|---|
committer | Chia-I Wu <olvaffe@gmail.com> | 2021-07-12 08:50:00 -0700 |
commit | 0ee70e92a51c910cd90be3db36c4858b5c7deaed (patch) | |
tree | c3225bf028bfa964f18a9122be807a604246efd4 | |
parent | 23c4ef5aa35c754330ea0c73ac902b27d4dc5e96 (diff) | |
download | virglrenderer-0ee70e92a51c910cd90be3db36c4858b5c7deaed.tar.gz |
virgl: Add VIRGL_RENDERER_ASYNC_FENCE_CB flag
The flag allows fence callback to be executed directly from the
fence polling thread. It requires the `write_fence` callback
provided by the user to be thread-safe.
The `virgl_renderer_poll()` method no longer needs to be called
by the user if that flag is used.
v2: set VKR_RENDERER_ASYNC_FENCE_CB as well (by olv)
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Ryan Neph <ryanneph@google.com> (v1)
-rw-r--r-- | src/virglrenderer.c | 4 | ||||
-rw-r--r-- | src/virglrenderer.h | 7 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/virglrenderer.c b/src/virglrenderer.c index f05eb300..7250c1d5 100644 --- a/src/virglrenderer.c +++ b/src/virglrenderer.c @@ -667,6 +667,8 @@ int virgl_renderer_init(void *cookie, int flags, struct virgl_renderer_callbacks if (flags & VIRGL_RENDERER_THREAD_SYNC) renderer_flags |= VREND_USE_THREAD_SYNC; + if (flags & VIRGL_RENDERER_ASYNC_FENCE_CB) + renderer_flags |= VREND_USE_ASYNC_FENCE_CB; if (flags & VIRGL_RENDERER_USE_EXTERNAL_BLOB) renderer_flags |= VREND_USE_EXTERNAL_BLOB; @@ -680,6 +682,8 @@ int virgl_renderer_init(void *cookie, int flags, struct virgl_renderer_callbacks uint32_t vkr_flags = 0; if (flags & VIRGL_RENDERER_THREAD_SYNC) vkr_flags |= VKR_RENDERER_THREAD_SYNC; + if (flags & VIRGL_RENDERER_ASYNC_FENCE_CB) + vkr_flags |= VKR_RENDERER_ASYNC_FENCE_CB; ret = vkr_renderer_init(vkr_flags); if (ret) diff --git a/src/virglrenderer.h b/src/virglrenderer.h index 2fe43aad..a1c06ffd 100644 --- a/src/virglrenderer.h +++ b/src/virglrenderer.h @@ -98,6 +98,13 @@ struct virgl_renderer_callbacks { */ #define VIRGL_RENDERER_NO_VIRGL (1 << 7) +/* + * Used in conjonction with VIRGL_RENDERER_THREAD_SYNC; + * write_fence callback is executed directly from the polling thread. When enabled, + * virgl_renderer_get_poll_fd should not be used to watch for retired fences. + */ +#define VIRGL_RENDERER_ASYNC_FENCE_CB (1 << 8) + #endif /* VIRGL_RENDERER_UNSTABLE_APIS */ VIRGL_EXPORT int virgl_renderer_init(void *cookie, int flags, struct virgl_renderer_callbacks *cb); |