---
 src/intel/common/gen_decoder.c | 17 ++++++++++++++---
 src/intel/common/gen_decoder.h |  5 +++++
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c
index 1f6b984..c6ddae0 100644
--- a/src/intel/common/gen_decoder.c
+++ b/src/intel/common/gen_decoder.c
@@ -1014,7 +1014,7 @@ gen_field_is_header(struct gen_field *field)
 
 static void
 _gen_print_group(FILE *outfile, struct gen_group *group, uint64_t offset,
-                 const uint32_t *p, int p_bit, bool color)
+                 const uint32_t *p, int p_bit, int dw_length, bool color)
 {
    struct gen_field_iterator iter;
    int last_dword = -1;
@@ -1022,6 +1022,9 @@ _gen_print_group(FILE *outfile, struct gen_group *group, 
uint64_t offset,
    gen_field_iterator_init(&iter, group, p, p_bit, color);
    do {
       int iter_dword = iter.bit / 32;
+      if (dw_length >= 0 && iter_dword >= dw_length)
+         break;
+
       if (last_dword != iter_dword) {
          for (int i = last_dword + 1; i <= iter_dword; i++)
             print_dword_header(outfile, &iter, offset, i);
@@ -1032,7 +1035,8 @@ _gen_print_group(FILE *outfile, struct gen_group *group, 
uint64_t offset,
          if (iter.struct_desc) {
             uint64_t struct_offset = offset + 4 * iter_dword;
             _gen_print_group(outfile, iter.struct_desc, struct_offset,
-                             &p[iter_dword], iter.bit % 32, color);
+                             &p[iter_dword], iter.bit % 32,
+                             dw_length - iter_dword, color);
          }
       }
    } while (gen_field_iterator_next(&iter));
@@ -1042,5 +1046,12 @@ void
 gen_print_group(FILE *outfile, struct gen_group *group, uint64_t offset,
                 const uint32_t *p, bool color)
 {
-   _gen_print_group(outfile, group, offset, p, 0, color);
+   _gen_print_group(outfile, group, offset, p, 0, -1, color);
+}
+
+void
+gen_print_group_length(FILE *outfile, struct gen_group *group, uint64_t offset,
+                       const uint32_t *p, int dw_length, bool color)
+{
+   _gen_print_group(outfile, group, offset, p, 0, dw_length, color);
 }
diff --git a/src/intel/common/gen_decoder.h b/src/intel/common/gen_decoder.h
index 2532a36..300dd8f 100644
--- a/src/intel/common/gen_decoder.h
+++ b/src/intel/common/gen_decoder.h
@@ -184,6 +184,11 @@ void gen_print_group(FILE *out,
                      uint64_t offset, const uint32_t *p,
                      bool color);
 
+void gen_print_group_length(FILE *out,
+                            struct gen_group *group,
+                            uint64_t offset, const uint32_t *p,
+                            int dw_length, bool color);
+
 enum gen_batch_decode_flags {
    /** Print in color! */
    GEN_BATCH_DECODE_IN_COLOR  = (1 << 0),
-- 
2.5.0.400.gff86faf

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to