diff --git a/src/compiler/glsl/glcpp/glcpp-parse.y b/src/compiler/glsl/glcpp/glcpp-parse.y index 173e1a1586b..2359967e89e 100644 --- a/src/compiler/glsl/glcpp/glcpp-parse.y +++ b/src/compiler/glsl/glcpp/glcpp-parse.y @@ -781,7 +781,10 @@ replacement_list: junk: /* empty */ | pp_tokens { - glcpp_error(&@1, parser, "extra tokens at end of directive"); + if (parser->gl_ctx->Const.AllowExtraPPTokens) + glcpp_warning(&@1, parser, "extra tokens at end of directive"); + else + glcpp_error(&@1, parser, "extra tokens at end of directive"); } ; diff --git a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h index 95e27bcc42d..41051bc6447 100644 --- a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h +++ b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h @@ -22,6 +22,7 @@ DRI_CONF_SECTION_DEBUG DRI_CONF_DISABLE_BLEND_FUNC_EXTENDED(false) DRI_CONF_DISABLE_ARB_GPU_SHADER5(false) DRI_CONF_FORCE_GLSL_VERSION(0) + DRI_CONF_ALLOW_EXTRA_PP_TOKENS(false) DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER(false) DRI_CONF_ALLOW_GLSL_120_SUBSET_IN_110(false) DRI_CONF_ALLOW_GLSL_BUILTIN_CONST_EXPRESSION(false) diff --git a/src/gallium/frontends/dri/dri_screen.c b/src/gallium/frontends/dri/dri_screen.c index f476333d295..0e9f39170e2 100644 --- a/src/gallium/frontends/dri/dri_screen.c +++ b/src/gallium/frontends/dri/dri_screen.c @@ -72,6 +72,8 @@ dri_fill_st_options(struct dri_screen *screen) driQueryOptionb(optionCache, "force_glsl_extensions_warn"); options->force_glsl_version = driQueryOptioni(optionCache, "force_glsl_version"); + options->allow_extra_pp_tokens = + driQueryOptionb(optionCache, "allow_extra_pp_tokens"); options->allow_glsl_extension_directive_midshader = driQueryOptionb(optionCache, "allow_glsl_extension_directive_midshader"); options->allow_glsl_120_subset_in_110 = diff --git a/src/gallium/include/frontend/api.h b/src/gallium/include/frontend/api.h index 9dcabe0f097..d4f47a1bfdc 100644 --- a/src/gallium/include/frontend/api.h +++ b/src/gallium/include/frontend/api.h @@ -220,6 +220,7 @@ struct st_config_options bool disable_arb_gpu_shader5; bool force_glsl_extensions_warn; unsigned force_glsl_version; + bool allow_extra_pp_tokens; bool allow_glsl_extension_directive_midshader; bool allow_glsl_120_subset_in_110; bool allow_glsl_builtin_const_expression; diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 97efe2d37f6..4492d43c040 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -79,6 +79,7 @@ static const driOptionDescription brw_driconf[] = { DRI_CONF_DISABLE_GLSL_LINE_CONTINUATIONS(false) DRI_CONF_DISABLE_BLEND_FUNC_EXTENDED(false) DRI_CONF_DUAL_COLOR_BLEND_BY_LOCATION(false) + DRI_CONF_ALLOW_EXTRA_PP_TOKENS(false) DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER(false) DRI_CONF_ALLOW_GLSL_BUILTIN_VARIABLE_REDECLARATION(false) DRI_CONF_ALLOW_GLSL_CROSS_STAGE_INTERPOLATION_MISMATCH(false) diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 04b97028237..b3de4427ded 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3875,6 +3875,14 @@ struct gl_constants */ GLboolean AllowLayoutQualifiersOnFunctionParameters; + /** + * Allow extra tokens at end of preprocessor directives. The CTS now tests + * to make sure these are not allowed. However, previously drivers would + * allow them to exist and just issue a warning so some old applications + * depend on this. + */ + GLboolean AllowExtraPPTokens; + /** * Force computing the absolute value for sqrt() and inversesqrt() to follow * D3D9 when apps rely on this behaviour. diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 6258d08bb09..38370e1e6d6 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -1133,6 +1133,8 @@ void st_init_extensions(struct pipe_screen *screen, consts->ForceGLSLVersion = options->force_glsl_version; } + consts->AllowExtraPPTokens = options->allow_extra_pp_tokens; + consts->AllowHigherCompatVersion = options->allow_higher_compat_version; consts->ForceGLSLAbsSqrt = options->force_glsl_abs_sqrt; diff --git a/src/util/00-mesa-defaults.conf b/src/util/00-mesa-defaults.conf index b7c37eb0b9e..816169b40c3 100644 --- a/src/util/00-mesa-defaults.conf +++ b/src/util/00-mesa-defaults.conf @@ -246,6 +246,10 @@ TODO: document the other workarounds.