• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2024 Google LLC
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef PANVK_UTRACE_PERFETTO_H
7 #define PANVK_UTRACE_PERFETTO_H
8 
9 #include <stdint.h>
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 /* must be at least PANVK_SUBQUEUE_COUNT */
16 #define PANVK_UTRACE_PERFETTO_QUEUE_COUNT 3
17 #define PANVK_UTRACE_PERFETTO_STACK_DEPTH 8
18 
19 struct panvk_device;
20 
21 enum panvk_utrace_perfetto_stage {
22    PANVK_UTRACE_PERFETTO_STAGE_CMDBUF,
23    PANVK_UTRACE_PERFETTO_STAGE_COUNT,
24 };
25 
26 struct panvk_utrace_perfetto_event {
27    enum panvk_utrace_perfetto_stage stage;
28    uint64_t begin_ns;
29 };
30 
31 struct panvk_utrace_perfetto_queue {
32    struct panvk_utrace_perfetto_event stack[PANVK_UTRACE_PERFETTO_STACK_DEPTH];
33    uint32_t stack_depth;
34 };
35 
36 struct panvk_utrace_perfetto {
37    uint32_t gpu_clock_id;
38    uint64_t device_id;
39 
40    uint64_t queue_iids[PANVK_UTRACE_PERFETTO_QUEUE_COUNT];
41    uint64_t stage_iids[PANVK_UTRACE_PERFETTO_STAGE_COUNT];
42 
43    uint64_t next_clock_snapshot;
44    uint64_t event_id;
45 
46    struct panvk_utrace_perfetto_queue queues[PANVK_UTRACE_PERFETTO_QUEUE_COUNT];
47 };
48 
49 #ifdef HAVE_PERFETTO
50 
51 void panvk_utrace_perfetto_init(struct panvk_device *dev, uint32_t queue_count);
52 
53 #else /* HAVE_PERFETTO */
54 
55 static inline void
panvk_utrace_perfetto_init(struct panvk_device * dev,uint32_t queue_count)56 panvk_utrace_perfetto_init(struct panvk_device *dev, uint32_t queue_count)
57 {
58 }
59 
60 #endif /* HAVE_PERFETTO */
61 
62 #ifdef __cplusplus
63 }
64 #endif
65 
66 #endif /* PANVK_UTRACE_PERFETTO_H */
67