This allows us to remove one nir_foreach_variable loop.

Signed-off-by: Samuel Pitoiset <[email protected]>
---
 src/amd/common/ac_nir_to_llvm.c | 16 ++--------------
 src/amd/common/ac_shader_info.c | 11 ++++++++---
 src/amd/common/ac_shader_info.h |  2 ++
 3 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 9586cd4d46..358e3f04fd 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -5564,20 +5564,8 @@ prepare_interp_optimize(struct radv_shader_context *ctx,
        if (!ctx->options->key.fs.multisample)
                return;
 
-       bool uses_center = false;
-       bool uses_centroid = false;
-       nir_foreach_variable(variable, &nir->inputs) {
-               if (glsl_get_base_type(glsl_without_array(variable->type)) != 
GLSL_TYPE_FLOAT ||
-                   variable->data.sample)
-                       continue;
-
-               if (variable->data.centroid)
-                       uses_centroid = true;
-               else
-                       uses_center = true;
-       }
-
-       if (uses_center && uses_centroid) {
+       if (ctx->shader_info->info.ps.uses_persp_center &&
+           ctx->shader_info->info.ps.uses_persp_centroid) {
                LLVMValueRef sel = LLVMBuildICmp(ctx->ac.builder, LLVMIntSLT, 
ctx->abi.prim_mask, ctx->ac.i32_0, "");
                ctx->persp_centroid = LLVMBuildSelect(ctx->ac.builder, sel, 
ctx->persp_center, ctx->persp_centroid, "");
                ctx->linear_centroid = LLVMBuildSelect(ctx->ac.builder, sel, 
ctx->linear_center, ctx->linear_centroid, "");
diff --git a/src/amd/common/ac_shader_info.c b/src/amd/common/ac_shader_info.c
index 8dda241324..60e3d62e79 100644
--- a/src/amd/common/ac_shader_info.c
+++ b/src/amd/common/ac_shader_info.c
@@ -231,9 +231,6 @@ gather_info_input_decl_ps(const nir_shader *nir, const 
nir_variable *var,
        }
 
        if (glsl_get_base_type(type) == GLSL_TYPE_FLOAT) {
-               if (var->data.sample)
-                       info->ps.force_persample = true;
-
                if (var->data.sample) {
                        info->ps.input_interp_loc[idx] = INTERP_SAMPLE;
                } else if (var->data.centroid) {
@@ -242,6 +239,14 @@ gather_info_input_decl_ps(const nir_shader *nir, const 
nir_variable *var,
                        info->ps.input_interp_loc[idx] = INTERP_CENTER;
                }
 
+               if (info->ps.input_interp_loc[idx] == INTERP_SAMPLE) {
+                       info->ps.force_persample = true;
+               } else if (info->ps.input_interp_loc[idx] == INTERP_CENTROID) {
+                       info->ps.uses_persp_centroid = true;
+               } else {
+                       info->ps.uses_persp_center = true;
+               }
+
                info->ps.input_interp_mode[idx] = var->data.interpolation;
        } else {
                info->ps.input_interp_mode[idx] = INTERP_MODE_FLAT;
diff --git a/src/amd/common/ac_shader_info.h b/src/amd/common/ac_shader_info.h
index 4469e8c5c9..d02841adfe 100644
--- a/src/amd/common/ac_shader_info.h
+++ b/src/amd/common/ac_shader_info.h
@@ -58,6 +58,8 @@ struct ac_shader_info {
                bool layer_input;
                uint8_t input_interp_loc[VARYING_SLOT_VAR31 + 1];
                uint8_t input_interp_mode[VARYING_SLOT_VAR31 + 1];
+               bool uses_persp_centroid;
+               bool uses_persp_center;
        } ps;
        struct {
                bool uses_grid_size;
-- 
2.16.2

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to