On 09/27/2011 03:08 PM, Eric Anholt wrote:
> Bitshifts are one of the rare places that GLSL allows mixed base types
> without an implicit conversion occurring.
> ---
>  src/glsl/ir_constant_expression.cpp |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/src/glsl/ir_constant_expression.cpp 
> b/src/glsl/ir_constant_expression.cpp
> index f0299a2..56a4237 100644
> --- a/src/glsl/ir_constant_expression.cpp
> +++ b/src/glsl/ir_constant_expression.cpp
> @@ -69,7 +69,9 @@ ir_expression::constant_expression_value()
>     }
>  
>     if (op[1] != NULL)
> -      assert(op[0]->type->base_type == op[1]->type->base_type);
> +      assert(op[0]->type->base_type == op[1]->type->base_type ||
> +          this->operation == ir_binop_lshift ||
> +          this->operation == ir_binop_rshift);
>  
>     bool op0_scalar = op[0]->type->is_scalar();
>     bool op1_scalar = op[1] != NULL && op[1]->type->is_scalar();

It seems weird that we allow this in the IR for shifts, but for nothing
else.  I'm pretty sure that -all- other binary operations require their
operand types to be equal.  Might be more consistent to make AST->HIR
generate i2u or u2i nodes to convert op[1] to op[0]'s type.

Though, those are silly, and this ought to work fine too.

Certainly the existing code is broken, your new code is not broken, and
ir_validate allows mixed types in the IR.  *shrug*

Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to