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

Reply via email to