On 09/04/2013 07:11 PM, Matt Turner wrote:
On Wed, Sep 4, 2013 at 3:22 PM, Kenneth Graunke <kenn...@whitecape.org> wrote:
Signed-off-by: Kenneth Graunke <kenn...@whitecape.org>
---
  src/glsl/ir.cpp | 4 ++++
  1 file changed, 4 insertions(+)

diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
index e9317f8..4abadd8 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -250,6 +250,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0)
     case ir_unop_cos_reduced:
     case ir_unop_dFdx:
     case ir_unop_dFdy:
+   case ir_unop_bitfield_reverse:
        this->type = op0->type;
        break;

@@ -257,6 +258,9 @@ ir_expression::ir_expression(int op, ir_rvalue *op0)
     case ir_unop_b2i:
     case ir_unop_u2i:
     case ir_unop_bitcast_f2i:
+   case ir_unop_bit_count:
+   case ir_unop_find_msb:
+   case ir_unop_find_lsb:
        this->type = glsl_type::get_instance(GLSL_TYPE_INT,
                                            op0->type->vector_elements, 1);
        break;
--
1.8.3.4

ir_binop_bfm, ir_triop_bfi, ir_triop_bitfield_extract, and
ir_quadop_bitfield_insert too?

Adding ir_binop_bfm makes sense.

The next patch adds triop support.

I didn't add an ir_expression constructor with type inference for quadops since I wasn't sure how to handle ir_quadop_vector (and it's the only other quadop). But I guess it can be handled as:

glsl_type::get_instance(operands[0]->type->base_type,
                        operands[0] != NULL +
                        operands[1] != NULL +
                        operands[2] != NULL +
                        operands[3] != NULL,
                        1);

Then ir_builder::bitfield_extract() could use it.

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

Reply via email to