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