diff options
author | Rob Herring <robh@kernel.org> | 2016-02-10 16:56:56 -0600 |
---|---|---|
committer | Mauro Rossi <issor.oruam@gmail.com> | 2016-11-01 20:41:59 +0100 |
commit | 7618870ed442a6b1f4fc60888403c0bbbbfa35b5 (patch) | |
tree | a55e864c57e0beaee5eeeeda2a7c375b2b78f677 | |
parent | 6ba00e6acd0f9fa19fd240ddbc25bc656fbd7f17 (diff) | |
download | external_mesa3d-7618870ed442a6b1f4fc60888403c0bbbbfa35b5.zip external_mesa3d-7618870ed442a6b1f4fc60888403c0bbbbfa35b5.tar.gz external_mesa3d-7618870ed442a6b1f4fc60888403c0bbbbfa35b5.tar.bz2 |
gallium: introduce load_pipe_screen()
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>
-rw-r--r-- | src/gallium/auxiliary/pipe-loader/pipe_loader.h | 3 | ||||
-rw-r--r-- | src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c | 9 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri2.c | 4 | ||||
-rw-r--r-- | src/gallium/targets/dri/dri.sym | 1 |
4 files changed, 14 insertions, 3 deletions
diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.h b/src/gallium/auxiliary/pipe-loader/pipe_loader.h index 690d088..19d269f 100644 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader.h +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.h @@ -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 diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c index 2b7ab27..f72a94f 100644 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c @@ -294,3 +294,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; +} diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c index 9ec069b..db8f70e 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -1881,9 +1881,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; diff --git a/src/gallium/targets/dri/dri.sym b/src/gallium/targets/dri/dri.sym index 1fdf18b..1d86c88 100644 --- a/src/gallium/targets/dri/dri.sym +++ b/src/gallium/targets/dri/dri.sym @@ -2,6 +2,7 @@ global: __driDriverExtensions; __driDriverGetExtensions*; + load_pipe_screen; nouveau_drm_screen_create; radeon_drm_winsys_create; amdgpu_winsys_create; |