mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 17:50:11 +01:00
intel: decoder: split out getting the next field and decoding it
Due to the new way we handle fields, we need *not* to forget the first field when decoding instructions. The issue was that the advance function was called first and skipped the first field. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Scott D Phillips <scott.d.phillips@intel.com>
This commit is contained in:
parent
ffa011d1e3
commit
f5e5ca1e21
1 changed files with 21 additions and 10 deletions
|
|
@ -837,17 +837,14 @@ iter_advance_field(struct gen_field_iterator *iter)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
gen_field_iterator_next(struct gen_field_iterator *iter)
|
||||
static void
|
||||
gen_field_decode(struct gen_field_iterator *iter)
|
||||
{
|
||||
union {
|
||||
uint64_t qw;
|
||||
float f;
|
||||
} v;
|
||||
|
||||
if (!iter_advance_field(iter))
|
||||
return false;
|
||||
|
||||
if (iter->field->name)
|
||||
strncpy(iter->name, iter->field->name, sizeof(iter->name));
|
||||
else
|
||||
|
|
@ -928,8 +925,6 @@ gen_field_iterator_next(struct gen_field_iterator *iter)
|
|||
snprintf(iter->value + length, sizeof(iter->value) - length,
|
||||
" (%s)", enum_name);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -941,9 +936,25 @@ gen_field_iterator_init(struct gen_field_iterator *iter,
|
|||
memset(iter, 0, sizeof(*iter));
|
||||
|
||||
iter->group = group;
|
||||
iter->field = group->fields;
|
||||
if (group->fields)
|
||||
iter->field = group->fields;
|
||||
else
|
||||
iter->field = group->next->fields;
|
||||
iter->p = p;
|
||||
iter->print_colors = print_colors;
|
||||
|
||||
gen_field_decode(iter);
|
||||
}
|
||||
|
||||
bool
|
||||
gen_field_iterator_next(struct gen_field_iterator *iter)
|
||||
{
|
||||
if (!iter_advance_field(iter))
|
||||
return false;
|
||||
|
||||
gen_field_decode(iter);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -977,7 +988,7 @@ gen_print_group(FILE *outfile, struct gen_group *group,
|
|||
int last_dword = -1;
|
||||
|
||||
gen_field_iterator_init(&iter, group, p, color);
|
||||
while (gen_field_iterator_next(&iter)) {
|
||||
do {
|
||||
if (last_dword != iter.dword) {
|
||||
for (int i = last_dword + 1; i <= iter.dword; i++)
|
||||
print_dword_header(outfile, &iter, offset, i);
|
||||
|
|
@ -991,5 +1002,5 @@ gen_print_group(FILE *outfile, struct gen_group *group,
|
|||
&p[iter.dword], color);
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (gen_field_iterator_next(&iter));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue