diff options
Diffstat (limited to 'src/gallium/drivers/r600')
-rw-r--r-- | src/gallium/drivers/r600/r600_asm.c | 13 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_shader.c | 22 |
4 files changed, 18 insertions, 19 deletions
diff --git a/src/gallium/drivers/r600/r600_asm.c b/src/gallium/drivers/r600/r600_asm.c index 81b84ec5fd3..df0376ad11e 100644 --- a/src/gallium/drivers/r600/r600_asm.c +++ b/src/gallium/drivers/r600/r600_asm.c @@ -2281,6 +2281,7 @@ void *r600_create_vertex_fetch_shader(struct pipe_context *ctx, uint32_t *bytecode; int i, j, r, fs_size; struct r600_fetch_shader *shader; + unsigned sb_disasm = rctx->screen->debug_flags & (DBG_SB_DISASM | DBG_SB); assert(count < 32); @@ -2387,13 +2388,13 @@ void *r600_create_vertex_fetch_shader(struct pipe_context *ctx, fprintf(stderr, "\n"); } -#if 0 - r600_bytecode_disasm(&bc); + if (!sb_disasm) { + r600_bytecode_disasm(&bc); - fprintf(stderr, "______________________________________________________________\n"); -#else - r600_sb_bytecode_process(rctx, &bc, NULL, 1 /*dump*/, 0 /*optimize*/); -#endif + fprintf(stderr, "______________________________________________________________\n"); + } else { + r600_sb_bytecode_process(rctx, &bc, NULL, 1 /*dump*/, 0 /*optimize*/); + } } fs_size = bc.ndw*4; diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index 4991fb28165..daadaeb25d8 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -73,6 +73,7 @@ static const struct debug_named_value debug_options[] = { { "sbstat", DBG_SB_STAT, "Print optimization statistics for shaders" }, { "sbdump", DBG_SB_DUMP, "Print IR dumps after some optimization passes" }, { "sbnofallback", DBG_SB_NO_FALLBACK, "Abort on errors instead of fallback" }, + { "sbdisasm", DBG_SB_DISASM, "Use sb disassembler for shader dumps" }, DEBUG_NAMED_VALUE_END /* must be last */ }; diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index 61e2022a4a1..bb4e429aeb2 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -264,6 +264,7 @@ typedef boolean (*r600g_dma_blit_t)(struct pipe_context *ctx, #define DBG_SB_STAT (1 << 24) #define DBG_SB_DUMP (1 << 25) #define DBG_SB_NO_FALLBACK (1 << 26) +#define DBG_SB_DISASM (1 << 27) struct r600_tiling_info { unsigned num_channels; diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index fd3fe3933a0..ab05b5ac997 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -141,6 +141,7 @@ int r600_pipe_shader_create(struct pipe_context *ctx, uint32_t *ptr; bool dump = r600_can_dump_shader(rctx->screen, tgsi_get_processor_type(sel->tokens)); unsigned use_sb = rctx->screen->debug_flags & DBG_SB; + unsigned sb_disasm = use_sb || (rctx->screen->debug_flags & DBG_SB_DISASM); shader->shader.bc.isa = rctx->isa; @@ -163,21 +164,18 @@ int r600_pipe_shader_create(struct pipe_context *ctx, return r; } -#if 0 - if (dump) { + if (dump && !sb_disasm) { fprintf(stderr, "--------------------------------------------------------------\n"); r600_bytecode_disasm(&shader->shader.bc); fprintf(stderr, "______________________________________________________________\n"); - } -#else - if (dump || use_sb) { - r = r600_sb_bytecode_process(rctx, &shader->shader.bc, &shader->shader, dump, use_sb); + } else if ((dump && sb_disasm) || use_sb) { + r = r600_sb_bytecode_process(rctx, &shader->shader.bc, &shader->shader, + dump, use_sb); if (r) { R600_ERR("r600_sb_bytecode_process failed !\n"); return r; } } -#endif /* Store the shader in a buffer. */ if (shader->bo == NULL) { @@ -307,6 +305,8 @@ int r600_compute_shader_create(struct pipe_context * ctx, boolean use_kill = false; bool dump = (r600_ctx->screen->debug_flags & DBG_CS) != 0; unsigned use_sb = r600_ctx->screen->debug_flags & DBG_SB_CS; + unsigned sb_disasm = use_sb || + (r600_ctx->screen->debug_flags & DBG_SB_DISASM); shader_ctx.bc = bytecode; r600_bytecode_init(shader_ctx.bc, r600_ctx->chip_class, r600_ctx->family, @@ -321,16 +321,12 @@ int r600_compute_shader_create(struct pipe_context * ctx, } r600_bytecode_build(shader_ctx.bc); -#if 0 - if (dump) { + if (dump && !sb_disasm) { r600_bytecode_disasm(shader_ctx.bc); - } -#else - if (dump || use_sb) { + } else if ((dump && sb_disasm) || use_sb) { if (r600_sb_bytecode_process(r600_ctx, shader_ctx.bc, NULL, dump, use_sb)) R600_ERR("r600_sb_bytecode_process failed!\n"); } -#endif free(bytes); return 1; |