print_type(const glsl_type *t)
{
if (t->base_type == GLSL_TYPE_ARRAY) {
- printf("array\n");
- printf(" (");
+ printf("array (");
print_type(t->fields.array);
- printf(")\n");
-
- printf(" (%u)\n", t->length);
- printf(")");
+ printf(") (%u))", t->length);
} else if (t->base_type == GLSL_TYPE_STRUCT) {
- printf("struct (%s %u\n", t->name ? t->name : "@", t->length);
- printf(" (FINISHME: structure fields go here)\n");
+ printf("struct (%s %u ", t->name ? t->name : "@", t->length);
+ printf("(FINISHME: structure fields go here) ");
printf(")");
} else {
printf("%s", t->name);
void ir_print_visitor::visit(ir_variable *ir)
{
- printf("(declare \n");
-
- const char *const cent = (ir->centroid) ? "centroid " : "";
- const char *const inv = (ir->invariant) ? "invariant " : "";
- const char *const mode[] = { "", "uniform ", "in ", "out ", "inout " };
- const char *const interp[] = { "", "flat", "noperspective" };
+ if (deref_depth) {
+ printf("(%s)", ir->name);
+ } else {
+ printf("(declare ");
- printf(" (%s%s%s%s)\n",
- cent, inv, mode[ir->mode], interp[ir->interpolation]);
+ const char *const cent = (ir->centroid) ? "centroid " : "";
+ const char *const inv = (ir->invariant) ? "invariant " : "";
+ const char *const mode[] = { "", "uniform ", "in ", "out ", "inout " };
+ const char *const interp[] = { "", "flat", "noperspective" };
- printf(" (");
- print_type(ir->type);
- printf(")\n");
+ printf("(%s%s%s%s) ",
+ cent, inv, mode[ir->mode], interp[ir->interpolation]);
- printf(" (%s)\n", ir->name);
- printf(")\n");
+ printf("(");
+ print_type(ir->type);
+ printf(") ");
+ printf("(%s)) ", ir->name);
+ }
}
void ir_print_visitor::visit(ir_label *ir)
{
- printf("(label %s)\n", ir->label);
+ printf("\n(label %s)", ir->label);
}
void ir_print_visitor::visit(ir_expression *ir)
{
- printf("%s:%d:\n", __func__, __LINE__);
- (void) ir;
+ printf("(expression ");
+
+ printf("(FINISHME: operator) ");
+
+ printf("(");
+ if (ir->operands[0])
+ ir->operands[0]->accept(this);
+ printf(") ");
+
+ printf("(");
+ if (ir->operands[1])
+ ir->operands[1]->accept(this);
+ printf(")) ");
+}
+
+
+void ir_print_visitor::visit(ir_swizzle *ir)
+{
+ const unsigned swiz[4] = {
+ ir->mask.x,
+ ir->mask.y,
+ ir->mask.z,
+ ir->mask.w,
+ };
+
+ printf("(swiz ");
+ for (unsigned i = 0; i < ir->mask.num_components; i++) {
+ printf("%c", "xyzw"[swiz[i]]);
+ }
+ printf(" ");
+ ir->val->accept(this);
+ printf(")");
}
void ir_print_visitor::visit(ir_dereference *ir)
{
- printf("%s:%d:\n", __func__, __LINE__);
- (void) ir;
+ deref_depth++;
+
+ switch (ir->mode) {
+ case ir_dereference::ir_reference_variable: {
+ printf("(var_ref ");
+ ir->var->accept(this);
+ printf(") ");
+ break;
+ }
+ case ir_dereference::ir_reference_array:
+ printf("(array_ref ");
+ ir->var->accept(this);
+ ir->selector.array_index->accept(this);
+ printf(") ");
+ break;
+ case ir_dereference::ir_reference_record:
+ printf("(record_ref ");
+ ir->var->accept(this);
+ printf("(%s)) ", ir->selector.field);
+ break;
+ }
+
+ deref_depth--;
}
void ir_print_visitor::visit(ir_assignment *ir)
{
- printf("(assign\n");
+ printf("(assign (");
- printf(" (");
if (ir->condition)
ir->condition->accept(this);
else
printf("true");
- printf(")\n");
- printf(" (");
+ printf(") (");
+
ir->lhs->accept(this);
- printf(")\n");
- printf(" (");
+ printf(") (");
+
ir->rhs->accept(this);
- printf(")\n");
+ printf(") ");
}
void ir_print_visitor::visit(ir_constant *ir)
{
- (void) ir;
-
- printf("(constant\n");
- printf(" (");
- print_type(ir->type);
- printf(")\n");
- printf(" (FINISHME: value goes here)\n");
- printf(")\n");
+ const glsl_type *const base_type = ir->type->get_base_type();
+
+ printf("(constant (");
+ print_type(base_type);
+ printf(") ");
+
+ printf("(%d) (", ir->type->components());
+ for (unsigned i = 0; i < ir->type->components(); i++) {
+ if (i != 0)
+ printf(", ");
+
+ switch (base_type->base_type) {
+ case GLSL_TYPE_UINT: printf("%u", ir->value.u[i]); break;
+ case GLSL_TYPE_INT: printf("%d", ir->value.i[i]); break;
+ case GLSL_TYPE_FLOAT: printf("%f", ir->value.f[i]); break;
+ case GLSL_TYPE_BOOL: printf("%d", ir->value.b[i]); break;
+ default: assert(0);
+ }
+ }
+ printf(")) ");
}
{
printf("(return");
- ir_expression *const value = ir->get_value();
+ ir_rvalue *const value = ir->get_value();
if (value) {
printf(" ");
value->accept(this);
}
- printf(")\n");
+ printf(")");
}