blob: d5b4b02b0f82a67e48e234fa7e051194dd350b00 [file] [edit]
/*
* Copyright 2026 Intel Corporation
* SPDX-License-Identifier: MIT
*/
#include "libintel_shaders.h"
#define CMD(cmd_type, cmd_subtype, _opcode, _subopcode) \
(((cmd_type) << 29) | \
((cmd_subtype) << 27) | \
((_opcode) << 24) | \
((_subopcode) << 16))
#define CMD5(cmd_type, cmd_subtype, _opcode, _subopcode, _variant) \
(((cmd_type) << 29) | \
((cmd_subtype) << 27) | \
((_opcode) << 24) | \
((_subopcode) << 18) | \
((_variant) << 16))
void
genX(libanv_dgc_dump)(global uint32_t *cmd_base,
uint32_t n_dwords,
global void *call_addr)
{
printf("call from 0x%016lx\n", call_addr);
uint32_t bbs_count = 0;
for (uint32_t i = 0; i < n_dwords && bbs_count < 2; ) {
uint32_t n_dwords = cmd_base[i] & 0xff;
uint32_t bias_dwords = 0;
printf("0x%016lx: ", cmd_base + i);
switch (cmd_base[i] & 0xffff0000) {
case CMD(3, 3, 3, 0):
printf("3DPRIMITIVE\n");
bias_dwords = 2;
break;
case CMD(3, 3, 3, 2):
printf("3DMESH_3D\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 21):
printf("3DSTATE_CONSTANT_VS\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 25):
printf("3DSTATE_CONSTANT_HS\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 26):
printf("3DSTATE_CONSTANT_DS\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 22):
printf("3DSTATE_CONSTANT_GS\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 23):
printf("3DSTATE_CONSTANT_PS\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 109):
printf("3DSTATE_CONSTANT_ALL\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 123):
printf("3DSTATE_MESH_SHADER_DATA\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 126):
printf("3DSTATE_TASK_SHADER_DATA\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 10):
printf("3DSTATE_INDEX_BUFFER\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 8):
printf("3DSTATE_VERTEX_BUFFERS\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 27):
printf("3DSTATE_HS\n");
bias_dwords = 2;
break;
case CMD(3, 3, 0, 29):
printf("3DSTATE_DS\n");
bias_dwords = 2;
break;
case CMD(3, 2, 0, 4):
printf("MEDIA_STATE_FLUSH\n");
bias_dwords = 2;
break;
case CMD(3, 2, 0, 0):
printf("MEDIA_VFE_STATE\n");
bias_dwords = 2;
break;
case CMD(3, 2, 0, 1):
printf("MEDIA_CURBE_LOAD\n");
bias_dwords = 2;
break;
case CMD(3, 2, 0, 2):
printf("MEDIA_INTERFACE_DESCRIPTOR_LOAD\n");
bias_dwords = 2;
break;
case CMD(3, 2, 1, 5):
printf("GPGPU_WALKER\n");
bias_dwords = 2;
break;
case CMD5(3, 2, 2, 2, 0):
printf("COMPUTE_WALKER\n");
bias_dwords = 2;
break;
case 0x10000000:
printf("MI_STORE_DATA_IMM\n");
bias_dwords = 2;
break;
case 0x02800000:
printf("MI_ARB_CHECK\n");
bias_dwords = 1;
break;
case 0x18800000:
printf("MI_BATCH_BUFFER_START\n");
bias_dwords = 2;
bbs_count++;
break;
case 0x00000000:
printf("MI_NOOP\n");
bias_dwords = 1;
break;
default:
printf("unknown : 0x%08x\n", cmd_base[i]);
return;
}
printf(" ");
for (uint32_t j = 0; j < (bias_dwords + n_dwords); j++) {
if (j > 0 && (j % 8) == 0)
printf("\n ");
printf("0x%08x ", cmd_base[i + j]);
}
printf("\n");
i += bias_dwords + n_dwords;
}
}