diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index f8edfbd5a1e..7cc0fb9e590 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -712,6 +712,28 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader, update_memory_written_for_deref(shader, nir_src_as_deref(instr->src[0])); break; + case nir_intrinsic_control_barrier: + shader->info.uses_control_barrier = true; + break; + + case nir_intrinsic_scoped_barrier: + shader->info.uses_control_barrier |= + nir_intrinsic_execution_scope(instr) != NIR_SCOPE_NONE; + + shader->info.uses_memory_barrier |= + nir_intrinsic_memory_scope(instr) != NIR_SCOPE_NONE; + break; + + case nir_intrinsic_memory_barrier: + case nir_intrinsic_group_memory_barrier: + case nir_intrinsic_memory_barrier_atomic_counter: + case nir_intrinsic_memory_barrier_buffer: + case nir_intrinsic_memory_barrier_image: + case nir_intrinsic_memory_barrier_shared: + case nir_intrinsic_memory_barrier_tcs_patch: + shader->info.uses_memory_barrier = true; + break; + default: break; } diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index 7a73dcc8c19..0d7183f96e8 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -226,6 +226,10 @@ typedef struct shader_info { /* Whether gl_Layer is viewport-relative */ bool layer_viewport_relative:1; + /* Whether explicit barriers are used */ + bool uses_control_barrier : 1; + bool uses_memory_barrier : 1; + union { struct { /* Which inputs are doubles */