[Mesa-dev] [PATCH 4/5] glsl: Don't allow redefining builtin functions on GLSL 1.00.

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue May 2 20:39:23 UTC 2017


Except a nitpick on patch 1, patches 1-4 are:

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 05/02/2017 07:36 PM, Eric Anholt wrote:
> The spec text cited above says you can't, but only the GLSL 3.00 (redefine
> or overload) case was implemented.
> 
> Fixes dEQP scoping.invalid.redefine_builtin_fragment/vertex.
> ---
>   src/compiler/glsl/ast_to_hir.cpp | 15 +++++++++++++--
>   1 file changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
> index 58088cec0d3a..b96c45f38d2d 100644
> --- a/src/compiler/glsl/ast_to_hir.cpp
> +++ b/src/compiler/glsl/ast_to_hir.cpp
> @@ -5666,16 +5666,27 @@ ast_function::hir(exec_list *instructions,
>       * "User code can overload the built-in functions but cannot redefine
>       * them."
>       */
> -   if (state->es_shader && state->language_version >= 300) {
> +   if (state->es_shader) {
>         /* Local shader has no exact candidates; check the built-ins. */
>         _mesa_glsl_initialize_builtin_functions();
> -      if (_mesa_glsl_has_builtin_function(name)) {
> +      if (state->language_version >= 300 &&
> +          _mesa_glsl_has_builtin_function(name)) {
>            YYLTYPE loc = this->get_location();
>            _mesa_glsl_error(& loc, state,
>                             "A shader cannot redefine or overload built-in "
>                             "function `%s' in GLSL ES 3.00", name);
>            return NULL;
>         }
> +
> +      if (state->language_version == 100) {
> +         ir_function_signature *sig =
> +            _mesa_glsl_find_builtin_function(state, name, &hir_parameters);
> +         if (sig && sig->is_builtin()) {
> +            _mesa_glsl_error(& loc, state,
> +                             "A shader cannot redefine built-in "
> +                             "function `%s' in GLSL ES 1.00", name);
> +         }
> +      }
>      }
>   
>      /* Verify that this function's signature either doesn't match a previously
> 


More information about the mesa-dev mailing list