Re: [Mesa-dev] [PATCH 6/7] glsl: Allow non-constant expression initializers of const-qualified vars.
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 kenn...@whitecape.org ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 6/7] glsl: Allow non-constant expression initializers of const-qualified vars.
On Sat, Jun 29, 2013 at 7:42 PM, Matt Turner matts...@gmail.com wrote: Ping. Check out the piglit tests: const-var-non-constant-expr.shader_test global-const-var-non-const-expr.frag Those confirm that this change is correct. I'm completely satisfied with the change. I'll push it on Monday. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 6/7] glsl: Allow non-constant expression initializers of const-qualified vars.
On Fri, May 24, 2013 at 6:28 PM, Matt Turner matts...@gmail.com 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; } -- 1.8.1.5 Ping. Check out the piglit tests: const-var-non-constant-expr.shader_test global-const-var-non-const-expr.frag Those confirm that this change is correct. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 6/7] glsl: Allow non-constant expression initializers of const-qualified vars.
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; } -- 1.8.1.5 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev