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