From: Nicolai Hähnle <nicolai.haeh...@amd.com> --- src/gallium/drivers/radeonsi/si_shader.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 6ae63c8..5a0153c 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -6776,46 +6776,47 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, ctx.is_monolithic = is_monolithic; memset(shader->info.vs_output_param_offset, 0xff, sizeof(shader->info.vs_output_param_offset)); shader->info.uses_instanceid = sel->info.uses_instanceid; bld_base = &ctx.soa.bld_base; ctx.load_system_value = declare_system_value; - if (!si_compile_tgsi_main(&ctx, shader)) - goto out; + if (!si_compile_tgsi_main(&ctx, shader)) { + si_llvm_dispose(&ctx); + return -1; + } mod = bld_base->base.gallivm->module; /* Dump LLVM IR before any optimization passes */ if (sscreen->b.debug_flags & DBG_PREOPT_IR && r600_can_dump_shader(&sscreen->b, ctx.type)) LLVMDumpModule(mod); si_llvm_finalize_module(&ctx, r600_extra_shader_checks(&sscreen->b, ctx.type)); /* Post-optimization transformations. */ si_eliminate_const_vs_outputs(&ctx); /* Compile to bytecode. */ r = si_compile_llvm(sscreen, &shader->binary, &shader->config, tm, mod, debug, ctx.type, "TGSI shader"); + si_llvm_dispose(&ctx); if (r) { fprintf(stderr, "LLVM failed to compile shader\n"); - goto out; + return r; } - si_llvm_dispose(&ctx); - /* Validate SGPR and VGPR usage for compute to detect compiler bugs. * LLVM 3.9svn has this bug. */ if (sel->type == PIPE_SHADER_COMPUTE) { unsigned *props = sel->info.properties; unsigned wave_size = 64; unsigned max_vgprs = 256; unsigned max_sgprs = sscreen->b.chip_class >= VI ? 800 : 512; unsigned max_sgprs_per_wave = 128; unsigned max_block_threads; @@ -6891,31 +6892,30 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, if (G_0286CC_SAMPLE_COVERAGE_ENA(shader->config.spi_ps_input_addr)) shader->info.num_input_vgprs += 1; if (G_0286CC_POS_FIXED_PT_ENA(shader->config.spi_ps_input_addr)) shader->info.num_input_vgprs += 1; } if (ctx.type == PIPE_SHADER_GEOMETRY) { shader->gs_copy_shader = CALLOC_STRUCT(si_shader); shader->gs_copy_shader->selector = shader->selector; ctx.shader = shader->gs_copy_shader; - if ((r = si_generate_gs_copy_shader(sscreen, &ctx, - shader, debug))) { + r = si_generate_gs_copy_shader(sscreen, &ctx, + shader, debug); + if (r) { free(shader->gs_copy_shader); shader->gs_copy_shader = NULL; - goto out; + return r; } } - r = 0; -out: - return r; + return 0; } /** * Create, compile and return a shader part (prolog or epilog). * * \param sscreen screen * \param list list of shader parts of the same category * \param key shader part key * \param tm LLVM target machine * \param debug debug callback -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev