radeonsi: pass pipe_debug_callback down into si_shader_binary_read (v2)
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 30 Dec 2015 20:02:57 +0000 (15:02 -0500)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Sat, 2 Jan 2016 21:47:23 +0000 (16:47 -0500)
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>
src/gallium/drivers/radeonsi/si_compute.c
src/gallium/drivers/radeonsi/si_shader.c
src/gallium/drivers/radeonsi/si_shader.h
src/gallium/drivers/radeonsi/si_state_shaders.c

index 47a74ee..2565117 100644 (file)
@@ -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,
index 0e98784..309219f 100644 (file)
@@ -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;
index b0c8680..adcbb33 100644 (file)
@@ -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);
index 8700590..c7045c3 100644 (file)
@@ -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);