From b98542588cd27ebcd403ea8130ef04b440661cb0 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 21 Apr 2017 16:31:52 +0200 Subject: [PATCH] glsl: add is_valid_constructor() helper function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will help for the explicit conversions for sampler and image types as specified by ARB_bindless_texture. Signed-off-by: Samuel Pitoiset Reviewed-by: Timothy Arceri Reviewed-by: Nicolai Hähnle --- src/compiler/glsl/ast_function.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/compiler/glsl/ast_function.cpp b/src/compiler/glsl/ast_function.cpp index 91c39265443..d493d1bd01a 100644 --- a/src/compiler/glsl/ast_function.cpp +++ b/src/compiler/glsl/ast_function.cpp @@ -1930,6 +1930,12 @@ ast_function_expression::handle_method(exec_list *instructions, 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 * ast_function_expression::hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) @@ -2007,7 +2013,7 @@ ast_function_expression::hir(exec_list *instructions, state); } - if (!constructor_type->is_numeric() && !constructor_type->is_boolean()) + if (!is_valid_constructor(constructor_type, state)) return ir_rvalue::error_value(ctx); /* 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); } - 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 " "non-numeric data type", constructor_type->name);