[Mesa-dev] [RFC PATCH 5/9] ac/shader: scan flat_shaded_mask

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


This changes how we index flat_shaded_mask for generic varyings,
now it's based on location and not on ps_offset.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 src/amd/common/ac_nir_to_llvm.c | 2 --
 src/amd/common/ac_nir_to_llvm.h | 1 -
 src/amd/common/ac_shader_info.c | 5 +++++
 src/amd/common/ac_shader_info.h | 1 +
 src/amd/vulkan/radv_pipeline.c  | 2 +-
 5 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 91323c9849..b9c5f9840b 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -5594,8 +5594,6 @@ 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;
 			++index;
 		} else if (i == VARYING_SLOT_POS) {
 			for(int i = 0; i < 3; ++i)
diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h
index a92a094657..a36ad9606a 100644
--- a/src/amd/common/ac_nir_to_llvm.h
+++ b/src/amd/common/ac_nir_to_llvm.h
@@ -175,7 +175,6 @@ struct ac_shader_variant_info {
 			uint64_t outputs_written;
 		} vs;
 		struct {
-			uint32_t flat_shaded_mask;
 			bool can_discard;
 			bool early_fragment_test;
 		} fs;
diff --git a/src/amd/common/ac_shader_info.c b/src/amd/common/ac_shader_info.c
index 0918470cbe..fad4245986 100644
--- a/src/amd/common/ac_shader_info.c
+++ b/src/amd/common/ac_shader_info.c
@@ -261,6 +261,11 @@ gather_info_input_decl_ps(const nir_shader *nir, const nir_variable *var,
 	}
 
 	info->input_mask |= ((1ull << attrib_count) - 1) << idx;
+
+	if (idx >= VARYING_SLOT_VAR0 &&
+	    info->ps.input_interp_mode[idx] == INTERP_MODE_FLAT) {
+		info->ps.flat_shaded_mask |= 1u << (idx - VARYING_SLOT_VAR0);
+	}
 }
 
 static void
diff --git a/src/amd/common/ac_shader_info.h b/src/amd/common/ac_shader_info.h
index a8e5865119..fb617929fe 100644
--- a/src/amd/common/ac_shader_info.h
+++ b/src/amd/common/ac_shader_info.h
@@ -63,6 +63,7 @@ struct ac_shader_info {
 		uint8_t input_interp_mode[VARYING_SLOT_VAR31 + 1];
 		bool uses_persp_centroid;
 		bool uses_persp_center;
+		uint32_t flat_shaded_mask;
 	} ps;
 	struct {
 		bool uses_grid_size;
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 6849e9fd18..6ae5f81cfb 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -2789,7 +2789,7 @@ radv_pipeline_generate_ps_inputs(struct radeon_winsys_cs *cs,
 			continue;
 		}
 
-		flat_shade = !!(ps->info.fs.flat_shaded_mask & (1u << ps_offset));
+		flat_shade = !!(ps->info.info.ps.flat_shaded_mask & (1u << i));
 
 		ps_input_cntl[ps_offset] = offset_to_ps_input(vs_offset, flat_shade);
 		++ps_offset;
-- 
2.16.2



More information about the mesa-dev mailing list