From: Chad Versace Date: Wed, 13 Oct 2010 15:29:58 +0000 (-0700) Subject: glsl: Fix ir validation for bit logic ops X-Git-Tag: android-x86-2.2~1063^2~41 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e2c1fe3eb0fa47f5501b4ec8cd6b732db7ca84be;p=android-x86%2Fexternal-mesa.git glsl: Fix ir validation for bit logic ops In ir_validate::visit_leave(), the cases for - ir_binop_bit_and - ir_binop_bit_xor - ir_binop_bit_or were incorrect. It was incorrectly asserted that both operands must be the same type, when in fact one may be scalar and the other a vector. It was also incorrectly asserted that the resultant type was the type of the left operand, which in fact does not hold when the left operand is a scalar and the right operand is a vector. --- diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp index db1ffb2de3f..df64ed638c2 100644 --- a/src/glsl/ir_validate.cpp +++ b/src/glsl/ir_validate.cpp @@ -347,11 +347,15 @@ ir_validate::visit_leave(ir_expression *ir) case ir_binop_bit_and: case ir_binop_bit_xor: case ir_binop_bit_or: - assert(ir->operands[0]->type == ir->operands[1]->type); - assert(ir->type == ir->operands[0]->type); - assert(ir->type->base_type == GLSL_TYPE_INT || - ir->type->base_type == GLSL_TYPE_UINT); - break; + assert(ir->operands[0]->type->base_type == + ir->operands[1]->type->base_type); + assert(ir->type->is_integer()); + if (ir->operands[0]->type->is_vector() && + ir->operands[1]->type->is_vector()) { + assert(ir->operands[0]->type->vector_elements == + ir->operands[1]->type->vector_elements); + } + break; case ir_binop_logic_and: case ir_binop_logic_xor: