nir/lower_atomics_to_ssbo: Also lower barriers

This is more correct for a pass which is supposed to completely lower
away atomic counters.  It also lets us stop supporting atomic counter
barriers in most of the drivers.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3307>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3307>
This commit is contained in:
Jason Ekstrand
2020-01-07 19:22:13 -06:00
committed by Marge Bot
parent e40b11bbcb
commit d3737002ee
10 changed files with 7 additions and 15 deletions

View File

@@ -4949,9 +4949,6 @@ void emit_memory_barrier(isel_context *ctx, nir_intrinsic_instr *instr) {
case nir_intrinsic_memory_barrier: case nir_intrinsic_memory_barrier:
bld.barrier(aco_opcode::p_memory_barrier_all); bld.barrier(aco_opcode::p_memory_barrier_all);
break; break;
case nir_intrinsic_memory_barrier_atomic_counter:
bld.barrier(aco_opcode::p_memory_barrier_atomic);
break;
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
bld.barrier(aco_opcode::p_memory_barrier_buffer); bld.barrier(aco_opcode::p_memory_barrier_buffer);
break; break;
@@ -5723,7 +5720,6 @@ void visit_intrinsic(isel_context *ctx, nir_intrinsic_instr *instr)
} }
case nir_intrinsic_group_memory_barrier: case nir_intrinsic_group_memory_barrier:
case nir_intrinsic_memory_barrier: case nir_intrinsic_memory_barrier:
case nir_intrinsic_memory_barrier_atomic_counter:
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
case nir_intrinsic_memory_barrier_image: case nir_intrinsic_memory_barrier_image:
case nir_intrinsic_memory_barrier_shared: case nir_intrinsic_memory_barrier_shared:

View File

@@ -2876,7 +2876,6 @@ static void emit_membar(struct ac_llvm_context *ac,
case nir_intrinsic_group_memory_barrier: case nir_intrinsic_group_memory_barrier:
wait_flags = AC_WAIT_LGKM | AC_WAIT_VLOAD | AC_WAIT_VSTORE; wait_flags = AC_WAIT_LGKM | AC_WAIT_VLOAD | AC_WAIT_VSTORE;
break; break;
case nir_intrinsic_memory_barrier_atomic_counter:
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
case nir_intrinsic_memory_barrier_image: case nir_intrinsic_memory_barrier_image:
wait_flags = AC_WAIT_VLOAD | AC_WAIT_VSTORE; wait_flags = AC_WAIT_VLOAD | AC_WAIT_VSTORE;
@@ -3547,7 +3546,6 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
break; break;
case nir_intrinsic_memory_barrier: case nir_intrinsic_memory_barrier:
case nir_intrinsic_group_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_buffer:
case nir_intrinsic_memory_barrier_image: case nir_intrinsic_memory_barrier_image:
case nir_intrinsic_memory_barrier_shared: case nir_intrinsic_memory_barrier_shared:

View File

@@ -2243,7 +2243,6 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr)
} }
case nir_intrinsic_memory_barrier: case nir_intrinsic_memory_barrier:
case nir_intrinsic_memory_barrier_atomic_counter:
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
case nir_intrinsic_memory_barrier_image: case nir_intrinsic_memory_barrier_image:
case nir_intrinsic_memory_barrier_shared: case nir_intrinsic_memory_barrier_shared:

View File

@@ -47,6 +47,13 @@ lower_instr(nir_intrinsic_instr *instr, unsigned ssbo_offset, nir_builder *b)
b->cursor = nir_before_instr(&instr->instr); b->cursor = nir_before_instr(&instr->instr);
switch (instr->intrinsic) { switch (instr->intrinsic) {
case nir_intrinsic_memory_barrier_atomic_counter:
/* Atomic counters are now SSBOs so memoryBarrierAtomicCounter() is now
* memoryBarrierBuffer().
*/
instr->intrinsic = nir_intrinsic_memory_barrier_buffer;
return true;
case nir_intrinsic_ssbo_atomic_add: case nir_intrinsic_ssbo_atomic_add:
case nir_intrinsic_ssbo_atomic_imin: case nir_intrinsic_ssbo_atomic_imin:
case nir_intrinsic_ssbo_atomic_umin: case nir_intrinsic_ssbo_atomic_umin:

View File

@@ -311,7 +311,6 @@ combine_stores_block(struct combine_stores_state *state, nir_block *block)
nir_var_mem_shared); nir_var_mem_shared);
break; break;
case nir_intrinsic_memory_barrier_atomic_counter:
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
combine_stores_with_modes(state, nir_var_mem_ssbo); combine_stores_with_modes(state, nir_var_mem_ssbo);
break; break;

