/* * Copyright 2023 Asahi Lina * SPDX-License-Identifier: MIT */ #ifndef LIBAGX_HELPER_H #define LIBAGX_HELPER_H #include "agx_pack.h" #include "libagx.h" // Enable this to debug core mappings. // #define SCRATCH_DEBUG_CORES 512 #define AGX_SPILL_SIZE_BUCKETS 16 #define AGX_MAX_CORES_PER_CLUSTER 16 #define AGX_MAX_CLUSTERS 8 #ifdef SCRATCH_DEBUG_CORES #define AGX_MAX_CORE_ID SCRATCH_DEBUG_CORES #else #define AGX_MAX_CORE_ID (AGX_MAX_CLUSTERS * AGX_MAX_CORES_PER_CLUSTER) #endif struct agx_helper_block { uint32_t blocks[4]; } PACKED; AGX_STATIC_ASSERT(sizeof(struct agx_helper_block) == 16); struct agx_helper_core { GLOBAL(struct agx_helper_block) blocklist; uint32_t alloc_cur; uint32_t alloc_max; uint32_t alloc_failed; uint32_t _pad; uint32_t alloc_count[AGX_SPILL_SIZE_BUCKETS]; } PACKED; AGX_STATIC_ASSERT(sizeof(struct agx_helper_core) == (8 + 3 * 4 + AGX_SPILL_SIZE_BUCKETS * 4 + 4)); struct agx_helper_header { uint32_t subgroups; uint32_t _pad; struct agx_helper_core cores[AGX_MAX_CORE_ID]; } PACKED; AGX_STATIC_ASSERT(sizeof(struct agx_helper_header) == (4 + 4 + AGX_MAX_CORE_ID * sizeof(struct agx_helper_core))); #endif