diff options
author | Eric Anholt <eric@anholt.net> | 2010-04-08 14:34:38 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2010-04-08 14:38:32 -0700 |
commit | 925759283a6396faeefb8b33761dd1c681d1593d (patch) | |
tree | d2e923624d18371e93721a357564cd54c2feeba3 /builtin_function.cpp | |
parent | 2a7b2b22f47661029a1e8eea3d3765bd782412b3 (diff) |
Add builtin normalize() functions.
Fixes CorrectSqizzle2.vert.
Diffstat (limited to 'builtin_function.cpp')
-rw-r--r-- | builtin_function.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/builtin_function.cpp b/builtin_function.cpp index e537141..1fdf882 100644 --- a/builtin_function.cpp +++ b/builtin_function.cpp @@ -189,6 +189,24 @@ generate_max(exec_list *instructions, static void +generate_normalize(exec_list *instructions, + ir_variable **declarations, + const glsl_type *type) +{ + ir_dereference *const arg = new ir_dereference(declarations[0]); + ir_rvalue *temp; + ir_rvalue *result; + + temp = new ir_expression(ir_binop_dot, glsl_type::float_type, arg, arg); + temp = new ir_expression(ir_unop_rsq, glsl_type::float_type, temp, NULL); + result = new ir_expression(ir_binop_mul, type, arg, temp); + + ir_instruction *inst = new ir_return(result); + instructions->push_tail(inst); +} + + +static void generate_pow(exec_list *instructions, ir_variable **declarations, const glsl_type *type) @@ -386,6 +404,8 @@ generate_110_functions(glsl_symbol_table *symtab, exec_list *instructions) /* FINISHME: distance() */ generate_dot_functions(symtab, instructions); /* FINISHME: cross() */ + make_gentype_function(symtab, instructions, "normalize", 1, + generate_normalize); /* FINISHME: normalize() */ /* FINISHME: ftransform() */ /* FINISHME: faceforward() */ |