View File

@@ -808,7 +808,6 @@ copy_prop_vars_block(struct copy_prop_var_state *state,
break; break;
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
case nir_intrinsic_memory_barrier_atomic_counter:
if (debug) dump_instr(instr); if (debug) dump_instr(instr);
apply_barrier_for_modes(copies, nir_var_mem_ssbo); apply_barrier_for_modes(copies, nir_var_mem_ssbo);

View File

@@ -140,7 +140,6 @@ remove_dead_write_vars_local(void *mem_ctx, nir_block *block)
} }
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
case nir_intrinsic_memory_barrier_atomic_counter:
clear_unused_for_modes(&unused_writes, nir_var_mem_ssbo); clear_unused_for_modes(&unused_writes, nir_var_mem_ssbo);
break; break;

View File

@@ -1174,7 +1174,6 @@ emit_intrinsic_barrier(struct ir3_context *ctx, nir_intrinsic_instr *intr)
IR3_BARRIER_IMAGE_R | IR3_BARRIER_IMAGE_W | IR3_BARRIER_IMAGE_R | IR3_BARRIER_IMAGE_W |
IR3_BARRIER_BUFFER_R | IR3_BARRIER_BUFFER_W; IR3_BARRIER_BUFFER_R | IR3_BARRIER_BUFFER_W;
break; break;
case nir_intrinsic_memory_barrier_atomic_counter:
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
barrier = ir3_FENCE(b); barrier = ir3_FENCE(b);
barrier->cat7.g = true; barrier->cat7.g = true;
@@ -1644,7 +1643,6 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
case nir_intrinsic_control_barrier: case nir_intrinsic_control_barrier:
case nir_intrinsic_memory_barrier: case nir_intrinsic_memory_barrier:
case nir_intrinsic_group_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_buffer:
case nir_intrinsic_memory_barrier_image: case nir_intrinsic_memory_barrier_image:
case nir_intrinsic_memory_barrier_shared: case nir_intrinsic_memory_barrier_shared:

View File

@@ -652,7 +652,6 @@ Converter::getSubOp(nir_intrinsic_op op)
case nir_intrinsic_group_memory_barrier: case nir_intrinsic_group_memory_barrier:
case nir_intrinsic_memory_barrier: case nir_intrinsic_memory_barrier:
case nir_intrinsic_memory_barrier_atomic_counter:
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
case nir_intrinsic_memory_barrier_image: case nir_intrinsic_memory_barrier_image:
return NV50_IR_SUBOP_MEMBAR(M, GL); return NV50_IR_SUBOP_MEMBAR(M, GL);
@@ -2654,7 +2653,6 @@ Converter::visit(nir_intrinsic_instr *insn)
} }
case nir_intrinsic_group_memory_barrier: case nir_intrinsic_group_memory_barrier:
case nir_intrinsic_memory_barrier: case nir_intrinsic_memory_barrier:
case nir_intrinsic_memory_barrier_atomic_counter:
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
case nir_intrinsic_memory_barrier_image: case nir_intrinsic_memory_barrier_image:
case nir_intrinsic_memory_barrier_shared: { case nir_intrinsic_memory_barrier_shared: {

View File

@@ -4274,7 +4274,6 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
case nir_intrinsic_scoped_memory_barrier: case nir_intrinsic_scoped_memory_barrier:
case nir_intrinsic_group_memory_barrier: case nir_intrinsic_group_memory_barrier:
case nir_intrinsic_memory_barrier_shared: case nir_intrinsic_memory_barrier_shared:
case nir_intrinsic_memory_barrier_atomic_counter:
case nir_intrinsic_memory_barrier_buffer: case nir_intrinsic_memory_barrier_buffer:
case nir_intrinsic_memory_barrier_image: case nir_intrinsic_memory_barrier_image:
case nir_intrinsic_memory_barrier: { case nir_intrinsic_memory_barrier: {