Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /* -*- c++ -*- */
  2. /*
  3.  * Copyright © 2010 Intel Corporation
  4.  *
  5.  * Permission is hereby granted, free of charge, to any person obtaining a
  6.  * copy of this software and associated documentation files (the "Software"),
  7.  * to deal in the Software without restriction, including without limitation
  8.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  9.  * and/or sell copies of the Software, and to permit persons to whom the
  10.  * Software is furnished to do so, subject to the following conditions:
  11.  *
  12.  * The above copyright notice and this permission notice (including the next
  13.  * paragraph) shall be included in all copies or substantial portions of the
  14.  * Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  21.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  22.  * DEALINGS IN THE SOFTWARE.
  23.  */
  24.  
  25. #pragma once
  26. #ifndef IR_PRINT_VISITOR_H
  27. #define IR_PRINT_VISITOR_H
  28.  
  29. #include "ir.h"
  30. #include "ir_visitor.h"
  31.  
  32. extern "C" {
  33. #include "program/symbol_table.h"
  34. }
  35.  
  36. /**
  37.  * Abstract base class of visitors of IR instruction trees
  38.  */
  39. class ir_print_visitor : public ir_visitor {
  40. public:
  41.    ir_print_visitor();
  42.    virtual ~ir_print_visitor();
  43.  
  44.    void indent(void);
  45.  
  46.    /**
  47.     * \name Visit methods
  48.     *
  49.     * As typical for the visitor pattern, there must be one \c visit method for
  50.     * each concrete subclass of \c ir_instruction.  Virtual base classes within
  51.     * the hierarchy should not have \c visit methods.
  52.     */
  53.    /*@{*/
  54.    virtual void visit(ir_rvalue *);
  55.    virtual void visit(ir_variable *);
  56.    virtual void visit(ir_function_signature *);
  57.    virtual void visit(ir_function *);
  58.    virtual void visit(ir_expression *);
  59.    virtual void visit(ir_texture *);
  60.    virtual void visit(ir_swizzle *);
  61.    virtual void visit(ir_dereference_variable *);
  62.    virtual void visit(ir_dereference_array *);
  63.    virtual void visit(ir_dereference_record *);
  64.    virtual void visit(ir_assignment *);
  65.    virtual void visit(ir_constant *);
  66.    virtual void visit(ir_call *);
  67.    virtual void visit(ir_return *);
  68.    virtual void visit(ir_discard *);
  69.    virtual void visit(ir_if *);
  70.    virtual void visit(ir_loop *);
  71.    virtual void visit(ir_loop_jump *);
  72.    /*@}*/
  73.  
  74. private:
  75.    /**
  76.     * Fetch/generate a unique name for ir_variable.
  77.     *
  78.     * GLSL IR permits multiple ir_variables to share the same name.  This works
  79.     * fine until we try to print it, when we really need a unique one.
  80.     */
  81.    const char *unique_name(ir_variable *var);
  82.  
  83.    /** A mapping from ir_variable * -> unique printable names. */
  84.    hash_table *printable_names;
  85.    _mesa_symbol_table *symbols;
  86.  
  87.    void *mem_ctx;
  88.  
  89.    int indentation;
  90. };
  91.  
  92. #endif /* IR_PRINT_VISITOR_H */
  93.