[Mesa-dev] [PATCH] dri: don't load .drirc from $HOME

Axel Davy axel.davy at ens.fr
Sat Jan 7 13:01:10 UTC 2017


I find ~/.drirc useful.

You can add hacks missing in system drirc, or use device_id to set the 
card to use for the given game for dual gpu systems. Nine also has some 
drirc settings that are not hacks, but user options.

I think it's driconf that should be fixed. It shouldn't copy the system 
drirc, and instead just create minimal drirc with the settings the user 
has set.
I had worked long ago on a driconf replacement, and I think it was doing 
that right. The interface was in QML (using Qt), and mainly what was 
missing in the project was more advanced interface (doing a complete 
interface with QML is not that easy to get right for a beginner). The 
tool also worked multi-gpu and could detect on which card running apps 
were running, and enabled to switch the card for next run.

Perhaps some company funding Mesa developpement could hire some intern 
to write a driconf replacement ?

Axel

On 07/01/2017 13:45, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ~/.drirc is created by the driconf tool (GPL license) and it overrides
> system drirc settings and can't be changed by Mesa updates.
> This drops support for the tool. It has been a source of major pain
> for us and it continues to cause problems.
>
> If people wanna keep this and enjoy the pain, I will make a v2 that
> applies it to radeon drivers only.
> ---
>   src/mesa/drivers/dri/common/xmlconfig.c | 51 ++++++++++-----------------------
>   1 file changed, 15 insertions(+), 36 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/common/xmlconfig.c b/src/mesa/drivers/dri/common/xmlconfig.c
> index a8f7c9b..3d6cb67 100644
> --- a/src/mesa/drivers/dri/common/xmlconfig.c
> +++ b/src/mesa/drivers/dri/common/xmlconfig.c
> @@ -937,65 +937,44 @@ static void parseOneConfigFile (XML_Parser p) {
>       close (fd);
>   #undef BUF_SIZE
>   }
>   
>   #ifndef SYSCONFDIR
>   #define SYSCONFDIR "/etc"
>   #endif
>   
>   void driParseConfigFiles (driOptionCache *cache, const driOptionCache *info,
>   			  int screenNum, const char *driverName) {
> -    char *filenames[2] = { SYSCONFDIR "/drirc", NULL};
> -    char *home;
> -    uint32_t i;
>       struct OptConfData userData;
> +    XML_Parser p;
>   
>       initOptionCache (cache, info);
>   
>       userData.cache = cache;
>       userData.screenNum = screenNum;
>       userData.driverName = driverName;
>       userData.execName = GET_PROGRAM_NAME();
>   
> -    if ((home = getenv ("HOME"))) {
> -	uint32_t len = strlen (home);
> -	filenames[1] = malloc(len + 7+1);
> -	if (filenames[1] == NULL)
> -	    __driUtilMessage ("Can't allocate memory for %s/.drirc.", home);
> -	else {
> -	    memcpy (filenames[1], home, len);
> -	    memcpy (filenames[1] + len, "/.drirc", 7+1);
> -	}
> -    }
> -
> -    for (i = 0; i < 2; ++i) {
> -	XML_Parser p;
> -	if (filenames[i] == NULL)
> -	    continue;
> -
> -	p = XML_ParserCreate (NULL); /* use encoding specified by file */
> -	XML_SetElementHandler (p, optConfStartElem, optConfEndElem);
> -	XML_SetUserData (p, &userData);
> -	userData.parser = p;
> -	userData.name = filenames[i];
> -	userData.ignoringDevice = 0;
> -	userData.ignoringApp = 0;
> -	userData.inDriConf = 0;
> -	userData.inDevice = 0;
> -	userData.inApp = 0;
> -	userData.inOption = 0;
> -
> -	parseOneConfigFile (p);
> -	XML_ParserFree (p);
> -    }
> -
> -    free(filenames[1]);
> +    p = XML_ParserCreate (NULL); /* use encoding specified by file */
> +    XML_SetElementHandler (p, optConfStartElem, optConfEndElem);
> +    XML_SetUserData (p, &userData);
> +    userData.parser = p;
> +    userData.name = SYSCONFDIR "/drirc";
> +    userData.ignoringDevice = 0;
> +    userData.ignoringApp = 0;
> +    userData.inDriConf = 0;
> +    userData.inDevice = 0;
> +    userData.inApp = 0;
> +    userData.inOption = 0;
> +
> +    parseOneConfigFile (p);
> +    XML_ParserFree (p);
>   }
>   
>   void driDestroyOptionInfo (driOptionCache *info) {
>       driDestroyOptionCache (info);
>       if (info->info) {
>   	uint32_t i, size = 1 << info->tableSize;
>   	for (i = 0; i < size; ++i) {
>   	    if (info->info[i].name) {
>   		free(info->info[i].name);
>   		free(info->info[i].ranges);




More information about the mesa-dev mailing list