From: Nicolai Hähnle <nicolai.haeh...@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 193c8dd..92b2421 100644 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c @@ -149,20 +149,45 @@ static const struct drm_driver_descriptor driver_descriptors[] = { .configuration = configuration_query, }, { .driver_name = "imx-drm", .create_screen = pipe_imx_drm_create_screen, .configuration = configuration_query, } }; #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) { struct pipe_loader_drm_device *ddev = CALLOC_STRUCT(pipe_loader_drm_device); int vendor_id, chip_id; if (!ddev) return false; if (loader_get_pci_id_for_fd(fd, &vendor_id, &chip_id)) { @@ -172,41 +197,27 @@ pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd) } else { ddev->base.type = PIPE_LOADER_DEVICE_PLATFORM; } ddev->base.ops = &pipe_loader_drm_ops; ddev->fd = fd; ddev->base.driver_name = loader_get_driver_for_fd(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; fail: #ifndef GALLIUM_STATIC_TARGETS if (ddev->lib) util_dl_close(ddev->lib); #endif FREE(ddev); -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev