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