X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglsl%2Fir_print_visitor.h;h=965e63ade8bec07fe8f7bc28a0548cd6d8e4aaec;hb=10f97718c353e101c64fa60fcde91e1550e39957;hp=e97b823522a3ceedf647b4f45d67de07737c7e7c;hpb=bcc13b74443137043e8a34f8cb64a5add0d8af93;p=mesa.git diff --git a/src/glsl/ir_print_visitor.h b/src/glsl/ir_print_visitor.h index e97b823522a..965e63ade8b 100644 --- a/src/glsl/ir_print_visitor.h +++ b/src/glsl/ir_print_visitor.h @@ -29,24 +29,19 @@ #include "ir.h" #include "ir_visitor.h" -extern void _mesa_print_ir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); +extern "C" { +#include "program/symbol_table.h" +} /** * Abstract base class of visitors of IR instruction trees */ class ir_print_visitor : public ir_visitor { public: - ir_print_visitor() - : deref_depth(0) - { - /* empty */ - } + ir_print_visitor(FILE *f); + virtual ~ir_print_visitor(); - virtual ~ir_print_visitor() - { - /* empty */ - } + void indent(void); /** * \name Visit methods @@ -56,6 +51,7 @@ public: * the hierarchy should not have \c visit methods. */ /*@{*/ + virtual void visit(ir_rvalue *); virtual void visit(ir_variable *); virtual void visit(ir_function_signature *); virtual void visit(ir_function *); @@ -69,13 +65,32 @@ public: virtual void visit(ir_constant *); virtual void visit(ir_call *); virtual void visit(ir_return *); + virtual void visit(ir_discard *); virtual void visit(ir_if *); virtual void visit(ir_loop *); virtual void visit(ir_loop_jump *); + virtual void visit(ir_emit_vertex *); + virtual void visit(ir_end_primitive *); + virtual void visit(ir_barrier *); /*@}*/ private: - int deref_depth; + /** + * Fetch/generate a unique name for ir_variable. + * + * GLSL IR permits multiple ir_variables to share the same name. This works + * fine until we try to print it, when we really need a unique one. + */ + const char *unique_name(ir_variable *var); + + /** A mapping from ir_variable * -> unique printable names. */ + hash_table *printable_names; + _mesa_symbol_table *symbols; + + void *mem_ctx; + FILE *f; + + int indentation; }; #endif /* IR_PRINT_VISITOR_H */