glsl2: Add new ir_constant::zero static method.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 21 Jul 2010 22:54:15 +0000 (15:54 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 28 Jul 2010 22:46:26 +0000 (15:46 -0700)
This conveniently creates a zero value of whatever type you want.

src/glsl/ir.cpp
src/glsl/ir.h

index c75d560c48cb07adf593149839a1ea6c328dc5a1..bb58d9562438dfd10175ff252b0e571f8fefd8e9 100644 (file)
@@ -326,6 +326,18 @@ ir_constant::ir_constant(const struct glsl_type *type, exec_list *value_list)
    }
 }
 
+ir_constant *
+ir_constant::zero(void *mem_ctx, const glsl_type *type)
+{
+   assert(type->is_numeric());
+
+   ir_constant *c = new(mem_ctx) ir_constant;
+   c->type = type;
+   memset(&c->value, 0, sizeof(c->value));
+
+   return c;
+}
+
 bool
 ir_constant::get_bool_component(unsigned i) const
 {
index 202685d145a113b745f1eab93e30b1e14c050b39..bee9f6a2de4b2ac3f4600b6a78482ac7c3140c3c 100644 (file)
@@ -1248,6 +1248,11 @@ public:
     */
    ir_constant(const ir_constant *c, unsigned i);
 
+   /**
+    * Return a new ir_constant of the specified type containing all zeros.
+    */
+   static ir_constant *zero(void *mem_ctx, const glsl_type *type);
+
    virtual ir_constant *clone(struct hash_table *) const;
 
    virtual ir_constant *constant_expression_value();