From 2ade6917dacb0648aff33f81da4e63418374ec7e Mon Sep 17 00:00:00 2001 From: Lucas Fryzek Date: Thu, 2 Mar 2023 14:49:31 -0500 Subject: [PATCH] virgl: Add support for `get_screen_fd` Reviewed-by: Rob Clark Part-of: --- src/gallium/drivers/virgl/virgl_screen.c | 13 +++++++++++++ src/gallium/drivers/virgl/virgl_winsys.h | 2 ++ src/gallium/winsys/virgl/drm/virgl_drm_winsys.c | 8 ++++++++ 3 files changed, 23 insertions(+) diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c index 2db9aef280c..87aedd9c996 100644 --- a/src/gallium/drivers/virgl/virgl_screen.c +++ b/src/gallium/drivers/virgl/virgl_screen.c @@ -1101,6 +1101,18 @@ virgl_get_compiler_options(struct pipe_screen *pscreen, return &vscreen->compiler_options; } +static int +virgl_screen_get_fd(struct pipe_screen *pscreen) +{ + struct virgl_screen *vscreen = virgl_screen(pscreen); + struct virgl_winsys *vws = vscreen->vws; + + if (vws->get_fd) + return vws->get_fd(vws); + else + return -1; +} + struct pipe_screen * virgl_create_screen(struct virgl_winsys *vws, const struct pipe_screen_config *config) { @@ -1137,6 +1149,7 @@ virgl_create_screen(struct virgl_winsys *vws, const struct pipe_screen_config *c screen->vws = vws; screen->base.get_name = virgl_get_name; screen->base.get_vendor = virgl_get_vendor; + screen->base.get_screen_fd = virgl_screen_get_fd; screen->base.get_param = virgl_get_param; screen->base.get_shader_param = virgl_get_shader_param; screen->base.get_video_param = virgl_get_video_param; diff --git a/src/gallium/drivers/virgl/virgl_winsys.h b/src/gallium/drivers/virgl/virgl_winsys.h index 13e82b033b4..7e43b965962 100644 --- a/src/gallium/drivers/virgl/virgl_winsys.h +++ b/src/gallium/drivers/virgl/virgl_winsys.h @@ -52,6 +52,8 @@ struct virgl_winsys { void (*destroy)(struct virgl_winsys *vws); + int (*get_fd)(struct virgl_winsys *vws); + int (*transfer_put)(struct virgl_winsys *vws, struct virgl_hw_res *res, const struct pipe_box *box, diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c index 6ae63e75758..2d7cc32a69c 100644 --- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c +++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c @@ -1203,6 +1203,14 @@ static int virgl_init_context(int drmFD) return 0; } +static int +virgl_drm_winsys_get_fd(struct virgl_winsys *vws) +{ + struct virgl_drm_winsys *vdws = virgl_drm_winsys(vws); + + return vdws->fd; +} + static struct virgl_winsys * virgl_drm_winsys_create(int drmFD) {