[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