intel: decoder: limit to the number decoded lines from VBO
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Wed, 2 May 2018 17:39:20 +0000 (18:39 +0100)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Wed, 2 May 2018 18:46:47 +0000 (19:46 +0100)
By default we set no limit, but the debug batch decoder in i965 sets
it to 100.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/common/gen_batch_decoder.c
src/intel/common/gen_decoder.h
src/mesa/drivers/dri/i965/intel_batchbuffer.c

index c059b194974b3624f2e4321b50992146d42db37f..3852f32de36579a6767c3936891d4e8042209c4d 100644 (file)
@@ -43,6 +43,7 @@ gen_batch_decode_ctx_init(struct gen_batch_decode_ctx *ctx,
    ctx->user_data = user_data;
    ctx->fp = fp;
    ctx->flags = flags;
+   ctx->max_vbo_decoded_lines = -1; /* No limit! */
 
    if (xml_path == NULL)
       ctx->spec = gen_spec_load(devinfo);
@@ -165,24 +166,29 @@ static void
 ctx_print_buffer(struct gen_batch_decode_ctx *ctx,
                  struct gen_batch_decode_bo bo,
                  uint32_t read_length,
-                 uint32_t pitch)
+                 uint32_t pitch,
+                 int max_lines)
 {
    const uint32_t *dw_end = bo.map + MIN2(bo.size, read_length);
 
-   unsigned line_count = 0;
+   int column_count = 0, line_count = -1;
    for (const uint32_t *dw = bo.map; dw < dw_end; dw++) {
-      if (line_count * 4 == pitch || line_count == 8) {
+      if (column_count * 4 == pitch || column_count == 8) {
          fprintf(ctx->fp, "\n");
-         line_count = 0;
+         column_count = 0;
+         line_count++;
+
+         if (max_lines >= 0 && line_count >= max_lines)
+            break;
       }
-      fprintf(ctx->fp, line_count == 0 ? "  " : " ");
+      fprintf(ctx->fp, column_count == 0 ? "  " : " ");
 
       if ((ctx->flags & GEN_BATCH_DECODE_FLOATS) && probably_float(*dw))
          fprintf(ctx->fp, "  %8.2f", *(float *) dw);
       else
          fprintf(ctx->fp, "  0x%08x", *dw);
 
-      line_count++;
+      column_count++;
    }
    fprintf(ctx->fp, "\n");
 }
@@ -387,7 +393,7 @@ handle_3dstate_vertex_buffers(struct gen_batch_decode_ctx *ctx,
          if (vb.map == 0 || vb_size == 0)
             continue;
 
-         ctx_print_buffer(ctx, vb, vb_size, pitch);
+         ctx_print_buffer(ctx, vb, vb_size, pitch, ctx->max_vbo_decoded_lines);
 
          vb.map = NULL;
          vb_size = 0;
@@ -576,7 +582,7 @@ decode_3dstate_constant(struct gen_batch_decode_ctx *ctx, const uint32_t *p)
          unsigned size = read_length[i] * 32;
          fprintf(ctx->fp, "constant buffer %d, size %u\n", i, size);
 
-         ctx_print_buffer(ctx, buffer[i], size, 0);
+         ctx_print_buffer(ctx, buffer[i], size, 0, -1);
       }
    }
 }
index 37f6c3ee989bedc74fa8d7de75c5eebe108051e7..f2207ddf8898512c61b3b614ddaa87e8f6e4c925 100644 (file)
@@ -220,6 +220,8 @@ struct gen_batch_decode_ctx {
    struct gen_batch_decode_bo surface_base;
    struct gen_batch_decode_bo dynamic_base;
    struct gen_batch_decode_bo instruction_base;
+
+   int max_vbo_decoded_lines;
 };
 
 void gen_batch_decode_ctx_init(struct gen_batch_decode_ctx *ctx,
index b3e4bdc981eade7b3928ccd36c160efa2b8ea65f..bac6e6dae85e843c7dd0980d8a18772c72ca6865 100644 (file)
@@ -166,6 +166,7 @@ intel_batchbuffer_init(struct brw_context *brw)
       gen_batch_decode_ctx_init(&batch->decoder, devinfo, stderr,
                                 decode_flags, NULL, decode_get_bo,
                                 decode_get_state_size, brw);
+      batch->decoder.max_vbo_decoded_lines = 100;
    }
 
    batch->use_batch_first =