summaryrefslogtreecommitdiff
path: root/src/glsl/ast_function.cpp
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2010-07-14 13:22:07 -0700
committerKenneth Graunke <kenneth@whitecape.org>2010-07-14 16:49:24 -0700
commit17a307d154489d718ab51a6272d2054868d782f6 (patch)
treec1fa0490f5afcd031af6d44caf8a53f19e05f01d /src/glsl/ast_function.cpp
parent1fdcdb2dca97cdf4b8f4790aa66587ff3e89e526 (diff)
ast_function: Actually do type conversion on function arguments.
Diffstat (limited to 'src/glsl/ast_function.cpp')
-rw-r--r--src/glsl/ast_function.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp
index 9315a92ecb..467722c868 100644
--- a/src/glsl/ast_function.cpp
+++ b/src/glsl/ast_function.cpp
@@ -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