[Mesa-dev] [PATCH] aubinator: Don't skip the first field in each subgroup

Lionel Landwerlin lionel.g.landwerlin at intel.com
Sun Nov 12 11:29:01 UTC 2017


On 12/11/17 05:45, Jason Ekstrand wrote:
> The previous iteration algorithm would advance the field pointer right
> after we advance the group.  This meant that you would end up with
> skipping the first field of the group.  In the common case, where the
> only field is a struct (e.g. 3DSTATE_VERTEX_BUFFERS), it would get
> skipped entirely.
> ---
>   src/intel/common/gen_decoder.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c
> index d09b6ea..b3501ae 100644
> --- a/src/intel/common/gen_decoder.c
> +++ b/src/intel/common/gen_decoder.c
> @@ -824,14 +824,15 @@ iter_advance_group(struct gen_field_iterator *iter)
>   static bool
>   iter_advance_field(struct gen_field_iterator *iter)
>   {
> -   while (!iter_more_fields(iter)) {

If I remember correctly, I added a while to deal with empty groups.
gen75.xml SF_CLIP_VIEWPORT has one and this will trigger a segfault.

We might be better off taking it out. Otherwise, looks good :

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

> +   if (iter_more_fields(iter)) {
> +      iter->field = iter->field->next;
> +   } else {
>         if (!iter_more_groups(iter))
>            return false;
>   
>         iter_advance_group(iter);
>      }
>   
> -   iter->field = iter->field->next;
>      if (iter->field->name)
>         strncpy(iter->name, iter->field->name, sizeof(iter->name));
>      else




More information about the mesa-dev mailing list