From: Timothy Arceri <timothy.arc...@collabora.com> This helper is similar to the function added as part of the ast_layout_expression class but will be used when only the ast_expression type is required for the qualifier.
ast_expression is used if qualifier can't have mulitple declorations or if all but he newest qualifier is simply ignored. --- src/glsl/ast_to_hir.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 5643c86..21a956d 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -2261,6 +2261,48 @@ validate_matrix_layout_for_type(struct _mesa_glsl_parse_state *state, } } +bool +process_qualifier_constant(struct _mesa_glsl_parse_state *state, + YYLTYPE *loc, + const char *qual_indentifier, + ast_expression *const_expression, + unsigned *value, int minimum_value) +{ + exec_list dummy_instructions; + + if (const_expression == NULL) { + *value = 0; + return true; + } + + ir_rvalue *const ir = const_expression->hir(&dummy_instructions, state); + + ir_constant *const const_int = ir->constant_expression_value(); + if (const_int == NULL || !const_int->type->is_integer()) { + _mesa_glsl_error(loc, state, "%s must be an integral constant " + "expression", qual_indentifier); + return false; + } + + assert(minimum_value >= 0); + if (const_int->value.i[0] < minimum_value) { + _mesa_glsl_error(loc, state, "%s layout qualifier is invalid (%d < %d)", + qual_indentifier, const_int->value.i[0], minimum_value); + return false; + } + + /* If the location is const (and we've verified that + * it is) then no instructions should have been emitted + * when we converted it to HIR. If they were emitted, + * then either the location isn't const after all, or + * we are emitting unnecessary instructions. + */ + assert(dummy_instructions.is_empty()); + + *value = const_int->value.u[0]; + return true; +} + static bool validate_binding_qualifier(struct _mesa_glsl_parse_state *state, YYLTYPE *loc, -- 2.4.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev