Module: Mesa Branch: main Commit: 7b3ee9335f13352a6429925e2d8470743308a7f4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7b3ee9335f13352a6429925e2d8470743308a7f4
Author: Eric Engestrom <[email protected]> Date: Thu Dec 8 17:40:27 2022 +0000 vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens Signed-off-by: Eric Engestrom <[email protected]> Reviewed-by: Jose Maria Casanova Crespo <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20180> --- src/gallium/drivers/vc4/vc4_screen.c | 12 +++++++++++- src/gallium/drivers/vc4/vc4_screen.h | 4 +++- src/gallium/winsys/vc4/drm/vc4_drm_winsys.c | 7 +++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c index c24e7b0a0ef..448391f5613 100644 --- a/src/gallium/drivers/vc4/vc4_screen.c +++ b/src/gallium/drivers/vc4/vc4_screen.c @@ -537,8 +537,17 @@ vc4_get_chip_info(struct vc4_screen *screen) return true; } +static int +vc4_screen_get_fd(struct pipe_screen *pscreen) +{ + struct vc4_screen *screen = vc4_screen(pscreen); + + return screen->fd; +} + struct pipe_screen * -vc4_screen_create(int fd, struct renderonly *ro) +vc4_screen_create(int fd, const struct pipe_screen_config *config, + struct renderonly *ro) { struct vc4_screen *screen = rzalloc(NULL, struct vc4_screen); uint64_t syncobj_cap = 0; @@ -548,6 +557,7 @@ vc4_screen_create(int fd, struct renderonly *ro) pscreen = &screen->base; pscreen->destroy = vc4_screen_destroy; + pscreen->get_screen_fd = vc4_screen_get_fd; pscreen->get_param = vc4_screen_get_param; pscreen->get_paramf = vc4_screen_get_paramf; pscreen->get_shader_param = vc4_screen_get_shader_param; diff --git a/src/gallium/drivers/vc4/vc4_screen.h b/src/gallium/drivers/vc4/vc4_screen.h index 99b611a637b..aa4506eb5f8 100644 --- a/src/gallium/drivers/vc4/vc4_screen.h +++ b/src/gallium/drivers/vc4/vc4_screen.h @@ -114,7 +114,9 @@ vc4_screen(struct pipe_screen *screen) return (struct vc4_screen *)screen; } -struct pipe_screen *vc4_screen_create(int fd, struct renderonly *ro); +struct pipe_screen *vc4_screen_create(int fd, + const struct pipe_screen_config *config, + struct renderonly *ro); const void * vc4_screen_get_compiler_options(struct pipe_screen *pscreen, diff --git a/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c b/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c index f6e6ef75c5d..ac0a7051f74 100644 --- a/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c +++ b/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c @@ -26,6 +26,7 @@ #include <sys/ioctl.h> #include "util/os_file.h" +#include "util/u_screen.h" #include "renderonly/renderonly.h" #include "kmsro/drm/kmsro_drm_public.h" @@ -48,7 +49,8 @@ vc4_drm_screen_create(int fd, const struct pipe_screen_config *config) #endif if (v3d_present) - return vc4_screen_create(os_dupfd_cloexec(fd), NULL); + return u_pipe_screen_lookup_or_create(os_dupfd_cloexec(fd), config, + NULL, vc4_screen_create); #ifdef GALLIUM_KMSRO return kmsro_drm_screen_create(fd, config); @@ -61,5 +63,6 @@ struct pipe_screen * vc4_drm_screen_create_renderonly(struct renderonly *ro, const struct pipe_screen_config *config) { - return vc4_screen_create(os_dupfd_cloexec(ro->gpu_fd), ro); + return u_pipe_screen_lookup_or_create(os_dupfd_cloexec(ro->gpu_fd), config, + ro, vc4_screen_create); }
