nir/print: print variable constant-initializers
authorRob Clark <robclark@freedesktop.org>
Tue, 22 Dec 2015 21:50:23 +0000 (16:50 -0500)
committerRob Clark <robclark@freedesktop.org>
Wed, 23 Dec 2015 05:28:01 +0000 (00:28 -0500)
Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/nir/nir_print.c

index 1a4cc695d5a3def0f6be762d3e53f81c51e11b31..56e570504d7f42a711b9350f741193a722f32048 100644 (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) {