intel/fs: Ignore SLM fences if shared is unused
authorJason Ekstrand <jason@jlekstrand.net>
Fri, 17 Sep 2021 12:45:46 +0000 (07:45 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 29 Sep 2021 20:52:54 +0000 (20:52 +0000)
Found this nugget while looking at the ACO driver.  It seems sensible to
avoid SLM fences if there is no SLM.  This also makes the check depend
on SLM usage rather than just shader stage which will be useful if we
ever implement task/mesh because task shaders also have SLM.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13092>

src/intel/compiler/brw_fs_nir.cpp

index 4c1c637..5a02f48 100644 (file)
@@ -4477,8 +4477,11 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
          break;
       }
 
-      if (stage != MESA_SHADER_COMPUTE && stage != MESA_SHADER_KERNEL)
+      if (nir->info.shared_size > 0) {
+         assert(gl_shader_stage_uses_workgroup(stage));
+      } else {
          slm_fence = false;
+      }
 
       /* If the workgroup fits in a single HW thread, the messages for SLM are
        * processed in-order and the shader itself is already synchronized so