[Mesa-dev] [PATCH 10/16] driconf: introduce the equivalent of MESA_EXTENSION_OVERRIDE in drirc
Martin Peres
martin.peres at linux.intel.com
Fri Jun 5 06:04:04 PDT 2015
When both MESA_EXTENSION_OVERRIDE and drirc's mesa_extension_override are
set, the environment variable takes precedence.
We also now perform one_time_init after init_attrib_groups so as the
shared option would be initialized before running the extension
override code.
v2:
- change the name from mesa_extension_override to extension_override
- make the presence of the environment variable enough to disable the
drirc-provided version
- init all the constants in i915 before calling _mesa_initialize_context
- make GLchar *ExtensionOverride in struct gl_constants constant
v3:
- reworked to use the new shared options infrastructure
Signed-off-by: Martin Peres <martin.peres at linux.intel.com>
---
src/mesa/drivers/dri/common/xmlpool.h | 3 ++-
src/mesa/drivers/dri/common/xmlpool/t_options.h | 5 +++++
src/mesa/main/context.c | 8 ++++----
src/mesa/main/extensions.c | 6 +++++-
src/mesa/main/extensions.h | 2 +-
src/mesa/main/shared_options.c | 3 +++
src/mesa/main/shared_options.h | 6 ++++++
7 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/src/mesa/drivers/dri/common/xmlpool.h b/src/mesa/drivers/dri/common/xmlpool.h
index b2480d6..f14377f 100644
--- a/src/mesa/drivers/dri/common/xmlpool.h
+++ b/src/mesa/drivers/dri/common/xmlpool.h
@@ -112,7 +112,8 @@
DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN("false") \
DRI_CONF_FORCE_GLSL_VERSION(0) \
DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false") \
- DRI_CONF_DISABLE_GLSL_LINE_CONTINUATIONS("false")
+ DRI_CONF_DISABLE_GLSL_LINE_CONTINUATIONS("false") \
+ DRI_CONF_EXTENSION_OVERRIDE()
#define DRI_CONF_SECTION_MISC_SHARED \
"<!-- No shared msic options yet -->\n"
diff --git a/src/mesa/drivers/dri/common/xmlpool/t_options.h b/src/mesa/drivers/dri/common/xmlpool/t_options.h
index 4e5a721..a836a34 100644
--- a/src/mesa/drivers/dri/common/xmlpool/t_options.h
+++ b/src/mesa/drivers/dri/common/xmlpool/t_options.h
@@ -110,6 +110,11 @@ DRI_CONF_OPT_BEGIN_B(allow_glsl_extension_directive_midshader, def) \
DRI_CONF_DESC(en,gettext("Allow GLSL #extension directives in the middle of shaders")) \
DRI_CONF_OPT_END
+#define DRI_CONF_EXTENSION_OVERRIDE(def) \
+DRI_CONF_OPT_BEGIN(extension_override, string, def) \
+ DRI_CONF_DESC(en,gettext("Allow enabling/disabling a list of GL extensions")) \
+DRI_CONF_OPT_END
+
/**
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index facc92b..197785d 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -399,7 +399,7 @@ one_time_init( struct gl_context *ctx )
assert( sizeof(GLint) == 4 );
assert( sizeof(GLuint) == 4 );
- _mesa_one_time_init_extension_overrides();
+ _mesa_one_time_init_extension_overrides(ctx);
_mesa_get_cpu_features();
@@ -1177,9 +1177,6 @@ _mesa_initialize_context(struct gl_context *ctx,
_mesa_override_gl_version(ctx);
- /* misc one-time initializations */
- one_time_init(ctx);
-
/* Plug in driver functions and context pointer here.
* This is important because when we call alloc_shared_state() below
* we'll call ctx->Driver.NewTextureObject() to create the default
@@ -1203,6 +1200,9 @@ _mesa_initialize_context(struct gl_context *ctx,
if (!init_attrib_groups( ctx, shared_options ))
goto fail;
+ /* misc one-time initializations */
+ one_time_init(ctx);
+
/* setup the API dispatch tables with all nop functions */
ctx->OutsideBeginEnd = alloc_dispatch_table();
if (!ctx->OutsideBeginEnd)
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index f9bf503..1d86fd7 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -603,7 +603,7 @@ free_unknown_extensions_strings(void)
* This should be called one time early during first context initialization.
*/
void
-_mesa_one_time_init_extension_overrides(void)
+_mesa_one_time_init_extension_overrides( struct gl_context *ctx )
{
const char *env_const = getenv("MESA_EXTENSION_OVERRIDE");
char *env;
@@ -611,6 +611,10 @@ _mesa_one_time_init_extension_overrides(void)
int len;
size_t offset;
+ /* the environment variable takes precedence over drirc */
+ if (!env_const)
+ env_const = ctx->Const.options.ExtensionOverride;
+
atexit(free_unknown_extensions_strings);
memset(&_mesa_extension_override_enables, 0, sizeof(struct gl_extensions));
diff --git a/src/mesa/main/extensions.h b/src/mesa/main/extensions.h
index 595512a..e5e5748 100644
--- a/src/mesa/main/extensions.h
+++ b/src/mesa/main/extensions.h
@@ -43,7 +43,7 @@ struct gl_extensions;
extern void _mesa_enable_sw_extensions(struct gl_context *ctx);
-extern void _mesa_one_time_init_extension_overrides(void);
+extern void _mesa_one_time_init_extension_overrides(struct gl_context *ctx);
extern void _mesa_init_extensions(struct gl_extensions *extentions);
diff --git a/src/mesa/main/shared_options.c b/src/mesa/main/shared_options.c
index ca1dc33..6d6a1c1 100644
--- a/src/mesa/main/shared_options.c
+++ b/src/mesa/main/shared_options.c
@@ -35,6 +35,9 @@ _mesa_shared_options_fill(struct driOptionCache *optionCache,
sharedOptions->DisableGLSLLineContinuations =
driQueryOptionb(optionCache, "disable_glsl_line_continuations");
+ sharedOptions->ExtensionOverride =
+ driQueryOptionstr(optionCache, "extension_override");
+
sharedOptions->ForceGLSLExtensionsWarn =
driQueryOptionb(optionCache, "force_glsl_extensions_warn");
diff --git a/src/mesa/main/shared_options.h b/src/mesa/main/shared_options.h
index aab159d..a132fef 100644
--- a/src/mesa/main/shared_options.h
+++ b/src/mesa/main/shared_options.h
@@ -60,6 +60,11 @@ struct shared_options
GLboolean DisableGLSLLineContinuations;
/**
+ * Allow enabling/disabling a list of GL extension.
+ */
+ const GLchar *ExtensionOverride;
+
+ /**
* Changes default GLSL extension behavior from "error" to "warn". It's out
* of spec, but it can make some apps work that otherwise wouldn't.
*/
@@ -85,6 +90,7 @@ _mesa_shared_options_fill_defaults(struct shared_options *sharedOptions)
{
sharedOptions->AllowGLSLExtensionDirectiveMidShader = GL_FALSE;
sharedOptions->DisableGLSLLineContinuations = GL_FALSE;
+ sharedOptions->ExtensionOverride = NULL;
sharedOptions->ForceGLSLExtensionsWarn = GL_FALSE;
sharedOptions->ForceGLSLVersion = 0;
}
--
2.4.2
More information about the mesa-dev
mailing list