compiler, nir: Add and set barrier metadata
Useful for determining whether certain optimizations are legal for a compute shader (e.g. optimizing workgroup size in the driver). Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6312>
This commit is contained in:
parent
2bd2a03657
commit
9f934e922d
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue