#include "glsl_parser_extras.h"
#include "main/macros.h"
#include "util/hash_table.h"
+#include "util/u_string.h"
class ir_builder_print_visitor : public ir_hierarchical_visitor {
public:
virtual ir_visitor_status visit_leave(class ir_swizzle *);
virtual ir_visitor_status visit_leave(class ir_return *);
+ virtual ir_visitor_status visit_enter(ir_texture *ir);
+
private:
void print_with_indent(const char *fmt, ...);
void print_without_indent(const char *fmt, ...);
case ir_type_expression: {
const ir_expression *expr = (ir_expression *) ir;
- for (unsigned i = 0; i < expr->get_num_operands(); i++) {
+ for (unsigned i = 0; i < expr->num_operands; i++) {
if (!is_simple_operand(expr->operands[i], depth - 1))
return false;
}
ir_builder_print_visitor::ir_builder_print_visitor(FILE *f)
: next_ir_index(1), f(f), indentation(0)
{
- index_map =
- _mesa_hash_table_create(NULL, _mesa_hash_pointer, _mesa_key_pointer_equal);
+ index_map = _mesa_pointer_hash_table_create(NULL);
}
ir_builder_print_visitor::~ir_builder_print_visitor()
switch (ir->type->base_type) {
case GLSL_TYPE_UINT:
if (ir->value.u[i] != 0)
- print_without_indent("r%04X_data.u[%u] = %u;\n",
+ print_with_indent("r%04X_data.u[%u] = %u;\n",
my_index, i, ir->value.u[i]);
break;
case GLSL_TYPE_INT:
if (ir->value.i[i] != 0)
- print_without_indent("r%04X_data.i[%u] = %i;\n",
+ print_with_indent("r%04X_data.i[%u] = %i;\n",
my_index, i, ir->value.i[i]);
break;
case GLSL_TYPE_FLOAT:
if (ir->value.u[i] != 0)
- print_without_indent("r%04X_data.u[%u] = 0x%08x; /* %f */\n",
+ print_with_indent("r%04X_data.u[%u] = 0x%08x; /* %f */\n",
my_index,
i,
ir->value.u[i],
memcpy(&v, &ir->value.d[i], sizeof(v));
if (v != 0)
- print_without_indent("r%04X_data.u64[%u] = 0x%016" PRIx64 "; /* %g */\n",
+ print_with_indent("r%04X_data.u64[%u] = 0x%016" PRIx64 "; /* %g */\n",
my_index, i, v, ir->value.d[i]);
break;
}
case GLSL_TYPE_UINT64:
if (ir->value.u64[i] != 0)
- print_without_indent("r%04X_data.u64[%u] = %" PRIu64 ";\n",
+ print_with_indent("r%04X_data.u64[%u] = %" PRIu64 ";\n",
my_index,
i,
ir->value.u64[i]);
break;
case GLSL_TYPE_INT64:
if (ir->value.i64[i] != 0)
- print_without_indent("r%04X_data.i64[%u] = %" PRId64 ";\n",
+ print_with_indent("r%04X_data.i64[%u] = %" PRId64 ";\n",
my_index,
i,
ir->value.i64[i]);
break;
case GLSL_TYPE_BOOL:
if (ir->value.u[i] != 0)
- print_without_indent("r%04X_data.u[%u] = 1;\n", my_index, i);
+ print_with_indent("r%04X_data.u[%u] = 1;\n", my_index, i);
break;
default:
unreachable("Invalid constant type");
print_without_declaration(ir->val);
print_without_indent(")");
} else {
+ assert(he);
print_without_indent("swizzle_%c(r%04X)",
swiz[ir->mask.x],
(unsigned)(uintptr_t) he->data);
} else {
static const char swiz[4] = { 'X', 'Y', 'Z', 'W' };
+ assert(he);
print_without_indent("swizzle(r%04X, MAKE_SWIZZLE4(SWIZZLE_%c, SWIZZLE_%c, SWIZZLE_%c, SWIZZLE_%c), %u)",
(unsigned)(uintptr_t) he->data,
swiz[ir->mask.x],
return visit_continue;
if (rhs_expr != NULL) {
- const unsigned num_op = rhs_expr->get_num_operands();
+ const unsigned num_op = rhs_expr->num_operands;
for (unsigned i = 0; i < num_op; i++) {
if (is_simple_operand(rhs_expr->operands[i]))
_mesa_hash_table_search(index_map, ir->rhs);
assert(ir->condition == NULL);
+ assert(ir->lhs && ir->rhs);
print_with_indent("body.emit(assign(r%04X, r%04X, 0x%02x));\n\n",
(unsigned)(uintptr_t) he_lhs->data,
void
ir_builder_print_visitor::print_without_declaration(const ir_expression *ir)
{
- const unsigned num_op = ir->get_num_operands();
+ const unsigned num_op = ir->num_operands;
static const char *const arity[] = {
"", "unop", "binop", "triop", "quadop"
case ir_binop_mul:
case ir_binop_imul_high:
case ir_binop_less:
- case ir_binop_greater:
- case ir_binop_lequal:
case ir_binop_gequal:
case ir_binop_equal:
case ir_binop_nequal:
ir_visitor_status
ir_builder_print_visitor::visit_enter(ir_expression *ir)
{
- const unsigned num_op = ir->get_num_operands();
+ const unsigned num_op = ir->num_operands;
for (unsigned i = 0; i < num_op; i++) {
if (is_simple_operand(ir->operands[i]))
if (s != visit_continue_with_parent) {
s = visit_list_elements(this, &ir->then_instructions);
if (s == visit_stop)
- return s;
+ return s;
}
print_without_indent("\n");
return visit_continue;
}
+ir_visitor_status
+ir_builder_print_visitor::visit_enter(ir_texture *ir)
+{
+ print_with_indent("\nUnsupported IR is encountered: texture functions are not supported. Exiting.\n");
+
+ return visit_stop;
+}
+
ir_visitor_status
ir_builder_print_visitor::visit_leave(ir_call *ir)
{
_mesa_hash_table_search(index_map, ir->return_deref);
snprintf(return_deref_string, sizeof(return_deref_string),
- "operand(r%04X).val",
- (unsigned)(uintptr_t) he->data);
+ "operand(r%04X).val", (unsigned)(uintptr_t) he->data);
} else {
strcpy(return_deref_string, "NULL");
}