X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fpanfrost%2Fmidgard%2Fdisassemble.c;h=5568fa03663f8e7998def57e4563faf58eddca03;hp=ac5179edd35fd4a96575e7d6658befa2eae8677b;hb=f6e19dd3f45de7bc9edfe0aa9254abc3412c2610;hpb=80ebf110aed77ec4fdf05ed2266fd3736fa55040 diff --git a/src/panfrost/midgard/disassemble.c b/src/panfrost/midgard/disassemble.c index ac5179edd35..5568fa03663 100644 --- a/src/panfrost/midgard/disassemble.c +++ b/src/panfrost/midgard/disassemble.c @@ -1293,15 +1293,11 @@ print_texture_format(FILE *fp, int format) } static bool -midgard_op_has_helpers(unsigned op, bool gather) +midgard_op_has_helpers(unsigned op) { - if (gather) - return true; - switch (op) { case TEXTURE_OP_NORMAL: - case TEXTURE_OP_DFDX: - case TEXTURE_OP_DFDY: + case TEXTURE_OP_DERIVATIVE: return true; default: return false; @@ -1309,30 +1305,14 @@ midgard_op_has_helpers(unsigned op, bool gather) } static void -print_texture_op(FILE *fp, unsigned op, bool gather) +print_texture_op(FILE *fp, unsigned op) { - /* Act like a bare name, like ESSL functions */ - - if (gather) { - fprintf(fp, "textureGather"); - - unsigned component = op >> 4; - unsigned bottom = op & 0xF; - - if (bottom != 0x2) - fprintf(fp, "_unk%u", bottom); - - fprintf(fp, ".%c", components[component]); - return; - } - switch (op) { DEFINE_CASE(TEXTURE_OP_NORMAL, "texture"); DEFINE_CASE(TEXTURE_OP_LOD, "textureLod"); DEFINE_CASE(TEXTURE_OP_TEXEL_FETCH, "texelFetch"); DEFINE_CASE(TEXTURE_OP_BARRIER, "barrier"); - DEFINE_CASE(TEXTURE_OP_DFDX, "dFdx"); - DEFINE_CASE(TEXTURE_OP_DFDY, "dFdy"); + DEFINE_CASE(TEXTURE_OP_DERIVATIVE, "derivative"); default: fprintf(fp, "tex_%X", op); @@ -1399,16 +1379,38 @@ print_texture_barrier(FILE *fp, uint32_t *word) #undef DEFINE_CASE +static const char * +texture_mode(enum mali_texture_mode mode) +{ + switch (mode) { + case TEXTURE_NORMAL: return ""; + case TEXTURE_SHADOW: return ".shadow"; + case TEXTURE_GATHER_X: return ".gatherX"; + case TEXTURE_GATHER_Y: return ".gatherY"; + case TEXTURE_GATHER_Z: return ".gatherZ"; + case TEXTURE_GATHER_W: return ".gatherW"; + default: return "unk"; + } +} + +static const char * +derivative_mode(enum mali_derivative_mode mode) +{ + switch (mode) { + case TEXTURE_DFDX: return ".x"; + case TEXTURE_DFDY: return ".y"; + default: return "unk"; + } +} + static void print_texture_word(FILE *fp, uint32_t *word, unsigned tabs, unsigned in_reg_base, unsigned out_reg_base) { midgard_texture_word *texture = (midgard_texture_word *) word; - - midg_stats.helper_invocations |= - midgard_op_has_helpers(texture->op, texture->is_gather); + midg_stats.helper_invocations |= midgard_op_has_helpers(texture->op); /* Broad category of texture operation in question */ - print_texture_op(fp, texture->op, texture->is_gather); + print_texture_op(fp, texture->op); /* Barriers use a dramatically different code path */ if (texture->op == TEXTURE_OP_BARRIER) { @@ -1419,14 +1421,16 @@ print_texture_word(FILE *fp, uint32_t *word, unsigned tabs, unsigned in_reg_base else if (texture->type == TAG_TEXTURE_4_VTX) fprintf (fp, ".vtx"); + if (texture->op == TEXTURE_OP_DERIVATIVE) + fprintf(fp, "%s", derivative_mode(texture->mode)); + else + fprintf(fp, "%s", texture_mode(texture->mode)); + /* Specific format in question */ print_texture_format(fp, texture->format); /* Instruction "modifiers" parallel the ALU instructions. */ - if (texture->shadow) - fprintf(fp, ".shadow"); - if (texture->cont) fprintf(fp, ".cont");