From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeonsi/si_debug.c | 52 ++++++++++++++++++---------------
 1 file changed, 29 insertions(+), 23 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_debug.c 
b/src/gallium/drivers/radeonsi/si_debug.c
index d3fd201..308f181 100644
--- a/src/gallium/drivers/radeonsi/si_debug.c
+++ b/src/gallium/drivers/radeonsi/si_debug.c
@@ -392,6 +392,34 @@ static void si_dump_debug_registers(struct si_context 
*sctx, FILE *f)
        fprintf(f, "\n");
 }
 
+static void si_dump_last_ib(struct si_context *sctx, FILE *f)
+{
+       int last_trace_id = -1;
+
+       if (!sctx->last_ib)
+               return;
+
+       if (sctx->last_trace_buf) {
+               /* We are expecting that the ddebug pipe has already
+                * waited for the context, so this buffer should be idle.
+                * If the GPU is hung, there is no point in waiting for it.
+                */
+               uint32_t *map =
+                               
sctx->b.ws->buffer_map(sctx->last_trace_buf->cs_buf,
+                                                      NULL,
+                                                      
PIPE_TRANSFER_UNSYNCHRONIZED |
+                                                      PIPE_TRANSFER_READ);
+               if (map)
+                       last_trace_id = *map;
+       }
+
+       si_parse_ib(f, sctx->last_ib, sctx->last_ib_dw_size,
+                   last_trace_id);
+       free(sctx->last_ib); /* dump only once */
+       sctx->last_ib = NULL;
+       r600_resource_reference(&sctx->last_trace_buf, NULL);
+}
+
 static void si_dump_debug_state(struct pipe_context *ctx, FILE *f,
                                unsigned flags)
 {
@@ -406,29 +434,7 @@ static void si_dump_debug_state(struct pipe_context *ctx, 
FILE *f,
        si_dump_shader(sctx->gs_shader, "Geometry", f);
        si_dump_shader(sctx->ps_shader, "Fragment", f);
 
-       if (sctx->last_ib) {
-               int last_trace_id = -1;
-
-               if (sctx->last_trace_buf) {
-                       /* We are expecting that the ddebug pipe has already
-                        * waited for the context, so this buffer should be 
idle.
-                        * If the GPU is hung, there is no point in waiting for 
it.
-                        */
-                       uint32_t *map =
-                               
sctx->b.ws->buffer_map(sctx->last_trace_buf->cs_buf,
-                                                      NULL,
-                                                      
PIPE_TRANSFER_UNSYNCHRONIZED |
-                                                      PIPE_TRANSFER_READ);
-                       if (map)
-                               last_trace_id = *map;
-               }
-
-               si_parse_ib(f, sctx->last_ib, sctx->last_ib_dw_size,
-                           last_trace_id);
-               free(sctx->last_ib); /* dump only once */
-               sctx->last_ib = NULL;
-               r600_resource_reference(&sctx->last_trace_buf, NULL);
-       }
+       si_dump_last_ib(sctx, f);
 
        fprintf(f, "Done.\n");
 }
-- 
2.1.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to