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