radeonsi: merge si_tessctrl_info into si_shader_info
authorMarek Olšák <marek.olsak@amd.com>
Fri, 10 Jan 2020 23:09:04 +0000 (18:09 -0500)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 14 Jan 2020 23:46:07 +0000 (18:46 -0500)
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/gallium/drivers/radeonsi/si_shader.c
src/gallium/drivers/radeonsi/si_shader.h
src/gallium/drivers/radeonsi/si_shader_nir.c
src/gallium/drivers/radeonsi/si_state_shaders.c

index 2618c2c51bc399658e8895437c16a8b88aba26ba..e5581b9e25cbb99fc047e9a058af56ffdab71db8 100644 (file)
@@ -1053,7 +1053,7 @@ static void si_nir_store_output_tcs(struct ac_shader_abi *abi,
                            name == TGSI_SEMANTIC_TESSOUTER) {
                                /* The epilog doesn't read LDS if invocation 0 defines tess factors. */
                                skip_lds_store = !info->reads_tessfactor_outputs &&
-                                                ctx->shader->selector->tcs_info.tessfactors_are_def_in_all_invocs;
+                                                ctx->shader->selector->info.tessfactors_are_def_in_all_invocs;
                                is_tess_factor = true;
                                is_tess_inner = name == TGSI_SEMANTIC_TESSINNER;
                        }
@@ -1098,7 +1098,7 @@ static void si_nir_store_output_tcs(struct ac_shader_abi *abi,
 
                /* Write tess factors into VGPRs for the epilog. */
                if (is_tess_factor &&
-                   ctx->shader->selector->tcs_info.tessfactors_are_def_in_all_invocs) {
+                   ctx->shader->selector->info.tessfactors_are_def_in_all_invocs) {
                        if (!is_tess_inner) {
                                LLVMBuildStore(ctx->ac.builder, value, /* outer */
                                               ctx->invoc0_tess_factors[chan]);
@@ -2604,7 +2604,7 @@ static void si_llvm_emit_tcs_epilogue(struct ac_shader_abi *abi,
        ret = LLVMBuildInsertValue(builder, ret, rel_patch_id, vgpr++, "");
        ret = LLVMBuildInsertValue(builder, ret, invocation_id, vgpr++, "");
 
-       if (ctx->shader->selector->tcs_info.tessfactors_are_def_in_all_invocs) {
+       if (ctx->shader->selector->info.tessfactors_are_def_in_all_invocs) {
                vgpr++; /* skip the tess factor LDS offset */
                for (unsigned i = 0; i < 6; i++) {
                        LLVMValueRef value =
@@ -4949,7 +4949,7 @@ static bool si_compile_tgsi_main(struct si_shader_context *ctx,
        preload_ring_buffers(ctx);
 
        if (ctx->type == PIPE_SHADER_TESS_CTRL &&
-           sel->tcs_info.tessfactors_are_def_in_all_invocs) {
+           sel->info.tessfactors_are_def_in_all_invocs) {
                for (unsigned i = 0; i < 6; i++) {
                        ctx->invoc0_tess_factors[i] =
                                ac_build_alloca_undef(&ctx->ac, ctx->i32, "");
index 565bcd6b7a24e1ce082a82d0ab24284501d70b63..058bb35cf0a55bc9e1e5ed029b456d550b1303da 100644 (file)
@@ -450,9 +450,7 @@ struct si_shader_info {
         * Max nesting limit of loops/if's
         */
        unsigned max_depth;
-};
 
-struct si_tessctrl_info {
        /** Whether all codepaths write tess factors in all invocations. */
        bool tessfactors_are_def_in_all_invocs;
 };
@@ -487,7 +485,6 @@ struct si_shader_selector {
 
        struct pipe_stream_output_info  so;
        struct si_shader_info           info;
-       struct si_tessctrl_info         tcs_info;
 
        /* PIPE_SHADER_[VERTEX|FRAGMENT|...] */
        enum pipe_shader_type type;
@@ -913,8 +910,6 @@ void si_shader_binary_clean(struct si_shader_binary *binary);
 /* si_shader_nir.c */
 void si_nir_scan_shader(const struct nir_shader *nir,
                        struct si_shader_info *info);
-void si_nir_scan_tess_ctrl(const struct nir_shader *nir,
-                          struct si_tessctrl_info *out);
 void si_nir_adjust_driver_locations(struct nir_shader *nir);
 void si_finalize_nir(struct pipe_screen *screen, void *nirptr, bool optimize);
 
index 331103fe3a3bcbd19c7f9c73fb74e154bfbdf83e..6aa85ef6c7b25920dadeee92f5837255cef38b5c 100644 (file)
@@ -430,18 +430,6 @@ static void scan_instruction(const struct nir_shader *nir,
        }
 }
 
-void si_nir_scan_tess_ctrl(const struct nir_shader *nir,
-                          struct si_tessctrl_info *out)
-{
-       memset(out, 0, sizeof(*out));
-
-       if (nir->info.stage != MESA_SHADER_TESS_CTRL)
-               return;
-
-       out->tessfactors_are_def_in_all_invocs =
-               ac_are_tessfactors_def_in_all_invocs(nir);
-}
-
 static void scan_output_slot(const nir_variable *var,
                             unsigned var_idx,
                             unsigned component, unsigned num_components,
@@ -799,6 +787,11 @@ void si_nir_scan_shader(const struct nir_shader *nir,
        if (info->processor == PIPE_SHADER_FRAGMENT)
                info->uses_kill = nir->info.fs.uses_discard;
 
+       if (nir->info.stage == MESA_SHADER_TESS_CTRL) {
+               info->tessfactors_are_def_in_all_invocs =
+                       ac_are_tessfactors_def_in_all_invocs(nir);
+       }
+
        func = (struct nir_function *)exec_list_get_head_const(&nir->functions);
        nir_foreach_block(block, func->impl) {
                nir_foreach_instr(instr, block)
index 2c0c6c4dace053168b9fb4f00404cb5681d81f7c..b4fd6a58b11930b7cb29788005c2e43250a4a22c 100644 (file)
@@ -1891,7 +1891,7 @@ static inline void si_shader_selector_key(struct pipe_context *ctx,
                key->part.tcs.epilog.prim_mode =
                        sctx->tes_shader.cso->info.properties[TGSI_PROPERTY_TES_PRIM_MODE];
                key->part.tcs.epilog.invoc0_tess_factors_are_def =
-                       sel->tcs_info.tessfactors_are_def_in_all_invocs;
+                       sel->info.tessfactors_are_def_in_all_invocs;
                key->part.tcs.epilog.tes_reads_tess_factors =
                        sctx->tes_shader.cso->info.reads_tess_factors;
 
@@ -2714,7 +2714,6 @@ static void *si_create_shader_selector(struct pipe_context *ctx,
        }
 
        si_nir_scan_shader(sel->nir, &sel->info);
-       si_nir_scan_tess_ctrl(sel->nir, &sel->tcs_info);
        si_nir_adjust_driver_locations(sel->nir);
 
        sel->type = sel->info.processor;