[Mesa-dev] [PATCH 1/4] intel/decoder: Clean up field iteration and fix sub-dword fields
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Fri Aug 24 22:02:01 UTC 2018
The whole series is :
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Thanks for the great cleanup!
-
Lionel
On 24/08/2018 22:40, Jason Ekstrand wrote:
> 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.
> ---
> src/intel/common/gen_decoder.c | 32 ++++++++++++++++----------------
> 1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c
> index 39da3cadbf8..e9dabeae653 100644
> --- a/src/intel/common/gen_decoder.c
> +++ b/src/intel/common/gen_decoder.c
> @@ -812,6 +812,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)
> {
> @@ -826,32 +838,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;
> }
>
> @@ -1006,9 +1006,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)
More information about the mesa-dev
mailing list