summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/glsl/ir_builder.cpp11
-rw-r--r--src/glsl/ir_builder.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/src/glsl/ir_builder.cpp b/src/glsl/ir_builder.cpp
index b549ff4f72b..e12ae3cf53f 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)
{
diff --git a/src/glsl/ir_builder.h b/src/glsl/ir_builder.h
index d423fc5954d..6d32d7a68b9 100644
--- a/src/glsl/ir_builder.h
+++ b/src/glsl/ir_builder.h
@@ -136,6 +136,7 @@ ir_expression *mul(operand a, operand b);
ir_expression *div(operand a, operand b);
ir_expression *round_even(operand a);
ir_expression *dot(operand a, operand b);
+ir_expression *dotlike(operand a, operand b);
ir_expression *clamp(operand a, operand b, operand c);
ir_expression *saturate(operand a);
ir_expression *abs(operand a);