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 <[email protected]>
+ 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
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
