OSDN Git Service

gallium: introduce load_pipe_screen()
authorRob Herring <robh@kernel.org>
Wed, 10 Feb 2016 22:56:56 +0000 (16:56 -0600)
committerMauro Rossi <issor.oruam@gmail.com>
Mon, 20 Mar 2017 23:15:04 +0000 (00:15 +0100)
Introduce load_pipe_screen() public entry point for other code which
dlopen()'s gralloc_dri.so for purposes of loading a pipe_screen. This way
drm_gralloc can avoid static linking of each gallium winsys and driver,
and avoid duplicated logic to figure out which pipe driver to load.

This is based on Rob Clark's work. I moved it into pipe_loader which seems
to be a better spot.

Signed-off-by: Rob Herring <robh@kernel.org>
src/gallium/auxiliary/pipe-loader/pipe_loader.h
src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
src/gallium/state_trackers/dri/dri2.c
src/gallium/targets/dri/dri.sym

index 690d088..19d269f 100644 (file)
@@ -180,6 +180,9 @@ pipe_loader_drm_probe(struct pipe_loader_device **devs, int ndev);
 bool
 pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd);
 
+struct pipe_screen *
+load_pipe_screen(struct pipe_loader_device **dev, int fd);
+
 #ifdef __cplusplus
 }
 #endif
index 6c89fe5..7155134 100644 (file)
@@ -304,3 +304,12 @@ static const struct pipe_loader_ops pipe_loader_drm_ops = {
    .configuration = pipe_loader_drm_configuration,
    .release = pipe_loader_drm_release
 };
+
+PUBLIC struct pipe_screen *load_pipe_screen(struct pipe_loader_device **dev, int fd)
+{
+   struct pipe_screen *pscreen = NULL;
+   if (pipe_loader_drm_probe_fd(dev, fd)) {
+      pscreen = pipe_loader_create_screen(*dev);
+   }
+   return pscreen;
+}
index 77523e9..26e537a 100644 (file)
@@ -1933,9 +1933,7 @@ dri2_init_screen(__DRIscreen * sPriv)
    if (screen->fd < 0 || (fd = fcntl(screen->fd, F_DUPFD_CLOEXEC, 3)) < 0)
       goto free_screen;
 
-   if (pipe_loader_drm_probe_fd(&screen->dev, fd))
-      pscreen = pipe_loader_create_screen(screen->dev);
-
+   pscreen = load_pipe_screen(&screen->dev, screen->fd);
    if (!pscreen)
        goto release_pipe;
 
index 1fdf18b..1d86c88 100644 (file)
@@ -2,6 +2,7 @@
        global:
                __driDriverExtensions;
                __driDriverGetExtensions*;
+               load_pipe_screen;
                nouveau_drm_screen_create;
                radeon_drm_winsys_create;
                amdgpu_winsys_create;