--- src/gallium/drivers/r600/r600_asm.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/gallium/drivers/r600/r600_asm.c b/src/gallium/drivers/r600/r600_asm.c index 0f28824..58c3e03 100644 --- a/src/gallium/drivers/r600/r600_asm.c +++ b/src/gallium/drivers/r600/r600_asm.c @@ -1039,7 +1039,7 @@ static int merge_inst_groups(struct r600_bytecode *bc, struct r600_bytecode_alu unsigned nliteral = 0, prev_nliteral = 0; int i, j, r, src, num_src; - int num_once_inst = 0; + int num_once_inst = 0, num_pred = 0; int have_mova = 0, have_rel = 0; int max_slots = bc->chip_class == CAYMAN ? 4 : 5; @@ -1062,6 +1062,9 @@ static int merge_inst_groups(struct r600_bytecode *bc, struct r600_bytecode_alu have_mova = 1; } num_once_inst += is_alu_once_inst(bc, prev[i]); + + if (prev[i]->pred_sel) + num_pred += 1; } if (slots[i] && r600_bytecode_alu_nliterals(bc, slots[i], literal, &nliteral)) return 0; @@ -1103,6 +1106,9 @@ static int merge_inst_groups(struct r600_bytecode *bc, struct r600_bytecode_alu alu = slots[i]; num_once_inst += is_alu_once_inst(bc, alu); + + if (alu->pred_sel) + num_pred += 1; /* don't reschedule NOPs */ if (is_nop_inst(bc, alu)) @@ -1144,6 +1150,10 @@ static int merge_inst_groups(struct r600_bytecode *bc, struct r600_bytecode_alu /* more than one PRED_ or KILL_ ? */ if (num_once_inst > 1) return 0; + + /* PRED_ and PRED_SEL ? */ + if (num_pred > 0) + return 0; /* check if the result can still be swizzlet */ r = check_and_set_bank_swizzle(bc, result); -- 1.7.11.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev