loader: add dri_driver option to override dri driver to load
drirc implementation of MESA_LOADER_DRIVER_OVERRIDE which can be used to override dri driver to load. Usage: override dri driver for device with spec kernel driver name: <device kernel_driver="kernel_driver_name"> <option name="dri_driver" value="new_dri_driver" /> </device> or <device driver="loader" kernel_driver="kernel_driver_name"> <option name="dri_driver" value="new_dri_driver" /> </device> v2: add kernel_driver device attribute to specify kernel driver name instead of reuse driver attribute v3: seperate loader_get_kernel_driver_name into another patch seperate add kernel_driver attribute into another patch Suggested-by: Michel Dänzer <michel@daenzer.net> Signed-off-by: Qiang Yu <Qiang.Yu@amd.com> Acked-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com> [v4 Emil: add HAVE_LIBDRM guard around __driConfigOptionsLoader and loader_get_dri_config_driver] Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
parent
3bbe180b98
commit
0aa80abf25
|
@ -108,9 +108,33 @@ static const char __driConfigOptionsLoader[] =
|
||||||
DRI_CONF_BEGIN
|
DRI_CONF_BEGIN
|
||||||
DRI_CONF_SECTION_INITIALIZATION
|
DRI_CONF_SECTION_INITIALIZATION
|
||||||
DRI_CONF_DEVICE_ID_PATH_TAG()
|
DRI_CONF_DEVICE_ID_PATH_TAG()
|
||||||
|
DRI_CONF_DRI_DRIVER()
|
||||||
DRI_CONF_SECTION_END
|
DRI_CONF_SECTION_END
|
||||||
DRI_CONF_END;
|
DRI_CONF_END;
|
||||||
|
|
||||||
|
static char *loader_get_dri_config_driver(int fd)
|
||||||
|
{
|
||||||
|
driOptionCache defaultInitOptions;
|
||||||
|
driOptionCache userInitOptions;
|
||||||
|
char *dri_driver = NULL;
|
||||||
|
char *kernel_driver = loader_get_kernel_driver_name(fd);
|
||||||
|
|
||||||
|
driParseOptionInfo(&defaultInitOptions, __driConfigOptionsLoader);
|
||||||
|
driParseConfigFiles(&userInitOptions, &defaultInitOptions, 0,
|
||||||
|
"loader", kernel_driver);
|
||||||
|
if (driCheckOption(&userInitOptions, "dri_driver", DRI_STRING)) {
|
||||||
|
char *opt = driQueryOptionstr(&userInitOptions, "dri_driver");
|
||||||
|
/* not an empty string */
|
||||||
|
if (*opt)
|
||||||
|
dri_driver = strdup(opt);
|
||||||
|
}
|
||||||
|
driDestroyOptionCache(&userInitOptions);
|
||||||
|
driDestroyOptionInfo(&defaultInitOptions);
|
||||||
|
|
||||||
|
free(kernel_driver);
|
||||||
|
return dri_driver;
|
||||||
|
}
|
||||||
|
|
||||||
static char *loader_get_dri_config_device_id(void)
|
static char *loader_get_dri_config_device_id(void)
|
||||||
{
|
{
|
||||||
driOptionCache defaultInitOptions;
|
driOptionCache defaultInitOptions;
|
||||||
|
@ -358,6 +382,12 @@ loader_get_driver_for_fd(int fd)
|
||||||
return strdup(driver);
|
return strdup(driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_LIBDRM) && defined(USE_DRICONF)
|
||||||
|
driver = loader_get_dri_config_driver(fd);
|
||||||
|
if (driver)
|
||||||
|
return driver;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!loader_get_pci_id_for_fd(fd, &vendor_id, &chip_id)) {
|
if (!loader_get_pci_id_for_fd(fd, &vendor_id, &chip_id)) {
|
||||||
driver = loader_get_kernel_driver_name(fd);
|
driver = loader_get_kernel_driver_name(fd);
|
||||||
if (driver)
|
if (driver)
|
||||||
|
|
|
@ -411,6 +411,11 @@ DRI_CONF_OPT_BEGIN(device_id, string, def) \
|
||||||
DRI_CONF_DESC(en,gettext("Define the graphic device to use if possible")) \
|
DRI_CONF_DESC(en,gettext("Define the graphic device to use if possible")) \
|
||||||
DRI_CONF_OPT_END
|
DRI_CONF_OPT_END
|
||||||
|
|
||||||
|
#define DRI_CONF_DRI_DRIVER(def) \
|
||||||
|
DRI_CONF_OPT_BEGIN(dri_driver, string, def) \
|
||||||
|
DRI_CONF_DESC(en,gettext("Override the DRI driver to load")) \
|
||||||
|
DRI_CONF_OPT_END
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Gallium-Nine specific configuration options
|
* \brief Gallium-Nine specific configuration options
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue