[Mesa-dev] [RFC PATCH 1/9] ac/shader: scan input interp mode and location

Samuel Pitoiset samuel.pitoiset at gmail.com
Thu Mar 8 14:08:03 UTC 2018


Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 src/amd/common/ac_nir_to_llvm.c |  9 ++-------
 src/amd/common/ac_shader_info.c | 12 ++++++++++++
 src/amd/common/ac_shader_info.h |  2 ++
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index c785244dcc..9586cd4d46 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -5538,13 +5538,8 @@ handle_fs_input_decl(struct radv_shader_context *ctx,
 	ctx->input_mask |= ((1ull << attrib_count) - 1) << variable->data.location;
 
 	if (glsl_get_base_type(glsl_without_array(variable->type)) == GLSL_TYPE_FLOAT) {
-		unsigned interp_type;
-		if (variable->data.sample)
-			interp_type = INTERP_SAMPLE;
-		else if (variable->data.centroid)
-			interp_type = INTERP_CENTROID;
-		else
-			interp_type = INTERP_CENTER;
+		unsigned interp_type =
+			ctx->shader_info->info.ps.input_interp_loc[idx];
 
 		interp = lookup_interp_param(&ctx->abi, variable->data.interpolation, interp_type);
 	} else
diff --git a/src/amd/common/ac_shader_info.c b/src/amd/common/ac_shader_info.c
index 883358faaa..8dda241324 100644
--- a/src/amd/common/ac_shader_info.c
+++ b/src/amd/common/ac_shader_info.c
@@ -233,6 +233,18 @@ 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) {
+			info->ps.input_interp_loc[idx] = INTERP_CENTROID;
+		} else {
+			info->ps.input_interp_loc[idx] = INTERP_CENTER;
+		}
+
+		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 12a1dcf915..4469e8c5c9 100644
--- a/src/amd/common/ac_shader_info.h
+++ b/src/amd/common/ac_shader_info.h
@@ -56,6 +56,8 @@ struct ac_shader_info {
 		bool has_pcoord;
 		bool prim_id_input;
 		bool layer_input;
+		uint8_t input_interp_loc[VARYING_SLOT_VAR31 + 1];
+		uint8_t input_interp_mode[VARYING_SLOT_VAR31 + 1];
 	} ps;
 	struct {
 		bool uses_grid_size;
-- 
2.16.2



More information about the mesa-dev mailing list