<div dir="ltr"><div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Aug 25, 2018 at 12:23 PM Lionel Landwerlin <<a href="mailto:lionel.g.landwerlin@intel.com">lionel.g.landwerlin@intel.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Gen7.5 has a BLEND_STATE of size 0 which includes a variable length<br>
group. We did not deal with that very well, leading to an endless<br>
loop.<br>
<br>
Signed-off-by: Lionel Landwerlin <<a href="mailto:lionel.g.landwerlin@intel.com" target="_blank">lionel.g.landwerlin@intel.com</a>><br>
Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=107544" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=107544</a><br>
---<br>
 src/intel/common/gen_decoder.c | 12 ++++++++----<br>
 1 file changed, 8 insertions(+), 4 deletions(-)<br>
<br>
diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c<br>
index 9e46f271633..ec22b545492 100644<br>
--- a/src/intel/common/gen_decoder.c<br>
+++ b/src/intel/common/gen_decoder.c<br>
@@ -997,7 +997,7 @@ gen_field_iterator_init(struct gen_field_iterator *iter,<br>
    iter->p_bit = p_bit;<br>
<br>
    int length = gen_group_get_length(iter->group, iter->p);<br>
-   iter->p_end = length > 0 ? &p[length] : NULL;<br>
+   iter->p_end = length >= 0 ? &p[length] : NULL;<br>
    iter->print_colors = print_colors;<br>
 }<br>
<br>
@@ -1012,10 +1012,14 @@ gen_field_iterator_next(struct gen_field_iterator *iter)<br>
          iter_start_field(iter, iter->group->next->fields);<br>
<br>
       bool result = iter_decode_field(iter);<br>
-      if (iter->p_end)<br>
-         assert(result);<br>
+      if (!result && iter->p_end) {<br>
+         /* We're dealing with a non empty struct of length=0 (BLEND_STATE on<br>
+          * Gen 7.5)<br>
+          */<br>
+         assert(iter->group->dw_length == 0);<br>
+      }<br>
<br>
-      return true;<br>
+      return result;<br>
    }<br>
<br>
    if (!iter_advance_field(iter))<br>
-- <br>
2.18.0<br>
<br>
</blockquote></div>