diff options
author | Lionel Landwerlin <[email protected]> | 2018-05-02 18:39:20 +0100 |
---|---|---|
committer | Lionel Landwerlin <[email protected]> | 2018-05-02 19:46:47 +0100 |
commit | 000452aebc0d8b53310b981517b6a6aa7c32ccd9 (patch) | |
tree | 3ba9fad9559b95df6d0fb9709c3860cd9e82a3b7 | |
parent | bd35345e85ddaf9c8fe7b8ed089edd4926ee4fe1 (diff) |
intel: decoder: limit to the number decoded lines from VBO
By default we set no limit, but the debug batch decoder in i965 sets
it to 100.
Signed-off-by: Lionel Landwerlin <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/intel/common/gen_batch_decoder.c | 22 | ||||
-rw-r--r-- | src/intel/common/gen_decoder.h | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_batchbuffer.c | 1 |
3 files changed, 17 insertions, 8 deletions
diff --git a/src/intel/common/gen_batch_decoder.c b/src/intel/common/gen_batch_decoder.c index c059b194974..3852f32de36 100644 --- a/src/intel/common/gen_batch_decoder.c +++ b/src/intel/common/gen_batch_decoder.c @@ -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); } } } diff --git a/src/intel/common/gen_decoder.h b/src/intel/common/gen_decoder.h index 37f6c3ee989..f2207ddf889 100644 --- a/src/intel/common/gen_decoder.h +++ b/src/intel/common/gen_decoder.h @@ -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, diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index b3e4bdc981e..bac6e6dae85 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -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 = |