From 90dbab0f9a2e35595b7510595b464e654b870e3a Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Thu, 14 Jun 2018 11:00:22 +1000 Subject: [PATCH] mesa/util: add allow_glsl_builtin_const_expression driconf override Google Earth VR shaders uses builtins in constant expressions with GLSL 1.10. That feature wasn't allowed until GLSL 1.20. Reviewed-by: Dave Airlie --- src/compiler/glsl/ast_function.cpp | 3 ++- src/gallium/auxiliary/pipe-loader/driinfo_gallium.h | 1 + src/gallium/include/state_tracker/st_api.h | 1 + src/gallium/state_trackers/dri/dri_screen.c | 2 ++ src/mesa/main/mtypes.h | 6 ++++++ src/mesa/state_tracker/st_extensions.c | 3 +++ src/util/xmlpool/t_options.h | 5 +++++ 7 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/compiler/glsl/ast_function.cpp b/src/compiler/glsl/ast_function.cpp index 22d58e48c64..127aa1f91c4 100644 --- a/src/compiler/glsl/ast_function.cpp +++ b/src/compiler/glsl/ast_function.cpp @@ -529,7 +529,8 @@ generate_call(exec_list *instructions, ir_function_signature *sig, * If the function call is a constant expression, don't generate any * instructions; just generate an ir_constant. */ - if (state->is_version(120, 100)) { + if (state->is_version(120, 100) || + state->ctx->Const.AllowGLSLBuiltinConstantExpression) { ir_constant *value = sig->constant_expression_value(ctx, actual_parameters, NULL); diff --git a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h index 21dc599dc26..f25f2080080 100644 --- a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h +++ b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h @@ -23,6 +23,7 @@ DRI_CONF_SECTION_DEBUG DRI_CONF_DISABLE_SHADER_BIT_ENCODING("false") DRI_CONF_FORCE_GLSL_VERSION(0) DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false") + DRI_CONF_ALLOW_GLSL_BUILTIN_CONST_EXPRESSION("false") DRI_CONF_ALLOW_GLSL_BUILTIN_VARIABLE_REDECLARATION("false") DRI_CONF_ALLOW_GLSL_CROSS_STAGE_INTERPOLATION_MISMATCH("false") DRI_CONF_ALLOW_HIGHER_COMPAT_VERSION("false") diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h index ec6e7844b87..1efc7f081d1 100644 --- a/src/gallium/include/state_tracker/st_api.h +++ b/src/gallium/include/state_tracker/st_api.h @@ -222,6 +222,7 @@ struct st_config_options boolean force_glsl_extensions_warn; unsigned force_glsl_version; boolean allow_glsl_extension_directive_midshader; + boolean allow_glsl_builtin_const_expression; boolean allow_glsl_builtin_variable_redeclaration; boolean allow_higher_compat_version; boolean glsl_zero_init; diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c index aaee9870776..a86b7519364 100644 --- a/src/gallium/state_trackers/dri/dri_screen.c +++ b/src/gallium/state_trackers/dri/dri_screen.c @@ -74,6 +74,8 @@ dri_fill_st_options(struct dri_screen *screen) driQueryOptioni(optionCache, "force_glsl_version"); options->allow_glsl_extension_directive_midshader = driQueryOptionb(optionCache, "allow_glsl_extension_directive_midshader"); + options->allow_glsl_builtin_const_expression = + driQueryOptionb(optionCache, "allow_glsl_builtin_const_expression"); options->allow_glsl_builtin_variable_redeclaration = driQueryOptionb(optionCache, "allow_glsl_builtin_variable_redeclaration"); options->allow_higher_compat_version = diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index ef9fce24d91..e7d9c03cfde 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3721,6 +3721,12 @@ struct gl_constants */ GLboolean AllowGLSLExtensionDirectiveMidShader; + /** + * Allow builtins as part of constant expressions. This was not allowed + * until GLSL 1.20 this allows it everywhere. + */ + GLboolean AllowGLSLBuiltinConstantExpression; + /** * Allow GLSL built-in variables to be redeclared verbatim */ diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index c540cee3974..6586240cb03 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -1134,6 +1134,9 @@ void st_init_extensions(struct pipe_screen *screen, if (options->allow_glsl_extension_directive_midshader) consts->AllowGLSLExtensionDirectiveMidShader = GL_TRUE; + if (options->allow_glsl_builtin_const_expression) + consts->AllowGLSLBuiltinConstantExpression = GL_TRUE; + consts->MinMapBufferAlignment = screen->get_param(screen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT); diff --git a/src/util/xmlpool/t_options.h b/src/util/xmlpool/t_options.h index 3ada813d639..1a4945d6888 100644 --- a/src/util/xmlpool/t_options.h +++ b/src/util/xmlpool/t_options.h @@ -115,6 +115,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_ALLOW_GLSL_BUILTIN_CONST_EXPRESSION(def) \ +DRI_CONF_OPT_BEGIN_B(allow_glsl_builtin_const_expression, def) \ + DRI_CONF_DESC(en,gettext("Allow builtins as part of constant expressions")) \ +DRI_CONF_OPT_END + #define DRI_CONF_ALLOW_GLSL_BUILTIN_VARIABLE_REDECLARATION(def) \ DRI_CONF_OPT_BEGIN_B(allow_glsl_builtin_variable_redeclaration, def) \ DRI_CONF_DESC(en,gettext("Allow GLSL built-in variables to be redeclared verbatim")) \ -- 2.30.2