---
 src/amd/vulkan/radv_pipeline.c | 160 ++++++++++++++++++++---------------------
 src/amd/vulkan/radv_private.h  |   2 -
 2 files changed, 79 insertions(+), 83 deletions(-)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index bd8a2feb8c..8c5706f4b4 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1586,79 +1586,6 @@ static void calculate_vgt_gs_mode(struct radv_pipeline 
*pipeline)
        }
 }
 
-static uint32_t offset_to_ps_input(uint32_t offset, bool flat_shade)
-{
-       uint32_t ps_input_cntl;
-       if (offset <= AC_EXP_PARAM_OFFSET_31) {
-               ps_input_cntl = S_028644_OFFSET(offset);
-               if (flat_shade)
-                       ps_input_cntl |= S_028644_FLAT_SHADE(1);
-       } else {
-               /* The input is a DEFAULT_VAL constant. */
-               assert(offset >= AC_EXP_PARAM_DEFAULT_VAL_0000 &&
-                      offset <= AC_EXP_PARAM_DEFAULT_VAL_1111);
-               offset -= AC_EXP_PARAM_DEFAULT_VAL_0000;
-               ps_input_cntl = S_028644_OFFSET(0x20) |
-                       S_028644_DEFAULT_VAL(offset);
-       }
-       return ps_input_cntl;
-}
-
-static void calculate_ps_inputs(struct radv_pipeline *pipeline)
-{
-       struct radv_shader_variant *ps;
-       const struct ac_vs_output_info *outinfo = get_vs_output_info(pipeline);
-
-       ps = pipeline->shaders[MESA_SHADER_FRAGMENT];
-
-       unsigned ps_offset = 0;
-
-       if (ps->info.fs.prim_id_input) {
-               unsigned vs_offset = 
outinfo->vs_output_param_offset[VARYING_SLOT_PRIMITIVE_ID];
-               if (vs_offset != AC_EXP_PARAM_UNDEFINED) {
-                       pipeline->graphics.ps_input_cntl[ps_offset] = 
offset_to_ps_input(vs_offset, true);
-                       ++ps_offset;
-               }
-       }
-
-       if (ps->info.fs.layer_input) {
-               unsigned vs_offset = 
outinfo->vs_output_param_offset[VARYING_SLOT_LAYER];
-               if (vs_offset != AC_EXP_PARAM_UNDEFINED)
-                       pipeline->graphics.ps_input_cntl[ps_offset] = 
offset_to_ps_input(vs_offset, true);
-               else
-                       pipeline->graphics.ps_input_cntl[ps_offset] = 
offset_to_ps_input(AC_EXP_PARAM_DEFAULT_VAL_0000, true);
-               ++ps_offset;
-       }
-
-       if (ps->info.fs.has_pcoord) {
-               unsigned val;
-               val = S_028644_PT_SPRITE_TEX(1) | S_028644_OFFSET(0x20);
-               pipeline->graphics.ps_input_cntl[ps_offset] = val;
-               ps_offset++;
-       }
-
-       for (unsigned i = 0; i < 32 && (1u << i) <= ps->info.fs.input_mask; 
++i) {
-               unsigned vs_offset;
-               bool flat_shade;
-               if (!(ps->info.fs.input_mask & (1u << i)))
-                       continue;
-
-               vs_offset = outinfo->vs_output_param_offset[VARYING_SLOT_VAR0 + 
i];
-               if (vs_offset == AC_EXP_PARAM_UNDEFINED) {
-                       pipeline->graphics.ps_input_cntl[ps_offset] = 
S_028644_OFFSET(0x20);
-                       ++ps_offset;
-                       continue;
-               }
-
-               flat_shade = !!(ps->info.fs.flat_shaded_mask & (1u << 
ps_offset));
-
-               pipeline->graphics.ps_input_cntl[ps_offset] = 
offset_to_ps_input(vs_offset, flat_shade);
-               ++ps_offset;
-       }
-
-       pipeline->graphics.ps_input_cntl_num = ps_offset;
-}
-
 static void
 radv_link_shaders(struct radv_pipeline *pipeline, nir_shader **shaders)
 {
@@ -2766,6 +2693,84 @@ radv_pipeline_generate_geometry_shader(struct 
radv_pm4_builder *builder,
        }
 }
 
