diff options
author | Marek Olšák <marek.olsak@amd.com> | 2015-07-04 13:17:07 +0200 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2015-07-22 23:56:00 +0200 |
commit | 8141b4cee514bb673e394f6fbe2cbe02e5b0faf2 (patch) | |
tree | 6eaa3943105fcd069390c02ed0960b3580d10d5e | |
parent | d082c5324914212f76e45be497229c7a0681f706 (diff) |
tgsi: allow dumping to a file directly
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_dump.c | 19 | ||||
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_dump.h | 5 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_dump_state.c | 7 |
3 files changed, 23 insertions, 8 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c index c80d7a2048..8ceb5b4758 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_dump.c +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c @@ -48,6 +48,7 @@ struct dump_ctx int indent; uint indentation; + FILE *file; void (*dump_printf)(struct dump_ctx *ctx, const char *format, ...); }; @@ -58,7 +59,10 @@ dump_ctx_printf(struct dump_ctx *ctx, const char *format, ...) va_list ap; (void)ctx; va_start(ap, format); - _debug_vprintf(format, ap); + if (ctx->file) + vfprintf(ctx->file, format, ap); + else + _debug_vprintf(format, ap); va_end(ap); } @@ -659,9 +663,7 @@ prolog( } void -tgsi_dump( - const struct tgsi_token *tokens, - uint flags ) +tgsi_dump_to_file(const struct tgsi_token *tokens, uint flags, FILE *file) { struct dump_ctx ctx; @@ -677,10 +679,17 @@ tgsi_dump( ctx.indent = 0; ctx.dump_printf = dump_ctx_printf; ctx.indentation = 0; + ctx.file = file; tgsi_iterate_shader( tokens, &ctx.iter ); } +void +tgsi_dump(const struct tgsi_token *tokens, uint flags) +{ + tgsi_dump_to_file(tokens, flags, NULL); +} + struct str_dump_ctx { struct dump_ctx base; @@ -733,6 +742,7 @@ tgsi_dump_str( ctx.base.indent = 0; ctx.base.dump_printf = &str_dump_ctx_printf; ctx.base.indentation = 0; + ctx.base.file = NULL; ctx.str = str; ctx.str[0] = 0; @@ -756,6 +766,7 @@ tgsi_dump_instruction_str( ctx.base.indent = 0; ctx.base.dump_printf = &str_dump_ctx_printf; ctx.base.indentation = 0; + ctx.base.file = NULL; ctx.str = str; ctx.str[0] = 0; diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.h b/src/gallium/auxiliary/tgsi/tgsi_dump.h index bc873a54ae..7c8f92ee7b 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_dump.h +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.h @@ -32,6 +32,8 @@ #include "pipe/p_defines.h" #include "pipe/p_shader_tokens.h" +#include <stdio.h> + #if defined __cplusplus extern "C" { #endif @@ -44,6 +46,9 @@ tgsi_dump_str( size_t size); void +tgsi_dump_to_file(const struct tgsi_token *tokens, uint flags, FILE *file); + +void tgsi_dump( const struct tgsi_token *tokens, uint flags ); diff --git a/src/gallium/auxiliary/util/u_dump_state.c b/src/gallium/auxiliary/util/u_dump_state.c index 58ccfba2dc..c8713ddd71 100644 --- a/src/gallium/auxiliary/util/u_dump_state.c +++ b/src/gallium/auxiliary/util/u_dump_state.c @@ -426,7 +426,6 @@ util_dump_clip_state(FILE *stream, const struct pipe_clip_state *state) void util_dump_shader_state(FILE *stream, const struct pipe_shader_state *state) { - char str[8192]; unsigned i; if(!state) { @@ -434,12 +433,12 @@ util_dump_shader_state(FILE *stream, const struct pipe_shader_state *state) return; } - tgsi_dump_str(state->tokens, 0, str, sizeof(str)); - util_dump_struct_begin(stream, "pipe_shader_state"); util_dump_member_begin(stream, "tokens"); - util_dump_string(stream, str); + fprintf(stream, "\"\n"); + tgsi_dump_to_file(state->tokens, 0, stream); + fprintf(stream, "\""); util_dump_member_end(stream); util_dump_member_begin(stream, "stream_output"); |