xref: /aosp_15_r20/external/mesa3d/src/freedreno/common/freedreno_gpu_event.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2023 Igalia S.L.
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef __FREEDRENO_GPU_EVENT_H__
7 #define __FREEDRENO_GPU_EVENT_H__
8 
9 #include "adreno_pm4.xml.h"
10 
11 /* On terminology:
12  * - CLEAN events write dirty cache lines to memory.
13  * - INVALIDATE events cause subsequent reads to read the cache line from
14  *   memory.
15  *
16  * Prior to a7xx CLEAN was instead called FLUSH. On a7xx FLUSH events do a
17  * clean and invalidate. We stick to the a7xx terminology in fd_gpu_event, and
18  * map FD_*_CLEAN events to the corresponding FLUSH events on a6xx. Note
19  * however that FLUSH_SO_* events, which write streamout counters to memory
20  * and also do a CACHE_CLEAN, haven't changed their names on a7xx.
21  */
22 
23 enum fd_gpu_event : uint32_t {
24     FD_WRITE_PRIMITIVE_COUNTS = 0,
25     FD_START_PRIMITIVE_CTRS,
26     FD_STOP_PRIMITIVE_CTRS,
27     FD_START_FRAGMENT_CTRS,
28     FD_STOP_FRAGMENT_CTRS,
29     FD_START_COMPUTE_CTRS,
30     FD_STOP_COMPUTE_CTRS,
31     FD_ZPASS_DONE,
32     FD_RB_DONE,
33     FD_FLUSH_SO_0,
34     FD_FLUSH_SO_1,
35     FD_FLUSH_SO_2,
36     FD_FLUSH_SO_3,
37     FD_CACHE_CLEAN,
38     FD_CACHE_INVALIDATE,
39     FD_CCU_INVALIDATE_DEPTH,
40     FD_CCU_INVALIDATE_COLOR,
41     FD_CCU_CLEAN_BLIT_CACHE,
42     FD_CCU_CLEAN_DEPTH,
43     FD_CCU_CLEAN_COLOR,
44     FD_LRZ_CLEAR,
45     FD_LRZ_FLUSH,
46     FD_BLIT,
47     FD_LABEL,
48 
49     FD_GPU_EVENT_MAX,
50 };
51 
52 struct fd_gpu_event_info {
53     enum vgt_event_type raw_event;
54     bool needs_seqno;
55 };
56 
57 template <chip CHIP>
58 constexpr struct fd_gpu_event_info fd_gpu_events[FD_GPU_EVENT_MAX] = {};
59 
60 template <>
61 constexpr inline struct fd_gpu_event_info fd_gpu_events<A6XX>[FD_GPU_EVENT_MAX] = {
62     {WRITE_PRIMITIVE_COUNTS, false},  /* FD_WRITE_PRIMITIVE_COUNTS */
63     {START_PRIMITIVE_CTRS, false},    /* FD_START_PRIMITIVE_CTRS */
64     {STOP_PRIMITIVE_CTRS, false},     /* FD_STOP_PRIMITIVE_CTRS */
65     {START_FRAGMENT_CTRS, false},     /* FD_START_FRAGMENT_CTRS */
66     {STOP_FRAGMENT_CTRS, false},      /* FD_STOP_FRAGMENT_CTRS */
67     {START_COMPUTE_CTRS, false},      /* FD_START_COMPUTE_CTRS */
68     {STOP_COMPUTE_CTRS, false},       /* FD_STOP_COMPUTE_CTRS */
69     {ZPASS_DONE, false},              /* FD_ZPASS_DONE */
70     {RB_DONE_TS, true},               /* FD_RB_DONE */
71     {FLUSH_SO_0, false},              /* FD_FLUSH_SO_0 */
72     {FLUSH_SO_1, false},              /* FD_FLUSH_SO_1 */
73     {FLUSH_SO_2, false},              /* FD_FLUSH_SO_2 */
74     {FLUSH_SO_3, false},              /* FD_FLUSH_SO_3 */
75     {CACHE_FLUSH_TS, true},           /* FD_CACHE_CLEAN */
76     {CACHE_INVALIDATE, false},        /* FD_CACHE_INVALIDATE */
77     {PC_CCU_INVALIDATE_DEPTH, false}, /* FD_CCU_INVALIDATE_DEPTH */
78     {PC_CCU_INVALIDATE_COLOR, false}, /* FD_CCU_INVALIDATE_COLOR */
79     {PC_CCU_RESOLVE_TS, true},        /* FD_CCU_CLEAN_BLIT_CACHE */
80     {PC_CCU_FLUSH_DEPTH_TS, true},    /* FD_CCU_CLEAN_DEPTH */
81     {PC_CCU_FLUSH_COLOR_TS, true},    /* FD_CCU_CLEAN_COLOR */
82     {LRZ_CLEAR, false},               /* FD_LRZ_CLEAR */
83     {LRZ_FLUSH, false},               /* FD_LRZ_FLUSH */
84     {BLIT, false},                    /* FD_BLIT */
85     {LABEL, false},                   /* FD_LABEL */
86 };
87 
88 template <>
89 constexpr inline struct fd_gpu_event_info fd_gpu_events<A7XX>[FD_GPU_EVENT_MAX] = {
90     {WRITE_PRIMITIVE_COUNTS, false},  /* FD_WRITE_PRIMITIVE_COUNTS */
91     {START_PRIMITIVE_CTRS, false},    /* FD_START_PRIMITIVE_CTRS */
92     {STOP_PRIMITIVE_CTRS, false},     /* FD_STOP_PRIMITIVE_CTRS */
93     {START_FRAGMENT_CTRS, false},     /* FD_START_FRAGMENT_CTRS */
94     {STOP_FRAGMENT_CTRS, false},      /* FD_STOP_FRAGMENT_CTRS */
95     {START_COMPUTE_CTRS, false},      /* FD_START_COMPUTE_CTRS */
96     {STOP_COMPUTE_CTRS, false},       /* FD_STOP_COMPUTE_CTRS */
97     {ZPASS_DONE, false},              /* FD_ZPASS_DONE */
98     {RB_DONE_TS, true},               /* FD_RB_DONE */
99     {FLUSH_SO_0, false},              /* FD_FLUSH_SO_0 */
100     {FLUSH_SO_1, false},              /* FD_FLUSH_SO_1 */
101     {FLUSH_SO_2, false},              /* FD_FLUSH_SO_2 */
102     {FLUSH_SO_3, false},              /* FD_FLUSH_SO_3 */
103     {CACHE_CLEAN, false},             /* FD_CACHE_CLEAN */
104     {CACHE_INVALIDATE7, false},       /* FD_CACHE_INVALIDATE */
105     {CCU_INVALIDATE_DEPTH, false},    /* FD_CCU_INVALIDATE_DEPTH */
106     {CCU_INVALIDATE_COLOR, false},    /* FD_CCU_INVALIDATE_COLOR */
107     {CCU_RESOLVE_CLEAN, false},       /* FD_CCU_CLEAN_BLIT_CACHE */
108     {CCU_CLEAN_DEPTH, false},         /* FD_CCU_CLEAN_DEPTH */
109     {CCU_CLEAN_COLOR, false},         /* FD_CCU_CLEAN_COLOR */
110     {LRZ_CLEAR, false},               /* FD_LRZ_CLEAR */
111     {LRZ_FLUSH, false},               /* FD_LRZ_FLUSH */
112     {BLIT, false},                    /* FD_BLIT */
113     {LABEL, false},                   /* FD_LABEL */
114 };
115 
116 #endif
117