[Mesa-dev] [PATCH] intel: decoder: handle 0 sized structs

Jason Ekstrand jason at jlekstrand.net
Sun Aug 26 02:36:27 UTC 2018


Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

On Sat, Aug 25, 2018 at 12:23 PM Lionel Landwerlin <
lionel.g.landwerlin at intel.com> wrote:

> Gen7.5 has a BLEND_STATE of size 0 which includes a variable length
> group. We did not deal with that very well, leading to an endless
> loop.
>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107544
> ---
>  src/intel/common/gen_decoder.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/src/intel/common/gen_decoder.c
> b/src/intel/common/gen_decoder.c
> index 9e46f271633..ec22b545492 100644
> --- a/src/intel/common/gen_decoder.c
> +++ b/src/intel/common/gen_decoder.c
> @@ -997,7 +997,7 @@ gen_field_iterator_init(struct gen_field_iterator
> *iter,
>     iter->p_bit = p_bit;
>
>     int length = gen_group_get_length(iter->group, iter->p);
> -   iter->p_end = length > 0 ? &p[length] : NULL;
> +   iter->p_end = length >= 0 ? &p[length] : NULL;
>     iter->print_colors = print_colors;
>  }
>
> @@ -1012,10 +1012,14 @@ gen_field_iterator_next(struct gen_field_iterator
> *iter)
>           iter_start_field(iter, iter->group->next->fields);
>
>        bool result = iter_decode_field(iter);
> -      if (iter->p_end)
> -         assert(result);
> +      if (!result && iter->p_end) {
> +         /* We're dealing with a non empty struct of length=0
> (BLEND_STATE on
> +          * Gen 7.5)
> +          */
> +         assert(iter->group->dw_length == 0);
> +      }
>
> -      return true;
> +      return result;
>     }
>
>     if (!iter_advance_field(iter))
> --
> 2.18.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180825/a8335050/attachment-0001.html>


More information about the mesa-dev mailing list