Module: Mesa Branch: master Commit: ba7b60d3e4a89558dc1b514e7611f17d238a2abc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ba7b60d3e4a89558dc1b514e7611f17d238a2abc
Author: Matt Turner <matts...@gmail.com> Date: Thu May 23 11:48:40 2013 -0700 glsl: Allow non-constant expression initializers of const-qualified vars. Required by ARB_shading_language_420pack. Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> --- src/glsl/ast_to_hir.cpp | 30 +++++++++++++++++++----------- 1 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index efbd72c..cbd9ea3 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -2355,17 +2355,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; } _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit