radeonsi: save the contents of indirect buffers for debug contexts
authorMarek Olšák <marek.olsak@amd.com>
Sat, 15 Aug 2015 10:46:17 +0000 (12:46 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 26 Aug 2015 17:25:19 +0000 (19:25 +0200)
This will be used by the IB parser.

Acked-by: Christian König <christian.koenig@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
src/gallium/drivers/radeonsi/si_hw_context.c
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_pipe.h

index 307dc39..f848c64 100644 (file)
@@ -130,6 +130,14 @@ void si_context_gfx_flush(void *context, unsigned flags,
        /* force to keep tiling flags */
        flags |= RADEON_FLUSH_KEEP_TILING_FLAGS;
 
+       /* Save the IB for debug contexts. */
+       if (ctx->is_debug) {
+               free(ctx->last_ib);
+               ctx->last_ib_dw_size = cs->cdw;
+               ctx->last_ib = malloc(cs->cdw * 4);
+               memcpy(ctx->last_ib, cs->buf, cs->cdw * 4);
+       }
+
        /* Flush the CS. */
        ws->cs_flush(cs, flags, &ctx->last_gfx_fence,
                     ctx->screen->b.cs_count++);
index f6d4a5a..e5900b7 100644 (file)
@@ -81,6 +81,7 @@ static void si_destroy_context(struct pipe_context *context)
        LLVMDisposeTargetMachine(sctx->tm);
 #endif
 
+       free(sctx->last_ib);
        FREE(sctx);
 }
 
@@ -112,6 +113,7 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen,
        sctx->b.b.destroy = si_destroy_context;
        sctx->b.set_atom_dirty = (void *)si_set_atom_dirty;
        sctx->screen = sscreen; /* Easy accessing of screen/winsys. */
+       sctx->is_debug = (flags & PIPE_CONTEXT_DEBUG) != 0;
 
        if (!r600_common_context_init(&sctx->b, &sscreen->b))
                goto fail;
index 3ab9538..3672fec 100644 (file)
@@ -243,6 +243,11 @@ struct si_context {
        struct si_shader_selector *last_tcs;
        int                     last_num_tcs_input_cp;
        int                     last_tes_sh_base;
+
+       /* Debug state. */
+       bool                    is_debug;
+       uint32_t                *last_ib;
+       unsigned                last_ib_dw_size;
 };
 
 /* cik_sdma.c */