glsl: add is_valid_constructor() helper function
This will help for the explicit conversions for sampler and image types as specified by ARB_bindless_texture. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
1eff26f02d
commit
b98542588c
|
@ -1930,6 +1930,12 @@ ast_function_expression::handle_method(exec_list *instructions,
|
||||||
return ir_rvalue::error_value(ctx);
|
return ir_rvalue::error_value(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool is_valid_constructor(const glsl_type *type,
|
||||||
|
struct _mesa_glsl_parse_state *state)
|
||||||
|
{
|
||||||
|
return type->is_numeric() || type->is_boolean();
|
||||||
|
}
|
||||||
|
|
||||||
ir_rvalue *
|
ir_rvalue *
|
||||||
ast_function_expression::hir(exec_list *instructions,
|
ast_function_expression::hir(exec_list *instructions,
|
||||||
struct _mesa_glsl_parse_state *state)
|
struct _mesa_glsl_parse_state *state)
|
||||||
|
@ -2007,7 +2013,7 @@ ast_function_expression::hir(exec_list *instructions,
|
||||||
state);
|
state);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!constructor_type->is_numeric() && !constructor_type->is_boolean())
|
if (!is_valid_constructor(constructor_type, state))
|
||||||
return ir_rvalue::error_value(ctx);
|
return ir_rvalue::error_value(ctx);
|
||||||
|
|
||||||
/* Total number of components of the type being constructed. */
|
/* Total number of components of the type being constructed. */
|
||||||
|
@ -2037,7 +2043,7 @@ ast_function_expression::hir(exec_list *instructions,
|
||||||
return ir_rvalue::error_value(ctx);
|
return ir_rvalue::error_value(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!result->type->is_numeric() && !result->type->is_boolean()) {
|
if (!is_valid_constructor(result->type, state)) {
|
||||||
_mesa_glsl_error(& loc, state, "cannot construct `%s' from a "
|
_mesa_glsl_error(& loc, state, "cannot construct `%s' from a "
|
||||||
"non-numeric data type",
|
"non-numeric data type",
|
||||||
constructor_type->name);
|
constructor_type->name);
|
||||||
|
|
Loading…
Reference in New Issue