Shaves a few instructions off of the VS in Lightsmark, but no statistically significant performance difference on gen7 (n=5). --- src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index 06bde92..2436bc9 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -1285,16 +1285,26 @@ vec4_visitor::visit(ir_expression *ir) break; case ir_binop_min: - emit(CMP(result_dst, op[0], op[1], BRW_CONDITIONAL_L)); + if (intel->gen >= 6) { + inst = emit(BRW_OPCODE_SEL, result_dst, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_L; + } else { + emit(CMP(result_dst, op[0], op[1], BRW_CONDITIONAL_L)); - inst = emit(BRW_OPCODE_SEL, result_dst, op[0], op[1]); - inst->predicate = BRW_PREDICATE_NORMAL; + inst = emit(BRW_OPCODE_SEL, result_dst, op[0], op[1]); + inst->predicate = BRW_PREDICATE_NORMAL; + } break; case ir_binop_max: - emit(CMP(result_dst, op[0], op[1], BRW_CONDITIONAL_G)); + if (intel->gen >= 6) { + inst = emit(BRW_OPCODE_SEL, result_dst, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_G; + } else { + emit(CMP(result_dst, op[0], op[1], BRW_CONDITIONAL_G)); - inst = emit(BRW_OPCODE_SEL, result_dst, op[0], op[1]); - inst->predicate = BRW_PREDICATE_NORMAL; + inst = emit(BRW_OPCODE_SEL, result_dst, op[0], op[1]); + inst->predicate = BRW_PREDICATE_NORMAL; + } break; case ir_binop_pow: -- 1.7.7.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev