[Mesa-dev] [PATCH 04/16] glsl: Expand constant_util

Thomas Helland thomashelland90 at gmail.com
Sun Nov 16 17:51:49 PST 2014


Add functions:
  is_greater_than_one
  is_less_than_zero

Add variations like greater_than_or_equal_zero.
---
This is not ideal computation-wise, as we are doing two
iterations instead of one. The question is wether or not
the extra code is worth the duplicaton.
---
 src/glsl/ir_constant_util.h | 50 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/src/glsl/ir_constant_util.h b/src/glsl/ir_constant_util.h
index 4e0fede..dd6452b 100644
--- a/src/glsl/ir_constant_util.h
+++ b/src/glsl/ir_constant_util.h
@@ -105,6 +105,21 @@ is_less_than_one(ir_constant *ir)
 }
 
 static inline bool
+is_greater_than_one(ir_constant *ir)
+{
+   if (!is_valid_vec_const(ir))
+      return false;
+
+   unsigned component = 0;
+   for (int c = 0; c < ir->type->vector_elements; c++) {
+      if (ir->get_float_component(c) > 1.0f)
+         component++;
+   }
+
+   return (component == ir->type->vector_elements);
+}
+
+static inline bool
 is_greater_than_zero(ir_constant *ir)
 {
    if (!is_valid_vec_const(ir))
@@ -119,4 +134,39 @@ is_greater_than_zero(ir_constant *ir)
    return (component == ir->type->vector_elements);
 }
 
+static inline bool
+is_less_than_zero(ir_constant *ir)
+{
+   if (!is_valid_vec_const(ir))
+      return false;
+
+   unsigned component = 0;
+   for (int c = 0; c < ir->type->vector_elements; c++) {
+      if (ir->get_float_component(c) < 0.0f)
+         component++;
+   }
+
+   return (component == ir->type->vector_elements);
+}
+
+static inline bool
+is_less_than_or_equal_zero(ir_constant *ir) {
+   return is_less_than_zero(ir) || is_vec_zero(ir);
+}
+
+static inline bool
+is_greater_than_or_equal_zero(ir_constant *ir) {
+   return is_greater_than_zero(ir) || is_vec_zero(ir);
+}
+
+static inline bool
+is_less_than_or_equal_one(ir_constant *ir) {
+   return is_less_than_one(ir) || is_vec_one(ir);
+}
+
+static inline bool
+is_greater_than_or_equal_one(ir_constant *ir) {
+   return is_greater_than_one(ir) || is_vec_one(ir);
+}
+
 #endif /* IR_CONSTANT_UTIL_H_ */
-- 
2.0.3



More information about the mesa-dev mailing list