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 <mauro.rossi@inwind.it>
Fri, 15 Jul 2016 22:04:22 +0000 (00:04 +0200)
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 994a284..b7e0ac7 100644 (file)
@@ -306,3 +306,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 28f8078..9426794 100644 (file)
@@ -1801,9 +1801,7 @@ dri2_init_screen(__DRIscreen * sPriv)
    if (screen->fd < 0 || (fd = dup(screen->fd)) < 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;