Analogous to previous commit with a small catch. As the sw inline helpers are mere wrappers, and the screen <> winsys split is more prominent (with the latter not being part of the final pipe-driver), things will just work.
Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> --- src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c | 58 ++++++++++++++++++++-- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c index 8b51cb7..39b9907 100644 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c @@ -40,7 +40,9 @@ struct pipe_loader_sw_device { struct pipe_loader_device base; const struct sw_driver_descriptor *dd; +#ifndef GALLIUM_STATIC_TARGETS struct util_dl_library *lib; +#endif struct sw_winsys *ws; }; @@ -48,6 +50,41 @@ struct pipe_loader_sw_device { static const struct pipe_loader_ops pipe_loader_sw_ops; +#ifdef GALLIUM_STATIC_TARGETS +static const struct sw_driver_descriptor driver_descriptors = { + .create_screen = sw_screen_create, + .winsys = { +#ifdef HAVE_PIPE_LOADER_DRI + { + .name = "dri", + .create_winsys = dri_create_sw_winsys, + }, +#endif +#ifdef HAVE_PIPE_LOADER_KMS + { + .name = "kms_dri", + .create_winsys = kms_dri_create_winsys, + }, +#endif +/** + * XXX: Do not include these two for non autotools builds. + * They don't have neither opencl nor nine, where these are used. + */ +#ifndef DROP_PIPE_LOADER_MISC + { + .name = "null", + .create_winsys = null_sw_create, + }, + { + .name = "wrapped", + .create_winsys = wrapper_sw_winsys_wrap_pipe_screen, + }, +#endif + { 0 }, + } +}; +#endif + static bool pipe_loader_sw_probe_init_common(struct pipe_loader_sw_device *sdev) { @@ -55,6 +92,11 @@ pipe_loader_sw_probe_init_common(struct pipe_loader_sw_device *sdev) sdev->base.driver_name = "swrast"; sdev->base.ops = &pipe_loader_sw_ops; +#ifdef GALLIUM_STATIC_TARGETS + sdev->dd = &driver_descriptors; + if (!sdev->dd) + return false; +#else sdev->lib = pipe_loader_find_module(&sdev->base, PIPE_SEARCH_DIR); if (!sdev->lib) return false; @@ -67,6 +109,7 @@ pipe_loader_sw_probe_init_common(struct pipe_loader_sw_device *sdev) sdev->lib = NULL; return false; } +#endif return true; } @@ -92,9 +135,10 @@ pipe_loader_sw_probe_dri(struct pipe_loader_device **devs, struct drisw_loader_f } } if (!sdev->ws) { +#ifndef GALLIUM_STATIC_TARGETS if (sdev->lib) util_dl_close(sdev->lib); - +#endif FREE(sdev); return false; } @@ -125,9 +169,10 @@ pipe_loader_sw_probe_kms(struct pipe_loader_device **devs, int fd) } } if (!sdev->ws) { +#ifndef GALLIUM_STATIC_TARGETS if (sdev->lib) util_dl_close(sdev->lib); - +#endif FREE(sdev); return false; } @@ -157,9 +202,10 @@ pipe_loader_sw_probe_null(struct pipe_loader_device **devs) } } if (!sdev->ws) { +#ifndef GALLIUM_STATIC_TARGETS if (sdev->lib) util_dl_close(sdev->lib); - +#endif FREE(sdev); return false; } @@ -203,9 +249,10 @@ pipe_loader_sw_probe_wrapped(struct pipe_loader_device **dev, } } if (!sdev->ws) { +#ifndef GALLIUM_STATIC_TARGETS if (sdev->lib) util_dl_close(sdev->lib); - +#endif FREE(sdev); return false; } @@ -219,9 +266,10 @@ pipe_loader_sw_release(struct pipe_loader_device **dev) { struct pipe_loader_sw_device *sdev = pipe_loader_sw_device(*dev); +#ifndef GALLIUM_STATIC_TARGETS if (sdev->lib) util_dl_close(sdev->lib); - +#endif FREE(sdev); *dev = NULL; } -- 2.6.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev