[Mesa-dev] [PATCH 6/7] glsl: Allow non-constant expression initializers of const-qualified vars.

Kenneth Graunke kenneth at whitecape.org
Sun Jul 7 22:45:28 PDT 2013


On 05/24/2013 06:28 PM, Matt Turner wrote:
> Required by ARB_shading_language_420pack.
> ---
>   src/glsl/ast_to_hir.cpp | 30 +++++++++++++++++++-----------
>   1 file changed, 19 insertions(+), 11 deletions(-)
>
> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> index 6e689b4..6b56e87 100644
> --- a/src/glsl/ast_to_hir.cpp
> +++ b/src/glsl/ast_to_hir.cpp
> @@ -2337,17 +2337,25 @@ process_initializer(ir_variable *var, ast_declaration *decl,
>
>   	 ir_constant *constant_value = rhs->constant_expression_value();
>   	 if (!constant_value) {
> -	    _mesa_glsl_error(& initializer_loc, state,
> -			     "initializer of %s variable `%s' must be a "
> -			     "constant expression",
> -			     (type->qualifier.flags.q.constant)
> -			     ? "const" : "uniform",
> -			     decl->identifier);
> -	    if (var->type->is_numeric()) {
> -	       /* Reduce cascading errors. */
> -	       var->constant_value = ir_constant::zero(state, var->type);
> -	    }
> -	 } else {
> +            /* If ARB_shading_language_420pack is enabled, initializers of
> +             * const-qualified local variables do not have to be constant
> +             * expressions. Const-qualified global variables must still be
> +             * initialized with constant expressions.
> +             */
> +            if (!state->ARB_shading_language_420pack_enable
> +                || state->current_function == NULL) {
> +               _mesa_glsl_error(& initializer_loc, state,
> +                                "initializer of %s variable `%s' must be a "
> +                                "constant expression",
> +                                (type->qualifier.flags.q.constant)
> +                                ? "const" : "uniform",
> +                                decl->identifier);
> +               if (var->type->is_numeric()) {
> +                  /* Reduce cascading errors. */
> +                  var->constant_value = ir_constant::zero(state, var->type);
> +               }
> +            }
> +         } else {
>   	    rhs = constant_value;
>   	    var->constant_value = constant_value;
>   	 }

On actual inspection, this looks okay to me.

This patch is:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>


More information about the mesa-dev mailing list