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 <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9729>
This commit is contained in:
Jason Ekstrand 2020-05-11 15:54:43 -05:00
parent 65077cdf57
commit b2421f7b44
1 changed files with 11 additions and 5 deletions

View File

@ -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]);
}
}
}