mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 22:20:14 +01:00
glsl: move process_qualifier_constant() to ast_type.cpp
We will make use of this function being here in the following patch. Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
52caeee7e7
commit
13f6c788eb
3 changed files with 47 additions and 41 deletions
|
|
@ -1205,4 +1205,10 @@ extern void _mesa_ast_process_interface_block(YYLTYPE *locp,
|
|||
ast_interface_block *const block,
|
||||
const struct ast_type_qualifier &q);
|
||||
|
||||
extern bool
|
||||
process_qualifier_constant(struct _mesa_glsl_parse_state *state,
|
||||
YYLTYPE *loc,
|
||||
const char *qual_indentifier,
|
||||
ast_expression *const_expression,
|
||||
unsigned *value);
|
||||
#endif /* AST_H */
|
||||
|
|
|
|||
|
|
@ -2584,47 +2584,6 @@ validate_matrix_layout_for_type(struct _mesa_glsl_parse_state *state,
|
|||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
process_qualifier_constant(struct _mesa_glsl_parse_state *state,
|
||||
YYLTYPE *loc,
|
||||
const char *qual_indentifier,
|
||||
ast_expression *const_expression,
|
||||
unsigned *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;
|
||||
}
|
||||
|
||||
if (const_int->value.i[0] < 0) {
|
||||
_mesa_glsl_error(loc, state, "%s layout qualifier is invalid (%d < 0)",
|
||||
qual_indentifier, const_int->value.u[0]);
|
||||
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_stream_qualifier(YYLTYPE *loc, struct _mesa_glsl_parse_state *state,
|
||||
unsigned stream)
|
||||
|
|
|
|||
|
|
@ -566,3 +566,44 @@ ast_layout_expression::process_qualifier_constant(struct _mesa_glsl_parse_state
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
process_qualifier_constant(struct _mesa_glsl_parse_state *state,
|
||||
YYLTYPE *loc,
|
||||
const char *qual_indentifier,
|
||||
ast_expression *const_expression,
|
||||
unsigned *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;
|
||||
}
|
||||
|
||||
if (const_int->value.i[0] < 0) {
|
||||
_mesa_glsl_error(loc, state, "%s layout qualifier is invalid (%d < 0)",
|
||||
qual_indentifier, const_int->value.u[0]);
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue