102dadec81
The engine to which the batch was sent to is now set to the decoder context when decoding the batch. This is needed so that we can distinguish between instructions as the render and video pipe share some of the instruction opcodes. v2: The engine is now in the decoder context and the batch decoder uses a local function for finding the instruction for an engine. v3: Spec uses engine_mask now instead of engine, replaced engine class enums with the definitions from UAPI. v4: Fix up aubinator_viewer (Lionel) Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
99 lines
2.7 KiB
C
99 lines
2.7 KiB
C
#ifndef AUBINATOR_VIEWER_H
|
|
#define AUBINATOR_VIEWER_H
|
|
|
|
#include "imgui.h"
|
|
|
|
#include "common/gen_decoder.h"
|
|
#include "common/gen_disasm.h"
|
|
|
|
struct aub_viewer_cfg {
|
|
ImColor clear_color;
|
|
ImColor dwords_color;
|
|
ImColor highlight_color;
|
|
ImColor error_color;
|
|
ImColor missing_color;
|
|
|
|
aub_viewer_cfg() :
|
|
clear_color(114, 144, 154),
|
|
dwords_color(29, 177, 194, 255),
|
|
highlight_color(0, 230, 0, 255),
|
|
error_color(236, 255, 0, 255),
|
|
missing_color(230, 0, 230, 255) {}
|
|
};
|
|
|
|
struct aub_viewer_decode_cfg {
|
|
struct ImGuiTextFilter command_filter;
|
|
struct ImGuiTextFilter field_filter;
|
|
|
|
bool drop_filtered;
|
|
bool show_dwords;
|
|
|
|
aub_viewer_decode_cfg() :
|
|
drop_filtered(false),
|
|
show_dwords(true) {}
|
|
};
|
|
|
|
enum aub_decode_stage {
|
|
AUB_DECODE_STAGE_VS,
|
|
AUB_DECODE_STAGE_HS,
|
|
AUB_DECODE_STAGE_DS,
|
|
AUB_DECODE_STAGE_GS,
|
|
AUB_DECODE_STAGE_PS,
|
|
AUB_DECODE_STAGE_CS,
|
|
AUB_DECODE_N_STAGE,
|
|
};
|
|
|
|
struct aub_decode_urb_stage_state {
|
|
uint32_t start;
|
|
uint32_t size;
|
|
uint32_t n_entries;
|
|
|
|
uint32_t const_rd_length;
|
|
uint32_t rd_offset;
|
|
uint32_t rd_length;
|
|
uint32_t wr_offset;
|
|
uint32_t wr_length;
|
|
};
|
|
|
|
struct aub_viewer_decode_ctx {
|
|
struct gen_batch_decode_bo (*get_bo)(void *user_data, uint64_t address);
|
|
unsigned (*get_state_size)(void *user_data,
|
|
uint32_t offset_from_dynamic_state_base_addr);
|
|
|
|
void (*display_shader)(void *user_data, const char *shader_desc, uint64_t address);
|
|
void (*display_urb)(void *user_data, const struct aub_decode_urb_stage_state *stages);
|
|
void (*edit_address)(void *user_data, uint64_t address, uint32_t length);
|
|
|
|
void *user_data;
|
|
|
|
struct gen_spec *spec;
|
|
struct gen_disasm *disasm;
|
|
enum drm_i915_gem_engine_class engine;
|
|
|
|
struct aub_viewer_cfg *cfg;
|
|
struct aub_viewer_decode_cfg *decode_cfg;
|
|
|
|
uint64_t surface_base;
|
|
uint64_t dynamic_base;
|
|
uint64_t instruction_base;
|
|
|
|
enum aub_decode_stage stage;
|
|
uint32_t end_urb_offset;
|
|
struct aub_decode_urb_stage_state urb_stages[AUB_DECODE_N_STAGE];
|
|
};
|
|
|
|
void aub_viewer_decode_ctx_init(struct aub_viewer_decode_ctx *ctx,
|
|
struct aub_viewer_cfg *cfg,
|
|
struct aub_viewer_decode_cfg *decode_cfg,
|
|
struct gen_spec *spec,
|
|
struct gen_disasm *disasm,
|
|
struct gen_batch_decode_bo (*get_bo)(void *, uint64_t),
|
|
unsigned (*get_state_size)(void *, uint32_t),
|
|
void *user_data);
|
|
|
|
void aub_viewer_render_batch(struct aub_viewer_decode_ctx *ctx,
|
|
const void *batch, uint32_t batch_size,
|
|
uint64_t batch_addr);
|
|
|
|
#endif /* AUBINATOR_VIEWER_H */
|