From: Qiang Yu Date: Mon, 6 Aug 2018 03:19:26 +0000 (+0800) Subject: xmlconfig: add kernel_driver device attribute X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3bbe180b982639554685c997ff51a7cbbf3247e6;p=mesa.git xmlconfig: add kernel_driver device attribute This attribute can be used by loader to apply different option to device use specific kernel driver. Signed-off-by: Qiang Yu Acked-by: Michel Dänzer Reviewed-by: Emil Velikov --- diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.c b/src/gallium/auxiliary/pipe-loader/pipe_loader.c index e7cf9f86d99..6fd15527e53 100644 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader.c +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.c @@ -108,7 +108,7 @@ pipe_loader_load_options(struct pipe_loader_device *dev) driParseOptionInfo(&dev->option_info, xml_options); driParseConfigFiles(&dev->option_cache, &dev->option_info, 0, - dev->driver_name); + dev->driver_name, NULL); } char * diff --git a/src/gallium/targets/d3dadapter9/drm.c b/src/gallium/targets/d3dadapter9/drm.c index 9c5bd8a15b2..85b3e10633e 100644 --- a/src/gallium/targets/d3dadapter9/drm.c +++ b/src/gallium/targets/d3dadapter9/drm.c @@ -252,7 +252,7 @@ drm_create_adapter( int fd, ctx->base.throttling = FALSE; driParseOptionInfo(&defaultInitOptions, __driConfigOptionsNine); - driParseConfigFiles(&userInitOptions, &defaultInitOptions, 0, "nine"); + driParseConfigFiles(&userInitOptions, &defaultInitOptions, 0, "nine", NULL); if (driCheckOption(&userInitOptions, "throttle_value", DRI_INT)) { throttling_value_user = driQueryOptioni(&userInitOptions, "throttle_value"); if (throttling_value_user == -1) diff --git a/src/loader/loader.c b/src/loader/loader.c index 28a4c5855c9..9480be97fd0 100644 --- a/src/loader/loader.c +++ b/src/loader/loader.c @@ -118,7 +118,7 @@ static char *loader_get_dri_config_device_id(void) char *prime = NULL; driParseOptionInfo(&defaultInitOptions, __driConfigOptionsLoader); - driParseConfigFiles(&userInitOptions, &defaultInitOptions, 0, "loader"); + driParseConfigFiles(&userInitOptions, &defaultInitOptions, 0, "loader", NULL); if (driCheckOption(&userInitOptions, "device_id", DRI_STRING)) prime = strdup(driQueryOptionstr(&userInitOptions, "device_id")); driDestroyOptionCache(&userInitOptions); diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c index be7b6e5535d..ac3a04bceff 100644 --- a/src/mesa/drivers/dri/common/dri_util.c +++ b/src/mesa/drivers/dri/common/dri_util.c @@ -148,7 +148,7 @@ driCreateNewScreen2(int scrn, int fd, /* Option parsing before ->InitScreen(), as some options apply there. */ driParseOptionInfo(&psp->optionInfo, __dri2ConfigOptions); - driParseConfigFiles(&psp->optionCache, &psp->optionInfo, psp->myNum, "dri2"); + driParseConfigFiles(&psp->optionCache, &psp->optionInfo, psp->myNum, "dri2", NULL); *driver_configs = psp->driver->InitScreen(psp); if (*driver_configs == NULL) { diff --git a/src/mesa/drivers/dri/i915/intel_context.c b/src/mesa/drivers/dri/i915/intel_context.c index f22ebbd7ac2..9a6e49dd827 100644 --- a/src/mesa/drivers/dri/i915/intel_context.c +++ b/src/mesa/drivers/dri/i915/intel_context.c @@ -448,7 +448,7 @@ intelInitContext(struct intel_context *intel, 0, sizeof(ctx->TextureFormatSupported)); driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache, - sPriv->myNum, "i915"); + sPriv->myNum, "i915", NULL); intel->maxBatchSize = 4096; /* Estimate the size of the mappable aperture into the GTT. There's an diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 136f1325c6e..0d0b95e78a5 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -790,7 +790,8 @@ brw_process_driconf_options(struct brw_context *brw) driOptionCache *options = &brw->optionCache; driParseConfigFiles(options, &brw->screen->optionCache, - brw->driContext->driScreenPriv->myNum, "i965"); + brw->driContext->driScreenPriv->myNum, + "i965", NULL); int bo_reuse_mode = driQueryOptioni(options, "bo_reuse"); switch (bo_reuse_mode) { diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index f1c195c5d14..2222e57bbf4 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -2442,7 +2442,8 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen) memset(&options, 0, sizeof(options)); driParseOptionInfo(&options, brw_config_options.xml); - driParseConfigFiles(&screen->optionCache, &options, dri_screen->myNum, "i965"); + driParseConfigFiles(&screen->optionCache, &options, dri_screen->myNum, + "i965", NULL); driDestroyOptionCache(&options); screen->driScrnPriv = dri_screen; diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c index 9417dfc8a7b..cfdc9b84e87 100644 --- a/src/mesa/drivers/dri/r200/r200_context.c +++ b/src/mesa/drivers/dri/r200/r200_context.c @@ -216,7 +216,7 @@ GLboolean r200CreateContext( gl_api api, * the default textures. */ driParseConfigFiles (&rmesa->radeon.optionCache, &screen->optionCache, - screen->driScreen->myNum, "r200"); + screen->driScreen->myNum, "r200", NULL); rmesa->radeon.initialMaxAnisotropy = driQueryOptionf(&rmesa->radeon.optionCache, "def_max_anisotropy"); diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c b/src/mesa/drivers/dri/radeon/radeon_context.c index 28ced814e59..e1e87640ef0 100644 --- a/src/mesa/drivers/dri/radeon/radeon_context.c +++ b/src/mesa/drivers/dri/radeon/radeon_context.c @@ -183,7 +183,7 @@ r100CreateContext( gl_api api, * the default textures. */ driParseConfigFiles (&rmesa->radeon.optionCache, &screen->optionCache, - screen->driScreen->myNum, "radeon"); + screen->driScreen->myNum, "radeon", NULL); rmesa->radeon.initialMaxAnisotropy = driQueryOptionf(&rmesa->radeon.optionCache, "def_max_anisotropy"); diff --git a/src/util/xmlconfig.c b/src/util/xmlconfig.c index 68ce5cee921..5264f2598b4 100644 --- a/src/util/xmlconfig.c +++ b/src/util/xmlconfig.c @@ -691,6 +691,7 @@ struct OptConfData { driOptionCache *cache; int screenNum; const char *driverName, *execName; + const char *kernelDriverName; uint32_t ignoringDevice; uint32_t ignoringApp; uint32_t inDriConf; @@ -715,14 +716,17 @@ static void parseDeviceAttr(struct OptConfData *data, const XML_Char **attr) { uint32_t i; - const XML_Char *driver = NULL, *screen = NULL; + const XML_Char *driver = NULL, *screen = NULL, *kernel = NULL; for (i = 0; attr[i]; i += 2) { if (!strcmp (attr[i], "driver")) driver = attr[i+1]; else if (!strcmp (attr[i], "screen")) screen = attr[i+1]; + else if (!strcmp (attr[i], "kernel_driver")) kernel = attr[i+1]; else XML_WARNING("unknown device attribute: %s.", attr[i]); } if (driver && strcmp (driver, data->driverName)) data->ignoringDevice = data->inDevice; + else if (kernel && (!data->kernelDriverName || strcmp (kernel, data->kernelDriverName))) + data->ignoringDevice = data->inDevice; else if (screen) { driOptionValue screenNum; if (!parseValue (&screenNum, DRI_INT, screen)) @@ -976,7 +980,8 @@ parseConfigDir(struct OptConfData *data, const char *dirname) void driParseConfigFiles(driOptionCache *cache, const driOptionCache *info, - int screenNum, const char *driverName) + int screenNum, const char *driverName, + const char *kernelDriverName) { char *home; struct OptConfData userData; @@ -986,6 +991,7 @@ driParseConfigFiles(driOptionCache *cache, const driOptionCache *info, userData.cache = cache; userData.screenNum = screenNum; userData.driverName = driverName; + userData.kernelDriverName = kernelDriverName; userData.execName = util_get_process_name(); parseConfigDir(&userData, DATADIR "/drirc.d"); diff --git a/src/util/xmlconfig.h b/src/util/xmlconfig.h index f7683a650e0..cc8c6ef098f 100644 --- a/src/util/xmlconfig.h +++ b/src/util/xmlconfig.h @@ -102,10 +102,11 @@ void driParseOptionInfo (driOptionCache *info, const char *configOptions); /** \brief Initialize option cache from info and parse configuration files * - * To be called in CreateContext. screenNum and driverName select - * device sections. */ + * To be called in CreateContext. screenNum, driverName and + * kernelDriverName select device sections. */ void driParseConfigFiles (driOptionCache *cache, const driOptionCache *info, - int screenNum, const char *driverName); + int screenNum, const char *driverName, + const char *kernelDriverName); /** \brief Destroy option info * * To be called in DestroyScreen */