diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2013-09-03 16:46:05 -0700 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2013-09-09 11:52:22 -0700 |
commit | 202238824bdde9ddac5753232eee4f3d1e2d67db (patch) | |
tree | adcd1ab7cb6a9a00c029f0cb81e533e455c3f02e /src/glsl/ir_builder.cpp | |
parent | d716b3376ccf66200d007852b30147ca7f7e7c68 (diff) |
glsl: Add a new ir_builder::dotlike() function.
dotlike() uses ir_binop_mul for scalars, and ir_binop_dot for vectors.
When generating built-in functions, we often want to use regular
multiply for scalar signatures, and dot() for vector signatures.
ir_binop_dot only works on vectors, so we have to switch opcodes,
even if the code is otherwise identical. dotlike() makes this easy.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Diffstat (limited to 'src/glsl/ir_builder.cpp')
-rw-r--r-- | src/glsl/ir_builder.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/glsl/ir_builder.cpp b/src/glsl/ir_builder.cpp index b549ff4f72..e12ae3cf53 100644 --- a/src/glsl/ir_builder.cpp +++ b/src/glsl/ir_builder.cpp @@ -231,6 +231,17 @@ ir_expression *dot(operand a, operand b) return expr(ir_binop_dot, a, b); } +/* dot for vectors, mul for scalars */ +ir_expression *dotlike(operand a, operand b) +{ + assert(a.val->type == b.val->type); + + if (a.val->type->vector_elements == 1) + return expr(ir_binop_mul, a, b); + + return expr(ir_binop_dot, a, b); +} + ir_expression* clamp(operand a, operand b, operand c) { |