diff options
author | Kenneth Graunke <[email protected]> | 2010-07-14 13:22:07 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2010-07-14 16:49:24 -0700 |
commit | 17a307d154489d718ab51a6272d2054868d782f6 (patch) | |
tree | c1fa0490f5afcd031af6d44caf8a53f19e05f01d /src | |
parent | 1fdcdb2dca97cdf4b8f4790aa66587ff3e89e526 (diff) |
ast_function: Actually do type conversion on function arguments.
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/ast_function.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp index 9315a92ecbc..467722c8680 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 |