As far as I understand, this might overflow and shifted by one
if for example, gl_PrimitiveID is used with flat generic varyings.

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
 src/amd/common/ac_nir_to_llvm.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index ea51c3a54a..d4fdb8e8f4 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -5545,6 +5545,7 @@ handle_fs_inputs(struct radv_shader_context *ctx,
        nir_foreach_variable(variable, &nir->inputs)
                handle_fs_input_decl(ctx, variable);
 
+       uint64_t flat_shaded_mask = 0;
        unsigned index = 0;
 
        if (ctx->shader_info->info.ps.uses_input_attachments ||
@@ -5564,8 +5565,8 @@ 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;
+                       if (i >= VARYING_SLOT_VAR0 && !interp_param)
+                               flat_shaded_mask |= 1u << i;
                        ++index;
                } else if (i == VARYING_SLOT_POS) {
                        for(int i = 0; i < 3; ++i)
@@ -5575,7 +5576,9 @@ handle_fs_inputs(struct radv_shader_context *ctx,
                                                  ctx->abi.frag_pos[3]);
                }
        }
+
        ctx->shader_info->fs.num_interp = index;
+       ctx->shader_info->fs.flat_shaded_mask = flat_shaded_mask >> 
VARYING_SLOT_VAR0;
        ctx->shader_info->fs.input_mask = ctx->input_mask >> VARYING_SLOT_VAR0;
 
        if (ctx->shader_info->info.needs_multiview_view_index)
-- 
2.16.2

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

Reply via email to