From c46407de883ef5352b3b10c6be9e2063dfd66be9 Mon Sep 17 00:00:00 2001 From: John Anthony Date: Mon, 7 Jul 2025 22:03:57 +0200 Subject: [PATCH] pan/va: Add support for SPV_ARM_core_builtins Reviewed-by: Mary Guillemard Part-of: --- src/panfrost/compiler/bifrost_compile.c | 20 ++++++++++++++++++++ src/panfrost/compiler/valhall/va_pack.c | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/src/panfrost/compiler/bifrost_compile.c b/src/panfrost/compiler/bifrost_compile.c index c7334b8a046..5ab3c266e52 100644 --- a/src/panfrost/compiler/bifrost_compile.c +++ b/src/panfrost/compiler/bifrost_compile.c @@ -2395,6 +2395,26 @@ bi_emit_intrinsic(bi_builder *b, nir_intrinsic_instr *instr) bi_mov_i32_to(b, dst, bi_fau(BIR_FAU_SHADER_OUTPUT, false)); break; + case nir_intrinsic_load_core_id: + assert(b->shader->arch >= 9); + bi_mov_i32_to(b, dst, bi_fau(BIR_FAU_CORE_ID, false)); + break; + + case nir_intrinsic_load_core_count_arm: + assert(b->shader->arch >= 9); + bi_mov_i32_to(b, dst, bi_iadd_u32(b, bi_fau(BIR_FAU_CORE_ID, true), bi_imm_u32(1), false)); + break; + + case nir_intrinsic_load_warp_id_arm: + assert(b->shader->arch >= 9); + bi_mov_i32_to(b, dst, bi_fau(BIR_FAU_WARP_ID, false)); + break; + + case nir_intrinsic_load_warp_max_id_arm: + assert(b->shader->arch >= 9); + bi_mov_i32_to(b, dst, bi_fau(BIR_FAU_WARP_ID, true)); + break; + default: fprintf(stderr, "Unhandled intrinsic %s\n", nir_intrinsic_infos[instr->intrinsic].name); diff --git a/src/panfrost/compiler/valhall/va_pack.c b/src/panfrost/compiler/valhall/va_pack.c index bc4e2a62f8f..6925987cd50 100644 --- a/src/panfrost/compiler/valhall/va_pack.c +++ b/src/panfrost/compiler/valhall/va_pack.c @@ -96,6 +96,8 @@ static unsigned va_pack_fau_special(const bi_instr *I, enum bir_fau fau) { switch (fau) { + case BIR_FAU_WARP_ID: + return VA_FAU_SPECIAL_PAGE_0_WARP_ID; case BIR_FAU_ATEST_PARAM: return VA_FAU_SPECIAL_PAGE_0_ATEST_DATUM; case BIR_FAU_TLS_PTR: @@ -104,6 +106,8 @@ va_pack_fau_special(const bi_instr *I, enum bir_fau fau) return VA_FAU_SPECIAL_PAGE_1_WORKGROUP_LOCAL_POINTER; case BIR_FAU_LANE_ID: return VA_FAU_SPECIAL_PAGE_3_LANE_ID; + case BIR_FAU_CORE_ID: + return VA_FAU_SPECIAL_PAGE_3_CORE_ID; case BIR_FAU_SHADER_OUTPUT: return VA_FAU_SPECIAL_PAGE_3_SHADER_OUTPUT; case BIR_FAU_PROGRAM_COUNTER: