[Mesa-dev] [PATCH 1/2] dri/common: embed drirc into driver binaries
Marek Olšák
maraeo at gmail.com
Tue Sep 1 17:26:55 PDT 2015
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);
}
--
2.1.4
More information about the mesa-dev
mailing list