vc4: Extend dumping of uniforms in QIR and in the command stream.

Similar to what I did for V3D, provide some description of the uniforms.
This commit is contained in:
Eric Anholt
2018-08-07 13:38:36 -07:00
parent 3954331aff
commit e24a8e5232
3 changed files with 68 additions and 13 deletions
+54 -8
View File
@@ -343,13 +343,57 @@ qir_channels_written(struct qinst *inst)
unreachable("Bad pack field");
}
char *
qir_describe_uniform(enum quniform_contents contents, uint32_t data,
const uint32_t *uniforms)
{
static const char *quniform_names[] = {
[QUNIFORM_VIEWPORT_X_SCALE] = "vp_x_scale",
[QUNIFORM_VIEWPORT_Y_SCALE] = "vp_y_scale",
[QUNIFORM_VIEWPORT_Z_OFFSET] = "vp_z_offset",
[QUNIFORM_VIEWPORT_Z_SCALE] = "vp_z_scale",
[QUNIFORM_TEXTURE_CONFIG_P0] = "tex_p0",
[QUNIFORM_TEXTURE_CONFIG_P1] = "tex_p1",
[QUNIFORM_TEXTURE_CONFIG_P2] = "tex_p2",
[QUNIFORM_TEXTURE_FIRST_LEVEL] = "tex_first_level",
};
switch (contents) {
case QUNIFORM_CONSTANT:
return ralloc_asprintf(NULL, "0x%08x / %f", data, uif(data));
case QUNIFORM_UNIFORM:
if (uniforms) {
uint32_t unif = uniforms[data];
return ralloc_asprintf(NULL, "unif[%d] = 0x%08x / %f",
data, unif, uif(unif));
} else {
return ralloc_asprintf(NULL, "unif[%d]", data);
}
case QUNIFORM_TEXTURE_CONFIG_P0:
case QUNIFORM_TEXTURE_CONFIG_P1:
case QUNIFORM_TEXTURE_CONFIG_P2:
case QUNIFORM_TEXTURE_FIRST_LEVEL:
return ralloc_asprintf(NULL, "%s[%d]",
quniform_names[contents], data);
default:
if (contents < ARRAY_SIZE(quniform_names) &&
quniform_names[contents]) {
return ralloc_asprintf(NULL, "%s",
quniform_names[contents]);
} else {
return ralloc_asprintf(NULL, "??? %d", contents);
}
}
}
static void
qir_print_reg(struct vc4_compile *c, struct qreg reg, bool write)
{
static const char *files[] = {
[QFILE_TEMP] = "t",
[QFILE_VARY] = "v",
[QFILE_UNIF] = "u",
[QFILE_TLB_COLOR_WRITE] = "tlb_c",
[QFILE_TLB_COLOR_WRITE_MS] = "tlb_c_ms",
[QFILE_TLB_Z_WRITE] = "tlb_z",
@@ -403,16 +447,18 @@ qir_print_reg(struct vc4_compile *c, struct qreg reg, bool write)
fprintf(stderr, "%s", files[reg.file]);
break;
default:
fprintf(stderr, "%s%d", files[reg.file], reg.index);
case QFILE_UNIF: {
char *desc = qir_describe_uniform(c->uniform_contents[reg.index],
c->uniform_data[reg.index],
NULL);
fprintf(stderr, "u%d (%s)", reg.index, desc);
ralloc_free(desc);
break;
}
if (reg.file == QFILE_UNIF &&
c->uniform_contents[reg.index] == QUNIFORM_CONSTANT) {
fprintf(stderr, " (0x%08x / %f)",
c->uniform_data[reg.index],
uif(c->uniform_data[reg.index]));
default:
fprintf(stderr, "%s%d", files[reg.file], reg.index);
break;
}
}
+2
View File
@@ -592,6 +592,8 @@ uint8_t qir_channels_written(struct qinst *inst);
void qir_dump(struct vc4_compile *c);
void qir_dump_inst(struct vc4_compile *c, struct qinst *inst);
char *qir_describe_uniform(enum quniform_contents contents, uint32_t data,
const uint32_t *uniforms);
const char *qir_get_stage_name(enum qstage stage);
void qir_validate(struct vc4_compile *c);
+12 -5
View File
@@ -360,11 +360,18 @@ vc4_write_uniforms(struct vc4_context *vc4, struct vc4_compiled_shader *shader,
cl_aligned_u32(&uniforms, 0xd0d0d0d0);
break;
}
#if 0
uint32_t written_val = *((uint32_t *)uniforms - 1);
fprintf(stderr, "%p: %d / 0x%08x (%f)\n",
shader, i, written_val, uif(written_val));
#endif
if (false) {
uint32_t written_val = *((uint32_t *)uniforms - 1);
char *desc = qir_describe_uniform(uinfo->contents[i],
uinfo->data[i],
gallium_uniforms);
fprintf(stderr, "%p/%d: 0x%08x %s\n",
shader, i, written_val, desc);
ralloc_free(desc);
}
}
cl_end(&job->uniforms, uniforms);