broadcom/compiler: support global load/store intrinsics

It's the same as global_2x32 as there the 2nd component is ignored anyway

Acked-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29711>
This commit is contained in:
Karol Herbst 2023-09-23 11:50:32 +02:00 committed by Marge Bot
parent 358e09f9ff
commit 66b58e8a0e

View file

@ -217,10 +217,13 @@ v3d_general_tmu_op(nir_intrinsic_instr *instr)
case nir_intrinsic_load_uniform:
case nir_intrinsic_load_shared:
case nir_intrinsic_load_scratch:
case nir_intrinsic_load_global:
case nir_intrinsic_load_global_2x32:
case nir_intrinsic_load_global_constant:
case nir_intrinsic_store_ssbo:
case nir_intrinsic_store_shared:
case nir_intrinsic_store_scratch:
case nir_intrinsic_store_global:
case nir_intrinsic_store_global_2x32:
return V3D_TMU_OP_REGULAR;
@ -228,7 +231,9 @@ v3d_general_tmu_op(nir_intrinsic_instr *instr)
case nir_intrinsic_ssbo_atomic_swap:
case nir_intrinsic_shared_atomic:
case nir_intrinsic_shared_atomic_swap:
case nir_intrinsic_global_atomic:
case nir_intrinsic_global_atomic_2x32:
case nir_intrinsic_global_atomic_swap:
case nir_intrinsic_global_atomic_swap_2x32:
return v3d_general_tmu_op_for_atomic(instr);
@ -510,6 +515,7 @@ ntq_emit_tmu_general(struct v3d_compile *c, nir_intrinsic_instr *instr,
bool atomic_add_replaced =
(instr->intrinsic == nir_intrinsic_ssbo_atomic ||
instr->intrinsic == nir_intrinsic_shared_atomic ||
instr->intrinsic == nir_intrinsic_global_atomic ||
instr->intrinsic == nir_intrinsic_global_atomic_2x32) &&
nir_intrinsic_atomic_op(instr) == nir_atomic_op_iadd &&
(tmu_op == V3D_TMU_OP_WRITE_AND_READ_INC ||
@ -518,6 +524,7 @@ ntq_emit_tmu_general(struct v3d_compile *c, nir_intrinsic_instr *instr,
bool is_store = (instr->intrinsic == nir_intrinsic_store_ssbo ||
instr->intrinsic == nir_intrinsic_store_scratch ||
instr->intrinsic == nir_intrinsic_store_shared ||
instr->intrinsic == nir_intrinsic_store_global ||
instr->intrinsic == nir_intrinsic_store_global_2x32);
bool is_load = (instr->intrinsic == nir_intrinsic_load_uniform ||
@ -525,7 +532,9 @@ ntq_emit_tmu_general(struct v3d_compile *c, nir_intrinsic_instr *instr,
instr->intrinsic == nir_intrinsic_load_ssbo ||
instr->intrinsic == nir_intrinsic_load_scratch ||
instr->intrinsic == nir_intrinsic_load_shared ||
instr->intrinsic == nir_intrinsic_load_global_2x32);
instr->intrinsic == nir_intrinsic_load_global ||
instr->intrinsic == nir_intrinsic_load_global_2x32 ||
instr->intrinsic == nir_intrinsic_load_global_constant);
if (!is_load)
c->tmu_dirty_rcl = true;
@ -542,7 +551,9 @@ ntq_emit_tmu_general(struct v3d_compile *c, nir_intrinsic_instr *instr,
instr->intrinsic == nir_intrinsic_load_ubo ||
instr->intrinsic == nir_intrinsic_load_scratch ||
instr->intrinsic == nir_intrinsic_load_shared ||
instr->intrinsic == nir_intrinsic_load_global ||
instr->intrinsic == nir_intrinsic_load_global_2x32 ||
instr->intrinsic == nir_intrinsic_load_global_constant ||
atomic_add_replaced) {
offset_src = 0 + has_index;
} else if (is_store) {
@ -3390,6 +3401,8 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr)
ntq_emit_load_uniform(c, instr);
break;
case nir_intrinsic_load_global:
case nir_intrinsic_load_global_constant:
case nir_intrinsic_load_global_2x32:
ntq_emit_tmu_general(c, instr, false, true);
c->has_general_tmu_load = true;
@ -3412,8 +3425,11 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr)
ntq_emit_tmu_general(c, instr, false, false);
break;
case nir_intrinsic_store_global:
case nir_intrinsic_store_global_2x32:
case nir_intrinsic_global_atomic:
case nir_intrinsic_global_atomic_2x32:
case nir_intrinsic_global_atomic_swap:
case nir_intrinsic_global_atomic_swap_2x32:
ntq_emit_tmu_general(c, instr, false, true);
break;