i965/nir/fs: Add comment for no-op memory barrier functions
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 6 Nov 2015 21:19:56 +0000 (13:19 -0800)
committerJordan Justen <jordan.l.justen@intel.com>
Fri, 6 Nov 2015 21:19:56 +0000 (13:19 -0800)
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/brw_fs_nir.cpp

index 5d2dd18552aa66af31db19e0b6f11e2e7ae10e0e..02b9f5bbc8ae5a323a64093ea67bcf9b3e8f60c5 100644 (file)
@@ -1709,6 +1709,25 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
 
    case nir_intrinsic_group_memory_barrier:
    case nir_intrinsic_memory_barrier_shared:
+      /* We treat these workgroup-level barriers as no-ops.  This should be
+       * safe at present and as long as:
+       *
+       *  - Memory access instructions are not subsequently reordered by the
+       *    compiler back-end.
+       *
+       *  - All threads from a given compute shader workgroup fit within a
+       *    single subslice and therefore talk to the same HDC shared unit
+       *    what supposedly guarantees ordering and coherency between threads
+       *    from the same workgroup.  This may change in the future when we
+       *    start splitting workgroups across multiple subslices.
+       *
+       *  - The context is not in fault-and-stream mode, which could cause
+       *    memory transactions (including to SLM) prior to the barrier to be
+       *    replayed after the barrier if a pagefault occurs.  This shouldn't
+       *    be a problem up to and including SKL because fault-and-stream is
+       *    not usable due to hardware issues, but that's likely to change in
+       *    the future.
+       */
       break;
 
    case nir_intrinsic_shader_clock: {