aux/trace: do deep dumps of fb state for triggered traces
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 7 Apr 2021 13:05:12 +0000 (09:05 -0400)
committerMarge Bot <eric+marge@anholt.net>
Tue, 13 Apr 2021 02:04:22 +0000 (02:04 +0000)
having the full surface info available here is very useful

Acked-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10093>

src/gallium/auxiliary/driver_trace/tr_context.c
src/gallium/auxiliary/driver_trace/tr_dump_state.c
src/gallium/auxiliary/driver_trace/tr_dump_state.h

index ea2ef26..93f72b8 100644 (file)
@@ -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);
 }
index 2d2abd0..ec479b5 100644 (file)
@@ -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)
 {
index 7889557..1a969c7 100644 (file)
@@ -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);