diff --git a/src/gallium/auxiliary/driver_trace/tr_dump.c b/src/gallium/auxiliary/driver_trace/tr_dump.c index 9032ddfce65..74cb36f1c6c 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump.c +++ b/src/gallium/auxiliary/driver_trace/tr_dump.c @@ -56,6 +56,7 @@ #include "util/u_string.h" #include "util/u_math.h" #include "util/format/u_format.h" +#include "compiler/nir/nir.h" #include "tr_dump.h" #include "tr_screen.h" @@ -647,3 +648,17 @@ void trace_dump_transfer_ptr(struct pipe_transfer *_transfer) trace_dump_null(); } } + +void trace_dump_nir(void *nir) +{ + if (!dumping) + return; + + // NIR doesn't have a print to string function. Use CDATA and hope for the + // best. + if (stream) { + fputs("", stream); + } +} diff --git a/src/gallium/auxiliary/driver_trace/tr_dump.h b/src/gallium/auxiliary/driver_trace/tr_dump.h index d6b862d539a..51bbc241ed4 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump.h +++ b/src/gallium/auxiliary/driver_trace/tr_dump.h @@ -107,6 +107,7 @@ void trace_dump_ptr(const void *value); /* will turn a wrapped object into the real one and dump ptr */ void trace_dump_surface_ptr(struct pipe_surface *_surface); void trace_dump_transfer_ptr(struct pipe_transfer *_transfer); +void trace_dump_nir(void *nir); void trace_dump_trigger_active(bool active); void trace_dump_check_trigger(void); diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_state.c b/src/gallium/auxiliary/driver_trace/tr_dump_state.c index c3b8b3ff0da..6933f989db2 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump_state.c +++ b/src/gallium/auxiliary/driver_trace/tr_dump_state.c @@ -276,6 +276,8 @@ void trace_dump_shader_state(const struct pipe_shader_state *state) trace_dump_struct_begin("pipe_shader_state"); + trace_dump_member(uint, state, type); + trace_dump_member_begin("tokens"); if (state->tokens) { static char str[64 * 1024]; @@ -286,6 +288,14 @@ void trace_dump_shader_state(const struct pipe_shader_state *state) } trace_dump_member_end(); + trace_dump_member_begin("ir"); + if (state->type == PIPE_SHADER_IR_NIR) { + trace_dump_nir(state->ir.nir); + } else { + trace_dump_null(); + } + trace_dump_member_end(); + trace_dump_member_begin("stream_output"); trace_dump_struct_begin("pipe_stream_output_info"); trace_dump_member(uint, &state->stream_output, num_outputs);