radeonsi: log draw and compute state into log context
Also add missing trace emits and CS logging for compute launches. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -801,6 +801,9 @@ static void si_launch_grid(
|
|||||||
|
|
||||||
si_need_cs_space(sctx);
|
si_need_cs_space(sctx);
|
||||||
|
|
||||||
|
if (sctx->b.log)
|
||||||
|
si_log_compute_state(sctx, sctx->b.log);
|
||||||
|
|
||||||
if (!sctx->cs_shader_state.initialized)
|
if (!sctx->cs_shader_state.initialized)
|
||||||
si_initialize_compute(sctx);
|
si_initialize_compute(sctx);
|
||||||
|
|
||||||
@@ -847,6 +850,9 @@ static void si_launch_grid(
|
|||||||
|
|
||||||
si_ce_post_draw_synchronization(sctx);
|
si_ce_post_draw_synchronization(sctx);
|
||||||
|
|
||||||
|
if (unlikely(sctx->current_saved_cs))
|
||||||
|
si_trace_emit(sctx);
|
||||||
|
|
||||||
sctx->compute_is_busy = true;
|
sctx->compute_is_busy = true;
|
||||||
sctx->b.num_compute_calls++;
|
sctx->b.num_compute_calls++;
|
||||||
if (sctx->cs_shader_state.uses_scratch)
|
if (sctx->cs_shader_state.uses_scratch)
|
||||||
|
@@ -1067,34 +1067,38 @@ static void si_dump_debug_state(struct pipe_context *ctx, FILE *f,
|
|||||||
si_dump_command("Wave information", "umr -O bits -wa", f);
|
si_dump_command("Wave information", "umr -O bits -wa", f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct u_log_context log;
|
void si_log_draw_state(struct si_context *sctx, struct u_log_context *log)
|
||||||
u_log_context_init(&log);
|
{
|
||||||
|
if (!log)
|
||||||
|
return;
|
||||||
|
|
||||||
if (flags & PIPE_DUMP_CURRENT_STATES)
|
si_dump_framebuffer(sctx, log);
|
||||||
si_dump_framebuffer(sctx, &log);
|
|
||||||
|
|
||||||
if (flags & PIPE_DUMP_CURRENT_SHADERS) {
|
si_dump_gfx_shader(sctx, &sctx->vs_shader, log);
|
||||||
si_dump_gfx_shader(sctx, &sctx->vs_shader, &log);
|
si_dump_gfx_shader(sctx, &sctx->tcs_shader, log);
|
||||||
si_dump_gfx_shader(sctx, &sctx->tcs_shader, &log);
|
si_dump_gfx_shader(sctx, &sctx->tes_shader, log);
|
||||||
si_dump_gfx_shader(sctx, &sctx->tes_shader, &log);
|
si_dump_gfx_shader(sctx, &sctx->gs_shader, log);
|
||||||
si_dump_gfx_shader(sctx, &sctx->gs_shader, &log);
|
si_dump_gfx_shader(sctx, &sctx->ps_shader, log);
|
||||||
si_dump_gfx_shader(sctx, &sctx->ps_shader, &log);
|
|
||||||
si_dump_compute_shader(&sctx->cs_shader_state, &log);
|
|
||||||
|
|
||||||
si_dump_descriptor_list(&sctx->descriptors[SI_DESCS_RW_BUFFERS],
|
si_dump_descriptor_list(&sctx->descriptors[SI_DESCS_RW_BUFFERS],
|
||||||
"", "RW buffers", 4, SI_NUM_RW_BUFFERS,
|
"", "RW buffers", 4, SI_NUM_RW_BUFFERS,
|
||||||
si_identity, &log);
|
si_identity, log);
|
||||||
si_dump_gfx_descriptors(sctx, &sctx->vs_shader, &log);
|
si_dump_gfx_descriptors(sctx, &sctx->vs_shader, log);
|
||||||
si_dump_gfx_descriptors(sctx, &sctx->tcs_shader, &log);
|
si_dump_gfx_descriptors(sctx, &sctx->tcs_shader, log);
|
||||||
si_dump_gfx_descriptors(sctx, &sctx->tes_shader, &log);
|
si_dump_gfx_descriptors(sctx, &sctx->tes_shader, log);
|
||||||
si_dump_gfx_descriptors(sctx, &sctx->gs_shader, &log);
|
si_dump_gfx_descriptors(sctx, &sctx->gs_shader, log);
|
||||||
si_dump_gfx_descriptors(sctx, &sctx->ps_shader, &log);
|
si_dump_gfx_descriptors(sctx, &sctx->ps_shader, log);
|
||||||
si_dump_compute_descriptors(sctx, &log);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
u_log_new_page_print(&log, f);
|
void si_log_compute_state(struct si_context *sctx, struct u_log_context *log)
|
||||||
u_log_context_destroy(&log);
|
{
|
||||||
|
if (!log)
|
||||||
|
return;
|
||||||
|
|
||||||
|
si_dump_compute_shader(&sctx->cs_shader_state, log);
|
||||||
|
si_dump_compute_descriptors(sctx, log);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void si_dump_dma(struct si_context *sctx,
|
static void si_dump_dma(struct si_context *sctx,
|
||||||
@@ -1246,13 +1250,17 @@ void si_check_vm_faults(struct r600_common_context *ctx,
|
|||||||
sctx->apitrace_call_number);
|
sctx->apitrace_call_number);
|
||||||
|
|
||||||
switch (ring) {
|
switch (ring) {
|
||||||
case RING_GFX:
|
case RING_GFX: {
|
||||||
si_dump_debug_state(&sctx->b.b, f,
|
struct u_log_context log;
|
||||||
PIPE_DUMP_CURRENT_STATES |
|
u_log_context_init(&log);
|
||||||
PIPE_DUMP_CURRENT_SHADERS |
|
|
||||||
PIPE_DUMP_LAST_COMMAND_BUFFER);
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
si_log_draw_state(sctx, &log);
|
||||||
|
si_log_compute_state(sctx, &log);
|
||||||
|
|
||||||
|
u_log_new_page_print(&log, f);
|
||||||
|
u_log_context_destroy(&log);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case RING_DMA:
|
case RING_DMA:
|
||||||
si_dump_dma(sctx, saved, f);
|
si_dump_dma(sctx, saved, f);
|
||||||
break;
|
break;
|
||||||
|
@@ -508,6 +508,8 @@ void si_init_cp_dma_functions(struct si_context *sctx);
|
|||||||
/* si_debug.c */
|
/* si_debug.c */
|
||||||
void si_auto_log_cs(void *data, struct u_log_context *log);
|
void si_auto_log_cs(void *data, struct u_log_context *log);
|
||||||
void si_log_hw_flush(struct si_context *sctx);
|
void si_log_hw_flush(struct si_context *sctx);
|
||||||
|
void si_log_draw_state(struct si_context *sctx, struct u_log_context *log);
|
||||||
|
void si_log_compute_state(struct si_context *sctx, struct u_log_context *log);
|
||||||
void si_init_debug_functions(struct si_context *sctx);
|
void si_init_debug_functions(struct si_context *sctx);
|
||||||
void si_check_vm_faults(struct r600_common_context *ctx,
|
void si_check_vm_faults(struct r600_common_context *ctx,
|
||||||
struct radeon_saved_cs *saved, enum ring_type ring);
|
struct radeon_saved_cs *saved, enum ring_type ring);
|
||||||
|
@@ -1361,6 +1361,9 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
|
|||||||
|
|
||||||
si_need_cs_space(sctx);
|
si_need_cs_space(sctx);
|
||||||
|
|
||||||
|
if (unlikely(sctx->b.log))
|
||||||
|
si_log_draw_state(sctx, sctx->b.log);
|
||||||
|
|
||||||
/* Since we've called r600_context_add_resource_size for vertex buffers,
|
/* Since we've called r600_context_add_resource_size for vertex buffers,
|
||||||
* this must be called after si_need_cs_space, because we must let
|
* this must be called after si_need_cs_space, because we must let
|
||||||
* need_cs_space flush before we add buffers to the buffer list.
|
* need_cs_space flush before we add buffers to the buffer list.
|
||||||
|
Reference in New Issue
Block a user