vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens

Signed-off-by: Eric Engestrom <eric@igalia.com>
Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20180>
This commit is contained in:
Eric Engestrom 2022-12-08 17:40:27 +00:00 committed by Marge Bot
parent 769b511054
commit 7b3ee9335f
3 changed files with 19 additions and 4 deletions

View file

@ -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;

View file

@ -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,

View file

@ -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);
}