Mesa (master): radeonsi: get color interpolation info from shader_info
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Sep 3 02:58:36 UTC 2020
Module: Mesa
Branch: master
Commit: ed9391df3f6fde4cb0ac85f3fa4d5fc4409555a1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed9391df3f6fde4cb0ac85f3fa4d5fc4409555a1
Author: Marek Olšák <marek.olsak at amd.com>
Date: Fri Aug 14 19:13:21 2020 -0400
radeonsi: get color interpolation info from shader_info
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Reviewed-by: Connor Abbott <cwabbott0 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6445>
---
src/gallium/drivers/radeonsi/si_shader.c | 4 ++--
src/gallium/drivers/radeonsi/si_shader.h | 4 +++-
src/gallium/drivers/radeonsi/si_shader_nir.c | 25 +++++++++++++++----------
3 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index b6b11292d7a..0558cda194a 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -2143,8 +2143,8 @@ void si_get_ps_prolog_key(struct si_shader *shader, union si_shader_part_key *ke
}
for (unsigned i = 0; i < 2; i++) {
- unsigned interp = info->input_interpolate[color[i]];
- unsigned location = info->input_interpolate_loc[color[i]];
+ unsigned interp = info->color_interpolate[i];
+ unsigned location = info->color_interpolate_loc[i];
if (!(info->colors_read & (0xf << i * 4)))
continue;
diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h
index b46a48380e0..95b0c050339 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -324,13 +324,15 @@ struct si_shader_info {
ubyte input_semantic_name[PIPE_MAX_SHADER_INPUTS]; /**< TGSI_SEMANTIC_x */
ubyte input_semantic_index[PIPE_MAX_SHADER_INPUTS];
ubyte input_interpolate[PIPE_MAX_SHADER_INPUTS];
- ubyte input_interpolate_loc[PIPE_MAX_SHADER_INPUTS];
ubyte input_usage_mask[PIPE_MAX_SHADER_INPUTS];
ubyte output_semantic_name[PIPE_MAX_SHADER_OUTPUTS]; /**< TGSI_SEMANTIC_x */
ubyte output_semantic_index[PIPE_MAX_SHADER_OUTPUTS];
ubyte output_usagemask[PIPE_MAX_SHADER_OUTPUTS];
ubyte output_streams[PIPE_MAX_SHADER_OUTPUTS];
+ ubyte color_interpolate[2];
+ ubyte color_interpolate_loc[2];
+
ubyte processor;
int constbuf0_num_slots;
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 19c9332408a..c4578d529a6 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -598,6 +598,15 @@ void si_nir_scan_shader(const struct nir_shader *nir, struct si_shader_info *inf
unreachable("Unknow depth layout");
}
}
+
+ info->color_interpolate[0] = tgsi_get_interp_mode(nir->info.fs.color0_interp, true);
+ info->color_interpolate[1] = tgsi_get_interp_mode(nir->info.fs.color1_interp, true);
+ info->color_interpolate_loc[0] = nir->info.fs.color0_sample ? TGSI_INTERPOLATE_LOC_SAMPLE :
+ nir->info.fs.color0_centroid ? TGSI_INTERPOLATE_LOC_CENTROID :
+ TGSI_INTERPOLATE_LOC_CENTER;
+ info->color_interpolate_loc[1] = nir->info.fs.color1_sample ? TGSI_INTERPOLATE_LOC_SAMPLE :
+ nir->info.fs.color1_centroid ? TGSI_INTERPOLATE_LOC_CENTROID :
+ TGSI_INTERPOLATE_LOC_CENTER;
}
if (gl_shader_stage_is_compute(nir->info.stage)) {
@@ -647,16 +656,6 @@ void si_nir_scan_shader(const struct nir_shader *nir, struct si_shader_info *inf
if (semantic_name == TGSI_SEMANTIC_PRIMID)
info->uses_primid = true;
- if (semantic_name == TGSI_SEMANTIC_COLOR) {
- /* We only need this for color inputs. */
- if (variable->data.sample)
- info->input_interpolate_loc[i] = TGSI_INTERPOLATE_LOC_SAMPLE;
- else if (variable->data.centroid)
- info->input_interpolate_loc[i] = TGSI_INTERPOLATE_LOC_CENTROID;
- else
- info->input_interpolate_loc[i] = TGSI_INTERPOLATE_LOC_CENTER;
- }
-
enum glsl_base_type base_type = glsl_get_base_type(glsl_without_array(variable->type));
switch (variable->data.interpolation) {
@@ -853,8 +852,14 @@ static void si_nir_lower_color(nir_shader *nir)
if (var->data.location == VARYING_SLOT_COL0) {
def = nir_load_color0(&b);
+ nir->info.fs.color0_interp = var->data.interpolation;
+ nir->info.fs.color0_sample = var->data.sample;
+ nir->info.fs.color0_centroid = var->data.centroid;
} else if (var->data.location == VARYING_SLOT_COL1) {
def = nir_load_color1(&b);
+ nir->info.fs.color1_interp = var->data.interpolation;
+ nir->info.fs.color1_sample = var->data.sample;
+ nir->info.fs.color1_centroid = var->data.centroid;
} else {
continue;
}
More information about the mesa-commit
mailing list