gallium/radeon: avoid redundant work with overlapping in/out arrays
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 7 Oct 2016 10:54:34 +0000 (12:54 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 10 Oct 2016 08:37:50 +0000 (10:37 +0200)
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c

index 8e364c90f07e3f1939d28110782e68a8bbcc02b4..da4a030a9ef60b1a24a7ffec3b456e2056c6a425 100644 (file)
@@ -680,7 +680,8 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base,
        {
                unsigned idx;
                for (idx = decl->Range.First; idx <= decl->Range.Last; idx++) {
-                       if (ctx->load_input) {
+                       if (ctx->load_input &&
+                           ctx->input_decls[idx].Declaration.File != TGSI_FILE_INPUT) {
                                ctx->input_decls[idx] = *decl;
 
                                if (bld_base->info->processor != PIPE_SHADER_FRAGMENT)
@@ -706,6 +707,8 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base,
                for (idx = decl->Range.First; idx <= decl->Range.Last; idx++) {
                        unsigned chan;
                        assert(idx < RADEON_LLVM_MAX_OUTPUTS);
+                       if (ctx->soa.outputs[idx][0])
+                               continue;
                        for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) {
                                ctx->soa.outputs[idx][chan] = lp_build_alloca_undef(
                                        &ctx->gallivm,