From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeonsi/si_compute.c |  1 +
 src/gallium/drivers/radeonsi/si_shader.c  | 12 ++++++++----
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_compute.c 
b/src/gallium/drivers/radeonsi/si_compute.c
index a543c55..aedea8e 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -124,6 +124,7 @@ static void *si_create_compute_state(
                                                         code, 
header->num_bytes);
                        si_compile_llvm(sctx->screen, &program->kernels[i], 
sctx->tm,
                                        mod, &sctx->b.debug, 
TGSI_PROCESSOR_COMPUTE);
+                       si_shader_binary_upload(sctx->screen, 
&program->kernels[i]);
                        LLVMDisposeModule(mod);
                }
        }
diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index abc1652..91473a7 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -3903,10 +3903,6 @@ int si_compile_llvm(struct si_screen *sscreen, struct 
si_shader *shader,
        si_shader_binary_read(sscreen, &shader->binary, &shader->config,
                              debug, processor);
 
-       r = si_shader_binary_upload(sscreen, shader);
-       if (r)
-               return r;
-
        FREE(shader->binary.config);
        FREE(shader->binary.global_symbol_offsets);
        shader->binary.config = NULL;
@@ -3987,6 +3983,8 @@ static int si_generate_gs_copy_shader(struct si_screen 
*sscreen,
        r = si_compile_llvm(sscreen, si_shader_ctx->shader,
                            si_shader_ctx->tm, bld_base->base.gallivm->module,
                            debug, TGSI_PROCESSOR_GEOMETRY);
+       if (!r)
+               r = si_shader_binary_upload(sscreen, si_shader_ctx->shader);
 
        radeon_llvm_dispose(&si_shader_ctx->radeon_bld);
 
@@ -4187,6 +4185,12 @@ int si_shader_create(struct si_screen *sscreen, 
LLVMTargetMachineRef tm,
                goto out;
        }
 
+       r = si_shader_binary_upload(sscreen, shader);
+       if (r) {
+               fprintf(stderr, "LLVM failed to upload shader\n");
+               goto out;
+       }
+
        radeon_llvm_dispose(&si_shader_ctx.radeon_bld);
 
        if (si_shader_ctx.type == TGSI_PROCESSOR_GEOMETRY) {
-- 
2.1.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to