glsl: add is_valid_constructor() helper function
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Fri, 21 Apr 2017 14:31:52 +0000 (16:31 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Sat, 6 May 2017 14:40:19 +0000 (16:40 +0200)
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>
src/compiler/glsl/ast_function.cpp

index 91c392654438ef86a3de9857f756a10b4b4b0fad..d493d1bd01a3d7a2ef4a995dbe36954e8f47f9b3 100644 (file)
@@ -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);