broadcom/compiler: make some dump functions return strings instead of printf

This will give better flexibility on how and where the dumps will be
done.

Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40434>
This commit is contained in:
Juan A. Suarez Romero 2026-03-26 19:52:20 +01:00 committed by Marge Bot
parent d22ab89805
commit 1e82e72039
8 changed files with 182 additions and 155 deletions

View file

@ -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);

View file

@ -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]) {

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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;

View file

@ -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;
}

View file

@ -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
}