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

Reply via email to