+static uint32_t offset_to_ps_input(uint32_t offset, bool flat_shade)
+{
+       uint32_t ps_input_cntl;
+       if (offset <= AC_EXP_PARAM_OFFSET_31) {
+               ps_input_cntl = S_028644_OFFSET(offset);
+               if (flat_shade)
+                       ps_input_cntl |= S_028644_FLAT_SHADE(1);
+       } else {
+               /* The input is a DEFAULT_VAL constant. */
+               assert(offset >= AC_EXP_PARAM_DEFAULT_VAL_0000 &&
+                      offset <= AC_EXP_PARAM_DEFAULT_VAL_1111);
+               offset -= AC_EXP_PARAM_DEFAULT_VAL_0000;
+               ps_input_cntl = S_028644_OFFSET(0x20) |
+                       S_028644_DEFAULT_VAL(offset);
+       }
+       return ps_input_cntl;
+}
+
+static void
+radv_pipeline_generate_ps_inputs(struct radv_pm4_builder *builder,
+                                 struct radv_pipeline *pipeline)
+{
+       struct radv_shader_variant *ps = 
pipeline->shaders[MESA_SHADER_FRAGMENT];
+       const struct ac_vs_output_info *outinfo = get_vs_output_info(pipeline);
+       uint32_t ps_input_cntl[32];
+
+       unsigned ps_offset = 0;
+
+       if (ps->info.fs.prim_id_input) {
+               unsigned vs_offset = 
outinfo->vs_output_param_offset[VARYING_SLOT_PRIMITIVE_ID];
+               if (vs_offset != AC_EXP_PARAM_UNDEFINED) {
+                       ps_input_cntl[ps_offset] = 
offset_to_ps_input(vs_offset, true);
+                       ++ps_offset;
+               }
+       }
+
+       if (ps->info.fs.layer_input) {
+               unsigned vs_offset = 
outinfo->vs_output_param_offset[VARYING_SLOT_LAYER];
+               if (vs_offset != AC_EXP_PARAM_UNDEFINED)
+                       ps_input_cntl[ps_offset] = 
offset_to_ps_input(vs_offset, true);
+               else
+                       ps_input_cntl[ps_offset] = 
offset_to_ps_input(AC_EXP_PARAM_DEFAULT_VAL_0000, true);
+               ++ps_offset;
+       }
+
+       if (ps->info.fs.has_pcoord) {
+               unsigned val;
+               val = S_028644_PT_SPRITE_TEX(1) | S_028644_OFFSET(0x20);
+               ps_input_cntl[ps_offset] = val;
+               ps_offset++;
+       }
+
+       for (unsigned i = 0; i < 32 && (1u << i) <= ps->info.fs.input_mask; 
++i) {
+               unsigned vs_offset;
+               bool flat_shade;
+               if (!(ps->info.fs.input_mask & (1u << i)))
+                       continue;
+
+               vs_offset = outinfo->vs_output_param_offset[VARYING_SLOT_VAR0 + 
i];
+               if (vs_offset == AC_EXP_PARAM_UNDEFINED) {
+                       ps_input_cntl[ps_offset] = S_028644_OFFSET(0x20);
+                       ++ps_offset;
+                       continue;
+               }
+
+               flat_shade = !!(ps->info.fs.flat_shaded_mask & (1u << 
ps_offset));
+
+               ps_input_cntl[ps_offset] = offset_to_ps_input(vs_offset, 
flat_shade);
+               ++ps_offset;
+       }
+
+       if (ps_offset) {
+               radv_pm4_start_reg_set(builder, R_028644_SPI_PS_INPUT_CNTL_0, 
ps_offset);
+               for (unsigned i = 0; i < ps_offset; i++) {
+                       radv_pm4_emit(builder, ps_input_cntl[i]);
+               }
+       }
+}
 
 static void
 radv_pipeline_generate_fragment_shader(struct radv_pm4_builder *builder,
@@ -2816,13 +2821,6 @@ radv_pipeline_generate_fragment_shader(struct 
radv_pm4_builder *builder,
                radv_pm4_emit(builder, PKT3(PKT3_EVENT_WRITE, 0, 0));
                radv_pm4_emit(builder, EVENT_TYPE(V_028A90_FLUSH_DFSM) | 
EVENT_INDEX(0));
        }
-
-       if (pipeline->graphics.ps_input_cntl_num) {
-               radv_pm4_start_reg_set(builder, R_028644_SPI_PS_INPUT_CNTL_0, 
pipeline->graphics.ps_input_cntl_num);
-               for (unsigned i = 0; i < pipeline->graphics.ps_input_cntl_num; 
i++) {
-                       radv_pm4_emit(builder, 
pipeline->graphics.ps_input_cntl[i]);
-               }
-       }
 }
 
 static void
@@ -2856,6 +2854,7 @@ radv_pipeline_generate_pm4(struct radv_pipeline *pipeline,
        radv_pipeline_generate_tess_shaders(&builder, pipeline);
        radv_pipeline_generate_geometry_shader(&builder, pipeline);
        radv_pipeline_generate_fragment_shader(&builder, pipeline);
+       radv_pipeline_generate_ps_inputs(&builder, pipeline);
        radv_pipeline_generate_vgt_vertex_reuse(&builder, pipeline);
        radv_pipeline_generate_binning_state(&builder, pipeline, pCreateInfo);
 
@@ -2981,7 +2980,6 @@ radv_pipeline_init(struct radv_pipeline *pipeline,
        pipeline->graphics.shader_z_format = shader_z_format;
 
        calculate_vgt_gs_mode(pipeline);
-       calculate_ps_inputs(pipeline);
 
        for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
                if (pipeline->shaders[i]) {
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index c04fb19001..ed983f03ef 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1248,8 +1248,6 @@ struct radv_pipeline {
                        uint8_t primgroup_size;
                        unsigned esgs_ring_size;
                        unsigned gsvs_ring_size;
-                       uint32_t ps_input_cntl[32];
-                       uint32_t ps_input_cntl_num;
                        uint32_t vgt_shader_stages_en;
                        uint32_t vtx_base_sgpr;
                        uint32_t base_ia_multi_vgt_param;
-- 
2.15.1

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

Reply via email to