From c7811f56c205b113dd820034a99ff3aaa20af636 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Sat, 4 Apr 2015 13:37:45 -0400 Subject: [PATCH] freedreno/ir3: insert nop between sfu/mem operations Signed-off-by: Ilia Mirkin --- src/gallium/drivers/freedreno/ir3/ir3_sched.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/freedreno/ir3/ir3_sched.c b/src/gallium/drivers/freedreno/ir3/ir3_sched.c index 94237c33ff8..653f679fe1e 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_sched.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_sched.c @@ -110,6 +110,11 @@ static struct ir3_instruction * prev(struct ir3_instruction *instr) return p; } +static bool is_sfu_or_mem(struct ir3_instruction *instr) +{ + return is_sfu(instr) || is_mem(instr); +} + static void schedule(struct ir3_sched_ctx *ctx, struct ir3_instruction *instr, bool remove) { @@ -119,7 +124,7 @@ static void schedule(struct ir3_sched_ctx *ctx, * a nop.. ideally we'd know about this constraint in the * scheduling and depth calculation.. */ - if (ctx->scheduled && is_sfu(ctx->scheduled) && is_sfu(instr)) + if (ctx->scheduled && is_sfu_or_mem(ctx->scheduled) && is_sfu_or_mem(instr)) schedule(ctx, ir3_instr_create(block, 0, OPC_NOP), false); /* remove from depth list: -- 2.30.2