The CTS now tests to make sure these are not allowed. However, previously
drivers (including Mesa) would allow them to exist and just issue a
warning. Some old applications such as Champions of Regnum seem to
depend on this.
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/422
Fixes:
43047384c331 ("glsl/glcpp: Promote "extra token at end of directive" from warning to error")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7361>
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");
}
;
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)
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 =
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;
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)
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.
*/
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;
<option name="allow_glsl_layout_qualifier_on_function_parameters" value="true" />
</application>
+ <application name="Champions of Regnum" executable="game">
+ <option name="allow_extra_pp_tokens" value="true" />
+ </application>
+
<application name="Wolfenstein The Old Blood" executable="WolfOldBlood_x64.exe">
<option name="force_compat_profile" value="true" />
</application>
DRI_CONF_OPT_I(force_glsl_version, def, 0, 999, \
"Force a default GLSL version for shaders that lack an explicit #version line")
+#define DRI_CONF_ALLOW_EXTRA_PP_TOKENS(def) \
+ DRI_CONF_OPT_B(allow_extra_pp_tokens, def, \
+ "Allow extra tokens at end of preprocessor directives.")
+
#define DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER(def) \
DRI_CONF_OPT_B(allow_glsl_extension_directive_midshader, def, \
"Allow GLSL #extension directives in the middle of shaders")