diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h index c0123af7ea0..5c202c5fba4 100644 --- a/src/broadcom/compiler/v3d_compiler.h +++ b/src/broadcom/compiler/v3d_compiler.h @@ -1205,8 +1205,8 @@ void ntq_flush_tmu(struct v3d_compile *c); void vir_emit_thrsw(struct v3d_compile *c); void vir_dump(struct v3d_compile *c); -void vir_dump_inst(struct v3d_compile *c, struct qinst *inst); -void vir_dump_uniform(enum quniform_contents contents, uint32_t data); +char *vir_dump_inst(struct v3d_compile *c, struct qinst *inst); +char *vir_dump_uniform(enum quniform_contents contents, uint32_t data); void vir_validate(struct v3d_compile *c); diff --git a/src/broadcom/compiler/vir_dump.c b/src/broadcom/compiler/vir_dump.c index 631eeee52ab..39c5ed857eb 100644 --- a/src/broadcom/compiler/vir_dump.c +++ b/src/broadcom/compiler/vir_dump.c @@ -23,9 +23,10 @@ #include "broadcom/common/v3d_device_info.h" #include "v3d_compiler.h" +#include "util/log.h" -/* Prints a human-readable description of the uniform reference. */ -void +/* Returns a human-readable description of the uniform reference. */ +char * vir_dump_uniform(enum quniform_contents contents, uint32_t data) { @@ -41,130 +42,131 @@ vir_dump_uniform(enum quniform_contents contents, switch (contents) { case QUNIFORM_CONSTANT: - fprintf(stderr, "0x%08x / %f", data, uif(data)); + return ralloc_asprintf(NULL, "0x%08x / %f", data, uif(data)); break; case QUNIFORM_UNIFORM: - fprintf(stderr, "push[%d]", data); + return ralloc_asprintf(NULL, "push[%d]", data); break; case QUNIFORM_TEXTURE_CONFIG_P1: - fprintf(stderr, "tex[%d].p1", data); + return ralloc_asprintf(NULL, "tex[%d].p1", data); break; case QUNIFORM_TMU_CONFIG_P0: - fprintf(stderr, "tex[%d].p0 | 0x%x", - v3d_unit_data_get_unit(data), - v3d_unit_data_get_offset(data)); + return ralloc_asprintf(NULL, "tex[%d].p0 | 0x%x", + v3d_unit_data_get_unit(data), + v3d_unit_data_get_offset(data)); break; case QUNIFORM_TMU_CONFIG_P1: - fprintf(stderr, "tex[%d].p1 | 0x%x", - v3d_unit_data_get_unit(data), - v3d_unit_data_get_offset(data)); + return ralloc_asprintf(NULL, "tex[%d].p1 | 0x%x", + v3d_unit_data_get_unit(data), + v3d_unit_data_get_offset(data)); break; case QUNIFORM_IMAGE_TMU_CONFIG_P0: - fprintf(stderr, "img[%d].p0 | 0x%x", - v3d_unit_data_get_unit(data), - v3d_unit_data_get_offset(data)); + return ralloc_asprintf(NULL, "img[%d].p0 | 0x%x", + v3d_unit_data_get_unit(data), + v3d_unit_data_get_offset(data)); break; case QUNIFORM_TEXTURE_WIDTH: - fprintf(stderr, "tex[%d].width", data); + return ralloc_asprintf(NULL, "tex[%d].width", data); break; case QUNIFORM_TEXTURE_HEIGHT: - fprintf(stderr, "tex[%d].height", data); + return ralloc_asprintf(NULL, "tex[%d].height", data); break; case QUNIFORM_TEXTURE_DEPTH: - fprintf(stderr, "tex[%d].depth", data); + return ralloc_asprintf(NULL, "tex[%d].depth", data); break; case QUNIFORM_TEXTURE_ARRAY_SIZE: - fprintf(stderr, "tex[%d].array_size", data); + return ralloc_asprintf(NULL, "tex[%d].array_size", data); break; case QUNIFORM_TEXTURE_LEVELS: - fprintf(stderr, "tex[%d].levels", data); + return ralloc_asprintf(NULL, "tex[%d].levels", data); break; case QUNIFORM_IMAGE_WIDTH: - fprintf(stderr, "img[%d].width", data); + return ralloc_asprintf(NULL, "img[%d].width", data); break; case QUNIFORM_IMAGE_HEIGHT: - fprintf(stderr, "img[%d].height", data); + return ralloc_asprintf(NULL, "img[%d].height", data); break; case QUNIFORM_IMAGE_DEPTH: - fprintf(stderr, "img[%d].depth", data); + return ralloc_asprintf(NULL, "img[%d].depth", data); break; case QUNIFORM_IMAGE_ARRAY_SIZE: - fprintf(stderr, "img[%d].array_size", data); + return ralloc_asprintf(NULL, "img[%d].array_size", data); break; case QUNIFORM_SPILL_OFFSET: - fprintf(stderr, "spill_offset"); + return ralloc_asprintf(NULL, "spill_offset"); break; case QUNIFORM_SPILL_SIZE_PER_THREAD: - fprintf(stderr, "spill_size_per_thread"); + return ralloc_asprintf(NULL, "spill_size_per_thread"); break; case QUNIFORM_UBO_ADDR: - fprintf(stderr, "ubo[%d]+0x%x", - v3d_unit_data_get_unit(data), - v3d_unit_data_get_offset(data)); + return ralloc_asprintf(NULL, "ubo[%d]+0x%x", + v3d_unit_data_get_unit(data), + v3d_unit_data_get_offset(data)); break; case QUNIFORM_SSBO_OFFSET: - fprintf(stderr, "ssbo[%d]", data); + return ralloc_asprintf(NULL, "ssbo[%d]", data); break; case QUNIFORM_GET_SSBO_SIZE: - fprintf(stderr, "ssbo_size[%d]", data); + return ralloc_asprintf(NULL, "ssbo_size[%d]", data); break; case QUNIFORM_GET_UBO_SIZE: - fprintf(stderr, "ubo_size[%d]", data); + return ralloc_asprintf(NULL, "ubo_size[%d]", data); break; case QUNIFORM_NUM_WORK_GROUPS: - fprintf(stderr, "num_wg.%c", data < 3 ? "xyz"[data] : '?'); + return ralloc_asprintf(NULL, "num_wg.%c", data < 3 ? "xyz"[data] : '?'); break; default: if (quniform_contents_is_texture_p0(contents)) { - fprintf(stderr, "tex[%d].p0: 0x%08x", - contents - QUNIFORM_TEXTURE_CONFIG_P0_0, - data); + return ralloc_asprintf(NULL, "tex[%d].p0: 0x%08x", + contents - QUNIFORM_TEXTURE_CONFIG_P0_0, + data); } else if (contents < ARRAY_SIZE(quniform_names) && quniform_names[contents]) { - fprintf(stderr, "%s", - quniform_names[contents]); + return ralloc_asprintf(NULL, "%s", + quniform_names[contents]); } else { - fprintf(stderr, "%d / 0x%08x", contents, data); + return ralloc_asprintf(NULL, "%d / 0x%08x", contents, data); } } } -static void -vir_print_reg(struct v3d_compile *c, const struct qinst *inst, - struct qreg reg) +static char * +vir_dump_reg(struct v3d_compile *c, const struct qinst *inst, + struct qreg reg) { switch (reg.file) { case QFILE_NULL: - fprintf(stderr, "null"); + return ralloc_asprintf(c, "null"); break; case QFILE_LOAD_IMM: - fprintf(stderr, "0x%08x (%f)", reg.index, uif(reg.index)); + return ralloc_asprintf(c, "0x%08x (%f)", + reg.index, uif(reg.index)); break; case QFILE_REG: - fprintf(stderr, "rf%d", reg.index); + return ralloc_asprintf(c, "rf%d", reg.index); break; case QFILE_MAGIC: - fprintf(stderr, "%s", - v3d_qpu_magic_waddr_name(c->devinfo, reg.index)); + return ralloc_asprintf(c, "%s", + v3d_qpu_magic_waddr_name(c->devinfo, reg.index)); break; case QFILE_SMALL_IMM: { @@ -176,169 +178,194 @@ vir_print_reg(struct v3d_compile *c, const struct qinst *inst, int8_t *p = (int8_t *)&inst->qpu.raddr_b; if (*p >= -16 && *p <= 15) - fprintf(stderr, "%d", unpacked); + return ralloc_asprintf(c, "%d", unpacked); else - fprintf(stderr, "%f", uif(unpacked)); + return ralloc_asprintf(c, "%f", uif(unpacked)); break; } case QFILE_TEMP: - fprintf(stderr, "t%d", reg.index); + return ralloc_asprintf(c, "t%d", reg.index); break; } + + return ralloc_strdup(c, ""); } -static void +static char * vir_dump_sig_addr(const struct v3d_device_info *devinfo, const struct v3d_qpu_instr *instr) { if (!instr->sig_magic) - fprintf(stderr, ".rf%d", instr->sig_addr); + return ralloc_asprintf(NULL, "rf%d", instr->sig_addr); else { const char *name = v3d_qpu_magic_waddr_name(devinfo, instr->sig_addr); if (name) - fprintf(stderr, ".%s", name); + return ralloc_asprintf(NULL, "%s", name); else - fprintf(stderr, ".UNKNOWN%d", instr->sig_addr); + return ralloc_asprintf(NULL, "UNKNOWN%d", instr->sig_addr); } } -static void +static char * vir_dump_sig(struct v3d_compile *c, struct qinst *inst) { struct v3d_qpu_sig *sig = &inst->qpu.sig; + char *dump_sig = ralloc_strdup(c, ""); + char *dump_sig_addr = NULL; + + if (sig->ldvary || sig->ldtmu || sig->ldtlb || + sig->ldtlbu || sig->ldunifrf || sig->ldunifarf) + dump_sig_addr = vir_dump_sig_addr(c->devinfo, &inst->qpu); if (sig->thrsw) - fprintf(stderr, "; thrsw"); + ralloc_asprintf_append(&dump_sig, "; thrsw"); if (sig->ldvary) { - fprintf(stderr, "; ldvary"); - vir_dump_sig_addr(c->devinfo, &inst->qpu); + ralloc_asprintf_append(&dump_sig, "; ldvary.%s", + dump_sig_addr); } if (sig->ldvpm) - fprintf(stderr, "; ldvpm"); + ralloc_asprintf_append(&dump_sig, "; ldvpm"); if (sig->ldtmu) { - fprintf(stderr, "; ldtmu"); - vir_dump_sig_addr(c->devinfo, &inst->qpu); + ralloc_asprintf_append(&dump_sig, "; ldtmu.%s", + dump_sig_addr); } if (sig->ldtlb) { - fprintf(stderr, "; ldtlb"); - vir_dump_sig_addr(c->devinfo, &inst->qpu); + ralloc_asprintf_append(&dump_sig, "; ldtlb.%s", + dump_sig_addr); } if (sig->ldtlbu) { - fprintf(stderr, "; ldtlbu"); - vir_dump_sig_addr(c->devinfo, &inst->qpu); + ralloc_asprintf_append(&dump_sig, "; ldtlbu.%s", + dump_sig_addr); } if (sig->ldunif) - fprintf(stderr, "; ldunif"); + ralloc_asprintf_append(&dump_sig, "; ldunif"); if (sig->ldunifrf) { - fprintf(stderr, "; ldunifrf"); - vir_dump_sig_addr(c->devinfo, &inst->qpu); + ralloc_asprintf_append(&dump_sig, "; ldunifrf.%s", + dump_sig_addr); } if (sig->ldunifa) - fprintf(stderr, "; ldunifa"); + ralloc_asprintf_append(&dump_sig, "; ldunifa"); if (sig->ldunifarf) { - fprintf(stderr, "; ldunifarf"); - vir_dump_sig_addr(c->devinfo, &inst->qpu); + ralloc_asprintf_append(&dump_sig, "; ldunifarf.%s", + dump_sig_addr); } if (sig->wrtmuc) - fprintf(stderr, "; wrtmuc"); + ralloc_asprintf_append(&dump_sig, "; wrtmuc"); + + if (dump_sig_addr) + ralloc_free(dump_sig_addr); + + return dump_sig; } -static void +static char * vir_dump_alu(struct v3d_compile *c, struct qinst *inst) { struct v3d_qpu_instr *instr = &inst->qpu; int nsrc = vir_get_nsrc(inst); enum v3d_qpu_input_unpack unpack[2]; + char *dump_alu; + char *dump_reg; if (inst->qpu.alu.add.op != V3D_QPU_A_NOP) { - fprintf(stderr, "%s", v3d_qpu_add_op_name(instr->alu.add.op)); - fprintf(stderr, "%s", v3d_qpu_cond_name(instr->flags.ac)); - fprintf(stderr, "%s", v3d_qpu_pf_name(instr->flags.apf)); - fprintf(stderr, "%s", v3d_qpu_uf_name(instr->flags.auf)); - fprintf(stderr, " "); - - vir_print_reg(c, inst, inst->dst); - fprintf(stderr, "%s", v3d_qpu_pack_name(instr->alu.add.output_pack)); + dump_reg = vir_dump_reg(c, inst, inst->dst); + dump_alu = + ralloc_asprintf(c, "%s%s%s%s %s%s", + v3d_qpu_add_op_name(instr->alu.add.op), + v3d_qpu_cond_name(instr->flags.ac), + v3d_qpu_pf_name(instr->flags.apf), + v3d_qpu_uf_name(instr->flags.auf), + dump_reg, + v3d_qpu_pack_name(instr->alu.add.output_pack)); unpack[0] = instr->alu.add.a.unpack; unpack[1] = instr->alu.add.b.unpack; } else { - fprintf(stderr, "%s", v3d_qpu_mul_op_name(instr->alu.mul.op)); - fprintf(stderr, "%s", v3d_qpu_cond_name(instr->flags.mc)); - fprintf(stderr, "%s", v3d_qpu_pf_name(instr->flags.mpf)); - fprintf(stderr, "%s", v3d_qpu_uf_name(instr->flags.muf)); - fprintf(stderr, " "); - - vir_print_reg(c, inst, inst->dst); - fprintf(stderr, "%s", v3d_qpu_pack_name(instr->alu.mul.output_pack)); + dump_reg = vir_dump_reg(c, inst, inst->dst); + dump_alu = + ralloc_asprintf(c, "%s%s%s%s %s%s", + v3d_qpu_mul_op_name(instr->alu.mul.op), + v3d_qpu_cond_name(instr->flags.mc), + v3d_qpu_pf_name(instr->flags.mpf), + v3d_qpu_uf_name(instr->flags.muf), + dump_reg, + v3d_qpu_pack_name(instr->alu.mul.output_pack)); unpack[0] = instr->alu.mul.a.unpack; unpack[1] = instr->alu.mul.b.unpack; } for (int i = 0; i < nsrc; i++) { - fprintf(stderr, ", "); - vir_print_reg(c, inst, inst->src[i]); - fprintf(stderr, "%s", v3d_qpu_unpack_name(unpack[i])); + dump_reg = vir_dump_reg(c, inst, inst->src[i]); + ralloc_asprintf_append(&dump_alu, ", %s%s", + dump_reg, + v3d_qpu_unpack_name(unpack[i])); } - vir_dump_sig(c, inst); + char *dump_sig = vir_dump_sig(c, inst); + ralloc_asprintf_append(&dump_alu, "%s", dump_sig); + + return dump_alu; } -void +char * vir_dump_inst(struct v3d_compile *c, struct qinst *inst) { struct v3d_qpu_instr *instr = &inst->qpu; + char *dump_inst = NULL; switch (inst->qpu.type) { case V3D_QPU_INSTR_TYPE_ALU: - vir_dump_alu(c, inst); + dump_inst = vir_dump_alu(c, inst); break; case V3D_QPU_INSTR_TYPE_BRANCH: - fprintf(stderr, "b"); - if (instr->branch.ub) - fprintf(stderr, "u"); - - fprintf(stderr, "%s", - v3d_qpu_branch_cond_name(instr->branch.cond)); - fprintf(stderr, "%s", v3d_qpu_msfign_name(instr->branch.msfign)); + dump_inst = + ralloc_asprintf(c, "b%s%s%s", + instr->branch.ub ? "u" : "", + v3d_qpu_branch_cond_name(instr->branch.cond), + v3d_qpu_msfign_name(instr->branch.msfign)); switch (instr->branch.bdi) { case V3D_QPU_BRANCH_DEST_ABS: - fprintf(stderr, " zero_addr+0x%08x", instr->branch.offset); + ralloc_asprintf_append(&dump_inst, + " zero_addr+0x%08x", + instr->branch.offset); break; case V3D_QPU_BRANCH_DEST_REL: - fprintf(stderr, " %d", instr->branch.offset); + ralloc_asprintf_append(&dump_inst, " %d", + instr->branch.offset); break; case V3D_QPU_BRANCH_DEST_LINK_REG: - fprintf(stderr, " lri"); + ralloc_asprintf_append(&dump_inst, " lri"); break; case V3D_QPU_BRANCH_DEST_REGFILE: - fprintf(stderr, " rf%d", instr->branch.raddr_a); + ralloc_asprintf_append(&dump_inst, " rf%d", + instr->branch.raddr_a); break; } if (instr->branch.ub) { switch (instr->branch.bdu) { case V3D_QPU_BRANCH_DEST_ABS: - fprintf(stderr, ", a:unif"); + ralloc_asprintf_append(&dump_inst, ", a:unif"); break; case V3D_QPU_BRANCH_DEST_REL: - fprintf(stderr, ", r:unif"); + ralloc_asprintf_append(&dump_inst, ", r:unif"); break; case V3D_QPU_BRANCH_DEST_LINK_REG: - fprintf(stderr, ", lri"); + ralloc_asprintf_append(&dump_inst, ", lri"); break; case V3D_QPU_BRANCH_DEST_REGFILE: - fprintf(stderr, ", rf%d", instr->branch.raddr_a); + ralloc_asprintf_append(&dump_inst, ", rf%d", + instr->branch.raddr_a); break; } } @@ -346,11 +373,13 @@ vir_dump_inst(struct v3d_compile *c, struct qinst *inst) } if (vir_has_uniform(inst)) { - fprintf(stderr, " ("); - vir_dump_uniform(c->uniform_contents[inst->uniform], - c->uniform_data[inst->uniform]); - fprintf(stderr, ")"); + char *dump_uniform = vir_dump_uniform(c->uniform_contents[inst->uniform], + c->uniform_data[inst->uniform]); + ralloc_asprintf_append(&dump_inst, " (%s)", dump_uniform); + ralloc_free(dump_uniform); } + + return dump_inst; } void @@ -415,8 +444,8 @@ vir_dump(struct v3d_compile *c) fprintf(stderr, " "); } - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + char *dump_inst = vir_dump_inst(c, inst); + fprintf(stderr, "%s\n", dump_inst); ip++; } if (block->successors[1]) { diff --git a/src/broadcom/compiler/vir_opt_copy_propagate.c b/src/broadcom/compiler/vir_opt_copy_propagate.c index 54b3be4ad9a..50fb5c5a2f9 100644 --- a/src/broadcom/compiler/vir_opt_copy_propagate.c +++ b/src/broadcom/compiler/vir_opt_copy_propagate.c @@ -219,9 +219,8 @@ try_copy_prop(struct v3d_compile *c, struct qinst *inst, struct qinst **movs) } if (debug) { - fprintf(stderr, "Copy propagate: "); - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + char *dump_inst = vir_dump_inst(c, inst); + fprintf(stderr, "Copy propagate: %s\n", dump_inst); } inst->src[i] = mov->src[0]; @@ -232,9 +231,8 @@ try_copy_prop(struct v3d_compile *c, struct qinst *inst, struct qinst **movs) } if (debug) { - fprintf(stderr, "to: "); - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + char *dump_inst = vir_dump_inst(c, inst); + fprintf(stderr, "to: %s\n", dump_inst); } progress = true; diff --git a/src/broadcom/compiler/vir_opt_dead_code.c b/src/broadcom/compiler/vir_opt_dead_code.c index 2d9f029d6eb..7f874cca5f9 100644 --- a/src/broadcom/compiler/vir_opt_dead_code.c +++ b/src/broadcom/compiler/vir_opt_dead_code.c @@ -43,9 +43,8 @@ static void dce(struct v3d_compile *c, struct qinst *inst) { if (debug) { - fprintf(stderr, "Removing: "); - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + char *dump_inst = vir_dump_inst(c, inst); + fprintf(stderr, "Removing: %s\n", dump_inst); } assert(!v3d_qpu_writes_flags(&inst->qpu)); vir_remove_instruction(c, inst); @@ -65,10 +64,10 @@ static void vir_dce_flags(struct v3d_compile *c, struct qinst *inst) { if (debug) { + char *dump_inst = vir_dump_inst(c, inst); fprintf(stderr, - "Removing flags write from: "); - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + "Removing flags write from: %s\n", + dump_inst); } assert(inst->qpu.type == V3D_QPU_INSTR_TYPE_ALU); @@ -248,10 +247,10 @@ vir_opt_dead_code(struct v3d_compile *c) if (inst->dst.file == QFILE_TEMP && can_write_to_null(c, inst)) { if (debug) { + char *dump_inst = vir_dump_inst(c, inst); fprintf(stderr, - "Removing dst from: "); - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + "Removing dst from: %s\n", + dump_inst); } c->defs[inst->dst.index] = NULL; inst->dst.file = QFILE_NULL; diff --git a/src/broadcom/compiler/vir_opt_redundant_flags.c b/src/broadcom/compiler/vir_opt_redundant_flags.c index 6b61ed6a39a..60a0733cfcb 100644 --- a/src/broadcom/compiler/vir_opt_redundant_flags.c +++ b/src/broadcom/compiler/vir_opt_redundant_flags.c @@ -36,10 +36,10 @@ static void vir_dce_pf(struct v3d_compile *c, struct qinst *inst) { if (debug) { + char *dump_inst = vir_dump_inst(c, inst); fprintf(stderr, - "Removing flags write from: "); - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + "Removing flags write from: %s\n", + dump_inst); } assert(inst->qpu.type == V3D_QPU_INSTR_TYPE_ALU); diff --git a/src/broadcom/compiler/vir_opt_small_immediates.c b/src/broadcom/compiler/vir_opt_small_immediates.c index 551bc1c8649..81fa23eec1e 100644 --- a/src/broadcom/compiler/vir_opt_small_immediates.c +++ b/src/broadcom/compiler/vir_opt_small_immediates.c @@ -116,9 +116,10 @@ vir_opt_small_immediates(struct v3d_compile *c) continue; if (debug) { - fprintf(stderr, "opt_small_immediate() from: "); - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + char *dump_inst = vir_dump_inst(c, inst); + fprintf(stderr, "opt_small_immediate() from: %s\n", + dump_inst); + ralloc_free(dump_inst); } inst->qpu.sig.small_imm_a = new_sig.small_imm_a; inst->qpu.sig.small_imm_b = new_sig.small_imm_b; @@ -129,9 +130,9 @@ vir_opt_small_immediates(struct v3d_compile *c) inst->src[i].file = QFILE_SMALL_IMM; inst->src[i].index = imm; if (debug) { - fprintf(stderr, "to: "); - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + char *dump_inst = vir_dump_inst(c, inst); + fprintf(stderr, "to: %s\n", dump_inst); + ralloc_free(dump_inst); } progress = true; break; diff --git a/src/broadcom/compiler/vir_to_qpu.c b/src/broadcom/compiler/vir_to_qpu.c index 605c3e4c7d5..bf27c503469 100644 --- a/src/broadcom/compiler/vir_to_qpu.c +++ b/src/broadcom/compiler/vir_to_qpu.c @@ -264,9 +264,8 @@ v3d_generate_code_block(struct v3d_compile *c, { vir_for_each_inst_safe(qinst, block) { #if 0 - fprintf(stderr, "translating qinst to qpu: "); - vir_dump_inst(c, qinst); - fprintf(stderr, "\n"); + char *dump_inst = vir_dump_inst(c, qinst); + fprintf(stderr, "translating qinst to qpu: %s\n"); #endif if (vir_has_uniform(qinst)) @@ -448,10 +447,10 @@ v3d_dump_qpu(struct v3d_compile *c) fprintf(stderr, "0x%016"PRIx64" %s", c->qpu_insts[i], str); if (reads_uniform(c->devinfo, c->qpu_insts[i])) { - fprintf(stderr, " ("); - vir_dump_uniform(c->uniform_contents[next_uniform], - c->uniform_data[next_uniform]); - fprintf(stderr, ")"); + char *str = vir_dump_uniform(c->uniform_contents[next_uniform], + c->uniform_data[next_uniform]); + fprintf(stderr, " (%s)", str); + ralloc_free(str); next_uniform++; } fprintf(stderr, "\n"); @@ -483,9 +482,9 @@ v3d_vir_to_qpu(struct v3d_compile *c, struct qpu_reg *temp_registers) bool ok = v3d_qpu_instr_pack(c->devinfo, &inst->qpu, &c->qpu_insts[i++]); if (!ok) { - fprintf(stderr, "Failed to pack instruction %d:\n", i); - vir_dump_inst(c, inst); - fprintf(stderr, "\n"); + char *dump_inst = vir_dump_inst(c, inst); + fprintf(stderr, "Failed to pack instruction %d:\n%s\n", i, + dump_inst); c->compilation_result = V3D_COMPILATION_FAILED; return; } diff --git a/src/gallium/drivers/v3d/v3d_uniforms.c b/src/gallium/drivers/v3d/v3d_uniforms.c index f7e9672f2f4..099e0a5252f 100644 --- a/src/gallium/drivers/v3d/v3d_uniforms.c +++ b/src/gallium/drivers/v3d/v3d_uniforms.c @@ -417,11 +417,12 @@ v3d_write_uniforms(struct v3d_context *v3d, struct v3d_job *job, } #if 0 uint32_t written_val = *((uint32_t *)uniforms - 1); - fprintf(stderr, "shader %p[%d]: 0x%08x / 0x%08x (%f) ", + char *str = vir_dump_uniform(uinfo->contents[i], data); + fprintf(stderr, "shader %p[%d]: 0x%08x / 0x%08x (%f) %s\n", shader, i, __gen_address_offset(&uniform_stream) + i * 4, - written_val, uif(written_val)); - vir_dump_uniform(uinfo->contents[i], data); - fprintf(stderr, "\n"); + written_val, uif(written_val), + str); + ralloc_free(str); #endif }