Module: Mesa Branch: master Commit: f5e5ca1e210c2e0f505ea154ca553275157dda73 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f5e5ca1e210c2e0f505ea154ca553275157dda73
Author: Lionel Landwerlin <lionel.g.landwer...@intel.com> Date: Wed Aug 2 22:33:28 2017 +0100 intel: decoder: split out getting the next field and decoding it Due to the new way we handle fields, we need *not* to forget the first field when decoding instructions. The issue was that the advance function was called first and skipped the first field. Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> Reviewed-by: Scott D Phillips <scott.d.phill...@intel.com> --- src/intel/common/gen_decoder.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c index 4ef285667d..ac7c94f41e 100644 --- a/src/intel/common/gen_decoder.c +++ b/src/intel/common/gen_decoder.c @@ -837,17 +837,14 @@ iter_advance_field(struct gen_field_iterator *iter) return true; } -bool -gen_field_iterator_next(struct gen_field_iterator *iter) +static void +gen_field_decode(struct gen_field_iterator *iter) { union { uint64_t qw; float f; } v; - if (!iter_advance_field(iter)) - return false; - if (iter->field->name) strncpy(iter->name, iter->field->name, sizeof(iter->name)); else @@ -928,8 +925,6 @@ gen_field_iterator_next(struct gen_field_iterator *iter) snprintf(iter->value + length, sizeof(iter->value) - length, " (%s)", enum_name); } - - return true; } void @@ -941,9 +936,25 @@ gen_field_iterator_init(struct gen_field_iterator *iter, memset(iter, 0, sizeof(*iter)); iter->group = group; - iter->field = group->fields; + if (group->fields) + iter->field = group->fields; + else + iter->field = group->next->fields; iter->p = p; iter->print_colors = print_colors; + + gen_field_decode(iter); +} + +bool +gen_field_iterator_next(struct gen_field_iterator *iter) +{ + if (!iter_advance_field(iter)) + return false; + + gen_field_decode(iter); + + return true; } static void @@ -977,7 +988,7 @@ gen_print_group(FILE *outfile, struct gen_group *group, int last_dword = -1; gen_field_iterator_init(&iter, group, p, color); - while (gen_field_iterator_next(&iter)) { + do { if (last_dword != iter.dword) { for (int i = last_dword + 1; i <= iter.dword; i++) print_dword_header(outfile, &iter, offset, i); @@ -991,5 +1002,5 @@ gen_print_group(FILE *outfile, struct gen_group *group, &p[iter.dword], color); } } - } + } while (gen_field_iterator_next(&iter)); } _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit