From: Alyssa Rosenzweig Date: Tue, 12 May 2020 17:34:52 +0000 (-0400) Subject: pan/mdg: Use analysis to set .cont/.last flags X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=344dd914972f9ddcef814a3cf08f832708c33146;p=mesa.git pan/mdg: Use analysis to set .cont/.last flags Corresponds roughly to what we analyze. Note that "terminate AND execute" is a contradiction (rather: it's equivalent to just terminating), hence why there are only three possibilities for the states of the flags: .cont = continue, don't execute .last = don't continue, don't execute .cont.last = continue and execute Signed-off-by: Alyssa Rosenzweig Part-of: --- diff --git a/src/panfrost/midgard/midgard_emit.c b/src/panfrost/midgard/midgard_emit.c index 98844169fae..b62052b1317 100644 --- a/src/panfrost/midgard/midgard_emit.c +++ b/src/panfrost/midgard/midgard_emit.c @@ -508,16 +508,8 @@ emit_binary_bundle(compiler_context *ctx, ctx->texture_op_count--; if (mir_op_computes_derivatives(ctx->stage, ins->texture.op)) { - bool continues = ctx->texture_op_count > 0; - - /* Control flow complicates helper invocation - * lifespans, so for now just keep helper threads - * around indefinitely with loops. TODO: Proper - * analysis */ - continues |= ctx->loop_count > 0; - - ins->texture.cont = continues; - ins->texture.last = !continues; + ins->texture.cont = !ins->helper_terminate; + ins->texture.last = ins->helper_terminate || ins->helper_execute; } else { ins->texture.cont = ins->texture.last = 1; }