1b8e80941Smrg#ifndef AUBINATOR_VIEWER_H 2b8e80941Smrg#define AUBINATOR_VIEWER_H 3b8e80941Smrg 4b8e80941Smrg#include "imgui/imgui.h" 5b8e80941Smrg 6b8e80941Smrg#include "common/gen_decoder.h" 7b8e80941Smrg#include "common/gen_disasm.h" 8b8e80941Smrg 9b8e80941Smrgstruct aub_viewer_cfg { 10b8e80941Smrg ImColor clear_color; 11b8e80941Smrg ImColor dwords_color; 12b8e80941Smrg ImColor highlight_color; 13b8e80941Smrg ImColor error_color; 14b8e80941Smrg ImColor missing_color; 15b8e80941Smrg ImColor boolean_color; 16b8e80941Smrg 17b8e80941Smrg aub_viewer_cfg() : 18b8e80941Smrg clear_color(114, 144, 154), 19b8e80941Smrg dwords_color(29, 177, 194, 255), 20b8e80941Smrg highlight_color(0, 230, 0, 255), 21b8e80941Smrg error_color(236, 255, 0, 255), 22b8e80941Smrg missing_color(230, 0, 230, 255), 23b8e80941Smrg boolean_color(228, 75, 255) {} 24b8e80941Smrg}; 25b8e80941Smrg 26b8e80941Smrgstruct aub_viewer_decode_cfg { 27b8e80941Smrg struct ImGuiTextFilter command_filter; 28b8e80941Smrg struct ImGuiTextFilter field_filter; 29b8e80941Smrg 30b8e80941Smrg bool drop_filtered; 31b8e80941Smrg bool show_dwords; 32b8e80941Smrg 33b8e80941Smrg aub_viewer_decode_cfg() : 34b8e80941Smrg drop_filtered(false), 35b8e80941Smrg show_dwords(true) {} 36b8e80941Smrg}; 37b8e80941Smrg 38b8e80941Smrgenum aub_decode_stage { 39b8e80941Smrg AUB_DECODE_STAGE_VS, 40b8e80941Smrg AUB_DECODE_STAGE_HS, 41b8e80941Smrg AUB_DECODE_STAGE_DS, 42b8e80941Smrg AUB_DECODE_STAGE_GS, 43b8e80941Smrg AUB_DECODE_STAGE_PS, 44b8e80941Smrg AUB_DECODE_STAGE_CS, 45b8e80941Smrg AUB_DECODE_N_STAGE, 46b8e80941Smrg}; 47b8e80941Smrg 48b8e80941Smrgstruct aub_decode_urb_stage_state { 49b8e80941Smrg uint32_t start; 50b8e80941Smrg uint32_t size; 51b8e80941Smrg uint32_t n_entries; 52b8e80941Smrg 53b8e80941Smrg uint32_t const_rd_length; 54b8e80941Smrg uint32_t rd_offset; 55b8e80941Smrg uint32_t rd_length; 56b8e80941Smrg uint32_t wr_offset; 57b8e80941Smrg uint32_t wr_length; 58b8e80941Smrg}; 59b8e80941Smrg 60b8e80941Smrgstruct aub_viewer_decode_ctx { 61b8e80941Smrg struct gen_batch_decode_bo (*get_bo)(void *user_data, bool ppgtt, uint64_t address); 62b8e80941Smrg unsigned (*get_state_size)(void *user_data, 63b8e80941Smrg uint32_t offset_from_dynamic_state_base_addr); 64b8e80941Smrg 65b8e80941Smrg void (*display_shader)(void *user_data, const char *shader_desc, uint64_t address); 66b8e80941Smrg void (*display_urb)(void *user_data, const struct aub_decode_urb_stage_state *stages); 67b8e80941Smrg void (*edit_address)(void *user_data, uint64_t address, uint32_t length); 68b8e80941Smrg 69b8e80941Smrg void *user_data; 70b8e80941Smrg 71b8e80941Smrg struct gen_spec *spec; 72b8e80941Smrg struct gen_disasm *disasm; 73b8e80941Smrg enum drm_i915_gem_engine_class engine; 74b8e80941Smrg 75b8e80941Smrg struct aub_viewer_cfg *cfg; 76b8e80941Smrg struct aub_viewer_decode_cfg *decode_cfg; 77b8e80941Smrg 78b8e80941Smrg uint64_t surface_base; 79b8e80941Smrg uint64_t dynamic_base; 80b8e80941Smrg uint64_t instruction_base; 81b8e80941Smrg 82b8e80941Smrg enum aub_decode_stage stage; 83b8e80941Smrg uint32_t end_urb_offset; 84b8e80941Smrg struct aub_decode_urb_stage_state urb_stages[AUB_DECODE_N_STAGE]; 85b8e80941Smrg 86b8e80941Smrg int n_batch_buffer_start; 87b8e80941Smrg}; 88b8e80941Smrg 89b8e80941Smrgvoid aub_viewer_decode_ctx_init(struct aub_viewer_decode_ctx *ctx, 90b8e80941Smrg struct aub_viewer_cfg *cfg, 91b8e80941Smrg struct aub_viewer_decode_cfg *decode_cfg, 92b8e80941Smrg struct gen_spec *spec, 93b8e80941Smrg struct gen_disasm *disasm, 94b8e80941Smrg struct gen_batch_decode_bo (*get_bo)(void *, bool, uint64_t), 95b8e80941Smrg unsigned (*get_state_size)(void *, uint32_t), 96b8e80941Smrg void *user_data); 97b8e80941Smrg 98b8e80941Smrgvoid aub_viewer_render_batch(struct aub_viewer_decode_ctx *ctx, 99b8e80941Smrg const void *batch, uint32_t batch_size, 100b8e80941Smrg uint64_t batch_addr, bool from_ring); 101b8e80941Smrg 102b8e80941Smrg#endif /* AUBINATOR_VIEWER_H */ 103