From 4b8e198fd2b5bfcefccd998a94a1f065c91119d3 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Tue, 25 Feb 2020 16:37:26 -0800 Subject: [PATCH] freedreno/ir3: fix crash with samgq workaround Need to list_delinit() before we clone the instruction to split it into individual samgpN instructions, otherwise we get list corruption. Tested-by: Eduardo Lima Mitev Signed-off-by: Rob Clark Part-of: --- src/freedreno/ir3/ir3_legalize.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/freedreno/ir3/ir3_legalize.c b/src/freedreno/ir3/ir3_legalize.c index 9c349bf2745..d5cdd6d4443 100644 --- a/src/freedreno/ir3/ir3_legalize.c +++ b/src/freedreno/ir3/ir3_legalize.c @@ -215,13 +215,14 @@ legalize_block(struct ir3_legalize_ctx *ctx, struct ir3_block *block) ctx->type == MESA_SHADER_VERTEX && n->opc == OPC_SAMGQ) { struct ir3_instruction *samgp; + list_delinit(&n->node); + for (i = 0; i < 4; i++) { samgp = ir3_instr_clone(n); samgp->opc = OPC_SAMGP0 + i; if (i > 1) samgp->flags |= IR3_INSTR_SY; } - list_delinit(&n->node); } else { list_addtail(&n->node, &block->instr_list); }