i965: add support for gen 5 pipelined pointers to dump
I wanted to see inside these, so added support to the dumper. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4846>
This commit is contained in:
@@ -840,6 +840,172 @@ decode_load_register_imm(struct gen_batch_decode_ctx *ctx, const uint32_t *p)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
decode_vs_state(struct gen_batch_decode_ctx *ctx, uint32_t offset)
|
||||
{
|
||||
struct gen_group *strct =
|
||||
gen_spec_find_struct(ctx->spec, "VS_STATE");
|
||||
if (strct == NULL) {
|
||||
fprintf(ctx->fp, "did not find VS_STATE info\n");
|
||||
return;
|
||||
}
|
||||
|
||||
struct gen_batch_decode_bo bind_bo =
|
||||
ctx_get_bo(ctx, true, offset);
|
||||
|
||||
if (bind_bo.map == NULL) {
|
||||
fprintf(ctx->fp, " vs state unavailable\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ctx_print_group(ctx, strct, offset, bind_bo.map);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
decode_clip_state(struct gen_batch_decode_ctx *ctx, uint32_t offset)
|
||||
{
|
||||
struct gen_group *strct =
|
||||
gen_spec_find_struct(ctx->spec, "CLIP_STATE");
|
||||
if (strct == NULL) {
|
||||
fprintf(ctx->fp, "did not find CLIP_STATE info\n");
|
||||
return;
|
||||
}
|
||||
|
||||
struct gen_batch_decode_bo bind_bo =
|
||||
ctx_get_bo(ctx, true, offset);
|
||||
|
||||
if (bind_bo.map == NULL) {
|
||||
fprintf(ctx->fp, " clip state unavailable\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ctx_print_group(ctx, strct, offset, bind_bo.map);
|
||||
|
||||
struct gen_group *vp_strct =
|
||||
gen_spec_find_struct(ctx->spec, "CLIP_VIEWPORT");
|
||||
if (vp_strct == NULL) {
|
||||
fprintf(ctx->fp, "did not find CLIP_VIEWPORT info\n");
|
||||
return;
|
||||
}
|
||||
uint32_t clip_vp_offset = ((uint32_t *)bind_bo.map)[6] & ~0x3;
|
||||
struct gen_batch_decode_bo vp_bo =
|
||||
ctx_get_bo(ctx, true, clip_vp_offset);
|
||||
if (vp_bo.map == NULL) {
|
||||
fprintf(ctx->fp, " clip vp state unavailable\n");
|
||||
return;
|
||||
}
|
||||
ctx_print_group(ctx, vp_strct, clip_vp_offset, vp_bo.map);
|
||||
}
|
||||
|
||||
static void
|
||||
decode_sf_state(struct gen_batch_decode_ctx *ctx, uint32_t offset)
|
||||
{
|
||||
struct gen_group *strct =
|
||||
gen_spec_find_struct(ctx->spec, "SF_STATE");
|
||||
if (strct == NULL) {
|
||||
fprintf(ctx->fp, "did not find SF_STATE info\n");
|
||||
return;
|
||||
}
|
||||
|
||||
struct gen_batch_decode_bo bind_bo =
|
||||
ctx_get_bo(ctx, true, offset);
|
||||
|
||||
if (bind_bo.map == NULL) {
|
||||
fprintf(ctx->fp, " sf state unavailable\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ctx_print_group(ctx, strct, offset, bind_bo.map);
|
||||
|
||||
struct gen_group *vp_strct =
|
||||
gen_spec_find_struct(ctx->spec, "SF_VIEWPORT");
|
||||
if (vp_strct == NULL) {
|
||||
fprintf(ctx->fp, "did not find SF_VIEWPORT info\n");
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t sf_vp_offset = ((uint32_t *)bind_bo.map)[5] & ~0x3;
|
||||
struct gen_batch_decode_bo vp_bo =
|
||||
ctx_get_bo(ctx, true, sf_vp_offset);
|
||||
if (vp_bo.map == NULL) {
|
||||
fprintf(ctx->fp, " sf vp state unavailable\n");
|
||||
return;
|
||||
}
|
||||
ctx_print_group(ctx, vp_strct, sf_vp_offset, vp_bo.map);
|
||||
}
|
||||
|
||||
static void
|
||||
decode_wm_state(struct gen_batch_decode_ctx *ctx, uint32_t offset)
|
||||
{
|
||||
struct gen_group *strct =
|
||||
gen_spec_find_struct(ctx->spec, "WM_STATE");
|
||||
if (strct == NULL) {
|
||||
fprintf(ctx->fp, "did not find WM_STATE info\n");
|
||||
return;
|
||||
}
|
||||
|
||||
struct gen_batch_decode_bo bind_bo =
|
||||
ctx_get_bo(ctx, true, offset);
|
||||
|
||||
if (bind_bo.map == NULL) {
|
||||
fprintf(ctx->fp, " wm state unavailable\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ctx_print_group(ctx, strct, offset, bind_bo.map);
|
||||
}
|
||||
|
||||
static void
|
||||
decode_cc_state(struct gen_batch_decode_ctx *ctx, uint32_t offset)
|
||||
{
|
||||
struct gen_group *strct =
|
||||
gen_spec_find_struct(ctx->spec, "COLOR_CALC_STATE");
|
||||
if (strct == NULL) {
|
||||
fprintf(ctx->fp, "did not find COLOR_CALC_STATE info\n");
|
||||
return;
|
||||
}
|
||||
|
||||
struct gen_batch_decode_bo bind_bo =
|
||||
ctx_get_bo(ctx, true, offset);
|
||||
|
||||
if (bind_bo.map == NULL) {
|
||||
fprintf(ctx->fp, " cc state unavailable\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ctx_print_group(ctx, strct, offset, bind_bo.map);
|
||||
|
||||
struct gen_group *vp_strct =
|
||||
gen_spec_find_struct(ctx->spec, "CC_VIEWPORT");
|
||||
if (vp_strct == NULL) {
|
||||
fprintf(ctx->fp, "did not find CC_VIEWPORT info\n");
|
||||
return;
|
||||
}
|
||||
uint32_t cc_vp_offset = ((uint32_t *)bind_bo.map)[4] & ~0x3;
|
||||
struct gen_batch_decode_bo vp_bo =
|
||||
ctx_get_bo(ctx, true, cc_vp_offset);
|
||||
if (vp_bo.map == NULL) {
|
||||
fprintf(ctx->fp, " cc vp state unavailable\n");
|
||||
return;
|
||||
}
|
||||
ctx_print_group(ctx, vp_strct, cc_vp_offset, vp_bo.map);
|
||||
}
|
||||
static void
|
||||
decode_pipelined_pointers(struct gen_batch_decode_ctx *ctx, const uint32_t *p)
|
||||
{
|
||||
fprintf(ctx->fp, "VS State Table:\n");
|
||||
decode_vs_state(ctx, p[1]);
|
||||
fprintf(ctx->fp, "Clip State Table:\n");
|
||||
decode_clip_state(ctx, p[3] & ~1);
|
||||
fprintf(ctx->fp, "SF State Table:\n");
|
||||
decode_sf_state(ctx, p[4]);
|
||||
fprintf(ctx->fp, "WM State Table:\n");
|
||||
decode_wm_state(ctx, p[5]);
|
||||
fprintf(ctx->fp, "CC State Table:\n");
|
||||
decode_cc_state(ctx, p[6]);
|
||||
}
|
||||
|
||||
struct custom_decoder {
|
||||
const char *cmd_name;
|
||||
void (*decode)(struct gen_batch_decode_ctx *ctx, const uint32_t *p);
|
||||
@@ -881,7 +1047,8 @@ struct custom_decoder {
|
||||
{ "3DSTATE_CC_STATE_POINTERS", decode_3dstate_cc_state_pointers },
|
||||
{ "3DSTATE_SCISSOR_STATE_POINTERS", decode_3dstate_scissor_state_pointers },
|
||||
{ "3DSTATE_SLICE_TABLE_STATE_POINTERS", decode_3dstate_slice_table_state_pointers },
|
||||
{ "MI_LOAD_REGISTER_IMM", decode_load_register_imm }
|
||||
{ "MI_LOAD_REGISTER_IMM", decode_load_register_imm },
|
||||
{ "3DSTATE_PIPELINED_POINTERS", decode_pipelined_pointers }
|
||||
};
|
||||
|
||||
void
|
||||
|
Reference in New Issue
Block a user