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)56panvk_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