--- src/amd/vulkan/radv_pipeline.c | 50 +++++++++++++++++++++++------------------- src/amd/vulkan/radv_private.h | 1 - 2 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 9d6663e977..16dad89f4c 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2855,6 +2855,32 @@ radv_pipeline_generate_vgt_vertex_reuse(struct radv_pm4_builder *builder, S_028C58_VTX_REUSE_DEPTH(vtx_reuse_depth)); } +static uint32_t +radv_compute_vgt_shader_stages_en(const struct radv_pipeline *pipeline) +{ + uint32_t stages = 0; + if (radv_pipeline_has_tess(pipeline)) { + stages |= S_028B54_LS_EN(V_028B54_LS_STAGE_ON) | + S_028B54_HS_EN(1) | S_028B54_DYNAMIC_HS(1); + + if (radv_pipeline_has_gs(pipeline)) + stages |= S_028B54_ES_EN(V_028B54_ES_STAGE_DS) | + S_028B54_GS_EN(1) | + S_028B54_VS_EN(V_028B54_VS_STAGE_COPY_SHADER); + else + stages |= S_028B54_VS_EN(V_028B54_VS_STAGE_DS); + + } else if (radv_pipeline_has_gs(pipeline)) + stages |= S_028B54_ES_EN(V_028B54_ES_STAGE_REAL) | + S_028B54_GS_EN(1) | + S_028B54_VS_EN(V_028B54_VS_STAGE_COPY_SHADER); + + if (pipeline->device->physical_device->rad_info.chip_class >= GFX9) + stages |= S_028B54_MAX_PRIMGRP_IN_WAVE(2); + + return stages; +} + static void radv_pipeline_generate_pm4(struct radv_pipeline *pipeline, const VkGraphicsPipelineCreateInfo *pCreateInfo, @@ -2879,7 +2905,7 @@ radv_pipeline_generate_pm4(struct radv_pipeline *pipeline, S_0286E8_WAVES(pipeline->max_waves) | S_0286E8_WAVESIZE(pipeline->scratch_bytes_per_wave >> 10)); - radv_pm4_set_reg(&builder, R_028B54_VGT_SHADER_STAGES_EN, pipeline->graphics.vgt_shader_stages_en); + radv_pm4_set_reg(&builder, R_028B54_VGT_SHADER_STAGES_EN, radv_compute_vgt_shader_stages_en(pipeline)); if (pipeline->device->physical_device->rad_info.chip_class >= CIK) { radv_pm4_set_reg_idx(&builder, R_030908_VGT_PRIMITIVE_TYPE, 1, pipeline->graphics.prim); @@ -3066,28 +3092,6 @@ radv_pipeline_init(struct radv_pipeline *pipeline, } } - uint32_t stages = 0; - if (radv_pipeline_has_tess(pipeline)) { - stages |= S_028B54_LS_EN(V_028B54_LS_STAGE_ON) | - S_028B54_HS_EN(1) | S_028B54_DYNAMIC_HS(1); - - if (radv_pipeline_has_gs(pipeline)) - stages |= S_028B54_ES_EN(V_028B54_ES_STAGE_DS) | - S_028B54_GS_EN(1) | - S_028B54_VS_EN(V_028B54_VS_STAGE_COPY_SHADER); - else - stages |= S_028B54_VS_EN(V_028B54_VS_STAGE_DS); - - } else if (radv_pipeline_has_gs(pipeline)) - stages |= S_028B54_ES_EN(V_028B54_ES_STAGE_REAL) | - S_028B54_GS_EN(1) | - S_028B54_VS_EN(V_028B54_VS_STAGE_COPY_SHADER); - - if (device->physical_device->rad_info.chip_class >= GFX9) - stages |= S_028B54_MAX_PRIMGRP_IN_WAVE(2); - - pipeline->graphics.vgt_shader_stages_en = stages; - if (radv_pipeline_has_gs(pipeline)) { calculate_gs_ring_sizes(pipeline); if (device->physical_device->rad_info.chip_class >= GFX9) diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 01ae7888dc..945400ad4e 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -1245,7 +1245,6 @@ struct radv_pipeline { bool prim_restart_enable; unsigned esgs_ring_size; unsigned gsvs_ring_size; - uint32_t vgt_shader_stages_en; uint32_t vtx_base_sgpr; struct radv_ia_multi_vgt_param_helpers ia_multi_vgt_param; uint8_t vtx_emit_num; -- 2.15.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev