From b2421f7b440ba5c225df8e326ab8749aad87bff6 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 11 May 2020 15:54:43 -0500 Subject: [PATCH] intel/tools: Handle milti-LRI in the batch decoder Context batches tend to have a lot of multi-LRI and, if we want to be able to parse those registers nicely, we really handle it. Reviewed-by: Lionel Landwerlin Part-of: --- src/intel/common/intel_batch_decoder.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/intel/common/intel_batch_decoder.c b/src/intel/common/intel_batch_decoder.c index 0b4ce252a96..0b5020c6211 100644 --- a/src/intel/common/intel_batch_decoder.c +++ b/src/intel/common/intel_batch_decoder.c @@ -855,12 +855,18 @@ decode_3dstate_slice_table_state_pointers(struct intel_batch_decode_ctx *ctx, static void decode_load_register_imm(struct intel_batch_decode_ctx *ctx, const uint32_t *p) { - struct intel_group *reg = intel_spec_find_register(ctx->spec, p[1]); + struct intel_group *inst = intel_ctx_find_instruction(ctx, p); + const unsigned length = intel_group_get_length(inst, p); + assert(length & 1); + const unsigned nr_regs = (length - 1) / 2; - if (reg != NULL) { - fprintf(ctx->fp, "register %s (0x%x): 0x%x\n", - reg->name, reg->register_offset, p[2]); - ctx_print_group(ctx, reg, reg->register_offset, &p[2]); + for (unsigned i = 0; i < nr_regs; i++) { + struct intel_group *reg = intel_spec_find_register(ctx->spec, p[i * 2 + 1]); + if (reg != NULL) { + fprintf(ctx->fp, "register %s (0x%x): 0x%x\n", + reg->name, reg->register_offset, p[2]); + ctx_print_group(ctx, reg, reg->register_offset, &p[2]); + } } }