glsl2: Use i2b and f2b IR opcodes for casting int or float to bool

This commit is contained in:
Ian Romanick 2010-06-25 16:19:45 -07:00
parent 0bef5b97a9
commit 26b5d33dce

View file

@ -172,17 +172,17 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type)
break;
}
break;
case GLSL_TYPE_BOOL: {
ir_constant *zero = NULL;
case GLSL_TYPE_BOOL:
switch (b) {
case GLSL_TYPE_UINT: zero = new(ctx) ir_constant(unsigned(0)); break;
case GLSL_TYPE_INT: zero = new(ctx) ir_constant(int(0)); break;
case GLSL_TYPE_FLOAT: zero = new(ctx) ir_constant(0.0f); break;
case GLSL_TYPE_UINT:
case GLSL_TYPE_INT:
result = new(ctx) ir_expression(ir_unop_i2b, desired_type, src, NULL);
break;
case GLSL_TYPE_FLOAT:
result = new(ctx) ir_expression(ir_unop_f2b, desired_type, src, NULL);
break;
}
result = new(ctx) ir_expression(ir_binop_nequal, desired_type, src, zero);
}
break;
}
assert(result != NULL);