xref: /aosp_15_r20/external/mesa3d/src/amd/common/ac_rgp.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2020 Advanced Micro Devices, Inc.
3*61046927SAndroid Build Coastguard Worker  * Copyright 2020 Valve Corporation
4*61046927SAndroid Build Coastguard Worker  *
5*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
6*61046927SAndroid Build Coastguard Worker  */
7*61046927SAndroid Build Coastguard Worker 
8*61046927SAndroid Build Coastguard Worker #ifndef AC_RGP_H
9*61046927SAndroid Build Coastguard Worker #define AC_RGP_H
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker #include <stdint.h>
12*61046927SAndroid Build Coastguard Worker #include "compiler/shader_enums.h"
13*61046927SAndroid Build Coastguard Worker #include "util/list.h"
14*61046927SAndroid Build Coastguard Worker #include "util/simple_mtx.h"
15*61046927SAndroid Build Coastguard Worker 
16*61046927SAndroid Build Coastguard Worker struct radeon_info;
17*61046927SAndroid Build Coastguard Worker struct ac_sqtt_trace;
18*61046927SAndroid Build Coastguard Worker struct ac_sqtt;
19*61046927SAndroid Build Coastguard Worker struct ac_spm_trace;
20*61046927SAndroid Build Coastguard Worker 
21*61046927SAndroid Build Coastguard Worker enum rgp_hardware_stages {
22*61046927SAndroid Build Coastguard Worker    RGP_HW_STAGE_VS = 0,
23*61046927SAndroid Build Coastguard Worker    RGP_HW_STAGE_LS,
24*61046927SAndroid Build Coastguard Worker    RGP_HW_STAGE_HS,
25*61046927SAndroid Build Coastguard Worker    RGP_HW_STAGE_ES,
26*61046927SAndroid Build Coastguard Worker    RGP_HW_STAGE_GS,
27*61046927SAndroid Build Coastguard Worker    RGP_HW_STAGE_PS,
28*61046927SAndroid Build Coastguard Worker    RGP_HW_STAGE_CS,
29*61046927SAndroid Build Coastguard Worker    RGP_HW_STAGE_MAX,
30*61046927SAndroid Build Coastguard Worker };
31*61046927SAndroid Build Coastguard Worker 
32*61046927SAndroid Build Coastguard Worker struct rgp_shader_data {
33*61046927SAndroid Build Coastguard Worker    uint64_t hash[2];
34*61046927SAndroid Build Coastguard Worker    uint32_t code_size;
35*61046927SAndroid Build Coastguard Worker    uint8_t *code;
36*61046927SAndroid Build Coastguard Worker    uint32_t vgpr_count;
37*61046927SAndroid Build Coastguard Worker    uint32_t sgpr_count;
38*61046927SAndroid Build Coastguard Worker    uint32_t scratch_memory_size;
39*61046927SAndroid Build Coastguard Worker    uint32_t lds_size;
40*61046927SAndroid Build Coastguard Worker    uint32_t wavefront_size;
41*61046927SAndroid Build Coastguard Worker    uint64_t base_address;
42*61046927SAndroid Build Coastguard Worker    uint32_t elf_symbol_offset;
43*61046927SAndroid Build Coastguard Worker    uint32_t hw_stage;
44*61046927SAndroid Build Coastguard Worker    uint32_t is_combined;
45*61046927SAndroid Build Coastguard Worker    char rt_shader_name[32];
46*61046927SAndroid Build Coastguard Worker    uint32_t rt_stack_size;
47*61046927SAndroid Build Coastguard Worker };
48*61046927SAndroid Build Coastguard Worker 
49*61046927SAndroid Build Coastguard Worker struct rgp_code_object_record {
50*61046927SAndroid Build Coastguard Worker    uint32_t shader_stages_mask;
51*61046927SAndroid Build Coastguard Worker    struct rgp_shader_data shader_data[MESA_VULKAN_SHADER_STAGES];
52*61046927SAndroid Build Coastguard Worker    uint32_t num_shaders_combined; /* count combined shaders as one count */
53*61046927SAndroid Build Coastguard Worker    uint64_t pipeline_hash[2];
54*61046927SAndroid Build Coastguard Worker 
55*61046927SAndroid Build Coastguard Worker    bool is_rt;
56*61046927SAndroid Build Coastguard Worker    struct list_head list;
57*61046927SAndroid Build Coastguard Worker };
58*61046927SAndroid Build Coastguard Worker 
59*61046927SAndroid Build Coastguard Worker struct rgp_code_object {
60*61046927SAndroid Build Coastguard Worker    uint32_t record_count;
61*61046927SAndroid Build Coastguard Worker    struct list_head record;
62*61046927SAndroid Build Coastguard Worker    simple_mtx_t lock;
63*61046927SAndroid Build Coastguard Worker };
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker enum rgp_loader_event_type
66*61046927SAndroid Build Coastguard Worker {
67*61046927SAndroid Build Coastguard Worker    RGP_LOAD_TO_GPU_MEMORY = 0,
68*61046927SAndroid Build Coastguard Worker    RGP_UNLOAD_FROM_GPU_MEMORY,
69*61046927SAndroid Build Coastguard Worker };
70*61046927SAndroid Build Coastguard Worker 
71*61046927SAndroid Build Coastguard Worker struct rgp_loader_events_record {
72*61046927SAndroid Build Coastguard Worker    uint32_t loader_event_type;
73*61046927SAndroid Build Coastguard Worker    uint32_t reserved;
74*61046927SAndroid Build Coastguard Worker    uint64_t base_address;
75*61046927SAndroid Build Coastguard Worker    uint64_t code_object_hash[2];
76*61046927SAndroid Build Coastguard Worker    uint64_t time_stamp;
77*61046927SAndroid Build Coastguard Worker    struct list_head list;
78*61046927SAndroid Build Coastguard Worker };
79*61046927SAndroid Build Coastguard Worker 
80*61046927SAndroid Build Coastguard Worker struct rgp_loader_events {
81*61046927SAndroid Build Coastguard Worker    uint32_t record_count;
82*61046927SAndroid Build Coastguard Worker    struct list_head record;
83*61046927SAndroid Build Coastguard Worker    simple_mtx_t lock;
84*61046927SAndroid Build Coastguard Worker };
85*61046927SAndroid Build Coastguard Worker 
86*61046927SAndroid Build Coastguard Worker struct rgp_pso_correlation_record {
87*61046927SAndroid Build Coastguard Worker    uint64_t api_pso_hash;
88*61046927SAndroid Build Coastguard Worker    uint64_t pipeline_hash[2];
89*61046927SAndroid Build Coastguard Worker    char api_level_obj_name[64];
90*61046927SAndroid Build Coastguard Worker    struct list_head list;
91*61046927SAndroid Build Coastguard Worker };
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker struct rgp_pso_correlation {
94*61046927SAndroid Build Coastguard Worker    uint32_t record_count;
95*61046927SAndroid Build Coastguard Worker    struct list_head record;
96*61046927SAndroid Build Coastguard Worker    simple_mtx_t lock;
97*61046927SAndroid Build Coastguard Worker };
98*61046927SAndroid Build Coastguard Worker 
99*61046927SAndroid Build Coastguard Worker enum sqtt_queue_type {
100*61046927SAndroid Build Coastguard Worker    SQTT_QUEUE_TYPE_UNKNOWN   = 0x0,
101*61046927SAndroid Build Coastguard Worker    SQTT_QUEUE_TYPE_UNIVERSAL = 0x1,
102*61046927SAndroid Build Coastguard Worker    SQTT_QUEUE_TYPE_COMPUTE   = 0x2,
103*61046927SAndroid Build Coastguard Worker    SQTT_QUEUE_TYPE_DMA       = 0x3,
104*61046927SAndroid Build Coastguard Worker };
105*61046927SAndroid Build Coastguard Worker 
106*61046927SAndroid Build Coastguard Worker enum sqtt_engine_type {
107*61046927SAndroid Build Coastguard Worker    SQTT_ENGINE_TYPE_UNKNOWN                 = 0x0,
108*61046927SAndroid Build Coastguard Worker    SQTT_ENGINE_TYPE_UNIVERSAL               = 0x1,
109*61046927SAndroid Build Coastguard Worker    SQTT_ENGINE_TYPE_COMPUTE                 = 0x2,
110*61046927SAndroid Build Coastguard Worker    SQTT_ENGINE_TYPE_EXCLUSIVE_COMPUTE       = 0x3,
111*61046927SAndroid Build Coastguard Worker    SQTT_ENGINE_TYPE_DMA                     = 0x4,
112*61046927SAndroid Build Coastguard Worker    SQTT_ENGINE_TYPE_HIGH_PRIORITY_UNIVERSAL = 0x7,
113*61046927SAndroid Build Coastguard Worker    SQTT_ENGINE_TYPE_HIGH_PRIORITY_GRAPHICS  = 0x8,
114*61046927SAndroid Build Coastguard Worker };
115*61046927SAndroid Build Coastguard Worker 
116*61046927SAndroid Build Coastguard Worker struct sqtt_queue_hardware_info {
117*61046927SAndroid Build Coastguard Worker    union {
118*61046927SAndroid Build Coastguard Worker       struct {
119*61046927SAndroid Build Coastguard Worker          enum sqtt_queue_type queue_type : 8;
120*61046927SAndroid Build Coastguard Worker          enum sqtt_engine_type engine_type : 8;
121*61046927SAndroid Build Coastguard Worker          uint32_t reserved : 16;
122*61046927SAndroid Build Coastguard Worker       };
123*61046927SAndroid Build Coastguard Worker       uint32_t value;
124*61046927SAndroid Build Coastguard Worker    };
125*61046927SAndroid Build Coastguard Worker };
126*61046927SAndroid Build Coastguard Worker 
127*61046927SAndroid Build Coastguard Worker struct rgp_queue_info_record {
128*61046927SAndroid Build Coastguard Worker    uint64_t queue_id;
129*61046927SAndroid Build Coastguard Worker    uint64_t queue_context;
130*61046927SAndroid Build Coastguard Worker    struct sqtt_queue_hardware_info hardware_info;
131*61046927SAndroid Build Coastguard Worker    uint32_t reserved;
132*61046927SAndroid Build Coastguard Worker    struct list_head list;
133*61046927SAndroid Build Coastguard Worker };
134*61046927SAndroid Build Coastguard Worker 
135*61046927SAndroid Build Coastguard Worker struct rgp_queue_info {
136*61046927SAndroid Build Coastguard Worker    uint32_t record_count;
137*61046927SAndroid Build Coastguard Worker    struct list_head record;
138*61046927SAndroid Build Coastguard Worker    simple_mtx_t lock;
139*61046927SAndroid Build Coastguard Worker };
140*61046927SAndroid Build Coastguard Worker 
141*61046927SAndroid Build Coastguard Worker enum sqtt_queue_event_type {
142*61046927SAndroid Build Coastguard Worker    SQTT_QUEUE_TIMING_EVENT_CMDBUF_SUBMIT,
143*61046927SAndroid Build Coastguard Worker    SQTT_QUEUE_TIMING_EVENT_SIGNAL_SEMAPHORE,
144*61046927SAndroid Build Coastguard Worker    SQTT_QUEUE_TIMING_EVENT_WAIT_SEMAPHORE,
145*61046927SAndroid Build Coastguard Worker    SQTT_QUEUE_TIMING_EVENT_PRESENT
146*61046927SAndroid Build Coastguard Worker };
147*61046927SAndroid Build Coastguard Worker 
148*61046927SAndroid Build Coastguard Worker struct rgp_queue_event_record {
149*61046927SAndroid Build Coastguard Worker    enum sqtt_queue_event_type event_type;
150*61046927SAndroid Build Coastguard Worker    uint32_t sqtt_cb_id;
151*61046927SAndroid Build Coastguard Worker    uint64_t frame_index;
152*61046927SAndroid Build Coastguard Worker    uint32_t queue_info_index;
153*61046927SAndroid Build Coastguard Worker    uint32_t submit_sub_index;
154*61046927SAndroid Build Coastguard Worker    uint64_t api_id;
155*61046927SAndroid Build Coastguard Worker    uint64_t cpu_timestamp;
156*61046927SAndroid Build Coastguard Worker    uint64_t *gpu_timestamps[2];
157*61046927SAndroid Build Coastguard Worker    struct list_head list;
158*61046927SAndroid Build Coastguard Worker };
159*61046927SAndroid Build Coastguard Worker 
160*61046927SAndroid Build Coastguard Worker struct rgp_queue_event {
161*61046927SAndroid Build Coastguard Worker    uint32_t record_count;
162*61046927SAndroid Build Coastguard Worker    struct list_head record;
163*61046927SAndroid Build Coastguard Worker    simple_mtx_t lock;
164*61046927SAndroid Build Coastguard Worker };
165*61046927SAndroid Build Coastguard Worker 
166*61046927SAndroid Build Coastguard Worker struct rgp_clock_calibration_record {
167*61046927SAndroid Build Coastguard Worker    uint64_t cpu_timestamp;
168*61046927SAndroid Build Coastguard Worker    uint64_t gpu_timestamp;
169*61046927SAndroid Build Coastguard Worker    struct list_head list;
170*61046927SAndroid Build Coastguard Worker };
171*61046927SAndroid Build Coastguard Worker 
172*61046927SAndroid Build Coastguard Worker struct rgp_clock_calibration {
173*61046927SAndroid Build Coastguard Worker    uint32_t record_count;
174*61046927SAndroid Build Coastguard Worker    struct list_head record;
175*61046927SAndroid Build Coastguard Worker    simple_mtx_t lock;
176*61046927SAndroid Build Coastguard Worker };
177*61046927SAndroid Build Coastguard Worker 
178*61046927SAndroid Build Coastguard Worker int ac_dump_rgp_capture(const struct radeon_info *info, struct ac_sqtt_trace *sqtt_trace,
179*61046927SAndroid Build Coastguard Worker                         const struct ac_spm_trace *spm_trace);
180*61046927SAndroid Build Coastguard Worker 
181*61046927SAndroid Build Coastguard Worker void
182*61046927SAndroid Build Coastguard Worker ac_rgp_file_write_elf_object(FILE *output, size_t file_elf_start,
183*61046927SAndroid Build Coastguard Worker                              struct rgp_code_object_record *record,
184*61046927SAndroid Build Coastguard Worker                              uint32_t *written_size, uint32_t flags);
185*61046927SAndroid Build Coastguard Worker 
186*61046927SAndroid Build Coastguard Worker #endif
187