From e5dd32a48cf778068b61fdc7ca2a928f7c3e9696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Wed, 12 Jan 2022 22:58:32 -0500 Subject: [PATCH] radeonsi: apply fbfetch/indirect_descriptor to uses_vmem_load_other earlier Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/radeonsi/si_shader_info.c | 4 ++++ src/gallium/drivers/radeonsi/si_state_shaders.cpp | 7 ++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader_info.c b/src/gallium/drivers/radeonsi/si_shader_info.c index 6099d13e13d..7e7108ae409 100644 --- a/src/gallium/drivers/radeonsi/si_shader_info.c +++ b/src/gallium/drivers/radeonsi/si_shader_info.c @@ -687,6 +687,8 @@ void si_nir_scan_shader(const struct nir_shader *nir, struct si_shader_info *inf BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_SAMPLE_MASK_IN) || BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_HELPER_INVOCATION)); + info->uses_vmem_load_other |= info->base.fs.uses_fbfetch_output; + /* Add both front and back color inputs. */ unsigned num_inputs_with_colors = info->num_inputs; for (unsigned back = 0; back < 2; back++) { @@ -709,6 +711,8 @@ void si_nir_scan_shader(const struct nir_shader *nir, struct si_shader_info *inf } } + info->uses_vmem_load_other |= info->uses_indirect_descriptor; + /* Trim output read masks based on write masks. */ for (unsigned i = 0; i < info->num_outputs; i++) info->output_readmask[i] &= info->output_usagemask[i]; diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp index d45b0c766be..454467946b3 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp @@ -511,16 +511,13 @@ bool si_shader_mem_ordered(struct si_shader *shader) bool sampler_or_bvh = info->uses_vmem_sampler_or_bvh; bool other = info->uses_vmem_load_other || - info->uses_indirect_descriptor || shader->config.scratch_bytes_per_wave || (info->stage == MESA_SHADER_FRAGMENT && - (info->base.fs.uses_fbfetch_output || - shader->key.ps.part.prolog.poly_stipple)); + shader->key.ps.part.prolog.poly_stipple); if (prev_info) { sampler_or_bvh |= prev_info->uses_vmem_sampler_or_bvh; - other |= prev_info->uses_vmem_load_other || - prev_info->uses_indirect_descriptor; + other |= prev_info->uses_vmem_load_other; } /* Return true if both types of VMEM that return something are used. */