[Mesa-dev] [PATCH 1/2] dri/common: embed drirc into driver binaries

Ian Romanick idr at freedesktop.org
Wed Sep 2 08:57:27 PDT 2015


For some reason the original patches and Ilia's response never showed up
in my inbox.

So... how does one have a Mesa driver that doesn't enable any work
arounds?  While this may work around the problem, it doesn't feel like
the right solution.

On 09/02/2015 06:55 AM, Iago Toral wrote:
> Both patches do what they advertise and seem to work, so they are
> 
> Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
> 
> That said, I imagine that probably you want to get at least a few ACKs
> from other devs, like Illia did, to make sure that your changes have
> enough support.
> 
> Iago
> 
> On Wed, 2015-09-02 at 02:26 +0200, Marek Olšák wrote:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> People are having issues with apps because drirc wasn't installed
>> into /etc. I've lost patience.
>> ---
>>  src/mesa/drivers/dri/common/Makefile.am      |   4 +-
>>  src/mesa/drivers/dri/common/Makefile.sources |   3 +-
>>  src/mesa/drivers/dri/common/drirc            |  84 --------------------
>>  src/mesa/drivers/dri/common/drirc_built_in.h | 111 +++++++++++++++++++++++++++
>>  src/mesa/drivers/dri/common/xmlconfig.c      |  30 +++++++-
>>  5 files changed, 140 insertions(+), 92 deletions(-)
>>  delete mode 100644 src/mesa/drivers/dri/common/drirc
>>  create mode 100644 src/mesa/drivers/dri/common/drirc_built_in.h
>>
>> diff --git a/src/mesa/drivers/dri/common/Makefile.am b/src/mesa/drivers/dri/common/Makefile.am
>> index b307f10..7106abe 100644
>> --- a/src/mesa/drivers/dri/common/Makefile.am
>> +++ b/src/mesa/drivers/dri/common/Makefile.am
>> @@ -23,7 +23,7 @@ SUBDIRS = xmlpool
>>  
>>  include Makefile.sources
>>  
>> -EXTRA_DIST = drirc xmlpool.h SConscript
>> +EXTRA_DIST = xmlpool.h SConscript
>>  
>>  AM_CFLAGS = \
>>  	-I$(top_srcdir)/include \
>> @@ -52,5 +52,3 @@ libdri_test_stubs_la_SOURCES = $(test_stubs_FILES)
>>  libdri_test_stubs_la_CFLAGS = $(AM_CFLAGS) -DNO_MAIN
>>  
>>  libmegadriver_stub_la_SOURCES = $(megadriver_stub_FILES)
>> -
>> -sysconf_DATA = drirc
>> diff --git a/src/mesa/drivers/dri/common/Makefile.sources b/src/mesa/drivers/dri/common/Makefile.sources
>> index d5d8da8..71ba01d 100644
>> --- a/src/mesa/drivers/dri/common/Makefile.sources
>> +++ b/src/mesa/drivers/dri/common/Makefile.sources
>> @@ -6,7 +6,8 @@ DRI_COMMON_FILES := \
>>  
>>  XMLCONFIG_FILES := \
>>  	xmlconfig.c \
>> -	xmlconfig.h
>> +	xmlconfig.h \
>> +	drirc_built_in.h
>>  
>>  # Paths are relative to MESA_TOP.
>>  mesa_dri_common_INCLUDES := \
>> diff --git a/src/mesa/drivers/dri/common/drirc b/src/mesa/drivers/dri/common/drirc
>> deleted file mode 100644
>> index bb840ea..0000000
>> --- a/src/mesa/drivers/dri/common/drirc
>> +++ /dev/null
>> @@ -1,84 +0,0 @@
>> -<!--
>> -
>> -============================================
>> -Application bugs worked around in this file:
>> -============================================
>> -
>> -* Unigine Heaven 3.0 and older contain too many bugs and can't be supported
>> -  by drivers that want to be compliant.
>> -
>> -* Various Unigine products don't use the #version and #extension GLSL
>> -  directives, meaning they only get GLSL 1.10 and no extensions for their
>> -  shaders.
>> -  Enabling all extensions for Unigine fixes most issues, but the GLSL version
>> -  is still 1.10.
>> -
>> -* If ARB_sample_shading is supported, Unigine Heaven 4.0 and Valley 1.0 uses
>> -  an #extension directive in the middle of its shaders, which is illegal
>> -  in GLSL.
>> -
>> -TODO: document the other workarounds.
>> -
>> --->
>> -
>> -<driconf>
>> -    <!-- Please always enable app-specific workarounds for all drivers and
>> -         screens. -->
>> -    <device>
>> -        <application name="Unigine Sanctuary" executable="Sanctuary">
>> -            <option name="force_glsl_extensions_warn" value="true" />
>> -            <option name="disable_blend_func_extended" value="true" />
>> -	</application>
>> -
>> -        <application name="Unigine Tropics" executable="Tropics">
>> -            <option name="force_glsl_extensions_warn" value="true" />
>> -            <option name="disable_blend_func_extended" value="true" />
>> -	</application>
>> -
>> -        <application name="Unigine Heaven (32-bit)" executable="heaven_x86">
>> -            <option name="allow_glsl_extension_directive_midshader" value="true" />
>> -	</application>
>> -
>> -        <application name="Unigine Heaven (64-bit)" executable="heaven_x64">
>> -            <option name="allow_glsl_extension_directive_midshader" value="true" />
>> -	</application>
>> -
>> -        <application name="Unigine Valley (32-bit)" executable="valley_x86">
>> -            <option name="allow_glsl_extension_directive_midshader" value="true" />
>> -	</application>
>> -
>> -        <application name="Unigine Valley (64-bit)" executable="valley_x64">
>> -            <option name="allow_glsl_extension_directive_midshader" value="true" />
>> -	</application>
>> -
>> -        <application name="Unigine OilRush (32-bit)" executable="OilRush_x86">
>> -            <option name="disable_blend_func_extended" value="true" />
>> -            <option name="allow_glsl_extension_directive_midshader" value="true" />
>> -	</application>
>> -
>> -        <application name="Unigine OilRush (64-bit)" executable="OilRush_x64">
>> -            <option name="disable_blend_func_extended" value="true" />
>> -            <option name="allow_glsl_extension_directive_midshader" value="true" />
>> -	</application>
>> -
>> -        <application name="Savage 2" executable="savage2.bin">
>> -            <option name="disable_glsl_line_continuations" value="true" />
>> -        </application>
>> -
>> -        <application name="Topogun (32-bit)" executable="topogun32">
>> -            <option name="always_have_depth_buffer" value="true" />
>> -        </application>
>> -
>> -        <application name="Topogun (64-bit)" executable="topogun64">
>> -            <option name="always_have_depth_buffer" value="true" />
>> -        </application>
>> -
>> -        <application name="Dead Island" executable="DeadIslandGame">
>> -            <option name="allow_glsl_extension_directive_midshader" value="true" />
>> -        </application>
>> -
>> -        <application name="Second Life" executable="do-not-directly-run-secondlife-bin">
>> -            <option name="allow_glsl_extension_directive_midshader" value="true" />
>> -        </application>
>> -    </device>
>> -</driconf>
>> diff --git a/src/mesa/drivers/dri/common/drirc_built_in.h b/src/mesa/drivers/dri/common/drirc_built_in.h
>> new file mode 100644
>> index 0000000..592b1d1
>> --- /dev/null
>> +++ b/src/mesa/drivers/dri/common/drirc_built_in.h
>> @@ -0,0 +1,111 @@
>> +/*
>> + * Copyright 2015 Advanced Micro Devices, Inc.
>> + *
>> + * Permission is hereby granted, free of charge, to any person obtaining a
>> + * copy of this software and associated documentation files (the "Software"),
>> + * to deal in the Software without restriction, including without limitation
>> + * on the rights to use, copy, modify, merge, publish, distribute, sub
>> + * license, and/or sell copies of the Software, and to permit persons to whom
>> + * the Software is furnished to do so, subject to the following conditions:
>> + *
>> + * The above copyright notice and this permission notice (including the next
>> + * paragraph) shall be included in all copies or substantial portions of the
>> + * Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
>> + * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
>> + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
>> + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
>> + * USE OR OTHER DEALINGS IN THE SOFTWARE.
>> + *
>> + */
>> +
>> +#ifndef DRIRC_BUILT_IN_H
>> +#define DRIRC_BUILT_IN_H
>> +
>> +/*
>> +============================================
>> +Application bugs worked around here:
>> +============================================
>> +
>> +* Unigine Heaven 3.0 and older contain too many bugs and can't be supported
>> +  by drivers that want to be compliant.
>> +
>> +* Various Unigine products don't use the #version and #extension GLSL
>> +  directives, meaning they only get GLSL 1.10 and no extensions for their
>> +  shaders.
>> +  Enabling all extensions for Unigine fixes most issues, but the GLSL version
>> +  is still 1.10.
>> +
>> +* If ARB_sample_shading is supported, Unigine Heaven 4.0 and Valley 1.0 uses
>> +  an #extension directive in the middle of its shaders, which is illegal
>> +  in GLSL.
>> +
>> +TODO: document the other workarounds.
>> +
>> +*/
>> +
>> +static const char *drirc_built_in =
>> +"<driconf>"
>> +"    <device>"
>> +"        <application name='Unigine Sanctuary' executable='Sanctuary'>"
>> +"            <option name='force_glsl_extensions_warn' value='true' />"
>> +"            <option name='disable_blend_func_extended' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Unigine Tropics' executable='Tropics'>"
>> +"            <option name='force_glsl_extensions_warn' value='true' />"
>> +"            <option name='disable_blend_func_extended' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Unigine Heaven (32-bit)' executable='heaven_x86'>"
>> +"            <option name='allow_glsl_extension_directive_midshader' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Unigine Heaven (64-bit)' executable='heaven_x64'>"
>> +"            <option name='allow_glsl_extension_directive_midshader' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Unigine Valley (32-bit)' executable='valley_x86'>"
>> +"            <option name='allow_glsl_extension_directive_midshader' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Unigine Valley (64-bit)' executable='valley_x64'>"
>> +"            <option name='allow_glsl_extension_directive_midshader' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Unigine OilRush (32-bit)' executable='OilRush_x86'>"
>> +"            <option name='disable_blend_func_extended' value='true' />"
>> +"            <option name='allow_glsl_extension_directive_midshader' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Unigine OilRush (64-bit)' executable='OilRush_x64'>"
>> +"            <option name='disable_blend_func_extended' value='true' />"
>> +"            <option name='allow_glsl_extension_directive_midshader' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Savage 2' executable='savage2.bin'>"
>> +"            <option name='disable_glsl_line_continuations' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Topogun (32-bit)' executable='topogun32'>"
>> +"            <option name='always_have_depth_buffer' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Topogun (64-bit)' executable='topogun64'>"
>> +"            <option name='always_have_depth_buffer' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Dead Island' executable='DeadIslandGame'>"
>> +"            <option name='allow_glsl_extension_directive_midshader' value='true' />"
>> +"        </application>"
>> +
>> +"        <application name='Second Life' executable='do-not-directly-run-secondlife-bin'>"
>> +"            <option name='allow_glsl_extension_directive_midshader' value='true' />"
>> +"        </application>"
>> +"    </device>"
>> +"</driconf>";
>> +
>> +#endif
>> diff --git a/src/mesa/drivers/dri/common/xmlconfig.c b/src/mesa/drivers/dri/common/xmlconfig.c
>> index f17693e..47a9aef 100644
>> --- a/src/mesa/drivers/dri/common/xmlconfig.c
>> +++ b/src/mesa/drivers/dri/common/xmlconfig.c
>> @@ -39,6 +39,7 @@
>>  #include "main/imports.h"
>>  #include "utils.h"
>>  #include "xmlconfig.h"
>> +#include "drirc_built_in.h"
>>  
>>  #undef GET_PROGRAM_NAME
>>  
>> @@ -896,6 +897,23 @@ static void initOptionCache (driOptionCache *cache, const driOptionCache *info)
>>      }
>>  }
>>  
>> +static void parseConfigFromString(XML_Parser p, const char *string)
>> +{
>> +   struct OptConfData *data = (struct OptConfData *)XML_GetUserData (p);
>> +   int size = strlen(string);
>> +
>> +   void *buffer = XML_GetBuffer(p, size);
>> +   if (!buffer) {
>> +      __driUtilMessage("Can't allocate parser buffer.");
>> +      return;
>> +   }
>> +
>> +   memcpy(buffer, string, size);
>> +
>> +   if (!XML_ParseBuffer(p, size, true))
>> +      XML_ERROR("%s.", XML_ErrorString(XML_GetErrorCode(p)));
>> +}
>> +
>>  /** \brief Parse the named configuration file */
>>  static void parseOneConfigFile (XML_Parser p) {
>>  #define BUF_SIZE 0x1000
>> @@ -960,16 +978,16 @@ void driParseConfigFiles (driOptionCache *cache, const driOptionCache *info,
>>  	}
>>      }
>>  
>> -    for (i = 0; i < 2; ++i) {
>> +    for (i = 0; i < 3; ++i) {
>>  	XML_Parser p;
>> -	if (filenames[i] == NULL)
>> +	if (i && filenames[i-1] == 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.name = i ? filenames[i-1] : NULL;
>>  	userData.ignoringDevice = 0;
>>  	userData.ignoringApp = 0;
>>  	userData.inDriConf = 0;
>> @@ -977,7 +995,11 @@ void driParseConfigFiles (driOptionCache *cache, const driOptionCache *info,
>>  	userData.inApp = 0;
>>  	userData.inOption = 0;
>>  
>> -	parseOneConfigFile (p);
>> +        if (i == 0)
>> +           parseConfigFromString(p, drirc_built_in);
>> +        else
>> +           parseOneConfigFile(p);
>> +
>>  	XML_ParserFree (p);
>>      }
>>  
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list