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. Signed-off-by: Martin Peres <martin.pe...@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 | 8 ++++++-- 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, 35 insertions(+), 6 deletions(-) diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h index 86fdc69..82dfb01 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 *mesa_extension_override; }; /** diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c index 9cdebf8..7584dce 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_MESA_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->mesa_extension_override = + driQueryOptionstr(optionCache, "mesa_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..3332d66 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_MESA_EXTENSION_OVERRIDE(def) \ +DRI_CONF_OPT_BEGIN(mesa_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..7ae0581 100644 --- a/src/mesa/drivers/dri/i915/intel_context.c +++ b/src/mesa/drivers/dri/i915/intel_context.c @@ -419,6 +419,12 @@ intelInitContext(struct intel_context *intel, intel->intelScreen = intelScreen; + driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache, + sPriv->myNum, "i915"); + + ctx->Const.ExtensionOverride = + driQueryOptionstr(&intel->optionCache, "mesa_extension_override"); + if (!_mesa_initialize_context(&intel->ctx, api, mesaVis, shareCtx, functions)) { *dri_ctx_error = __DRI_CTX_ERROR_NO_MEMORY; @@ -441,8 +447,6 @@ intelInitContext(struct intel_context *intel, memset(&ctx->TextureFormatSupported, 0, sizeof(ctx->TextureFormatSupported)); - driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache, - sPriv->myNum, "i915"); intel->maxBatchSize = 4096; /* Estimate the size of the mappable aperture into the GTT. There's an diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c index e728979..5b48841 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_MESA_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..8d758c3 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, "mesa_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..f5df651 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_MESA_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..5ea72f1 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 || strlen(env_const) == 0) + 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..c179f7d 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. + */ + GLchar *ExtensionOverride; + + /** * Does the driver support real 32-bit integers? (Otherwise, integers are * simulated via floats.) */ -- 2.2.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev