From 20ac0b8e4e3a1d27c298a18d5a10681cb483c798 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Thu, 22 Aug 2019 16:31:03 -0700 Subject: [PATCH] pan/midgard: Analyze helper invocations We check for texture ops which calculate derivatives (either explicitly via dFd* or implicitly) and mark the shader as requiring helper invocations. Signed-off-by: Alyssa Rosenzweig --- src/panfrost/midgard/disassemble.c | 19 +++++++++++++++++++ src/panfrost/midgard/disassemble.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/src/panfrost/midgard/disassemble.c b/src/panfrost/midgard/disassemble.c index b26dfb84e8d..a7f407bdef8 100644 --- a/src/panfrost/midgard/disassemble.c +++ b/src/panfrost/midgard/disassemble.c @@ -1221,6 +1221,22 @@ print_texture_format(int format) } } +static bool +midgard_op_has_helpers(unsigned op, bool gather) +{ + if (gather) + return true; + + switch (op) { + case TEXTURE_OP_NORMAL: + case TEXTURE_OP_DFDX: + case TEXTURE_OP_DFDY: + return true; + default: + return false; + } +} + static void print_texture_op(unsigned op, bool gather) { @@ -1281,6 +1297,9 @@ print_texture_word(uint32_t *word, unsigned tabs) { midgard_texture_word *texture = (midgard_texture_word *) word; + midg_stats.helper_invocations |= + midgard_op_has_helpers(texture->op, texture->is_gather); + /* Broad category of texture operation in question */ print_texture_op(texture->op, texture->is_gather); diff --git a/src/panfrost/midgard/disassemble.h b/src/panfrost/midgard/disassemble.h index dacc7a16d5d..fc39875007a 100644 --- a/src/panfrost/midgard/disassemble.h +++ b/src/panfrost/midgard/disassemble.h @@ -17,6 +17,9 @@ struct midgard_disasm_stats { unsigned instruction_count; unsigned bundle_count; unsigned quadword_count; + + /* Should we enable helper invocations? */ + bool helper_invocations; }; struct midgard_disasm_stats -- 2.30.2