ast_function: Actually do type conversion on function arguments.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 14 Jul 2010 20:22:07 +0000 (13:22 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 14 Jul 2010 23:49:24 +0000 (16:49 -0700)
src/glsl/ast_function.cpp

index 9315a92ecbc90272d653d5d9293a73c0113588ca..467722c8680d85da1dfde5dfd4414552e7c99533 100644 (file)
@@ -31,6 +31,9 @@ inline unsigned min(unsigned a, unsigned b)
    return (a < b) ? a : b;
 }
 
+static ir_rvalue *
+convert_component(ir_rvalue *src, const glsl_type *desired_type);
+
 static unsigned
 process_parameters(exec_list *instructions, exec_list *actual_parameters,
                   exec_list *parameters,
@@ -93,13 +96,15 @@ process_call(exec_list *instructions, ir_function *f,
            }
         }
 
+        if (formal->type->is_numeric() || formal->type->is_boolean()) {
+           ir_rvalue *converted = convert_component(actual, formal->type);
+           actual->replace_with(converted);
+        }
+
         actual_iter.next();
         formal_iter.next();
       }
 
-      /* FINISHME: The list of actual parameters needs to be modified to
-       * FINISHME: include any necessary conversions.
-       */
       return new(ctx) ir_call(sig, actual_parameters);
    } else {
       /* FINISHME: Log a better error message here.  G++ will show the types