---
 src/glsl/opt_minmax.cpp | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/glsl/opt_minmax.cpp b/src/glsl/opt_minmax.cpp
index f066b45..5515f51 100644
--- a/src/glsl/opt_minmax.cpp
+++ b/src/glsl/opt_minmax.cpp
@@ -411,6 +411,30 @@ get_range(ir_rvalue *rval)
          r1 = get_range(expr->operands[1]);
          return resolv_add_range(r0, r1);
 
+      case ir_binop_dot: {
+         r0 = get_range(expr->operands[0]);
+         r1 = get_range(expr->operands[1]);
+
+         r0 = resolv_mul_range(r0, r1);
+         float sum = 0.0f;
+
+         if (r0.low) {
+            for (unsigned i = 0; i < r0.low->type->components(); i++)
+               sum += r0.low->get_float_component(i);
+            low = new(mem_ctx) ir_constant(sum);
+         }
+
+         sum = 0.0f;
+
+         if (r0.high) {
+            for (unsigned i = 0; i < r0.high->type->components(); i++)
+               sum += r0.high->get_float_component(i);
+            high = new(mem_ctx) ir_constant(sum);
+         }
+
+         return minmax_range(low, high);
+      }
+
       case ir_binop_min:
       case ir_binop_max:
          r0 = get_range(expr->operands[0]);
-- 
2.2.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to