[Mesa-dev] [PATCH] radv: ensure correct outinfo is picked.
Timothy Arceri
tarceri at itsqueeze.com
Fri Oct 20 04:29:27 UTC 2017
On 20/10/17 15:12, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> This struct used to rely on being in a union, it isn't anymore,
> so we have to pick the correct outinfo struct now.
>
> This should fix a regression since the union became a struct.
>
> dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_geometry_set
>
> Fixes: 6078a3bd51 (ac/nir: Allow ac_shader_variant_info to contain info about multiple stages.)
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> src/amd/vulkan/radv_pipeline.c | 27 ++++++++++++++-------------
> 1 file changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
> index c16b5e3..9ffeda8 100644
> --- a/src/amd/vulkan/radv_pipeline.c
> +++ b/src/amd/vulkan/radv_pipeline.c
> @@ -1410,12 +1410,19 @@ static uint32_t si_vgt_gs_mode(struct radv_shader_variant *gs)
> S_028A40_GS_WRITE_OPTIMIZE(1);
> }
>
> -static void calculate_vgt_gs_mode(struct radv_pipeline *pipeline)
> +static struct ac_vs_output_info *get_vs_output_info(struct radv_pipeline *pipeline)
> {
> - struct radv_shader_variant *vs;
> - vs = radv_pipeline_has_gs(pipeline) ? pipeline->gs_copy_shader : (radv_pipeline_has_tess(pipeline) ? pipeline->shaders[MESA_SHADER_TESS_EVAL] : pipeline->shaders[MESA_SHADER_VERTEX]);
> + if (radv_pipeline_has_gs(pipeline))
> + return &pipeline->gs_copy_shader->info.vs.outinfo;
> + else if (radv_pipeline_has_tess(pipeline))
> + return &pipeline->shaders[MESA_SHADER_TESS_EVAL]->info.tes.outinfo;
> + else
> + return &pipeline->shaders[MESA_SHADER_VERTEX]->info.vs.outinfo;
> +}
>
> - struct ac_vs_output_info *outinfo = &vs->info.vs.outinfo;
> +static void calculate_vgt_gs_mode(struct radv_pipeline *pipeline)
> +{
> + struct ac_vs_output_info *outinfo = get_vs_output_info(pipeline);;
extra ;
>
> pipeline->graphics.vgt_primitiveid_en = false;
> pipeline->graphics.vgt_gs_mode = 0;
> @@ -1430,10 +1437,7 @@ static void calculate_vgt_gs_mode(struct radv_pipeline *pipeline)
>
> static void calculate_pa_cl_vs_out_cntl(struct radv_pipeline *pipeline)
> {
> - struct radv_shader_variant *vs;
> - vs = radv_pipeline_has_gs(pipeline) ? pipeline->gs_copy_shader : (radv_pipeline_has_tess(pipeline) ? pipeline->shaders[MESA_SHADER_TESS_EVAL] : pipeline->shaders[MESA_SHADER_VERTEX]);
> -
> - struct ac_vs_output_info *outinfo = &vs->info.vs.outinfo;
> + struct ac_vs_output_info *outinfo = get_vs_output_info(pipeline);;
extra ;
>
> unsigned clip_dist_mask, cull_dist_mask, total_mask;
> clip_dist_mask = outinfo->clip_dist_mask;
> @@ -1476,13 +1480,10 @@ static uint32_t offset_to_ps_input(uint32_t offset, bool flat_shade)
>
> static void calculate_ps_inputs(struct radv_pipeline *pipeline)
> {
> - struct radv_shader_variant *ps, *vs;
> - struct ac_vs_output_info *outinfo;
> + struct radv_shader_variant *ps;
> + struct ac_vs_output_info *outinfo = get_vs_output_info(pipeline);;
extra ;
With those removed:
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
>
> ps = pipeline->shaders[MESA_SHADER_FRAGMENT];
> - vs = radv_pipeline_has_gs(pipeline) ? pipeline->gs_copy_shader : (radv_pipeline_has_tess(pipeline) ? pipeline->shaders[MESA_SHADER_TESS_EVAL] : pipeline->shaders[MESA_SHADER_VERTEX]);
> -
> - outinfo = &vs->info.vs.outinfo;
>
> unsigned ps_offset = 0;
>
>
More information about the mesa-dev
mailing list