mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
intel/decoder: Clean up field iteration and fix sub-dword fields
First of all, setting iter->name in advance_field is unnecessary because
it gets set by gen_decode_field which gets called immediately after
gen_decode_field in the one call-site. Second, we weren't properly
initializing start_bit and end_bit in the initial condition of
gen_field_iterator_next so the first field of a struct would get printed
wrong if it doesn't start on the first bit. This is fixed by adding a
iter_start_field helper which sets the field and also sets up the other
bits we need. This fixes decoding of 3DSTATE_SBE_SWIZ.
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
(cherry picked from commit 2abd7ae189)
This commit is contained in:
parent
96504a886f
commit
d449afaa55
1 changed files with 16 additions and 16 deletions
|
|
@ -811,6 +811,18 @@ iter_more_groups(const struct gen_field_iterator *iter)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
iter_start_field(struct gen_field_iterator *iter, struct gen_field *field)
|
||||
{
|
||||
iter->field = field;
|
||||
|
||||
int group_member_offset = iter_group_offset_bits(iter, iter->group_iter);
|
||||
|
||||
iter->start_bit = group_member_offset + iter->field->start;
|
||||
iter->end_bit = group_member_offset + iter->field->end;
|
||||
iter->struct_desc = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
iter_advance_group(struct gen_field_iterator *iter)
|
||||
{
|
||||
|
|
@ -825,32 +837,20 @@ iter_advance_group(struct gen_field_iterator *iter)
|
|||
}
|
||||
}
|
||||
|
||||
iter->field = iter->group->fields;
|
||||
iter_start_field(iter, iter->group->fields);
|
||||
}
|
||||
|
||||
static bool
|
||||
iter_advance_field(struct gen_field_iterator *iter)
|
||||
{
|
||||
if (iter_more_fields(iter)) {
|
||||
iter->field = iter->field->next;
|
||||
iter_start_field(iter, iter->field->next);
|
||||
} else {
|
||||
if (!iter_more_groups(iter))
|
||||
return false;
|
||||
|
||||
iter_advance_group(iter);
|
||||
}
|
||||
|
||||
if (iter->field->name)
|
||||
snprintf(iter->name, sizeof(iter->name), "%s", iter->field->name);
|
||||
else
|
||||
memset(iter->name, 0, sizeof(iter->name));
|
||||
|
||||
int group_member_offset = iter_group_offset_bits(iter, iter->group_iter);
|
||||
|
||||
iter->start_bit = group_member_offset + iter->field->start;
|
||||
iter->end_bit = group_member_offset + iter->field->end;
|
||||
iter->struct_desc = NULL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1001,9 +1001,9 @@ gen_field_iterator_next(struct gen_field_iterator *iter)
|
|||
/* Initial condition */
|
||||
if (!iter->field) {
|
||||
if (iter->group->fields)
|
||||
iter->field = iter->group->fields;
|
||||
iter_start_field(iter, iter->group->fields);
|
||||
else
|
||||
iter->field = iter->group->next->fields;
|
||||
iter_start_field(iter, iter->group->next->fields);
|
||||
|
||||
bool result = iter_decode_field(iter);
|
||||
if (iter->p_end)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue