| /* |
| * Copyright © 2017 Intel Corporation |
| * SPDX-License-Identifier: MIT |
| */ |
| |
| #include "intel_decoder.h" |
| #include "intel_decoder_private.h" |
| |
| #include "compiler/elk/elk_disasm.h" |
| |
| static void |
| ctx_disassemble_program_elk(struct intel_batch_decode_ctx *ctx, |
| uint32_t ksp, |
| const char *short_name, |
| const char *name) |
| { |
| uint64_t addr = ctx->instruction_base + ksp; |
| struct intel_batch_decode_bo bo = ctx_get_bo(ctx, true, addr); |
| if (!bo.map) |
| return; |
| |
| fprintf(ctx->fp, "\nReferenced %s:\n", name); |
| elk_disassemble_with_errors(ctx->elk, bo.map, 0, ctx->fp); |
| |
| if (ctx->shader_binary) { |
| int size = elk_disassemble_find_end(ctx->elk, bo.map, 0); |
| |
| ctx->shader_binary(ctx->user_data, short_name, addr, |
| bo.map, size); |
| } |
| } |
| |
| void |
| intel_batch_decode_ctx_init_elk(struct intel_batch_decode_ctx *ctx, |
| const struct elk_isa_info *isa, |
| const struct intel_device_info *devinfo, |
| FILE *fp, enum intel_batch_decode_flags flags, |
| const char *xml_path, |
| struct intel_batch_decode_bo (*get_bo)(void *, |
| bool, |
| uint64_t), |
| unsigned (*get_state_size)(void *, uint64_t, |
| uint64_t), |
| void *user_data) |
| { |
| intel_batch_decode_ctx_init(ctx, devinfo, fp, flags, xml_path, |
| get_bo, get_state_size, user_data); |
| ctx->elk = isa; |
| ctx->disassemble_program = ctx_disassemble_program_elk; |
| } |
| |