intel: switch over to unified atomics
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Jesse Natalie <jenatali@microsoft.com> Reviewed-by: Rohan Garg <rohan.garg@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23004>
This commit is contained in:

committed by
Marge Bot

parent
8e7df8ab37
commit
952a523abb
@@ -3683,19 +3683,8 @@ fs_visitor::nir_emit_cs_intrinsic(const fs_builder &bld,
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_shared_atomic_add:
|
||||
case nir_intrinsic_shared_atomic_imin:
|
||||
case nir_intrinsic_shared_atomic_umin:
|
||||
case nir_intrinsic_shared_atomic_imax:
|
||||
case nir_intrinsic_shared_atomic_umax:
|
||||
case nir_intrinsic_shared_atomic_and:
|
||||
case nir_intrinsic_shared_atomic_or:
|
||||
case nir_intrinsic_shared_atomic_xor:
|
||||
case nir_intrinsic_shared_atomic_exchange:
|
||||
case nir_intrinsic_shared_atomic_comp_swap:
|
||||
case nir_intrinsic_shared_atomic_fmin:
|
||||
case nir_intrinsic_shared_atomic_fmax:
|
||||
case nir_intrinsic_shared_atomic_fcomp_swap:
|
||||
case nir_intrinsic_shared_atomic:
|
||||
case nir_intrinsic_shared_atomic_swap:
|
||||
nir_emit_surface_atomic(bld, instr, brw_imm_ud(GFX7_BTI_SLM));
|
||||
break;
|
||||
|
||||
@@ -4111,28 +4100,12 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
|
||||
switch (instr->intrinsic) {
|
||||
case nir_intrinsic_image_load:
|
||||
case nir_intrinsic_image_store:
|
||||
case nir_intrinsic_image_atomic_add:
|
||||
case nir_intrinsic_image_atomic_imin:
|
||||
case nir_intrinsic_image_atomic_umin:
|
||||
case nir_intrinsic_image_atomic_imax:
|
||||
case nir_intrinsic_image_atomic_umax:
|
||||
case nir_intrinsic_image_atomic_and:
|
||||
case nir_intrinsic_image_atomic_or:
|
||||
case nir_intrinsic_image_atomic_xor:
|
||||
case nir_intrinsic_image_atomic_exchange:
|
||||
case nir_intrinsic_image_atomic_comp_swap:
|
||||
case nir_intrinsic_image_atomic:
|
||||
case nir_intrinsic_image_atomic_swap:
|
||||
case nir_intrinsic_bindless_image_load:
|
||||
case nir_intrinsic_bindless_image_store:
|
||||
case nir_intrinsic_bindless_image_atomic_add:
|
||||
case nir_intrinsic_bindless_image_atomic_imin:
|
||||
case nir_intrinsic_bindless_image_atomic_umin:
|
||||
case nir_intrinsic_bindless_image_atomic_imax:
|
||||
case nir_intrinsic_bindless_image_atomic_umax:
|
||||
case nir_intrinsic_bindless_image_atomic_and:
|
||||
case nir_intrinsic_bindless_image_atomic_or:
|
||||
case nir_intrinsic_bindless_image_atomic_xor:
|
||||
case nir_intrinsic_bindless_image_atomic_exchange:
|
||||
case nir_intrinsic_bindless_image_atomic_comp_swap: {
|
||||
case nir_intrinsic_bindless_image_atomic:
|
||||
case nir_intrinsic_bindless_image_atomic_swap: {
|
||||
/* Get some metadata from the image intrinsic. */
|
||||
const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic];
|
||||
|
||||
@@ -4141,16 +4114,8 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
|
||||
switch (instr->intrinsic) {
|
||||
case nir_intrinsic_image_load:
|
||||
case nir_intrinsic_image_store:
|
||||
case nir_intrinsic_image_atomic_add:
|
||||
case nir_intrinsic_image_atomic_imin:
|
||||
case nir_intrinsic_image_atomic_umin:
|
||||
case nir_intrinsic_image_atomic_imax:
|
||||
case nir_intrinsic_image_atomic_umax:
|
||||
case nir_intrinsic_image_atomic_and:
|
||||
case nir_intrinsic_image_atomic_or:
|
||||
case nir_intrinsic_image_atomic_xor:
|
||||
case nir_intrinsic_image_atomic_exchange:
|
||||
case nir_intrinsic_image_atomic_comp_swap:
|
||||
case nir_intrinsic_image_atomic:
|
||||
case nir_intrinsic_image_atomic_swap:
|
||||
srcs[SURFACE_LOGICAL_SRC_SURFACE] =
|
||||
get_nir_image_intrinsic_image(bld, instr);
|
||||
break;
|
||||
@@ -4805,20 +4770,8 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_global_atomic_add:
|
||||
case nir_intrinsic_global_atomic_imin:
|
||||
case nir_intrinsic_global_atomic_umin:
|
||||
case nir_intrinsic_global_atomic_imax:
|
||||
case nir_intrinsic_global_atomic_umax:
|
||||
case nir_intrinsic_global_atomic_and:
|
||||
case nir_intrinsic_global_atomic_or:
|
||||
case nir_intrinsic_global_atomic_xor:
|
||||
case nir_intrinsic_global_atomic_exchange:
|
||||
case nir_intrinsic_global_atomic_comp_swap:
|
||||
case nir_intrinsic_global_atomic_fadd:
|
||||
case nir_intrinsic_global_atomic_fmin:
|
||||
case nir_intrinsic_global_atomic_fmax:
|
||||
case nir_intrinsic_global_atomic_fcomp_swap:
|
||||
case nir_intrinsic_global_atomic:
|
||||
case nir_intrinsic_global_atomic_swap:
|
||||
nir_emit_global_atomic(bld, instr);
|
||||
break;
|
||||
|
||||
@@ -5033,20 +4986,8 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_ssbo_atomic_add:
|
||||
case nir_intrinsic_ssbo_atomic_imin:
|
||||
case nir_intrinsic_ssbo_atomic_umin:
|
||||
case nir_intrinsic_ssbo_atomic_imax:
|
||||
case nir_intrinsic_ssbo_atomic_umax:
|
||||
case nir_intrinsic_ssbo_atomic_and:
|
||||
case nir_intrinsic_ssbo_atomic_or:
|
||||
case nir_intrinsic_ssbo_atomic_xor:
|
||||
case nir_intrinsic_ssbo_atomic_exchange:
|
||||
case nir_intrinsic_ssbo_atomic_comp_swap:
|
||||
case nir_intrinsic_ssbo_atomic_fadd:
|
||||
case nir_intrinsic_ssbo_atomic_fmin:
|
||||
case nir_intrinsic_ssbo_atomic_fmax:
|
||||
case nir_intrinsic_ssbo_atomic_fcomp_swap:
|
||||
case nir_intrinsic_ssbo_atomic:
|
||||
case nir_intrinsic_ssbo_atomic_swap:
|
||||
nir_emit_surface_atomic(bld, instr,
|
||||
get_nir_ssbo_intrinsic_index(bld, instr));
|
||||
break;
|
||||
|
@@ -932,6 +932,8 @@ brw_preprocess_nir(const struct brw_compiler *compiler, nir_shader *nir,
|
||||
|
||||
OPT(nir_lower_frexp);
|
||||
|
||||
OPT(nir_lower_legacy_atomics);
|
||||
|
||||
if (is_scalar) {
|
||||
OPT(nir_lower_alu_to_scalar, NULL, NULL);
|
||||
}
|
||||
@@ -1897,26 +1899,19 @@ brw_cmod_for_nir_comparison(nir_op op)
|
||||
enum lsc_opcode
|
||||
lsc_aop_for_nir_intrinsic(const nir_intrinsic_instr *atomic)
|
||||
{
|
||||
switch (atomic->intrinsic) {
|
||||
#define AOP_CASE(atom) \
|
||||
case nir_intrinsic_image_atomic_##atom: \
|
||||
case nir_intrinsic_bindless_image_atomic_##atom: \
|
||||
case nir_intrinsic_ssbo_atomic_##atom: \
|
||||
case nir_intrinsic_shared_atomic_##atom: \
|
||||
case nir_intrinsic_global_atomic_##atom
|
||||
|
||||
AOP_CASE(add): {
|
||||
switch (nir_intrinsic_atomic_op(atomic)) {
|
||||
case nir_atomic_op_iadd: {
|
||||
unsigned src_idx;
|
||||
switch (atomic->intrinsic) {
|
||||
case nir_intrinsic_image_atomic_add:
|
||||
case nir_intrinsic_bindless_image_atomic_add:
|
||||
case nir_intrinsic_image_atomic:
|
||||
case nir_intrinsic_bindless_image_atomic:
|
||||
src_idx = 3;
|
||||
break;
|
||||
case nir_intrinsic_ssbo_atomic_add:
|
||||
case nir_intrinsic_ssbo_atomic:
|
||||
src_idx = 2;
|
||||
break;
|
||||
case nir_intrinsic_shared_atomic_add:
|
||||
case nir_intrinsic_global_atomic_add:
|
||||
case nir_intrinsic_shared_atomic:
|
||||
case nir_intrinsic_global_atomic:
|
||||
src_idx = 1;
|
||||
break;
|
||||
default:
|
||||
@@ -1933,28 +1928,20 @@ lsc_aop_for_nir_intrinsic(const nir_intrinsic_instr *atomic)
|
||||
return LSC_OP_ATOMIC_ADD;
|
||||
}
|
||||
|
||||
AOP_CASE(imin): return LSC_OP_ATOMIC_MIN;
|
||||
AOP_CASE(umin): return LSC_OP_ATOMIC_UMIN;
|
||||
AOP_CASE(imax): return LSC_OP_ATOMIC_MAX;
|
||||
AOP_CASE(umax): return LSC_OP_ATOMIC_UMAX;
|
||||
AOP_CASE(and): return LSC_OP_ATOMIC_AND;
|
||||
AOP_CASE(or): return LSC_OP_ATOMIC_OR;
|
||||
AOP_CASE(xor): return LSC_OP_ATOMIC_XOR;
|
||||
AOP_CASE(exchange): return LSC_OP_ATOMIC_STORE;
|
||||
AOP_CASE(comp_swap): return LSC_OP_ATOMIC_CMPXCHG;
|
||||
case nir_atomic_op_imin: return LSC_OP_ATOMIC_MIN;
|
||||
case nir_atomic_op_umin: return LSC_OP_ATOMIC_UMIN;
|
||||
case nir_atomic_op_imax: return LSC_OP_ATOMIC_MAX;
|
||||
case nir_atomic_op_umax: return LSC_OP_ATOMIC_UMAX;
|
||||
case nir_atomic_op_iand: return LSC_OP_ATOMIC_AND;
|
||||
case nir_atomic_op_ior: return LSC_OP_ATOMIC_OR;
|
||||
case nir_atomic_op_ixor: return LSC_OP_ATOMIC_XOR;
|
||||
case nir_atomic_op_xchg: return LSC_OP_ATOMIC_STORE;
|
||||
case nir_atomic_op_cmpxchg: return LSC_OP_ATOMIC_CMPXCHG;
|
||||
|
||||
#undef AOP_CASE
|
||||
#define AOP_CASE(atom) \
|
||||
case nir_intrinsic_ssbo_atomic_##atom: \
|
||||
case nir_intrinsic_shared_atomic_##atom: \
|
||||
case nir_intrinsic_global_atomic_##atom
|
||||
|
||||
AOP_CASE(fmin): return LSC_OP_ATOMIC_FMIN;
|
||||
AOP_CASE(fmax): return LSC_OP_ATOMIC_FMAX;
|
||||
AOP_CASE(fcomp_swap): return LSC_OP_ATOMIC_FCMPXCHG;
|
||||
AOP_CASE(fadd): return LSC_OP_ATOMIC_FADD;
|
||||
|
||||
#undef AOP_CASE
|
||||
case nir_atomic_op_fmin: return LSC_OP_ATOMIC_FMIN;
|
||||
case nir_atomic_op_fmax: return LSC_OP_ATOMIC_FMAX;
|
||||
case nir_atomic_op_fcmpxchg: return LSC_OP_ATOMIC_FCMPXCHG;
|
||||
case nir_atomic_op_fadd: return LSC_OP_ATOMIC_FADD;
|
||||
|
||||
default:
|
||||
unreachable("Unsupported NIR atomic intrinsic");
|
||||
|
@@ -128,16 +128,8 @@ analyze_ubos_block(struct ubo_analysis_state *state, nir_block *block)
|
||||
case nir_intrinsic_load_uniform:
|
||||
case nir_intrinsic_image_deref_load:
|
||||
case nir_intrinsic_image_deref_store:
|
||||
case nir_intrinsic_image_deref_atomic_add:
|
||||
case nir_intrinsic_image_deref_atomic_imin:
|
||||
case nir_intrinsic_image_deref_atomic_umin:
|
||||
case nir_intrinsic_image_deref_atomic_imax:
|
||||
case nir_intrinsic_image_deref_atomic_umax:
|
||||
case nir_intrinsic_image_deref_atomic_and:
|
||||
case nir_intrinsic_image_deref_atomic_or:
|
||||
case nir_intrinsic_image_deref_atomic_xor:
|
||||
case nir_intrinsic_image_deref_atomic_exchange:
|
||||
case nir_intrinsic_image_deref_atomic_comp_swap:
|
||||
case nir_intrinsic_image_deref_atomic:
|
||||
case nir_intrinsic_image_deref_atomic_swap:
|
||||
case nir_intrinsic_image_deref_size:
|
||||
state->uses_regular_uniforms = true;
|
||||
continue;
|
||||
|
@@ -700,16 +700,8 @@ brw_nir_lower_storage_image_instr(nir_builder *b,
|
||||
return lower_image_store_instr(b, opts->devinfo, intrin);
|
||||
return false;
|
||||
|
||||
case nir_intrinsic_image_deref_atomic_add:
|
||||
case nir_intrinsic_image_deref_atomic_imin:
|
||||
case nir_intrinsic_image_deref_atomic_umin:
|
||||
case nir_intrinsic_image_deref_atomic_imax:
|
||||
case nir_intrinsic_image_deref_atomic_umax:
|
||||
case nir_intrinsic_image_deref_atomic_and:
|
||||
case nir_intrinsic_image_deref_atomic_or:
|
||||
case nir_intrinsic_image_deref_atomic_xor:
|
||||
case nir_intrinsic_image_deref_atomic_exchange:
|
||||
case nir_intrinsic_image_deref_atomic_comp_swap:
|
||||
case nir_intrinsic_image_deref_atomic:
|
||||
case nir_intrinsic_image_deref_atomic_swap:
|
||||
if (opts->lower_atomics)
|
||||
return lower_image_atomic_instr(b, opts->devinfo, intrin);
|
||||
return false;
|
||||
|
@@ -541,16 +541,8 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_ssbo_atomic_add:
|
||||
case nir_intrinsic_ssbo_atomic_imin:
|
||||
case nir_intrinsic_ssbo_atomic_umin:
|
||||
case nir_intrinsic_ssbo_atomic_imax:
|
||||
case nir_intrinsic_ssbo_atomic_umax:
|
||||
case nir_intrinsic_ssbo_atomic_and:
|
||||
case nir_intrinsic_ssbo_atomic_or:
|
||||
case nir_intrinsic_ssbo_atomic_xor:
|
||||
case nir_intrinsic_ssbo_atomic_exchange:
|
||||
case nir_intrinsic_ssbo_atomic_comp_swap:
|
||||
case nir_intrinsic_ssbo_atomic:
|
||||
case nir_intrinsic_ssbo_atomic_swap:
|
||||
nir_emit_ssbo_atomic(lsc_op_to_legacy_atomic(lsc_aop_for_nir_intrinsic(instr)), instr);
|
||||
break;
|
||||
|
||||
|
Reference in New Issue
Block a user