Use line number information from entire function expression
[mesa.git] / src / glsl / ir_function.cpp
index 2dd98bcc291a895e5b9392aceef47f7348ad2e75..bd5318d231bcef6df7302430a19a56f4a77a3ea4 100644 (file)
@@ -66,7 +66,7 @@ parameter_lists_match(const exec_list *list_a, const exec_list *list_b)
 
       /* Try to find an implicit conversion from actual to param. */
       inexact_match = true;
-      switch ((enum ir_variable_mode)(param->mode)) {
+      switch ((enum ir_variable_mode)(param->data.mode)) {
       case ir_var_auto:
       case ir_var_uniform:
       case ir_var_temporary:
@@ -145,6 +145,10 @@ ir_function::matching_signature(_mesa_glsl_parse_state *state,
       ir_function_signature *const sig =
         (ir_function_signature *) iter.get();
 
+      /* Skip over any built-ins that aren't available in this shader. */
+      if (sig->is_builtin() && !sig->is_builtin_available(state))
+         continue;
+
       switch (parameter_lists_match(& sig->parameters, actual_parameters)) {
       case PARAMETER_LIST_EXACT_MATCH:
         *is_exact = true;
@@ -212,6 +216,10 @@ ir_function::exact_matching_signature(_mesa_glsl_parse_state *state,
       ir_function_signature *const sig =
         (ir_function_signature *) iter.get();
 
+      /* Skip over any built-ins that aren't available in this shader. */
+      if (sig->is_builtin() && !sig->is_builtin_available(state))
+         continue;
+
       if (parameter_lists_match_exact(&sig->parameters, actual_parameters))
         return sig;
    }