mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-26 10:18:12 +02:00
145 lines
3.8 KiB
C
145 lines
3.8 KiB
C
|
|
/*
|
||
|
|
* 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;
|
||
|
|
}
|
||
|
|
}
|