Mesa (master): freedreno/ir3: fix error in bail logic
Rob Clark
robclark at kemper.freedesktop.org
Fri Sep 5 02:35:59 UTC 2014
Module: Mesa
Branch: master
Commit: 73ff4c5f70286ffe72ce6a60b68a8274d7425478
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=73ff4c5f70286ffe72ce6a60b68a8274d7425478
Author: Rob Clark <robclark at freedesktop.org>
Date: Wed Sep 3 19:45:19 2014 -0400
freedreno/ir3: fix error in bail logic
all_delayed will also be true if we didn't attempt to schedule anything
due to no more instructions using current addr/pred. We rely on coming
in to block_sched_undelayed() to detect and clean up when there are no
more uses of the current addr/pred, which isn't necessarily an error.
This fixes a regression introduced in b823abed.
Signed-off-by: Rob Clark <robclark at freedesktop.org>
---
src/gallium/drivers/freedreno/ir3/ir3_sched.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_sched.c b/src/gallium/drivers/freedreno/ir3/ir3_sched.c
index 33d1caa..cf09cea 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_sched.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_sched.c
@@ -310,7 +310,7 @@ static int block_sched_undelayed(struct ir3_sched_ctx *ctx,
bool addr_in_use = false;
bool pred_in_use = false;
bool all_delayed = true;
- unsigned cnt = ~0;
+ unsigned cnt = ~0, attempted = 0;
while (instr) {
struct ir3_instruction *next = instr->next;
@@ -331,6 +331,8 @@ static int block_sched_undelayed(struct ir3_sched_ctx *ctx,
addr_in_use = true;
if (pred)
pred_in_use = true;
+
+ attempted++;
}
instr = next;
@@ -345,7 +347,7 @@ static int block_sched_undelayed(struct ir3_sched_ctx *ctx,
/* detect if we've gotten ourselves into an impossible situation
* and bail if needed
*/
- if (all_delayed)
+ if (all_delayed && (attempted > 0))
ctx->error = true;
return cnt;
More information about the mesa-commit
mailing list