[Mesa-dev] [PATCH 2/4] mesa: introduce the equivalent of MESA_EXTENSION_OVERRIDE in drirc v2
Martin Peres
martin.peres at linux.intel.com
Tue Feb 3 07:41:01 PST 2015
When both MESA_EXTENSION_OVERRIDE and drirc's mesa_extension_override are
set, the environment variable takes precedence.
This will be used to fix Unigine Tropics and Sanctuary.
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
Signed-off-by: Martin Peres <martin.peres at linux.intel.com>
---
src/gallium/include/state_tracker/st_api.h | 1 +
src/gallium/state_trackers/dri/dri_screen.c | 3 +++
src/mesa/drivers/dri/common/xmlpool/t_options.h | 4 ++++
src/mesa/drivers/dri/i915/intel_context.c | 18 +++++++++++-------
src/mesa/drivers/dri/i915/intel_screen.c | 1 +
src/mesa/drivers/dri/i965/brw_context.c | 6 +++++-
src/mesa/drivers/dri/i965/intel_screen.c | 1 +
src/mesa/main/context.c | 4 +++-
src/mesa/main/extensions.c | 6 +++++-
src/mesa/main/extensions.h | 2 +-
src/mesa/main/mtypes.h | 5 +++++
11 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h
index 86fdc69..99872ce 100644
--- a/src/gallium/include/state_tracker/st_api.h
+++ b/src/gallium/include/state_tracker/st_api.h
@@ -246,6 +246,7 @@ struct st_config_options
unsigned force_glsl_version;
boolean force_s3tc_enable;
boolean allow_glsl_extension_directive_midshader;
+ char *extension_override;
};
/**
diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c
index 9cdebf8..d1d1eb8 100644
--- a/src/gallium/state_trackers/dri/dri_screen.c
+++ b/src/gallium/state_trackers/dri/dri_screen.c
@@ -70,6 +70,7 @@ const __DRIconfigOptionsExtension gallium_config_options = {
DRI_CONF_DISABLE_SHADER_BIT_ENCODING("false")
DRI_CONF_FORCE_GLSL_VERSION(0)
DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false")
+ DRI_CONF_EXTENSION_OVERRIDE()
DRI_CONF_SECTION_END
DRI_CONF_SECTION_MISCELLANEOUS
@@ -98,6 +99,8 @@ dri_fill_st_options(struct st_config_options *options,
driQueryOptionb(optionCache, "force_s3tc_enable");
options->allow_glsl_extension_directive_midshader =
driQueryOptionb(optionCache, "allow_glsl_extension_directive_midshader");
+ options->extension_override =
+ driQueryOptionstr(optionCache, "extension_override");
}
static const __DRIconfig **
diff --git a/src/mesa/drivers/dri/common/xmlpool/t_options.h b/src/mesa/drivers/dri/common/xmlpool/t_options.h
index 4e5a721..0c2e7d6 100644
--- a/src/mesa/drivers/dri/common/xmlpool/t_options.h
+++ b/src/mesa/drivers/dri/common/xmlpool/t_options.h
@@ -110,6 +110,10 @@ 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/drivers/dri/i915/intel_context.c b/src/mesa/drivers/dri/i915/intel_context.c
index 12a1d2b..6357621 100644
--- a/src/mesa/drivers/dri/i915/intel_context.c
+++ b/src/mesa/drivers/dri/i915/intel_context.c
@@ -419,13 +419,6 @@ intelInitContext(struct intel_context *intel,
intel->intelScreen = intelScreen;
- if (!_mesa_initialize_context(&intel->ctx, api, mesaVis, shareCtx,
- functions)) {
- *dri_ctx_error = __DRI_CTX_ERROR_NO_MEMORY;
- printf("%s: failed to init mesa context\n", __FUNCTION__);
- return false;
- }
-
driContextPriv->driverPrivate = intel;
intel->driContext = driContextPriv;
intel->driFd = sPriv->fd;
@@ -443,6 +436,10 @@ intelInitContext(struct intel_context *intel,
driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache,
sPriv->myNum, "i915");
+
+ ctx->Const.ExtensionOverride =
+ driQueryOptionstr(&intel->optionCache, "extension_override");
+
intel->maxBatchSize = 4096;
/* Estimate the size of the mappable aperture into the GTT. There's an
@@ -487,6 +484,13 @@ intelInitContext(struct intel_context *intel,
ctx->Const.StripTextureBorder = GL_TRUE;
+ if (!_mesa_initialize_context(&intel->ctx, api, mesaVis, shareCtx,
+ functions)) {
+ *dri_ctx_error = __DRI_CTX_ERROR_NO_MEMORY;
+ printf("%s: failed to init mesa context\n", __FUNCTION__);
+ return false;
+ }
+
/* reinitialize the context point state.
* It depend on constants in __struct gl_contextRec::Const
*/
diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c
index e728979..850cab9 100644
--- a/src/mesa/drivers/dri/i915/intel_screen.c
+++ b/src/mesa/drivers/dri/i915/intel_screen.c
@@ -75,6 +75,7 @@ DRI_CONF_BEGIN
DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN("false")
DRI_CONF_DISABLE_GLSL_LINE_CONTINUATIONS("false")
DRI_CONF_DISABLE_BLEND_FUNC_EXTENDED("false")
+ DRI_CONF_EXTENSION_OVERRIDE()
DRI_CONF_OPT_BEGIN_B(shader_precompile, "true")
DRI_CONF_DESC(en, "Perform code generation at shader link time.")
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 7a61496..cac22d2 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -652,6 +652,9 @@ brw_process_driconf_options(struct brw_context *brw)
ctx->Const.AllowGLSLExtensionDirectiveMidShader =
driQueryOptionb(options, "allow_glsl_extension_directive_midshader");
+
+ ctx->Const.ExtensionOverride =
+ driQueryOptionstr(options, "extension_override");
}
GLboolean
@@ -738,6 +741,8 @@ brwCreateContext(gl_api api,
if (notify_reset)
functions.GetGraphicsResetStatus = brw_get_graphics_reset_status;
+ brw_process_driconf_options(brw);
+
struct gl_context *ctx = &brw->ctx;
if (!_mesa_initialize_context(ctx, api, mesaVis, shareCtx, &functions)) {
@@ -772,7 +777,6 @@ brwCreateContext(gl_api api,
_mesa_meta_init(ctx);
- brw_process_driconf_options(brw);
brw_process_intel_debug_variable(brw);
if (brw->gen >= 8 && !(INTEL_DEBUG & DEBUG_VEC4VS))
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index ee22fe7..90f662b 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -82,6 +82,7 @@ DRI_CONF_BEGIN
DRI_CONF_DISABLE_GLSL_LINE_CONTINUATIONS("false")
DRI_CONF_DISABLE_BLEND_FUNC_EXTENDED("false")
DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false")
+ DRI_CONF_EXTENSION_OVERRIDE()
DRI_CONF_OPT_BEGIN_B(shader_precompile, "true")
DRI_CONF_DESC(en, "Perform code generation at shader link time.")
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 63d30a2..ed9918f 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -397,7 +397,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();
@@ -1067,6 +1067,8 @@ _mesa_initialize_dispatch_tables(struct gl_context *ctx)
* Finally queries the \c MESA_DEBUG and \c MESA_VERBOSE environment variables
* for debug flags.
*
+ * Drivers should initialize ctx->Const before calling this function.
+ *
* \param ctx the context to initialize
* \param api the GL API type to create the context for
* \param visual describes the visual attributes for this context or NULL to
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index bfe7d99..7b65f3d 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -595,7 +595,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;
@@ -603,6 +603,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.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/mtypes.h b/src/mesa/main/mtypes.h
index 81a7c0e..e2f211a 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3506,6 +3506,11 @@ struct gl_constants
GLboolean AllowGLSLExtensionDirectiveMidShader;
/**
+ * Allow enabling/disabling a list of GL extension.
+ */
+ const GLchar *ExtensionOverride;
+
+ /**
* Does the driver support real 32-bit integers? (Otherwise, integers are
* simulated via floats.)
*/
--
2.2.2
More information about the mesa-dev
mailing list