radeonsi: don't declare LDS in PS when ds_bpermute is used
authorMarek Olšák <marek.olsak@amd.com>
Sun, 2 Oct 2016 20:01:38 +0000 (22:01 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 4 Oct 2016 14:12:16 +0000 (16:12 +0200)
I guess this is not needed because dead code elimination removes
the declaration.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/drivers/radeonsi/si_shader.c

index 43d63772adde2f2934c4ed5b6c26555d5ff26b1d..2aa679c61b55510519d7637b950e1657d233f31f 100644 (file)
@@ -817,6 +817,9 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)
                 sscreen->b.info.pfp_fw_version >= 121 &&
                 sscreen->b.info.me_fw_version >= 87);
 
+       sscreen->has_ds_bpermute = HAVE_LLVM >= 0x0309 &&
+                                  sscreen->b.chip_class >= VI;
+
        sscreen->b.has_cp_dma = true;
        sscreen->b.has_streamout = true;
        pipe_mutex_init(sscreen->shader_parts_mutex);
index 558e1858563e4d11510a452e4b910d484afd5b2c..3cefee7ad2f6a1fd29975b3b97acb2954e4a33cf 100644 (file)
@@ -83,6 +83,7 @@ struct si_screen {
        unsigned                        tess_offchip_block_dw_size;
        bool                            has_distributed_tess;
        bool                            has_draw_indirect_multi;
+       bool                            has_ds_bpermute;
 
        /* Whether shaders are monolithic (1-part) or separate (3-part). */
        bool                            use_monolithic_shaders;
index 7844ebdc892e90bb0abb0986729f38c1a032f39b..30bf093b109b16559e1f90ad8d8c546793e0b9d3 100644 (file)
@@ -5009,8 +5009,6 @@ static void si_llvm_emit_ddxy(
        LLVMValueRef thread_id, tl, trbl, tl_tid, trbl_tid, val, args[2];
        int idx;
        unsigned mask;
-       bool has_ds_bpermute = HAVE_LLVM >= 0x0309 &&
-                              ctx->screen->b.chip_class >= VI;
 
        thread_id = get_thread_id(ctx);
 
@@ -5031,7 +5029,7 @@ static void si_llvm_emit_ddxy(
 
        val = LLVMBuildBitCast(gallivm->builder, emit_data->args[0], ctx->i32, "");
 
-       if (has_ds_bpermute) {
+       if (ctx->screen->has_ds_bpermute) {
                args[0] = LLVMBuildMul(gallivm->builder, tl_tid,
                                       lp_build_const_int32(gallivm, 4), "");
                args[1] = val;
@@ -5738,7 +5736,8 @@ static void create_function(struct si_shader_context *ctx)
                for (; i < num_params; ++i)
                        shader->info.num_input_vgprs += llvm_get_type_size(params[i]) / 4;
 
-       if (bld_base->info &&
+       if (!ctx->screen->has_ds_bpermute &&
+           bld_base->info &&
            (bld_base->info->opcode_count[TGSI_OPCODE_DDX] > 0 ||
             bld_base->info->opcode_count[TGSI_OPCODE_DDY] > 0 ||
             bld_base->info->opcode_count[TGSI_OPCODE_DDX_FINE] > 0 ||