Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | 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 void _mesa_print_ir(exec_list *instructions,
  33.                            struct _mesa_glsl_parse_state *state);
  34.  
  35. /**
  36.  * Abstract base class of visitors of IR instruction trees
  37.  */
  38. class ir_print_visitor : public ir_visitor {
  39. public:
  40.    ir_print_visitor()
  41.    {
  42.       indentation = 0;
  43.    }
  44.  
  45.    virtual ~ir_print_visitor()
  46.    {
  47.       /* empty */
  48.    }
  49.  
  50.    void indent(void);
  51.  
  52.    /**
  53.     * \name Visit methods
  54.     *
  55.     * As typical for the visitor pattern, there must be one \c visit method for
  56.     * each concrete subclass of \c ir_instruction.  Virtual base classes within
  57.     * the hierarchy should not have \c visit methods.
  58.     */
  59.    /*@{*/
  60.    virtual void visit(ir_variable *);
  61.    virtual void visit(ir_function_signature *);
  62.    virtual void visit(ir_function *);
  63.    virtual void visit(ir_expression *);
  64.    virtual void visit(ir_texture *);
  65.    virtual void visit(ir_swizzle *);
  66.    virtual void visit(ir_dereference_variable *);
  67.    virtual void visit(ir_dereference_array *);
  68.    virtual void visit(ir_dereference_record *);
  69.    virtual void visit(ir_assignment *);
  70.    virtual void visit(ir_constant *);
  71.    virtual void visit(ir_call *);
  72.    virtual void visit(ir_return *);
  73.    virtual void visit(ir_discard *);
  74.    virtual void visit(ir_if *);
  75.    virtual void visit(ir_loop *);
  76.    virtual void visit(ir_loop_jump *);
  77.    /*@}*/
  78.  
  79. private:
  80.    int indentation;
  81. };
  82.  
  83. #endif /* IR_PRINT_VISITOR_H */
  84.