mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-14 10:08:05 +02:00
radeonsi: pass pipe_debug_callback down into si_shader_binary_read (v2)
This will allow us to send shader debug info. Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com> (v1) Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
b6847062dd
commit
4bb1c8dfec
4 changed files with 22 additions and 14 deletions
|
|
@ -123,7 +123,7 @@ static void *si_create_compute_state(
|
|||
LLVMModuleRef mod = radeon_llvm_get_kernel_module(program->llvm_ctx, i,
|
||||
code, header->num_bytes);
|
||||
si_compile_llvm(sctx->screen, &program->kernels[i], sctx->tm,
|
||||
mod);
|
||||
mod, &sctx->b.debug);
|
||||
LLVMDisposeModule(mod);
|
||||
}
|
||||
}
|
||||
|
|
@ -136,7 +136,7 @@ static void *si_create_compute_state(
|
|||
* the shader code to the GPU.
|
||||
*/
|
||||
init_scratch_buffer(sctx, program);
|
||||
si_shader_binary_read(sctx->screen, &program->shader);
|
||||
si_shader_binary_read(sctx->screen, &program->shader, &sctx->b.debug);
|
||||
|
||||
#endif
|
||||
program->input_buffer = si_resource_create_custom(sctx->b.b.screen,
|
||||
|
|
|
|||
|
|
@ -3840,7 +3840,8 @@ int si_shader_binary_upload(struct si_screen *sscreen, struct si_shader *shader)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int si_shader_binary_read(struct si_screen *sscreen, struct si_shader *shader)
|
||||
int si_shader_binary_read(struct si_screen *sscreen, struct si_shader *shader,
|
||||
struct pipe_debug_callback *debug)
|
||||
{
|
||||
const struct radeon_shader_binary *binary = &shader->binary;
|
||||
unsigned i;
|
||||
|
|
@ -3878,7 +3879,8 @@ int si_shader_binary_read(struct si_screen *sscreen, struct si_shader *shader)
|
|||
}
|
||||
|
||||
int si_compile_llvm(struct si_screen *sscreen, struct si_shader *shader,
|
||||
LLVMTargetMachineRef tm, LLVMModuleRef mod)
|
||||
LLVMTargetMachineRef tm, LLVMModuleRef mod,
|
||||
struct pipe_debug_callback *debug)
|
||||
{
|
||||
int r = 0;
|
||||
bool dump_asm = r600_can_dump_shader(&sscreen->b,
|
||||
|
|
@ -3896,7 +3898,7 @@ int si_compile_llvm(struct si_screen *sscreen, struct si_shader *shader,
|
|||
return r;
|
||||
}
|
||||
|
||||
r = si_shader_binary_read(sscreen, shader);
|
||||
r = si_shader_binary_read(sscreen, shader, debug);
|
||||
|
||||
FREE(shader->binary.config);
|
||||
FREE(shader->binary.rodata);
|
||||
|
|
@ -3913,7 +3915,8 @@ int si_compile_llvm(struct si_screen *sscreen, struct si_shader *shader,
|
|||
/* Generate code for the hardware VS shader stage to go with a geometry shader */
|
||||
static int si_generate_gs_copy_shader(struct si_screen *sscreen,
|
||||
struct si_shader_context *si_shader_ctx,
|
||||
struct si_shader *gs, bool dump)
|
||||
struct si_shader *gs, bool dump,
|
||||
struct pipe_debug_callback *debug)
|
||||
{
|
||||
struct gallivm_state *gallivm = &si_shader_ctx->radeon_bld.gallivm;
|
||||
struct lp_build_tgsi_context *bld_base = &si_shader_ctx->radeon_bld.soa.bld_base;
|
||||
|
|
@ -3980,7 +3983,8 @@ static int si_generate_gs_copy_shader(struct si_screen *sscreen,
|
|||
fprintf(stderr, "Copy Vertex Shader for Geometry Shader:\n\n");
|
||||
|
||||
r = si_compile_llvm(sscreen, si_shader_ctx->shader,
|
||||
si_shader_ctx->tm, bld_base->base.gallivm->module);
|
||||
si_shader_ctx->tm, bld_base->base.gallivm->module,
|
||||
debug);
|
||||
|
||||
radeon_llvm_dispose(&si_shader_ctx->radeon_bld);
|
||||
|
||||
|
|
@ -4034,7 +4038,8 @@ void si_dump_shader_key(unsigned shader, union si_shader_key *key, FILE *f)
|
|||
}
|
||||
|
||||
int si_shader_create(struct si_screen *sscreen, LLVMTargetMachineRef tm,
|
||||
struct si_shader *shader)
|
||||
struct si_shader *shader,
|
||||
struct pipe_debug_callback *debug)
|
||||
{
|
||||
struct si_shader_selector *sel = shader->selector;
|
||||
struct tgsi_token *tokens = sel->tokens;
|
||||
|
|
@ -4188,7 +4193,7 @@ int si_shader_create(struct si_screen *sscreen, LLVMTargetMachineRef tm,
|
|||
radeon_llvm_finalize_module(&si_shader_ctx.radeon_bld);
|
||||
|
||||
mod = bld_base->base.gallivm->module;
|
||||
r = si_compile_llvm(sscreen, shader, tm, mod);
|
||||
r = si_compile_llvm(sscreen, shader, tm, mod, debug);
|
||||
if (r) {
|
||||
fprintf(stderr, "LLVM failed to compile shader\n");
|
||||
goto out;
|
||||
|
|
@ -4202,7 +4207,7 @@ int si_shader_create(struct si_screen *sscreen, LLVMTargetMachineRef tm,
|
|||
shader->gs_copy_shader->key = shader->key;
|
||||
si_shader_ctx.shader = shader->gs_copy_shader;
|
||||
if ((r = si_generate_gs_copy_shader(sscreen, &si_shader_ctx,
|
||||
shader, dump))) {
|
||||
shader, dump, debug))) {
|
||||
free(shader->gs_copy_shader);
|
||||
shader->gs_copy_shader = NULL;
|
||||
goto out;
|
||||
|
|
|
|||
|
|
@ -327,14 +327,17 @@ static inline bool si_vs_exports_prim_id(struct si_shader *shader)
|
|||
|
||||
/* radeonsi_shader.c */
|
||||
int si_shader_create(struct si_screen *sscreen, LLVMTargetMachineRef tm,
|
||||
struct si_shader *shader);
|
||||
struct si_shader *shader,
|
||||
struct pipe_debug_callback *debug);
|
||||
void si_dump_shader_key(unsigned shader, union si_shader_key *key, FILE *f);
|
||||
int si_compile_llvm(struct si_screen *sscreen, struct si_shader *shader,
|
||||
LLVMTargetMachineRef tm, LLVMModuleRef mod);
|
||||
LLVMTargetMachineRef tm, LLVMModuleRef mod,
|
||||
struct pipe_debug_callback *debug);
|
||||
void si_shader_destroy(struct si_shader *shader);
|
||||
unsigned si_shader_io_get_unique_index(unsigned semantic_name, unsigned index);
|
||||
int si_shader_binary_upload(struct si_screen *sscreen, struct si_shader *shader);
|
||||
int si_shader_binary_read(struct si_screen *sscreen, struct si_shader *shader);
|
||||
int si_shader_binary_read(struct si_screen *sscreen, struct si_shader *shader,
|
||||
struct pipe_debug_callback *debug);
|
||||
void si_shader_apply_scratch_relocs(struct si_context *sctx,
|
||||
struct si_shader *shader,
|
||||
uint64_t scratch_va);
|
||||
|
|
|
|||
|
|
@ -616,7 +616,7 @@ static int si_shader_select(struct pipe_context *ctx,
|
|||
shader->selector = sel;
|
||||
shader->key = key;
|
||||
|
||||
r = si_shader_create(sctx->screen, sctx->tm, shader);
|
||||
r = si_shader_create(sctx->screen, sctx->tm, shader, &sctx->b.debug);
|
||||
if (unlikely(r)) {
|
||||
R600_ERR("Failed to build shader variant (type=%u) %d\n",
|
||||
sel->type, r);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue