nir/print: print variable constant-initializers

Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Rob Clark 2015-12-22 16:50:23 -05:00
parent 6524897606
commit dc21747838
1 changed files with 53 additions and 0 deletions

View File

@ -219,6 +219,53 @@ print_alu_instr(nir_alu_instr *instr, print_state *state)
}
}
static void
print_constant(nir_constant *c, const struct glsl_type *type, print_state *state)
{
FILE *fp = state->fp;
unsigned total_elems = glsl_get_components(type);
unsigned i;
switch (glsl_get_base_type(type)) {
case GLSL_TYPE_UINT:
case GLSL_TYPE_INT:
case GLSL_TYPE_BOOL:
for (i = 0; i < total_elems; i++) {
if (i > 0) fprintf(fp, ", ");
fprintf(fp, "0x%08x", c->value.u[i]);
}
break;
case GLSL_TYPE_FLOAT:
for (i = 0; i < total_elems; i++) {
if (i > 0) fprintf(fp, ", ");
fprintf(fp, "%f", c->value.f[i]);
}
break;
case GLSL_TYPE_STRUCT:
for (i = 0; i < c->num_elements; i++) {
if (i > 0) fprintf(fp, ", ");
fprintf(fp, "{ ");
print_constant(c->elements[i], glsl_get_struct_field(type, i), state);
fprintf(fp, " }");
}
break;
case GLSL_TYPE_ARRAY:
for (i = 0; i < c->num_elements; i++) {
if (i > 0) fprintf(fp, ", ");
fprintf(fp, "{ ");
print_constant(c->elements[i], glsl_get_array_element(type), state);
fprintf(fp, " }");
}
break;
default:
unreachable("not reached");
}
}
static void
print_var_decl(nir_variable *var, print_state *state)
{
@ -295,6 +342,12 @@ print_var_decl(nir_variable *var, print_state *state)
fprintf(fp, " (%s, %u)", loc, var->data.driver_location);
}
if (var->constant_initializer) {
fprintf(fp, " = { ");
print_constant(var->constant_initializer, var->type, state);
fprintf(fp, " }");
}
fprintf(fp, "\n");
if (state->syms) {