/* * 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; } }