Mesa (master): pipe-loader: extract a standalone get_driver_descriptor helper function
Nicolai Hähnle
nh at kemper.freedesktop.org
Wed Aug 2 07:59:35 UTC 2017
Module: Mesa
Branch: master
Commit: aa222e21c288887348cf52e14696559a58dec13c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=aa222e21c288887348cf52e14696559a58dec13c
Author: Nicolai Hähnle <nicolai.haehnle at amd.com>
Date: Fri Jun 30 11:06:44 2017 +0200
pipe-loader: extract a standalone get_driver_descriptor helper function
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
---
.../auxiliary/pipe-loader/pipe_loader_drm.c | 49 +++++++++++++---------
1 file changed, 30 insertions(+), 19 deletions(-)
diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
index 193c8ddff2..92b242178d 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
@@ -156,6 +156,31 @@ static const struct drm_driver_descriptor driver_descriptors[] = {
};
#endif
+static const struct drm_driver_descriptor *
+get_driver_descriptor(const char *driver_name, struct util_dl_library **plib)
+{
+#ifdef GALLIUM_STATIC_TARGETS
+ for (int i = 0; i < ARRAY_SIZE(driver_descriptors); i++) {
+ if (strcmp(driver_descriptors[i].driver_name, driver_name) == 0)
+ return &driver_descriptors[i];
+ }
+#else
+ *plib = pipe_loader_find_module(driver_name, PIPE_SEARCH_DIR);
+ if (!*plib)
+ return NULL;
+
+ const struct drm_driver_descriptor *dd =
+ (const struct drm_driver_descriptor *)
+ util_dl_get_proc_address(*plib, "driver_descriptor");
+
+ /* sanity check on the driver name */
+ if (dd && strcmp(dd->driver_name, driver_name) == 0)
+ return dd;
+#endif
+
+ return NULL;
+}
+
bool
pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd)
{
@@ -179,27 +204,13 @@ pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd)
if (!ddev->base.driver_name)
goto fail;
-#ifdef GALLIUM_STATIC_TARGETS
- for (int i = 0; i < ARRAY_SIZE(driver_descriptors); i++) {
- if (strcmp(driver_descriptors[i].driver_name, ddev->base.driver_name) == 0) {
- ddev->dd = &driver_descriptors[i];
- break;
- }
- }
+ struct util_dl_library **plib = NULL;
+#ifndef GALLIUM_STATIC_TARGETS
+ plib = &ddev->lib;
+#endif
+ ddev->dd = get_driver_descriptor(ddev->base.driver_name, plib);
if (!ddev->dd)
goto fail;
-#else
- ddev->lib = pipe_loader_find_module(&ddev->base, PIPE_SEARCH_DIR);
- if (!ddev->lib)
- goto fail;
-
- ddev->dd = (const struct drm_driver_descriptor *)
- util_dl_get_proc_address(ddev->lib, "driver_descriptor");
-
- /* sanity check on the driver name */
- if (!ddev->dd || strcmp(ddev->dd->driver_name, ddev->base.driver_name) != 0)
- goto fail;
-#endif
*dev = &ddev->base;
return true;
More information about the mesa-commit
mailing list