diff --git a/src/gallium/auxiliary/driver_trace/tr_context.c b/src/gallium/auxiliary/driver_trace/tr_context.c index ea2ef265c4a..93f72b8246c 100644 --- a/src/gallium/auxiliary/driver_trace/tr_context.c +++ b/src/gallium/auxiliary/driver_trace/tr_context.c @@ -90,14 +90,18 @@ trace_surface_unwrap(struct trace_context *tr_ctx, static void dump_fb_state(struct trace_context *tr_ctx, - const char *method) + const char *method, + bool deep) { struct pipe_context *pipe = tr_ctx->pipe; trace_dump_call_begin("pipe_context", method); trace_dump_arg(ptr, pipe); - trace_dump_arg(framebuffer_state, &tr_ctx->unwrapped_state); + if (deep) + trace_dump_arg(framebuffer_state_deep, &tr_ctx->unwrapped_state); + else + trace_dump_arg(framebuffer_state, &tr_ctx->unwrapped_state); trace_dump_call_end(); tr_ctx->seen_fb_state = true; @@ -114,7 +118,7 @@ trace_context_draw_vbo(struct pipe_context *_pipe, struct pipe_context *pipe = tr_ctx->pipe; if (!tr_ctx->seen_fb_state && trace_dump_is_triggered()) - dump_fb_state(tr_ctx, "current_framebuffer_state"); + dump_fb_state(tr_ctx, "current_framebuffer_state", true); trace_dump_call_begin("pipe_context", "draw_vbo"); @@ -870,7 +874,7 @@ trace_context_set_framebuffer_state(struct pipe_context *_pipe, tr_ctx->unwrapped_state.zsbuf = trace_surface_unwrap(tr_ctx, state->zsbuf); state = &tr_ctx->unwrapped_state; - dump_fb_state(tr_ctx, "set_framebuffer_state"); + dump_fb_state(tr_ctx, "set_framebuffer_state", trace_dump_is_triggered()); pipe->set_framebuffer_state(pipe, state); } diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_state.c b/src/gallium/auxiliary/driver_trace/tr_dump_state.c index 2d2abd0a428..ec479b59677 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump_state.c +++ b/src/gallium/auxiliary/driver_trace/tr_dump_state.c @@ -487,6 +487,24 @@ void trace_dump_framebuffer_state(const struct pipe_framebuffer_state *state) trace_dump_struct_end(); } +void trace_dump_framebuffer_state_deep(const struct pipe_framebuffer_state *state) +{ + if (!trace_dumping_enabled_locked()) + return; + + trace_dump_struct_begin("pipe_framebuffer_state"); + + trace_dump_member(uint, state, width); + trace_dump_member(uint, state, height); + trace_dump_member(uint, state, samples); + trace_dump_member(uint, state, layers); + trace_dump_member(uint, state, nr_cbufs); + trace_dump_member_array(surface, state, cbufs); + trace_dump_member(surface, state, zsbuf); + + trace_dump_struct_end(); +} + void trace_dump_sampler_state(const struct pipe_sampler_state *state) { @@ -566,6 +584,12 @@ void trace_dump_sampler_view_template(const struct pipe_sampler_view *state, } +void trace_dump_surface(const struct pipe_surface *surface) +{ + trace_dump_surface_template(surface, surface ? surface->texture->target : 0); +} + + void trace_dump_surface_template(const struct pipe_surface *state, enum pipe_texture_target target) { diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_state.h b/src/gallium/auxiliary/driver_trace/tr_dump_state.h index 78895577710..1a969c75066 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump_state.h +++ b/src/gallium/auxiliary/driver_trace/tr_dump_state.h @@ -62,11 +62,15 @@ void trace_dump_stencil_ref(const struct pipe_stencil_ref *state); void trace_dump_framebuffer_state(const struct pipe_framebuffer_state *state); +void trace_dump_framebuffer_state_deep(const struct pipe_framebuffer_state *state); + void trace_dump_sampler_state(const struct pipe_sampler_state *state); void trace_dump_sampler_view_template(const struct pipe_sampler_view *view, enum pipe_texture_target target); +void trace_dump_surface(const struct pipe_surface *surface); + void trace_dump_surface_template(const struct pipe_surface *state, enum pipe_texture_target target);