[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