i965/vs: Add missing resolve_bool_comparison calls on GEN4 and GEN5
The ir_unop_any problem was discovered by some later optimization passes that generate ir_triop_csel. I was also able to reproduce it by modifying the gl-2.0-vertexattribpointer vertex shader to generate its result using color = mix(vec4(0, 1, 0, 0), vec4(1, 0, 0, 0), bvec4(any(greaterThan(diff, vec4(tolerance))))); instead of an if-statement. This also required using #version 130 and MESA_GLSL_VERSION_OVERRIDE=130. I have not nominated this for stable releases because I don't think there's any way to trigger the problem without GLSL 1.30 or optimizations that don't exist in stable. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Abdiel Janulgue <abdiel.janulgue@intel.com>
This commit is contained in:
parent
21ff9bfe1c
commit
e76a8dc8ed
|
@ -1555,6 +1555,11 @@ vec4_visitor::visit(ir_expression *ir)
|
|||
}
|
||||
|
||||
case ir_binop_all_equal:
|
||||
if (brw->gen <= 5) {
|
||||
resolve_bool_comparison(ir->operands[0], &op[0]);
|
||||
resolve_bool_comparison(ir->operands[1], &op[1]);
|
||||
}
|
||||
|
||||
/* "==" operator producing a scalar boolean. */
|
||||
if (ir->operands[0]->type->is_vector() ||
|
||||
ir->operands[1]->type->is_vector()) {
|
||||
|
@ -1567,6 +1572,11 @@ vec4_visitor::visit(ir_expression *ir)
|
|||
}
|
||||
break;
|
||||
case ir_binop_any_nequal:
|
||||
if (brw->gen <= 5) {
|
||||
resolve_bool_comparison(ir->operands[0], &op[0]);
|
||||
resolve_bool_comparison(ir->operands[1], &op[1]);
|
||||
}
|
||||
|
||||
/* "!=" operator producing a scalar boolean. */
|
||||
if (ir->operands[0]->type->is_vector() ||
|
||||
ir->operands[1]->type->is_vector()) {
|
||||
|
@ -1581,6 +1591,9 @@ vec4_visitor::visit(ir_expression *ir)
|
|||
break;
|
||||
|
||||
case ir_unop_any:
|
||||
if (brw->gen <= 5) {
|
||||
resolve_bool_comparison(ir->operands[0], &op[0]);
|
||||
}
|
||||
emit(CMP(dst_null_d(), op[0], src_reg(0), BRW_CONDITIONAL_NZ));
|
||||
emit(MOV(result_dst, src_reg(0)));
|
||||
|
||||
|
|
Loading…
Reference in New Issue