[Mesa-dev] [PATCH] intel/compiler: emit actual barriers for working-group level barriers
Iago Toral
itoral at igalia.com
Mon Jul 9 09:09:55 UTC 2018
Any feedback about this? We need this to fix some new CTS tests.
On Thu, 2018-06-21 at 13:52 +0200, Iago Toral Quiroga wrote:
> Until now we have assumed that we could skip emitting these barriers
> in the general case based on empirical testing and a few assumptions
> detailed in a comment in the driver code, however, recent CTS tests
> have showed that we actually need them to produce correct behavior.
> ---
> src/intel/compiler/brw_fs_nir.cpp | 25 ++-----------------------
> 1 file changed, 2 insertions(+), 23 deletions(-)
>
> diff --git a/src/intel/compiler/brw_fs_nir.cpp
> b/src/intel/compiler/brw_fs_nir.cpp
> index 0abb4798e70..d0648c89865 100644
> --- a/src/intel/compiler/brw_fs_nir.cpp
> +++ b/src/intel/compiler/brw_fs_nir.cpp
> @@ -3884,6 +3884,8 @@ fs_visitor::nir_emit_intrinsic(const fs_builder
> &bld, nir_intrinsic_instr *instr
> break;
> }
>
> + case nir_intrinsic_group_memory_barrier:
> + case nir_intrinsic_memory_barrier_shared:
> case nir_intrinsic_memory_barrier_atomic_counter:
> case nir_intrinsic_memory_barrier_buffer:
> case nir_intrinsic_memory_barrier_image:
> @@ -3895,29 +3897,6 @@ fs_visitor::nir_emit_intrinsic(const
> fs_builder &bld, nir_intrinsic_instr *instr
> break;
> }
>
> - 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: {
> /* We cannot do anything if there is an event, so ignore it
> for now */
> const fs_reg shader_clock = get_timestamp(bld);
More information about the mesa-dev
mailing list