diff --git a/src/imagination/pco/pco_map.py b/src/imagination/pco/pco_map.py index b3ea65de548..64926f6d555 100644 --- a/src/imagination/pco/pco_map.py +++ b/src/imagination/pco/pco_map.py @@ -335,7 +335,7 @@ enum_map(OM_SCHEDSWAP.t, F_SCHED_CTRL, [ ('swap', 'swap'), ]) -enum_map(OM_MTX_OP.t, F_LR, [ +enum_map(OM_MUTEX_OP.t, F_LR, [ ('release', 'release'), ('release_sleep', 'release_sleep'), ('release_wakeup', 'release_wakeup'), @@ -1764,7 +1764,7 @@ encode_map(O_BR_NEXT, encode_map(O_MUTEX, encodings=[ (I_MUTEX, [ - ('lr', OM_MTX_OP), + ('lr', OM_MUTEX_OP), ('id', ('pco_ref_get_imm', SRC(0))), ]) ], diff --git a/src/imagination/pco/pco_ops.py b/src/imagination/pco/pco_ops.py index fda9fea80bd..fb0736cb230 100644 --- a/src/imagination/pco/pco_ops.py +++ b/src/imagination/pco/pco_ops.py @@ -113,6 +113,25 @@ DRC = enum_type('drc', [ ('pending', '?'), ]) +MUTEX_ID = enum_type('mutex_id', [ + 'atomic_emu', + 'barrier', + 'rsvd_2', + 'rsvd_3', + 'rsvd_4', + 'rsvd_5', + 'rsvd_6', + 'rsvd_7', + 'rsvd_8', + 'rsvd_9', + 'rsvd_a', + 'rsvd_b', + 'rsvd_c', + 'rsvd_d', + 'rsvd_e', + 'rsvd_f' +]) + # Ref mods. RM_ONEMINUS = ref_mod('oneminus', BaseType.bool) RM_CLAMP = ref_mod('clamp', BaseType.bool) @@ -321,7 +340,7 @@ OM_FRED_PART = op_mod_enum('fred_part', [ 'b', ]) -OM_MTX_OP = op_mod_enum('mtx_op', [ +OM_MUTEX_OP = op_mod_enum('mutex_op', [ ('release', 'release'), ('release_sleep', 'release.sleep'), ('release_wakeup', 'release.wakeup'), @@ -448,7 +467,7 @@ O_BR = hw_op('br', [OM_EXEC_CND, OM_BRANCH_CND, OM_LINK], has_target_cf_node=Tru O_BR_NEXT = hw_op('br.next', [OM_EXEC_CND]) -O_MUTEX = hw_op('mutex', [OM_MTX_OP], 0, 1) +O_MUTEX = hw_op('mutex', [OM_MUTEX_OP], 0, 1) # Combination (> 1 instructions per group). O_SCMP = hw_op('scmp', OM_ALU + [OM_TST_OP_MAIN], 1, 2, [], [[RM_ABS, RM_NEG], [RM_ABS, RM_NEG]]) diff --git a/src/imagination/pco/pco_trans_nir.c b/src/imagination/pco/pco_trans_nir.c index 7d99ad320b7..e74c42c6e5a 100644 --- a/src/imagination/pco/pco_trans_nir.c +++ b/src/imagination/pco/pco_trans_nir.c @@ -1870,7 +1870,7 @@ static pco_instr *trans_intr(trans_ctx *tctx, nir_intrinsic_instr *intr) case nir_intrinsic_mutex_pco: instr = pco_mutex(&tctx->b, pco_ref_imm8(nir_intrinsic_mutex_id_pco(intr)), - .mtx_op = nir_intrinsic_mutex_op_pco(intr)); + .mutex_op = nir_intrinsic_mutex_op_pco(intr)); break; case nir_intrinsic_load_instance_num_pco: diff --git a/src/imagination/pco/usclib/libcl.h b/src/imagination/pco/usclib/libcl.h index 27dd48e3417..f70d4a9d1f3 100644 --- a/src/imagination/pco/usclib/libcl.h +++ b/src/imagination/pco/usclib/libcl.h @@ -3,25 +3,12 @@ * SPDX-License-Identifier: MIT */ +#ifndef PCO_LIBCL_H +#define PCO_LIBCL_H + #include "compiler/libcl/libcl.h" #include "compiler/shader_enums.h" - -enum pco_mutex_id { - PCO_MUTEX_ID_ATOMIC_EMU, - PCO_MUTEX_ID_BARRIER, - - _PCO_MUTEX_ID_COUNT, -}; -static_assert(_PCO_MUTEX_ID_COUNT <= 16, "Too many mutex IDs."); - -enum pco_mutex_op { - PCO_MUTEX_OP_RELEASE, - PCO_MUTEX_OP_RELEASE_SLEEP, - PCO_MUTEX_OP_RELEASE_WAKEUP, - PCO_MUTEX_OP_LOCK, -}; - -#define ROGUE_MAX_INSTANCES_PER_TASK 32 +#include "pco/pco_common.h" void nir_mutex_pco(enum pco_mutex_id mutex_id, enum pco_mutex_op mutex_op); uint32_t nir_load_instance_num_pco(void); @@ -51,3 +38,4 @@ void nir_store_shared(uint32_t value, uint write_mask, uint align_mul, uint align_offset); +#endif /* PCO_LIBCL_H */ diff --git a/src/imagination/pco/usclib/meson.build b/src/imagination/pco/usclib/meson.build index 7ef94e63c13..c6607935587 100644 --- a/src/imagination/pco/usclib/meson.build +++ b/src/imagination/pco/usclib/meson.build @@ -17,7 +17,10 @@ pco_usclib_spv = custom_target( '-I' + join_paths(meson.project_source_root(), 'include'), '-I' + join_paths(meson.project_source_root(), 'src/compiler/libcl'), '-I' + join_paths(meson.current_source_dir(), '.'), - '-I' + join_paths(meson.current_source_dir(), '../../../'), + '-I' + join_paths(meson.current_source_dir(), '../..'), + '-I' + join_paths(meson.current_source_dir(), '../../include'), + '-I' + join_paths(meson.current_source_dir(), '../../..'), + '-I' + join_paths(meson.current_build_dir(), '../..'), cl_args, ], depfile : 'pco_usclib.h.d', diff --git a/src/imagination/pco/usclib/sync.cl b/src/imagination/pco/usclib/sync.cl index b68305f61ed..4712e6ca215 100644 --- a/src/imagination/pco/usclib/sync.cl +++ b/src/imagination/pco/usclib/sync.cl @@ -3,6 +3,14 @@ * SPDX-License-Identifier: MIT */ +#ifndef __pvr_address_type +#define __pvr_address_type uint64_t +#define __pvr_get_address(addr) addr +#define __pvr_make_address(addr) addr +#endif /* __pvr_address_type */ + +#include "csbgen/rogue_cdm.h" +#include "hwdef/rogue_hw_defs.h" #include "libcl.h" uint32_t