radeonsi: apply fbfetch/indirect_descriptor to uses_vmem_load_other earlier
authorMarek Olšák <marek.olsak@amd.com>
Thu, 13 Jan 2022 03:58:32 +0000 (22:58 -0500)
committerMarge Bot <emma+marge@anholt.net>
Tue, 18 Jan 2022 11:11:08 +0000 (11:11 +0000)
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14528>

src/gallium/drivers/radeonsi/si_shader_info.c
src/gallium/drivers/radeonsi/si_state_shaders.cpp

index 6099d13..7e7108a 100644 (file)
@@ -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];
index d45b0c7..4544679 100644 (file)
@@ -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. */