This changes how we index flat_shaded_mask for generic varyings, now it's based on location and not on ps_offset.
Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> --- src/amd/common/ac_nir_to_llvm.c | 2 -- src/amd/common/ac_nir_to_llvm.h | 1 - src/amd/common/ac_shader_info.c | 5 +++++ src/amd/common/ac_shader_info.h | 1 + src/amd/vulkan/radv_pipeline.c | 2 +- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 91323c9849..b9c5f9840b 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -5594,8 +5594,6 @@ handle_fs_inputs(struct radv_shader_context *ctx, interp_fs_input(ctx, index, interp_param, ctx->abi.prim_mask, inputs); - if (!interp_param) - ctx->shader_info->fs.flat_shaded_mask |= 1u << index; ++index; } else if (i == VARYING_SLOT_POS) { for(int i = 0; i < 3; ++i) diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h index a92a094657..a36ad9606a 100644 --- a/src/amd/common/ac_nir_to_llvm.h +++ b/src/amd/common/ac_nir_to_llvm.h @@ -175,7 +175,6 @@ struct ac_shader_variant_info { uint64_t outputs_written; } vs; struct { - uint32_t flat_shaded_mask; bool can_discard; bool early_fragment_test; } fs; diff --git a/src/amd/common/ac_shader_info.c b/src/amd/common/ac_shader_info.c index 0918470cbe..fad4245986 100644 --- a/src/amd/common/ac_shader_info.c +++ b/src/amd/common/ac_shader_info.c @@ -261,6 +261,11 @@ gather_info_input_decl_ps(const nir_shader *nir, const nir_variable *var, } info->input_mask |= ((1ull << attrib_count) - 1) << idx; + + if (idx >= VARYING_SLOT_VAR0 && + info->ps.input_interp_mode[idx] == INTERP_MODE_FLAT) { + info->ps.flat_shaded_mask |= 1u << (idx - VARYING_SLOT_VAR0); + } } static void diff --git a/src/amd/common/ac_shader_info.h b/src/amd/common/ac_shader_info.h index a8e5865119..fb617929fe 100644 --- a/src/amd/common/ac_shader_info.h +++ b/src/amd/common/ac_shader_info.h @@ -63,6 +63,7 @@ struct ac_shader_info { uint8_t input_interp_mode[VARYING_SLOT_VAR31 + 1]; bool uses_persp_centroid; bool uses_persp_center; + uint32_t flat_shaded_mask; } ps; struct { bool uses_grid_size; diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 6849e9fd18..6ae5f81cfb 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2789,7 +2789,7 @@ radv_pipeline_generate_ps_inputs(struct radeon_winsys_cs *cs, continue; } - flat_shade = !!(ps->info.fs.flat_shaded_mask & (1u << ps_offset)); + flat_shade = !!(ps->info.info.ps.flat_shaded_mask & (1u << i)); ps_input_cntl[ps_offset] = offset_to_ps_input(vs_offset, flat_shade); ++ps_offset; -- 2.16.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev