xref: /aosp_15_r20/external/mesa3d/src/asahi/lib/shaders/helper.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2023 Asahi Lina
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #ifndef LIBAGX_HELPER_H
7*61046927SAndroid Build Coastguard Worker #define LIBAGX_HELPER_H
8*61046927SAndroid Build Coastguard Worker 
9*61046927SAndroid Build Coastguard Worker #include "agx_pack.h"
10*61046927SAndroid Build Coastguard Worker #include "libagx.h"
11*61046927SAndroid Build Coastguard Worker 
12*61046927SAndroid Build Coastguard Worker // Enable this to debug core mappings.
13*61046927SAndroid Build Coastguard Worker // #define SCRATCH_DEBUG_CORES 512
14*61046927SAndroid Build Coastguard Worker 
15*61046927SAndroid Build Coastguard Worker #define AGX_SPILL_SIZE_BUCKETS 16
16*61046927SAndroid Build Coastguard Worker 
17*61046927SAndroid Build Coastguard Worker #define AGX_MAX_CORES_PER_CLUSTER 16
18*61046927SAndroid Build Coastguard Worker #define AGX_MAX_CLUSTERS          8
19*61046927SAndroid Build Coastguard Worker 
20*61046927SAndroid Build Coastguard Worker #ifdef SCRATCH_DEBUG_CORES
21*61046927SAndroid Build Coastguard Worker #define AGX_MAX_CORE_ID SCRATCH_DEBUG_CORES
22*61046927SAndroid Build Coastguard Worker #else
23*61046927SAndroid Build Coastguard Worker #define AGX_MAX_CORE_ID (AGX_MAX_CLUSTERS * AGX_MAX_CORES_PER_CLUSTER)
24*61046927SAndroid Build Coastguard Worker #endif
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker struct agx_helper_block {
27*61046927SAndroid Build Coastguard Worker    uint32_t blocks[4];
28*61046927SAndroid Build Coastguard Worker } PACKED;
29*61046927SAndroid Build Coastguard Worker AGX_STATIC_ASSERT(sizeof(struct agx_helper_block) == 16);
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker struct agx_helper_core {
32*61046927SAndroid Build Coastguard Worker    GLOBAL(struct agx_helper_block) blocklist;
33*61046927SAndroid Build Coastguard Worker    uint32_t alloc_cur;
34*61046927SAndroid Build Coastguard Worker    uint32_t alloc_max;
35*61046927SAndroid Build Coastguard Worker    uint32_t alloc_failed;
36*61046927SAndroid Build Coastguard Worker    uint32_t _pad;
37*61046927SAndroid Build Coastguard Worker    uint32_t alloc_count[AGX_SPILL_SIZE_BUCKETS];
38*61046927SAndroid Build Coastguard Worker } PACKED;
39*61046927SAndroid Build Coastguard Worker AGX_STATIC_ASSERT(sizeof(struct agx_helper_core) ==
40*61046927SAndroid Build Coastguard Worker                   (8 + 3 * 4 + AGX_SPILL_SIZE_BUCKETS * 4 + 4));
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker struct agx_helper_header {
43*61046927SAndroid Build Coastguard Worker    uint32_t subgroups;
44*61046927SAndroid Build Coastguard Worker    uint32_t _pad;
45*61046927SAndroid Build Coastguard Worker    struct agx_helper_core cores[AGX_MAX_CORE_ID];
46*61046927SAndroid Build Coastguard Worker } PACKED;
47*61046927SAndroid Build Coastguard Worker AGX_STATIC_ASSERT(sizeof(struct agx_helper_header) ==
48*61046927SAndroid Build Coastguard Worker                   (4 + 4 + AGX_MAX_CORE_ID * sizeof(struct agx_helper_core)));
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker #endif
51