diff options
-rw-r--r-- | src/gallium/drivers/r600/sb/sb_sched.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/gallium/drivers/r600/sb/sb_sched.cpp b/src/gallium/drivers/r600/sb/sb_sched.cpp index ffc66018b10..fe887c84c70 100644 --- a/src/gallium/drivers/r600/sb/sb_sched.cpp +++ b/src/gallium/drivers/r600/sb/sb_sched.cpp @@ -1154,14 +1154,21 @@ bool post_scheduler::schedule_alu(container_node *c) { assert(!ready.empty() || !ready_copies.empty()); - bool improving = true; + /* This number is rather arbitrary, important is that the scheduler has + * more than one try to create an instruction group + */ + int improving = 10; int last_pending = pending.count(); - while (improving) { + while (improving > 0) { prev_regmap = regmap; if (!prepare_alu_group()) { int new_pending = pending.count(); - improving = (new_pending < last_pending) || (last_pending == 0); + if ((new_pending < last_pending) || (last_pending == 0)) + improving = 10; + else + --improving; + last_pending = new_pending; if (alu.current_idx[0] || alu.current_idx[1]) { |