blob: f9a6222efaddbfc17b7d6a13397f7e7d6aa6db57 [file] [log] [blame]
/*
* Copyright 2024 Google LLC
* SPDX-License-Identifier: MIT
*/
#ifndef PANVK_UTRACE_PERFETTO_H
#define PANVK_UTRACE_PERFETTO_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* must be at least PANVK_SUBQUEUE_COUNT */
#define PANVK_UTRACE_PERFETTO_QUEUE_COUNT 3
#define PANVK_UTRACE_PERFETTO_STACK_DEPTH 8
struct panvk_device;
enum panvk_utrace_perfetto_stage {
PANVK_UTRACE_PERFETTO_STAGE_CMDBUF,
PANVK_UTRACE_PERFETTO_STAGE_COUNT,
};
struct panvk_utrace_perfetto_event {
enum panvk_utrace_perfetto_stage stage;
uint64_t begin_ns;
};
struct panvk_utrace_perfetto_queue {
struct panvk_utrace_perfetto_event stack[PANVK_UTRACE_PERFETTO_STACK_DEPTH];
uint32_t stack_depth;
};
struct panvk_utrace_perfetto {
uint32_t gpu_clock_id;
uint64_t device_id;
uint64_t queue_iids[PANVK_UTRACE_PERFETTO_QUEUE_COUNT];
uint64_t stage_iids[PANVK_UTRACE_PERFETTO_STAGE_COUNT];
uint64_t next_clock_snapshot;
uint64_t event_id;
struct panvk_utrace_perfetto_queue queues[PANVK_UTRACE_PERFETTO_QUEUE_COUNT];
};
#ifdef HAVE_PERFETTO
void panvk_utrace_perfetto_init(struct panvk_device *dev, uint32_t queue_count);
#else /* HAVE_PERFETTO */
static inline void
panvk_utrace_perfetto_init(struct panvk_device *dev, uint32_t queue_count)
{
}
#endif /* HAVE_PERFETTO */
#ifdef __cplusplus
}
#endif
#endif /* PANVK_UTRACE_PERFETTO_H */