Subversion Repositories Kolibri OS

Rev

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_H
  27. #define IR_H
  28.  
  29. #include <stdio.h>
  30. #include <stdlib.h>
  31.  
  32. #include "util/ralloc.h"
  33. #include "glsl_types.h"
  34. #include "list.h"
  35. #include "ir_visitor.h"
  36. #include "ir_hierarchical_visitor.h"
  37. #include "main/mtypes.h"
  38.  
  39. #ifdef __cplusplus
  40.  
  41. /**
  42.  * \defgroup IR Intermediate representation nodes
  43.  *
  44.  * @{
  45.  */
  46.  
  47. /**
  48.  * Class tags
  49.  *
  50.  * Each concrete class derived from \c ir_instruction has a value in this
  51.  * enumerant.  The value for the type is stored in \c ir_instruction::ir_type
  52.  * by the constructor.  While using type tags is not very C++, it is extremely
  53.  * convenient.  For example, during debugging you can simply inspect
  54.  * \c ir_instruction::ir_type to find out the actual type of the object.
  55.  *
  56.  * In addition, it is possible to use a switch-statement based on \c
  57.  * \c ir_instruction::ir_type to select different behavior for different object
  58.  * types.  For functions that have only slight differences for several object
  59.  * types, this allows writing very straightforward, readable code.
  60.  */
  61. enum ir_node_type {
  62.    ir_type_dereference_array,
  63.    ir_type_dereference_record,
  64.    ir_type_dereference_variable,
  65.    ir_type_constant,
  66.    ir_type_expression,
  67.    ir_type_swizzle,
  68.    ir_type_texture,
  69.    ir_type_variable,
  70.    ir_type_assignment,
  71.    ir_type_call,
  72.    ir_type_function,
  73.    ir_type_function_signature,
  74.    ir_type_if,
  75.    ir_type_loop,
  76.    ir_type_loop_jump,
  77.    ir_type_return,
  78.    ir_type_discard,
  79.    ir_type_emit_vertex,
  80.    ir_type_end_primitive,
  81.    ir_type_max, /**< maximum ir_type enum number, for validation */
  82.    ir_type_unset = ir_type_max
  83. };
  84.  
  85.  
  86. /**
  87.  * Base class of all IR instructions
  88.  */
  89. class ir_instruction : public exec_node {
  90. public:
  91.    enum ir_node_type ir_type;
  92.  
  93.    /**
  94.     * GCC 4.7+ and clang warn when deleting an ir_instruction unless
  95.     * there's a virtual destructor present.  Because we almost
  96.     * universally use ralloc for our memory management of
  97.     * ir_instructions, the destructor doesn't need to do any work.
  98.     */
  99.    virtual ~ir_instruction()
  100.    {
  101.    }
  102.  
  103.    /** ir_print_visitor helper for debugging. */
  104.    void print(void) const;
  105.    void fprint(FILE *f) const;
  106.  
  107.    virtual void accept(ir_visitor *) = 0;
  108.    virtual ir_visitor_status accept(ir_hierarchical_visitor *) = 0;
  109.    virtual ir_instruction *clone(void *mem_ctx,
  110.                                  struct hash_table *ht) const = 0;
  111.  
  112.    bool is_rvalue() const
  113.    {
  114.       return ir_type == ir_type_dereference_array ||
  115.              ir_type == ir_type_dereference_record ||
  116.              ir_type == ir_type_dereference_variable ||
  117.              ir_type == ir_type_constant ||
  118.              ir_type == ir_type_expression ||
  119.              ir_type == ir_type_swizzle ||
  120.              ir_type == ir_type_texture;
  121.    }
  122.  
  123.    bool is_dereference() const
  124.    {
  125.       return ir_type == ir_type_dereference_array ||
  126.              ir_type == ir_type_dereference_record ||
  127.              ir_type == ir_type_dereference_variable;
  128.    }
  129.  
  130.    bool is_jump() const
  131.    {
  132.       return ir_type == ir_type_loop_jump ||
  133.              ir_type == ir_type_return ||
  134.              ir_type == ir_type_discard;
  135.    }
  136.  
  137.    /**
  138.     * \name IR instruction downcast functions
  139.     *
  140.     * These functions either cast the object to a derived class or return
  141.     * \c NULL if the object's type does not match the specified derived class.
  142.     * Additional downcast functions will be added as needed.
  143.     */
  144.    /*@{*/
  145.    #define AS_BASE(TYPE)                                \
  146.    class ir_##TYPE *as_##TYPE()                         \
  147.    {                                                    \
  148.       assume(this != NULL);                             \
  149.       return is_##TYPE() ? (ir_##TYPE *) this : NULL;   \
  150.    }                                                    \
  151.    const class ir_##TYPE *as_##TYPE() const             \
  152.    {                                                    \
  153.       assume(this != NULL);                             \
  154.       return is_##TYPE() ? (ir_##TYPE *) this : NULL;   \
  155.    }
  156.  
  157.    AS_BASE(rvalue)
  158.    AS_BASE(dereference)
  159.    AS_BASE(jump)
  160.    #undef AS_BASE
  161.  
  162.    #define AS_CHILD(TYPE) \
  163.    class ir_##TYPE * as_##TYPE() \
  164.    { \
  165.       assume(this != NULL);                                         \
  166.       return ir_type == ir_type_##TYPE ? (ir_##TYPE *) this : NULL; \
  167.    }                                                                      \
  168.    const class ir_##TYPE * as_##TYPE() const                              \
  169.    {                                                                      \
  170.       assume(this != NULL);                                               \
  171.       return ir_type == ir_type_##TYPE ? (const ir_##TYPE *) this : NULL; \
  172.    }
  173.    AS_CHILD(variable)
  174.    AS_CHILD(function)
  175.    AS_CHILD(dereference_array)
  176.    AS_CHILD(dereference_variable)
  177.    AS_CHILD(dereference_record)
  178.    AS_CHILD(expression)
  179.    AS_CHILD(loop)
  180.    AS_CHILD(assignment)
  181.    AS_CHILD(call)
  182.    AS_CHILD(return)
  183.    AS_CHILD(if)
  184.    AS_CHILD(swizzle)
  185.    AS_CHILD(texture)
  186.    AS_CHILD(constant)
  187.    AS_CHILD(discard)
  188.    #undef AS_CHILD
  189.    /*@}*/
  190.  
  191.    /**
  192.     * IR equality method: Return true if the referenced instruction would
  193.     * return the same value as this one.
  194.     *
  195.     * This intended to be used for CSE and algebraic optimizations, on rvalues
  196.     * in particular.  No support for other instruction types (assignments,
  197.     * jumps, calls, etc.) is planned.
  198.     */
  199.    virtual bool equals(const ir_instruction *ir,
  200.                        enum ir_node_type ignore = ir_type_unset) const;
  201.  
  202. protected:
  203.    ir_instruction(enum ir_node_type t)
  204.       : ir_type(t)
  205.    {
  206.    }
  207.  
  208. private:
  209.    ir_instruction()
  210.    {
  211.       assert(!"Should not get here.");
  212.    }
  213. };
  214.  
  215.  
  216. /**
  217.  * The base class for all "values"/expression trees.
  218.  */
  219. class ir_rvalue : public ir_instruction {
  220. public:
  221.    const struct glsl_type *type;
  222.  
  223.    virtual ir_rvalue *clone(void *mem_ctx, struct hash_table *) const;
  224.  
  225.    virtual void accept(ir_visitor *v)
  226.    {
  227.       v->visit(this);
  228.    }
  229.  
  230.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  231.  
  232.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  233.  
  234.    ir_rvalue *as_rvalue_to_saturate();
  235.  
  236.    virtual bool is_lvalue() const
  237.    {
  238.       return false;
  239.    }
  240.  
  241.    /**
  242.     * Get the variable that is ultimately referenced by an r-value
  243.     */
  244.    virtual ir_variable *variable_referenced() const
  245.    {
  246.       return NULL;
  247.    }
  248.  
  249.  
  250.    /**
  251.     * If an r-value is a reference to a whole variable, get that variable
  252.     *
  253.     * \return
  254.     * Pointer to a variable that is completely dereferenced by the r-value.  If
  255.     * the r-value is not a dereference or the dereference does not access the
  256.     * entire variable (i.e., it's just one array element, struct field), \c NULL
  257.     * is returned.
  258.     */
  259.    virtual ir_variable *whole_variable_referenced()
  260.    {
  261.       return NULL;
  262.    }
  263.  
  264.    /**
  265.     * Determine if an r-value has the value zero
  266.     *
  267.     * The base implementation of this function always returns \c false.  The
  268.     * \c ir_constant class over-rides this function to return \c true \b only
  269.     * for vector and scalar types that have all elements set to the value
  270.     * zero (or \c false for booleans).
  271.     *
  272.     * \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one
  273.     */
  274.    virtual bool is_zero() const;
  275.  
  276.    /**
  277.     * Determine if an r-value has the value one
  278.     *
  279.     * The base implementation of this function always returns \c false.  The
  280.     * \c ir_constant class over-rides this function to return \c true \b only
  281.     * for vector and scalar types that have all elements set to the value
  282.     * one (or \c true for booleans).
  283.     *
  284.     * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one
  285.     */
  286.    virtual bool is_one() const;
  287.  
  288.    /**
  289.     * Determine if an r-value has the value negative one
  290.     *
  291.     * The base implementation of this function always returns \c false.  The
  292.     * \c ir_constant class over-rides this function to return \c true \b only
  293.     * for vector and scalar types that have all elements set to the value
  294.     * negative one.  For boolean types, the result is always \c false.
  295.     *
  296.     * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one
  297.     */
  298.    virtual bool is_negative_one() const;
  299.  
  300.    /**
  301.     * Determine if an r-value is an unsigned integer constant which can be
  302.     * stored in 16 bits.
  303.     *
  304.     * \sa ir_constant::is_uint16_constant.
  305.     */
  306.    virtual bool is_uint16_constant() const { return false; }
  307.  
  308.    /**
  309.     * Return a generic value of error_type.
  310.     *
  311.     * Allocation will be performed with 'mem_ctx' as ralloc owner.
  312.     */
  313.    static ir_rvalue *error_value(void *mem_ctx);
  314.  
  315. protected:
  316.    ir_rvalue(enum ir_node_type t);
  317. };
  318.  
  319.  
  320. /**
  321.  * Variable storage classes
  322.  */
  323. enum ir_variable_mode {
  324.    ir_var_auto = 0,     /**< Function local variables and globals. */
  325.    ir_var_uniform,      /**< Variable declared as a uniform. */
  326.    ir_var_shader_in,
  327.    ir_var_shader_out,
  328.    ir_var_function_in,
  329.    ir_var_function_out,
  330.    ir_var_function_inout,
  331.    ir_var_const_in,     /**< "in" param that must be a constant expression */
  332.    ir_var_system_value, /**< Ex: front-face, instance-id, etc. */
  333.    ir_var_temporary,    /**< Temporary variable generated during compilation. */
  334.    ir_var_mode_count    /**< Number of variable modes */
  335. };
  336.  
  337. /**
  338.  * Enum keeping track of how a variable was declared.  For error checking of
  339.  * the gl_PerVertex redeclaration rules.
  340.  */
  341. enum ir_var_declaration_type {
  342.    /**
  343.     * Normal declaration (for most variables, this means an explicit
  344.     * declaration.  Exception: temporaries are always implicitly declared, but
  345.     * they still use ir_var_declared_normally).
  346.     *
  347.     * Note: an ir_variable that represents a named interface block uses
  348.     * ir_var_declared_normally.
  349.     */
  350.    ir_var_declared_normally = 0,
  351.  
  352.    /**
  353.     * Variable was explicitly declared (or re-declared) in an unnamed
  354.     * interface block.
  355.     */
  356.    ir_var_declared_in_block,
  357.  
  358.    /**
  359.     * Variable is an implicitly declared built-in that has not been explicitly
  360.     * re-declared by the shader.
  361.     */
  362.    ir_var_declared_implicitly,
  363.  
  364.    /**
  365.     * Variable is implicitly generated by the compiler and should not be
  366.     * visible via the API.
  367.     */
  368.    ir_var_hidden,
  369. };
  370.  
  371. /**
  372.  * \brief Layout qualifiers for gl_FragDepth.
  373.  *
  374.  * The AMD/ARB_conservative_depth extensions allow gl_FragDepth to be redeclared
  375.  * with a layout qualifier.
  376.  */
  377. enum ir_depth_layout {
  378.     ir_depth_layout_none, /**< No depth layout is specified. */
  379.     ir_depth_layout_any,
  380.     ir_depth_layout_greater,
  381.     ir_depth_layout_less,
  382.     ir_depth_layout_unchanged
  383. };
  384.  
  385. /**
  386.  * \brief Convert depth layout qualifier to string.
  387.  */
  388. const char*
  389. depth_layout_string(ir_depth_layout layout);
  390.  
  391. /**
  392.  * Description of built-in state associated with a uniform
  393.  *
  394.  * \sa ir_variable::state_slots
  395.  */
  396. struct ir_state_slot {
  397.    int tokens[5];
  398.    int swizzle;
  399. };
  400.  
  401.  
  402. /**
  403.  * Get the string value for an interpolation qualifier
  404.  *
  405.  * \return The string that would be used in a shader to specify \c
  406.  * mode will be returned.
  407.  *
  408.  * This function is used to generate error messages of the form "shader
  409.  * uses %s interpolation qualifier", so in the case where there is no
  410.  * interpolation qualifier, it returns "no".
  411.  *
  412.  * This function should only be used on a shader input or output variable.
  413.  */
  414. const char *interpolation_string(unsigned interpolation);
  415.  
  416.  
  417. class ir_variable : public ir_instruction {
  418. public:
  419.    ir_variable(const struct glsl_type *, const char *, ir_variable_mode);
  420.  
  421.    virtual ir_variable *clone(void *mem_ctx, struct hash_table *ht) const;
  422.  
  423.    virtual void accept(ir_visitor *v)
  424.    {
  425.       v->visit(this);
  426.    }
  427.  
  428.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  429.  
  430.  
  431.    /**
  432.     * Determine how this variable should be interpolated based on its
  433.     * interpolation qualifier (if present), whether it is gl_Color or
  434.     * gl_SecondaryColor, and whether flatshading is enabled in the current GL
  435.     * state.
  436.     *
  437.     * The return value will always be either INTERP_QUALIFIER_SMOOTH,
  438.     * INTERP_QUALIFIER_NOPERSPECTIVE, or INTERP_QUALIFIER_FLAT.
  439.     */
  440.    glsl_interp_qualifier determine_interpolation_mode(bool flat_shade);
  441.  
  442.    /**
  443.     * Determine whether or not a variable is part of a uniform block.
  444.     */
  445.    inline bool is_in_uniform_block() const
  446.    {
  447.       return this->data.mode == ir_var_uniform && this->interface_type != NULL;
  448.    }
  449.  
  450.    /**
  451.     * Determine whether or not a variable is the declaration of an interface
  452.     * block
  453.     *
  454.     * For the first declaration below, there will be an \c ir_variable named
  455.     * "instance" whose type and whose instance_type will be the same
  456.     *  \cglsl_type.  For the second declaration, there will be an \c ir_variable
  457.     * named "f" whose type is float and whose instance_type is B2.
  458.     *
  459.     * "instance" is an interface instance variable, but "f" is not.
  460.     *
  461.     * uniform B1 {
  462.     *     float f;
  463.     * } instance;
  464.     *
  465.     * uniform B2 {
  466.     *     float f;
  467.     * };
  468.     */
  469.    inline bool is_interface_instance() const
  470.    {
  471.       return this->type->without_array() == this->interface_type;
  472.    }
  473.  
  474.    /**
  475.     * Set this->interface_type on a newly created variable.
  476.     */
  477.    void init_interface_type(const struct glsl_type *type)
  478.    {
  479.       assert(this->interface_type == NULL);
  480.       this->interface_type = type;
  481.       if (this->is_interface_instance()) {
  482.          this->u.max_ifc_array_access =
  483.             rzalloc_array(this, unsigned, type->length);
  484.       }
  485.    }
  486.  
  487.    /**
  488.     * Change this->interface_type on a variable that previously had a
  489.     * different, but compatible, interface_type.  This is used during linking
  490.     * to set the size of arrays in interface blocks.
  491.     */
  492.    void change_interface_type(const struct glsl_type *type)
  493.    {
  494.       if (this->u.max_ifc_array_access != NULL) {
  495.          /* max_ifc_array_access has already been allocated, so make sure the
  496.           * new interface has the same number of fields as the old one.
  497.           */
  498.          assert(this->interface_type->length == type->length);
  499.       }
  500.       this->interface_type = type;
  501.    }
  502.  
  503.    /**
  504.     * Change this->interface_type on a variable that previously had a
  505.     * different, and incompatible, interface_type. This is used during
  506.     * compilation to handle redeclaration of the built-in gl_PerVertex
  507.     * interface block.
  508.     */
  509.    void reinit_interface_type(const struct glsl_type *type)
  510.    {
  511.       if (this->u.max_ifc_array_access != NULL) {
  512. #ifndef NDEBUG
  513.          /* Redeclaring gl_PerVertex is only allowed if none of the built-ins
  514.           * it defines have been accessed yet; so it's safe to throw away the
  515.           * old max_ifc_array_access pointer, since all of its values are
  516.           * zero.
  517.           */
  518.          for (unsigned i = 0; i < this->interface_type->length; i++)
  519.             assert(this->u.max_ifc_array_access[i] == 0);
  520. #endif
  521.          ralloc_free(this->u.max_ifc_array_access);
  522.          this->u.max_ifc_array_access = NULL;
  523.       }
  524.       this->interface_type = NULL;
  525.       init_interface_type(type);
  526.    }
  527.  
  528.    const glsl_type *get_interface_type() const
  529.    {
  530.       return this->interface_type;
  531.    }
  532.  
  533.    /**
  534.     * Get the max_ifc_array_access pointer
  535.     *
  536.     * A "set" function is not needed because the array is dynmically allocated
  537.     * as necessary.
  538.     */
  539.    inline unsigned *get_max_ifc_array_access()
  540.    {
  541.       assert(this->data._num_state_slots == 0);
  542.       return this->u.max_ifc_array_access;
  543.    }
  544.  
  545.    inline unsigned get_num_state_slots() const
  546.    {
  547.       assert(!this->is_interface_instance()
  548.              || this->data._num_state_slots == 0);
  549.       return this->data._num_state_slots;
  550.    }
  551.  
  552.    inline void set_num_state_slots(unsigned n)
  553.    {
  554.       assert(!this->is_interface_instance()
  555.              || n == 0);
  556.       this->data._num_state_slots = n;
  557.    }
  558.  
  559.    inline ir_state_slot *get_state_slots()
  560.    {
  561.       return this->is_interface_instance() ? NULL : this->u.state_slots;
  562.    }
  563.  
  564.    inline const ir_state_slot *get_state_slots() const
  565.    {
  566.       return this->is_interface_instance() ? NULL : this->u.state_slots;
  567.    }
  568.  
  569.    inline ir_state_slot *allocate_state_slots(unsigned n)
  570.    {
  571.       assert(!this->is_interface_instance());
  572.  
  573.       this->u.state_slots = ralloc_array(this, ir_state_slot, n);
  574.       this->data._num_state_slots = 0;
  575.  
  576.       if (this->u.state_slots != NULL)
  577.          this->data._num_state_slots = n;
  578.  
  579.       return this->u.state_slots;
  580.    }
  581.  
  582.    inline bool is_name_ralloced() const
  583.    {
  584.       return this->name != ir_variable::tmp_name;
  585.    }
  586.  
  587.    /**
  588.     * Enable emitting extension warnings for this variable
  589.     */
  590.    void enable_extension_warning(const char *extension);
  591.  
  592.    /**
  593.     * Get the extension warning string for this variable
  594.     *
  595.     * If warnings are not enabled, \c NULL is returned.
  596.     */
  597.    const char *get_extension_warning() const;
  598.  
  599.    /**
  600.     * Declared type of the variable
  601.     */
  602.    const struct glsl_type *type;
  603.  
  604.    /**
  605.     * Declared name of the variable
  606.     */
  607.    const char *name;
  608.  
  609.    struct ir_variable_data {
  610.  
  611.       /**
  612.        * Is the variable read-only?
  613.        *
  614.        * This is set for variables declared as \c const, shader inputs,
  615.        * and uniforms.
  616.        */
  617.       unsigned read_only:1;
  618.       unsigned centroid:1;
  619.       unsigned sample:1;
  620.       unsigned invariant:1;
  621.       unsigned precise:1;
  622.  
  623.       /**
  624.        * Has this variable been used for reading or writing?
  625.        *
  626.        * Several GLSL semantic checks require knowledge of whether or not a
  627.        * variable has been used.  For example, it is an error to redeclare a
  628.        * variable as invariant after it has been used.
  629.        *
  630.        * This is only maintained in the ast_to_hir.cpp path, not in
  631.        * Mesa's fixed function or ARB program paths.
  632.        */
  633.       unsigned used:1;
  634.  
  635.       /**
  636.        * Has this variable been statically assigned?
  637.        *
  638.        * This answers whether the variable was assigned in any path of
  639.        * the shader during ast_to_hir.  This doesn't answer whether it is
  640.        * still written after dead code removal, nor is it maintained in
  641.        * non-ast_to_hir.cpp (GLSL parsing) paths.
  642.        */
  643.       unsigned assigned:1;
  644.  
  645.       /**
  646.        * Enum indicating how the variable was declared.  See
  647.        * ir_var_declaration_type.
  648.        *
  649.        * This is used to detect certain kinds of illegal variable redeclarations.
  650.        */
  651.       unsigned how_declared:2;
  652.  
  653.       /**
  654.        * Storage class of the variable.
  655.        *
  656.        * \sa ir_variable_mode
  657.        */
  658.       unsigned mode:4;
  659.  
  660.       /**
  661.        * Interpolation mode for shader inputs / outputs
  662.        *
  663.        * \sa ir_variable_interpolation
  664.        */
  665.       unsigned interpolation:2;
  666.  
  667.       /**
  668.        * \name ARB_fragment_coord_conventions
  669.        * @{
  670.        */
  671.       unsigned origin_upper_left:1;
  672.       unsigned pixel_center_integer:1;
  673.       /*@}*/
  674.  
  675.       /**
  676.        * Was the location explicitly set in the shader?
  677.        *
  678.        * If the location is explicitly set in the shader, it \b cannot be changed
  679.        * by the linker or by the API (e.g., calls to \c glBindAttribLocation have
  680.        * no effect).
  681.        */
  682.       unsigned explicit_location:1;
  683.       unsigned explicit_index:1;
  684.  
  685.       /**
  686.        * Was an initial binding explicitly set in the shader?
  687.        *
  688.        * If so, constant_value contains an integer ir_constant representing the
  689.        * initial binding point.
  690.        */
  691.       unsigned explicit_binding:1;
  692.  
  693.       /**
  694.        * Does this variable have an initializer?
  695.        *
  696.        * This is used by the linker to cross-validiate initializers of global
  697.        * variables.
  698.        */
  699.       unsigned has_initializer:1;
  700.  
  701.       /**
  702.        * Is this variable a generic output or input that has not yet been matched
  703.        * up to a variable in another stage of the pipeline?
  704.        *
  705.        * This is used by the linker as scratch storage while assigning locations
  706.        * to generic inputs and outputs.
  707.        */
  708.       unsigned is_unmatched_generic_inout:1;
  709.  
  710.       /**
  711.        * If non-zero, then this variable may be packed along with other variables
  712.        * into a single varying slot, so this offset should be applied when
  713.        * accessing components.  For example, an offset of 1 means that the x
  714.        * component of this variable is actually stored in component y of the
  715.        * location specified by \c location.
  716.        */
  717.       unsigned location_frac:2;
  718.  
  719.       /**
  720.        * Layout of the matrix.  Uses glsl_matrix_layout values.
  721.        */
  722.       unsigned matrix_layout:2;
  723.  
  724.       /**
  725.        * Non-zero if this variable was created by lowering a named interface
  726.        * block which was not an array.
  727.        *
  728.        * Note that this variable and \c from_named_ifc_block_array will never
  729.        * both be non-zero.
  730.        */
  731.       unsigned from_named_ifc_block_nonarray:1;
  732.  
  733.       /**
  734.        * Non-zero if this variable was created by lowering a named interface
  735.        * block which was an array.
  736.        *
  737.        * Note that this variable and \c from_named_ifc_block_nonarray will never
  738.        * both be non-zero.
  739.        */
  740.       unsigned from_named_ifc_block_array:1;
  741.  
  742.       /**
  743.        * Non-zero if the variable must be a shader input. This is useful for
  744.        * constraints on function parameters.
  745.        */
  746.       unsigned must_be_shader_input:1;
  747.  
  748.       /**
  749.        * Output index for dual source blending.
  750.        *
  751.        * \note
  752.        * The GLSL spec only allows the values 0 or 1 for the index in \b dual
  753.        * source blending.
  754.        */
  755.       unsigned index:1;
  756.  
  757.       /**
  758.        * \brief Layout qualifier for gl_FragDepth.
  759.        *
  760.        * This is not equal to \c ir_depth_layout_none if and only if this
  761.        * variable is \c gl_FragDepth and a layout qualifier is specified.
  762.        */
  763.       ir_depth_layout depth_layout:3;
  764.  
  765.       /**
  766.        * ARB_shader_image_load_store qualifiers.
  767.        */
  768.       unsigned image_read_only:1; /**< "readonly" qualifier. */
  769.       unsigned image_write_only:1; /**< "writeonly" qualifier. */
  770.       unsigned image_coherent:1;
  771.       unsigned image_volatile:1;
  772.       unsigned image_restrict:1;
  773.  
  774.       /**
  775.        * Emit a warning if this variable is accessed.
  776.        */
  777.    private:
  778.       uint8_t warn_extension_index;
  779.  
  780.    public:
  781.       /** Image internal format if specified explicitly, otherwise GL_NONE. */
  782.       uint16_t image_format;
  783.  
  784.    private:
  785.       /**
  786.        * Number of state slots used
  787.        *
  788.        * \note
  789.        * This could be stored in as few as 7-bits, if necessary.  If it is made
  790.        * smaller, add an assertion to \c ir_variable::allocate_state_slots to
  791.        * be safe.
  792.        */
  793.       uint16_t _num_state_slots;
  794.  
  795.    public:
  796.       /**
  797.        * Initial binding point for a sampler, atomic, or UBO.
  798.        *
  799.        * For array types, this represents the binding point for the first element.
  800.        */
  801.       int16_t binding;
  802.  
  803.       /**
  804.        * Storage location of the base of this variable
  805.        *
  806.        * The precise meaning of this field depends on the nature of the variable.
  807.        *
  808.        *   - Vertex shader input: one of the values from \c gl_vert_attrib.
  809.        *   - Vertex shader output: one of the values from \c gl_varying_slot.
  810.        *   - Geometry shader input: one of the values from \c gl_varying_slot.
  811.        *   - Geometry shader output: one of the values from \c gl_varying_slot.
  812.        *   - Fragment shader input: one of the values from \c gl_varying_slot.
  813.        *   - Fragment shader output: one of the values from \c gl_frag_result.
  814.        *   - Uniforms: Per-stage uniform slot number for default uniform block.
  815.        *   - Uniforms: Index within the uniform block definition for UBO members.
  816.        *   - Other: This field is not currently used.
  817.        *
  818.        * If the variable is a uniform, shader input, or shader output, and the
  819.        * slot has not been assigned, the value will be -1.
  820.        */
  821.       int location;
  822.  
  823.       /**
  824.        * Vertex stream output identifier.
  825.        */
  826.       unsigned stream;
  827.  
  828.       /**
  829.        * Location an atomic counter is stored at.
  830.        */
  831.       struct {
  832.          unsigned offset;
  833.       } atomic;
  834.  
  835.       /**
  836.        * Highest element accessed with a constant expression array index
  837.        *
  838.        * Not used for non-array variables.
  839.        */
  840.       unsigned max_array_access;
  841.  
  842.       /**
  843.        * Allow (only) ir_variable direct access private members.
  844.        */
  845.       friend class ir_variable;
  846.    } data;
  847.  
  848.    /**
  849.     * Value assigned in the initializer of a variable declared "const"
  850.     */
  851.    ir_constant *constant_value;
  852.  
  853.    /**
  854.     * Constant expression assigned in the initializer of the variable
  855.     *
  856.     * \warning
  857.     * This field and \c ::constant_value are distinct.  Even if the two fields
  858.     * refer to constants with the same value, they must point to separate
  859.     * objects.
  860.     */
  861.    ir_constant *constant_initializer;
  862.  
  863. private:
  864.    static const char *const warn_extension_table[];
  865.  
  866.    union {
  867.       /**
  868.        * For variables which satisfy the is_interface_instance() predicate,
  869.        * this points to an array of integers such that if the ith member of
  870.        * the interface block is an array, max_ifc_array_access[i] is the
  871.        * maximum array element of that member that has been accessed.  If the
  872.        * ith member of the interface block is not an array,
  873.        * max_ifc_array_access[i] is unused.
  874.        *
  875.        * For variables whose type is not an interface block, this pointer is
  876.        * NULL.
  877.        */
  878.       unsigned *max_ifc_array_access;
  879.  
  880.       /**
  881.        * Built-in state that backs this uniform
  882.        *
  883.        * Once set at variable creation, \c state_slots must remain invariant.
  884.        *
  885.        * If the variable is not a uniform, \c _num_state_slots will be zero
  886.        * and \c state_slots will be \c NULL.
  887.        */
  888.       ir_state_slot *state_slots;
  889.    } u;
  890.  
  891.    /**
  892.     * For variables that are in an interface block or are an instance of an
  893.     * interface block, this is the \c GLSL_TYPE_INTERFACE type for that block.
  894.     *
  895.     * \sa ir_variable::location
  896.     */
  897.    const glsl_type *interface_type;
  898.  
  899.    /**
  900.     * Name used for anonymous compiler temporaries
  901.     */
  902.    static const char tmp_name[];
  903.  
  904. public:
  905.    /**
  906.     * Should the construct keep names for ir_var_temporary variables?
  907.     *
  908.     * When this global is false, names passed to the constructor for
  909.     * \c ir_var_temporary variables will be dropped.  Instead, the variable will
  910.     * be named "compiler_temp".  This name will be in static storage.
  911.     *
  912.     * \warning
  913.     * \b NEVER change the mode of an \c ir_var_temporary.
  914.     *
  915.     * \warning
  916.     * This variable is \b not thread-safe.  It is global, \b not
  917.     * per-context. It begins life false.  A context can, at some point, make
  918.     * it true.  From that point on, it will be true forever.  This should be
  919.     * okay since it will only be set true while debugging.
  920.     */
  921.    static bool temporaries_allocate_names;
  922. };
  923.  
  924. /**
  925.  * A function that returns whether a built-in function is available in the
  926.  * current shading language (based on version, ES or desktop, and extensions).
  927.  */
  928. typedef bool (*builtin_available_predicate)(const _mesa_glsl_parse_state *);
  929.  
  930. /*@{*/
  931. /**
  932.  * The representation of a function instance; may be the full definition or
  933.  * simply a prototype.
  934.  */
  935. class ir_function_signature : public ir_instruction {
  936.    /* An ir_function_signature will be part of the list of signatures in
  937.     * an ir_function.
  938.     */
  939. public:
  940.    ir_function_signature(const glsl_type *return_type,
  941.                          builtin_available_predicate builtin_avail = NULL);
  942.  
  943.    virtual ir_function_signature *clone(void *mem_ctx,
  944.                                         struct hash_table *ht) const;
  945.    ir_function_signature *clone_prototype(void *mem_ctx,
  946.                                           struct hash_table *ht) const;
  947.  
  948.    virtual void accept(ir_visitor *v)
  949.    {
  950.       v->visit(this);
  951.    }
  952.  
  953.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  954.  
  955.    /**
  956.     * Attempt to evaluate this function as a constant expression,
  957.     * given a list of the actual parameters and the variable context.
  958.     * Returns NULL for non-built-ins.
  959.     */
  960.    ir_constant *constant_expression_value(exec_list *actual_parameters, struct hash_table *variable_context);
  961.  
  962.    /**
  963.     * Get the name of the function for which this is a signature
  964.     */
  965.    const char *function_name() const;
  966.  
  967.    /**
  968.     * Get a handle to the function for which this is a signature
  969.     *
  970.     * There is no setter function, this function returns a \c const pointer,
  971.     * and \c ir_function_signature::_function is private for a reason.  The
  972.     * only way to make a connection between a function and function signature
  973.     * is via \c ir_function::add_signature.  This helps ensure that certain
  974.     * invariants (i.e., a function signature is in the list of signatures for
  975.     * its \c _function) are met.
  976.     *
  977.     * \sa ir_function::add_signature
  978.     */
  979.    inline const class ir_function *function() const
  980.    {
  981.       return this->_function;
  982.    }
  983.  
  984.    /**
  985.     * Check whether the qualifiers match between this signature's parameters
  986.     * and the supplied parameter list.  If not, returns the name of the first
  987.     * parameter with mismatched qualifiers (for use in error messages).
  988.     */
  989.    const char *qualifiers_match(exec_list *params);
  990.  
  991.    /**
  992.     * Replace the current parameter list with the given one.  This is useful
  993.     * if the current information came from a prototype, and either has invalid
  994.     * or missing parameter names.
  995.     */
  996.    void replace_parameters(exec_list *new_params);
  997.  
  998.    /**
  999.     * Function return type.
  1000.     *
  1001.     * \note This discards the optional precision qualifier.
  1002.     */
  1003.    const struct glsl_type *return_type;
  1004.  
  1005.    /**
  1006.     * List of ir_variable of function parameters.
  1007.     *
  1008.     * This represents the storage.  The paramaters passed in a particular
  1009.     * call will be in ir_call::actual_paramaters.
  1010.     */
  1011.    struct exec_list parameters;
  1012.  
  1013.    /** Whether or not this function has a body (which may be empty). */
  1014.    unsigned is_defined:1;
  1015.  
  1016.    /** Whether or not this function signature is a built-in. */
  1017.    bool is_builtin() const;
  1018.  
  1019.    /**
  1020.     * Whether or not this function is an intrinsic to be implemented
  1021.     * by the driver.
  1022.     */
  1023.    bool is_intrinsic;
  1024.  
  1025.    /** Whether or not a built-in is available for this shader. */
  1026.    bool is_builtin_available(const _mesa_glsl_parse_state *state) const;
  1027.  
  1028.    /** Body of instructions in the function. */
  1029.    struct exec_list body;
  1030.  
  1031. private:
  1032.    /**
  1033.     * A function pointer to a predicate that answers whether a built-in
  1034.     * function is available in the current shader.  NULL if not a built-in.
  1035.     */
  1036.    builtin_available_predicate builtin_avail;
  1037.  
  1038.    /** Function of which this signature is one overload. */
  1039.    class ir_function *_function;
  1040.  
  1041.    /** Function signature of which this one is a prototype clone */
  1042.    const ir_function_signature *origin;
  1043.  
  1044.    friend class ir_function;
  1045.  
  1046.    /**
  1047.     * Helper function to run a list of instructions for constant
  1048.     * expression evaluation.
  1049.     *
  1050.     * The hash table represents the values of the visible variables.
  1051.     * There are no scoping issues because the table is indexed on
  1052.     * ir_variable pointers, not variable names.
  1053.     *
  1054.     * Returns false if the expression is not constant, true otherwise,
  1055.     * and the value in *result if result is non-NULL.
  1056.     */
  1057.    bool constant_expression_evaluate_expression_list(const struct exec_list &body,
  1058.                                                      struct hash_table *variable_context,
  1059.                                                      ir_constant **result);
  1060. };
  1061.  
  1062.  
  1063. /**
  1064.  * Header for tracking multiple overloaded functions with the same name.
  1065.  * Contains a list of ir_function_signatures representing each of the
  1066.  * actual functions.
  1067.  */
  1068. class ir_function : public ir_instruction {
  1069. public:
  1070.    ir_function(const char *name);
  1071.  
  1072.    virtual ir_function *clone(void *mem_ctx, struct hash_table *ht) const;
  1073.  
  1074.    virtual void accept(ir_visitor *v)
  1075.    {
  1076.       v->visit(this);
  1077.    }
  1078.  
  1079.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1080.  
  1081.    void add_signature(ir_function_signature *sig)
  1082.    {
  1083.       sig->_function = this;
  1084.       this->signatures.push_tail(sig);
  1085.    }
  1086.  
  1087.    /**
  1088.     * Find a signature that matches a set of actual parameters, taking implicit
  1089.     * conversions into account.  Also flags whether the match was exact.
  1090.     */
  1091.    ir_function_signature *matching_signature(_mesa_glsl_parse_state *state,
  1092.                                              const exec_list *actual_param,
  1093.                                              bool allow_builtins,
  1094.                                              bool *match_is_exact);
  1095.  
  1096.    /**
  1097.     * Find a signature that matches a set of actual parameters, taking implicit
  1098.     * conversions into account.
  1099.     */
  1100.    ir_function_signature *matching_signature(_mesa_glsl_parse_state *state,
  1101.                                              const exec_list *actual_param,
  1102.                                              bool allow_builtins);
  1103.  
  1104.    /**
  1105.     * Find a signature that exactly matches a set of actual parameters without
  1106.     * any implicit type conversions.
  1107.     */
  1108.    ir_function_signature *exact_matching_signature(_mesa_glsl_parse_state *state,
  1109.                                                    const exec_list *actual_ps);
  1110.  
  1111.    /**
  1112.     * Name of the function.
  1113.     */
  1114.    const char *name;
  1115.  
  1116.    /** Whether or not this function has a signature that isn't a built-in. */
  1117.    bool has_user_signature();
  1118.  
  1119.    /**
  1120.     * List of ir_function_signature for each overloaded function with this name.
  1121.     */
  1122.    struct exec_list signatures;
  1123. };
  1124.  
  1125. inline const char *ir_function_signature::function_name() const
  1126. {
  1127.    return this->_function->name;
  1128. }
  1129. /*@}*/
  1130.  
  1131.  
  1132. /**
  1133.  * IR instruction representing high-level if-statements
  1134.  */
  1135. class ir_if : public ir_instruction {
  1136. public:
  1137.    ir_if(ir_rvalue *condition)
  1138.       : ir_instruction(ir_type_if), condition(condition)
  1139.    {
  1140.    }
  1141.  
  1142.    virtual ir_if *clone(void *mem_ctx, struct hash_table *ht) const;
  1143.  
  1144.    virtual void accept(ir_visitor *v)
  1145.    {
  1146.       v->visit(this);
  1147.    }
  1148.  
  1149.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1150.  
  1151.    ir_rvalue *condition;
  1152.    /** List of ir_instruction for the body of the then branch */
  1153.    exec_list  then_instructions;
  1154.    /** List of ir_instruction for the body of the else branch */
  1155.    exec_list  else_instructions;
  1156. };
  1157.  
  1158.  
  1159. /**
  1160.  * IR instruction representing a high-level loop structure.
  1161.  */
  1162. class ir_loop : public ir_instruction {
  1163. public:
  1164.    ir_loop();
  1165.  
  1166.    virtual ir_loop *clone(void *mem_ctx, struct hash_table *ht) const;
  1167.  
  1168.    virtual void accept(ir_visitor *v)
  1169.    {
  1170.       v->visit(this);
  1171.    }
  1172.  
  1173.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1174.  
  1175.    /** List of ir_instruction that make up the body of the loop. */
  1176.    exec_list body_instructions;
  1177. };
  1178.  
  1179.  
  1180. class ir_assignment : public ir_instruction {
  1181. public:
  1182.    ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs, ir_rvalue *condition = NULL);
  1183.  
  1184.    /**
  1185.     * Construct an assignment with an explicit write mask
  1186.     *
  1187.     * \note
  1188.     * Since a write mask is supplied, the LHS must already be a bare
  1189.     * \c ir_dereference.  The cannot be any swizzles in the LHS.
  1190.     */
  1191.    ir_assignment(ir_dereference *lhs, ir_rvalue *rhs, ir_rvalue *condition,
  1192.                  unsigned write_mask);
  1193.  
  1194.    virtual ir_assignment *clone(void *mem_ctx, struct hash_table *ht) const;
  1195.  
  1196.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  1197.  
  1198.    virtual void accept(ir_visitor *v)
  1199.    {
  1200.       v->visit(this);
  1201.    }
  1202.  
  1203.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1204.  
  1205.    /**
  1206.     * Get a whole variable written by an assignment
  1207.     *
  1208.     * If the LHS of the assignment writes a whole variable, the variable is
  1209.     * returned.  Otherwise \c NULL is returned.  Examples of whole-variable
  1210.     * assignment are:
  1211.     *
  1212.     *  - Assigning to a scalar
  1213.     *  - Assigning to all components of a vector
  1214.     *  - Whole array (or matrix) assignment
  1215.     *  - Whole structure assignment
  1216.     */
  1217.    ir_variable *whole_variable_written();
  1218.  
  1219.    /**
  1220.     * Set the LHS of an assignment
  1221.     */
  1222.    void set_lhs(ir_rvalue *lhs);
  1223.  
  1224.    /**
  1225.     * Left-hand side of the assignment.
  1226.     *
  1227.     * This should be treated as read only.  If you need to set the LHS of an
  1228.     * assignment, use \c ir_assignment::set_lhs.
  1229.     */
  1230.    ir_dereference *lhs;
  1231.  
  1232.    /**
  1233.     * Value being assigned
  1234.     */
  1235.    ir_rvalue *rhs;
  1236.  
  1237.    /**
  1238.     * Optional condition for the assignment.
  1239.     */
  1240.    ir_rvalue *condition;
  1241.  
  1242.  
  1243.    /**
  1244.     * Component mask written
  1245.     *
  1246.     * For non-vector types in the LHS, this field will be zero.  For vector
  1247.     * types, a bit will be set for each component that is written.  Note that
  1248.     * for \c vec2 and \c vec3 types only the lower bits will ever be set.
  1249.     *
  1250.     * A partially-set write mask means that each enabled channel gets
  1251.     * the value from a consecutive channel of the rhs.  For example,
  1252.     * to write just .xyw of gl_FrontColor with color:
  1253.     *
  1254.     * (assign (constant bool (1)) (xyw)
  1255.     *     (var_ref gl_FragColor)
  1256.     *     (swiz xyw (var_ref color)))
  1257.     */
  1258.    unsigned write_mask:4;
  1259. };
  1260.  
  1261. /* Update ir_expression::get_num_operands() and operator_strs when
  1262.  * updating this list.
  1263.  */
  1264. enum ir_expression_operation {
  1265.    ir_unop_bit_not,
  1266.    ir_unop_logic_not,
  1267.    ir_unop_neg,
  1268.    ir_unop_abs,
  1269.    ir_unop_sign,
  1270.    ir_unop_rcp,
  1271.    ir_unop_rsq,
  1272.    ir_unop_sqrt,
  1273.    ir_unop_exp,         /**< Log base e on gentype */
  1274.    ir_unop_log,         /**< Natural log on gentype */
  1275.    ir_unop_exp2,
  1276.    ir_unop_log2,
  1277.    ir_unop_f2i,         /**< Float-to-integer conversion. */
  1278.    ir_unop_f2u,         /**< Float-to-unsigned conversion. */
  1279.    ir_unop_i2f,         /**< Integer-to-float conversion. */
  1280.    ir_unop_f2b,         /**< Float-to-boolean conversion */
  1281.    ir_unop_b2f,         /**< Boolean-to-float conversion */
  1282.    ir_unop_i2b,         /**< int-to-boolean conversion */
  1283.    ir_unop_b2i,         /**< Boolean-to-int conversion */
  1284.    ir_unop_u2f,         /**< Unsigned-to-float conversion. */
  1285.    ir_unop_i2u,         /**< Integer-to-unsigned conversion. */
  1286.    ir_unop_u2i,         /**< Unsigned-to-integer conversion. */
  1287.    ir_unop_d2f,         /**< Double-to-float conversion. */
  1288.    ir_unop_f2d,         /**< Float-to-double conversion. */
  1289.    ir_unop_d2i,         /**< Double-to-integer conversion. */
  1290.    ir_unop_i2d,         /**< Integer-to-double conversion. */
  1291.    ir_unop_d2u,         /**< Double-to-unsigned conversion. */
  1292.    ir_unop_u2d,         /**< Unsigned-to-double conversion. */
  1293.    ir_unop_d2b,         /**< Double-to-boolean conversion. */
  1294.    ir_unop_bitcast_i2f, /**< Bit-identical int-to-float "conversion" */
  1295.    ir_unop_bitcast_f2i, /**< Bit-identical float-to-int "conversion" */
  1296.    ir_unop_bitcast_u2f, /**< Bit-identical uint-to-float "conversion" */
  1297.    ir_unop_bitcast_f2u, /**< Bit-identical float-to-uint "conversion" */
  1298.    ir_unop_any,
  1299.  
  1300.    /**
  1301.     * \name Unary floating-point rounding operations.
  1302.     */
  1303.    /*@{*/
  1304.    ir_unop_trunc,
  1305.    ir_unop_ceil,
  1306.    ir_unop_floor,
  1307.    ir_unop_fract,
  1308.    ir_unop_round_even,
  1309.    /*@}*/
  1310.  
  1311.    /**
  1312.     * \name Trigonometric operations.
  1313.     */
  1314.    /*@{*/
  1315.    ir_unop_sin,
  1316.    ir_unop_cos,
  1317.    /*@}*/
  1318.  
  1319.    /**
  1320.     * \name Partial derivatives.
  1321.     */
  1322.    /*@{*/
  1323.    ir_unop_dFdx,
  1324.    ir_unop_dFdx_coarse,
  1325.    ir_unop_dFdx_fine,
  1326.    ir_unop_dFdy,
  1327.    ir_unop_dFdy_coarse,
  1328.    ir_unop_dFdy_fine,
  1329.    /*@}*/
  1330.  
  1331.    /**
  1332.     * \name Floating point pack and unpack operations.
  1333.     */
  1334.    /*@{*/
  1335.    ir_unop_pack_snorm_2x16,
  1336.    ir_unop_pack_snorm_4x8,
  1337.    ir_unop_pack_unorm_2x16,
  1338.    ir_unop_pack_unorm_4x8,
  1339.    ir_unop_pack_half_2x16,
  1340.    ir_unop_unpack_snorm_2x16,
  1341.    ir_unop_unpack_snorm_4x8,
  1342.    ir_unop_unpack_unorm_2x16,
  1343.    ir_unop_unpack_unorm_4x8,
  1344.    ir_unop_unpack_half_2x16,
  1345.    /*@}*/
  1346.  
  1347.    /**
  1348.     * \name Lowered floating point unpacking operations.
  1349.     *
  1350.     * \see lower_packing_builtins_visitor::split_unpack_half_2x16
  1351.     */
  1352.    /*@{*/
  1353.    ir_unop_unpack_half_2x16_split_x,
  1354.    ir_unop_unpack_half_2x16_split_y,
  1355.    /*@}*/
  1356.  
  1357.    /**
  1358.     * \name Bit operations, part of ARB_gpu_shader5.
  1359.     */
  1360.    /*@{*/
  1361.    ir_unop_bitfield_reverse,
  1362.    ir_unop_bit_count,
  1363.    ir_unop_find_msb,
  1364.    ir_unop_find_lsb,
  1365.    /*@}*/
  1366.  
  1367.    ir_unop_saturate,
  1368.  
  1369.    /**
  1370.     * \name Double packing, part of ARB_gpu_shader_fp64.
  1371.     */
  1372.    /*@{*/
  1373.    ir_unop_pack_double_2x32,
  1374.    ir_unop_unpack_double_2x32,
  1375.    /*@}*/
  1376.  
  1377.    ir_unop_frexp_sig,
  1378.    ir_unop_frexp_exp,
  1379.  
  1380.    ir_unop_noise,
  1381.  
  1382.    /**
  1383.     * Interpolate fs input at centroid
  1384.     *
  1385.     * operand0 is the fs input.
  1386.     */
  1387.    ir_unop_interpolate_at_centroid,
  1388.  
  1389.    /**
  1390.     * A sentinel marking the last of the unary operations.
  1391.     */
  1392.    ir_last_unop = ir_unop_interpolate_at_centroid,
  1393.  
  1394.    ir_binop_add,
  1395.    ir_binop_sub,
  1396.    ir_binop_mul,       /**< Floating-point or low 32-bit integer multiply. */
  1397.    ir_binop_imul_high, /**< Calculates the high 32-bits of a 64-bit multiply. */
  1398.    ir_binop_div,
  1399.  
  1400.    /**
  1401.     * Returns the carry resulting from the addition of the two arguments.
  1402.     */
  1403.    /*@{*/
  1404.    ir_binop_carry,
  1405.    /*@}*/
  1406.  
  1407.    /**
  1408.     * Returns the borrow resulting from the subtraction of the second argument
  1409.     * from the first argument.
  1410.     */
  1411.    /*@{*/
  1412.    ir_binop_borrow,
  1413.    /*@}*/
  1414.  
  1415.    /**
  1416.     * Takes one of two combinations of arguments:
  1417.     *
  1418.     * - mod(vecN, vecN)
  1419.     * - mod(vecN, float)
  1420.     *
  1421.     * Does not take integer types.
  1422.     */
  1423.    ir_binop_mod,
  1424.  
  1425.    /**
  1426.     * \name Binary comparison operators which return a boolean vector.
  1427.     * The type of both operands must be equal.
  1428.     */
  1429.    /*@{*/
  1430.    ir_binop_less,
  1431.    ir_binop_greater,
  1432.    ir_binop_lequal,
  1433.    ir_binop_gequal,
  1434.    ir_binop_equal,
  1435.    ir_binop_nequal,
  1436.    /**
  1437.     * Returns single boolean for whether all components of operands[0]
  1438.     * equal the components of operands[1].
  1439.     */
  1440.    ir_binop_all_equal,
  1441.    /**
  1442.     * Returns single boolean for whether any component of operands[0]
  1443.     * is not equal to the corresponding component of operands[1].
  1444.     */
  1445.    ir_binop_any_nequal,
  1446.    /*@}*/
  1447.  
  1448.    /**
  1449.     * \name Bit-wise binary operations.
  1450.     */
  1451.    /*@{*/
  1452.    ir_binop_lshift,
  1453.    ir_binop_rshift,
  1454.    ir_binop_bit_and,
  1455.    ir_binop_bit_xor,
  1456.    ir_binop_bit_or,
  1457.    /*@}*/
  1458.  
  1459.    ir_binop_logic_and,
  1460.    ir_binop_logic_xor,
  1461.    ir_binop_logic_or,
  1462.  
  1463.    ir_binop_dot,
  1464.    ir_binop_min,
  1465.    ir_binop_max,
  1466.  
  1467.    ir_binop_pow,
  1468.  
  1469.    /**
  1470.     * \name Lowered floating point packing operations.
  1471.     *
  1472.     * \see lower_packing_builtins_visitor::split_pack_half_2x16
  1473.     */
  1474.    /*@{*/
  1475.    ir_binop_pack_half_2x16_split,
  1476.    /*@}*/
  1477.  
  1478.    /**
  1479.     * \name First half of a lowered bitfieldInsert() operation.
  1480.     *
  1481.     * \see lower_instructions::bitfield_insert_to_bfm_bfi
  1482.     */
  1483.    /*@{*/
  1484.    ir_binop_bfm,
  1485.    /*@}*/
  1486.  
  1487.    /**
  1488.     * Load a value the size of a given GLSL type from a uniform block.
  1489.     *
  1490.     * operand0 is the ir_constant uniform block index in the linked shader.
  1491.     * operand1 is a byte offset within the uniform block.
  1492.     */
  1493.    ir_binop_ubo_load,
  1494.  
  1495.    /**
  1496.     * \name Multiplies a number by two to a power, part of ARB_gpu_shader5.
  1497.     */
  1498.    /*@{*/
  1499.    ir_binop_ldexp,
  1500.    /*@}*/
  1501.  
  1502.    /**
  1503.     * Extract a scalar from a vector
  1504.     *
  1505.     * operand0 is the vector
  1506.     * operand1 is the index of the field to read from operand0
  1507.     */
  1508.    ir_binop_vector_extract,
  1509.  
  1510.    /**
  1511.     * Interpolate fs input at offset
  1512.     *
  1513.     * operand0 is the fs input
  1514.     * operand1 is the offset from the pixel center
  1515.     */
  1516.    ir_binop_interpolate_at_offset,
  1517.  
  1518.    /**
  1519.     * Interpolate fs input at sample position
  1520.     *
  1521.     * operand0 is the fs input
  1522.     * operand1 is the sample ID
  1523.     */
  1524.    ir_binop_interpolate_at_sample,
  1525.  
  1526.    /**
  1527.     * A sentinel marking the last of the binary operations.
  1528.     */
  1529.    ir_last_binop = ir_binop_interpolate_at_sample,
  1530.  
  1531.    /**
  1532.     * \name Fused floating-point multiply-add, part of ARB_gpu_shader5.
  1533.     */
  1534.    /*@{*/
  1535.    ir_triop_fma,
  1536.    /*@}*/
  1537.  
  1538.    ir_triop_lrp,
  1539.  
  1540.    /**
  1541.     * \name Conditional Select
  1542.     *
  1543.     * A vector conditional select instruction (like ?:, but operating per-
  1544.     * component on vectors).
  1545.     *
  1546.     * \see lower_instructions_visitor::ldexp_to_arith
  1547.     */
  1548.    /*@{*/
  1549.    ir_triop_csel,
  1550.    /*@}*/
  1551.  
  1552.    /**
  1553.     * \name Second half of a lowered bitfieldInsert() operation.
  1554.     *
  1555.     * \see lower_instructions::bitfield_insert_to_bfm_bfi
  1556.     */
  1557.    /*@{*/
  1558.    ir_triop_bfi,
  1559.    /*@}*/
  1560.  
  1561.    ir_triop_bitfield_extract,
  1562.  
  1563.    /**
  1564.     * Generate a value with one field of a vector changed
  1565.     *
  1566.     * operand0 is the vector
  1567.     * operand1 is the value to write into the vector result
  1568.     * operand2 is the index in operand0 to be modified
  1569.     */
  1570.    ir_triop_vector_insert,
  1571.  
  1572.    /**
  1573.     * A sentinel marking the last of the ternary operations.
  1574.     */
  1575.    ir_last_triop = ir_triop_vector_insert,
  1576.  
  1577.    ir_quadop_bitfield_insert,
  1578.  
  1579.    ir_quadop_vector,
  1580.  
  1581.    /**
  1582.     * A sentinel marking the last of the ternary operations.
  1583.     */
  1584.    ir_last_quadop = ir_quadop_vector,
  1585.  
  1586.    /**
  1587.     * A sentinel marking the last of all operations.
  1588.     */
  1589.    ir_last_opcode = ir_quadop_vector
  1590. };
  1591.  
  1592. class ir_expression : public ir_rvalue {
  1593. public:
  1594.    ir_expression(int op, const struct glsl_type *type,
  1595.                  ir_rvalue *op0, ir_rvalue *op1 = NULL,
  1596.                  ir_rvalue *op2 = NULL, ir_rvalue *op3 = NULL);
  1597.  
  1598.    /**
  1599.     * Constructor for unary operation expressions
  1600.     */
  1601.    ir_expression(int op, ir_rvalue *);
  1602.  
  1603.    /**
  1604.     * Constructor for binary operation expressions
  1605.     */
  1606.    ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1);
  1607.  
  1608.    /**
  1609.     * Constructor for ternary operation expressions
  1610.     */
  1611.    ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1, ir_rvalue *op2);
  1612.  
  1613.    virtual bool equals(const ir_instruction *ir,
  1614.                        enum ir_node_type ignore = ir_type_unset) const;
  1615.  
  1616.    virtual ir_expression *clone(void *mem_ctx, struct hash_table *ht) const;
  1617.  
  1618.    /**
  1619.     * Attempt to constant-fold the expression
  1620.     *
  1621.     * The "variable_context" hash table links ir_variable * to ir_constant *
  1622.     * that represent the variables' values.  \c NULL represents an empty
  1623.     * context.
  1624.     *
  1625.     * If the expression cannot be constant folded, this method will return
  1626.     * \c NULL.
  1627.     */
  1628.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  1629.  
  1630.    /**
  1631.     * Determine the number of operands used by an expression
  1632.     */
  1633.    static unsigned int get_num_operands(ir_expression_operation);
  1634.  
  1635.    /**
  1636.     * Determine the number of operands used by an expression
  1637.     */
  1638.    unsigned int get_num_operands() const
  1639.    {
  1640.       return (this->operation == ir_quadop_vector)
  1641.          ? this->type->vector_elements : get_num_operands(operation);
  1642.    }
  1643.  
  1644.    /**
  1645.     * Return whether the expression operates on vectors horizontally.
  1646.     */
  1647.    bool is_horizontal() const
  1648.    {
  1649.       return operation == ir_binop_all_equal ||
  1650.              operation == ir_binop_any_nequal ||
  1651.              operation == ir_unop_any ||
  1652.              operation == ir_binop_dot ||
  1653.              operation == ir_quadop_vector;
  1654.    }
  1655.  
  1656.    /**
  1657.     * Return a string representing this expression's operator.
  1658.     */
  1659.    const char *operator_string();
  1660.  
  1661.    /**
  1662.     * Return a string representing this expression's operator.
  1663.     */
  1664.    static const char *operator_string(ir_expression_operation);
  1665.  
  1666.  
  1667.    /**
  1668.     * Do a reverse-lookup to translate the given string into an operator.
  1669.     */
  1670.    static ir_expression_operation get_operator(const char *);
  1671.  
  1672.    virtual void accept(ir_visitor *v)
  1673.    {
  1674.       v->visit(this);
  1675.    }
  1676.  
  1677.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1678.  
  1679.    ir_expression_operation operation;
  1680.    ir_rvalue *operands[4];
  1681. };
  1682.  
  1683.  
  1684. /**
  1685.  * HIR instruction representing a high-level function call, containing a list
  1686.  * of parameters and returning a value in the supplied temporary.
  1687.  */
  1688. class ir_call : public ir_instruction {
  1689. public:
  1690.    ir_call(ir_function_signature *callee,
  1691.            ir_dereference_variable *return_deref,
  1692.            exec_list *actual_parameters)
  1693.       : ir_instruction(ir_type_call), return_deref(return_deref), callee(callee)
  1694.    {
  1695.       assert(callee->return_type != NULL);
  1696.       actual_parameters->move_nodes_to(& this->actual_parameters);
  1697.       this->use_builtin = callee->is_builtin();
  1698.    }
  1699.  
  1700.    virtual ir_call *clone(void *mem_ctx, struct hash_table *ht) const;
  1701.  
  1702.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  1703.  
  1704.    virtual void accept(ir_visitor *v)
  1705.    {
  1706.       v->visit(this);
  1707.    }
  1708.  
  1709.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1710.  
  1711.    /**
  1712.     * Get the name of the function being called.
  1713.     */
  1714.    const char *callee_name() const
  1715.    {
  1716.       return callee->function_name();
  1717.    }
  1718.  
  1719.    /**
  1720.     * Generates an inline version of the function before @ir,
  1721.     * storing the return value in return_deref.
  1722.     */
  1723.    void generate_inline(ir_instruction *ir);
  1724.  
  1725.    /**
  1726.     * Storage for the function's return value.
  1727.     * This must be NULL if the return type is void.
  1728.     */
  1729.    ir_dereference_variable *return_deref;
  1730.  
  1731.    /**
  1732.     * The specific function signature being called.
  1733.     */
  1734.    ir_function_signature *callee;
  1735.  
  1736.    /* List of ir_rvalue of paramaters passed in this call. */
  1737.    exec_list actual_parameters;
  1738.  
  1739.    /** Should this call only bind to a built-in function? */
  1740.    bool use_builtin;
  1741. };
  1742.  
  1743.  
  1744. /**
  1745.  * \name Jump-like IR instructions.
  1746.  *
  1747.  * These include \c break, \c continue, \c return, and \c discard.
  1748.  */
  1749. /*@{*/
  1750. class ir_jump : public ir_instruction {
  1751. protected:
  1752.    ir_jump(enum ir_node_type t)
  1753.       : ir_instruction(t)
  1754.    {
  1755.    }
  1756. };
  1757.  
  1758. class ir_return : public ir_jump {
  1759. public:
  1760.    ir_return()
  1761.       : ir_jump(ir_type_return), value(NULL)
  1762.    {
  1763.    }
  1764.  
  1765.    ir_return(ir_rvalue *value)
  1766.       : ir_jump(ir_type_return), value(value)
  1767.    {
  1768.    }
  1769.  
  1770.    virtual ir_return *clone(void *mem_ctx, struct hash_table *) const;
  1771.  
  1772.    ir_rvalue *get_value() const
  1773.    {
  1774.       return value;
  1775.    }
  1776.  
  1777.    virtual void accept(ir_visitor *v)
  1778.    {
  1779.       v->visit(this);
  1780.    }
  1781.  
  1782.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1783.  
  1784.    ir_rvalue *value;
  1785. };
  1786.  
  1787.  
  1788. /**
  1789.  * Jump instructions used inside loops
  1790.  *
  1791.  * These include \c break and \c continue.  The \c break within a loop is
  1792.  * different from the \c break within a switch-statement.
  1793.  *
  1794.  * \sa ir_switch_jump
  1795.  */
  1796. class ir_loop_jump : public ir_jump {
  1797. public:
  1798.    enum jump_mode {
  1799.       jump_break,
  1800.       jump_continue
  1801.    };
  1802.  
  1803.    ir_loop_jump(jump_mode mode)
  1804.       : ir_jump(ir_type_loop_jump)
  1805.    {
  1806.       this->mode = mode;
  1807.    }
  1808.  
  1809.    virtual ir_loop_jump *clone(void *mem_ctx, struct hash_table *) const;
  1810.  
  1811.    virtual void accept(ir_visitor *v)
  1812.    {
  1813.       v->visit(this);
  1814.    }
  1815.  
  1816.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1817.  
  1818.    bool is_break() const
  1819.    {
  1820.       return mode == jump_break;
  1821.    }
  1822.  
  1823.    bool is_continue() const
  1824.    {
  1825.       return mode == jump_continue;
  1826.    }
  1827.  
  1828.    /** Mode selector for the jump instruction. */
  1829.    enum jump_mode mode;
  1830. };
  1831.  
  1832. /**
  1833.  * IR instruction representing discard statements.
  1834.  */
  1835. class ir_discard : public ir_jump {
  1836. public:
  1837.    ir_discard()
  1838.       : ir_jump(ir_type_discard)
  1839.    {
  1840.       this->condition = NULL;
  1841.    }
  1842.  
  1843.    ir_discard(ir_rvalue *cond)
  1844.       : ir_jump(ir_type_discard)
  1845.    {
  1846.       this->condition = cond;
  1847.    }
  1848.  
  1849.    virtual ir_discard *clone(void *mem_ctx, struct hash_table *ht) const;
  1850.  
  1851.    virtual void accept(ir_visitor *v)
  1852.    {
  1853.       v->visit(this);
  1854.    }
  1855.  
  1856.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1857.  
  1858.    ir_rvalue *condition;
  1859. };
  1860. /*@}*/
  1861.  
  1862.  
  1863. /**
  1864.  * Texture sampling opcodes used in ir_texture
  1865.  */
  1866. enum ir_texture_opcode {
  1867.    ir_tex,              /**< Regular texture look-up */
  1868.    ir_txb,              /**< Texture look-up with LOD bias */
  1869.    ir_txl,              /**< Texture look-up with explicit LOD */
  1870.    ir_txd,              /**< Texture look-up with partial derivatvies */
  1871.    ir_txf,              /**< Texel fetch with explicit LOD */
  1872.    ir_txf_ms,           /**< Multisample texture fetch */
  1873.    ir_txs,              /**< Texture size */
  1874.    ir_lod,              /**< Texture lod query */
  1875.    ir_tg4,              /**< Texture gather */
  1876.    ir_query_levels      /**< Texture levels query */
  1877. };
  1878.  
  1879.  
  1880. /**
  1881.  * IR instruction to sample a texture
  1882.  *
  1883.  * The specific form of the IR instruction depends on the \c mode value
  1884.  * selected from \c ir_texture_opcodes.  In the printed IR, these will
  1885.  * appear as:
  1886.  *
  1887.  *                                    Texel offset (0 or an expression)
  1888.  *                                    | Projection divisor
  1889.  *                                    | |  Shadow comparitor
  1890.  *                                    | |  |
  1891.  *                                    v v  v
  1892.  * (tex <type> <sampler> <coordinate> 0 1 ( ))
  1893.  * (txb <type> <sampler> <coordinate> 0 1 ( ) <bias>)
  1894.  * (txl <type> <sampler> <coordinate> 0 1 ( ) <lod>)
  1895.  * (txd <type> <sampler> <coordinate> 0 1 ( ) (dPdx dPdy))
  1896.  * (txf <type> <sampler> <coordinate> 0       <lod>)
  1897.  * (txf_ms
  1898.  *      <type> <sampler> <coordinate>         <sample_index>)
  1899.  * (txs <type> <sampler> <lod>)
  1900.  * (lod <type> <sampler> <coordinate>)
  1901.  * (tg4 <type> <sampler> <coordinate> <offset> <component>)
  1902.  * (query_levels <type> <sampler>)
  1903.  */
  1904. class ir_texture : public ir_rvalue {
  1905. public:
  1906.    ir_texture(enum ir_texture_opcode op)
  1907.       : ir_rvalue(ir_type_texture),
  1908.         op(op), sampler(NULL), coordinate(NULL), projector(NULL),
  1909.         shadow_comparitor(NULL), offset(NULL)
  1910.    {
  1911.       memset(&lod_info, 0, sizeof(lod_info));
  1912.    }
  1913.  
  1914.    virtual ir_texture *clone(void *mem_ctx, struct hash_table *) const;
  1915.  
  1916.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  1917.  
  1918.    virtual void accept(ir_visitor *v)
  1919.    {
  1920.       v->visit(this);
  1921.    }
  1922.  
  1923.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  1924.  
  1925.    virtual bool equals(const ir_instruction *ir,
  1926.                        enum ir_node_type ignore = ir_type_unset) const;
  1927.  
  1928.    /**
  1929.     * Return a string representing the ir_texture_opcode.
  1930.     */
  1931.    const char *opcode_string();
  1932.  
  1933.    /** Set the sampler and type. */
  1934.    void set_sampler(ir_dereference *sampler, const glsl_type *type);
  1935.  
  1936.    /**
  1937.     * Do a reverse-lookup to translate a string into an ir_texture_opcode.
  1938.     */
  1939.    static ir_texture_opcode get_opcode(const char *);
  1940.  
  1941.    enum ir_texture_opcode op;
  1942.  
  1943.    /** Sampler to use for the texture access. */
  1944.    ir_dereference *sampler;
  1945.  
  1946.    /** Texture coordinate to sample */
  1947.    ir_rvalue *coordinate;
  1948.  
  1949.    /**
  1950.     * Value used for projective divide.
  1951.     *
  1952.     * If there is no projective divide (the common case), this will be
  1953.     * \c NULL.  Optimization passes should check for this to point to a constant
  1954.     * of 1.0 and replace that with \c NULL.
  1955.     */
  1956.    ir_rvalue *projector;
  1957.  
  1958.    /**
  1959.     * Coordinate used for comparison on shadow look-ups.
  1960.     *
  1961.     * If there is no shadow comparison, this will be \c NULL.  For the
  1962.     * \c ir_txf opcode, this *must* be \c NULL.
  1963.     */
  1964.    ir_rvalue *shadow_comparitor;
  1965.  
  1966.    /** Texel offset. */
  1967.    ir_rvalue *offset;
  1968.  
  1969.    union {
  1970.       ir_rvalue *lod;           /**< Floating point LOD */
  1971.       ir_rvalue *bias;          /**< Floating point LOD bias */
  1972.       ir_rvalue *sample_index;  /**< MSAA sample index */
  1973.       ir_rvalue *component;     /**< Gather component selector */
  1974.       struct {
  1975.          ir_rvalue *dPdx;       /**< Partial derivative of coordinate wrt X */
  1976.          ir_rvalue *dPdy;       /**< Partial derivative of coordinate wrt Y */
  1977.       } grad;
  1978.    } lod_info;
  1979. };
  1980.  
  1981.  
  1982. struct ir_swizzle_mask {
  1983.    unsigned x:2;
  1984.    unsigned y:2;
  1985.    unsigned z:2;
  1986.    unsigned w:2;
  1987.  
  1988.    /**
  1989.     * Number of components in the swizzle.
  1990.     */
  1991.    unsigned num_components:3;
  1992.  
  1993.    /**
  1994.     * Does the swizzle contain duplicate components?
  1995.     *
  1996.     * L-value swizzles cannot contain duplicate components.
  1997.     */
  1998.    unsigned has_duplicates:1;
  1999. };
  2000.  
  2001.  
  2002. class ir_swizzle : public ir_rvalue {
  2003. public:
  2004.    ir_swizzle(ir_rvalue *, unsigned x, unsigned y, unsigned z, unsigned w,
  2005.               unsigned count);
  2006.  
  2007.    ir_swizzle(ir_rvalue *val, const unsigned *components, unsigned count);
  2008.  
  2009.    ir_swizzle(ir_rvalue *val, ir_swizzle_mask mask);
  2010.  
  2011.    virtual ir_swizzle *clone(void *mem_ctx, struct hash_table *) const;
  2012.  
  2013.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  2014.  
  2015.    /**
  2016.     * Construct an ir_swizzle from the textual representation.  Can fail.
  2017.     */
  2018.    static ir_swizzle *create(ir_rvalue *, const char *, unsigned vector_length);
  2019.  
  2020.    virtual void accept(ir_visitor *v)
  2021.    {
  2022.       v->visit(this);
  2023.    }
  2024.  
  2025.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  2026.  
  2027.    virtual bool equals(const ir_instruction *ir,
  2028.                        enum ir_node_type ignore = ir_type_unset) const;
  2029.  
  2030.    bool is_lvalue() const
  2031.    {
  2032.       return val->is_lvalue() && !mask.has_duplicates;
  2033.    }
  2034.  
  2035.    /**
  2036.     * Get the variable that is ultimately referenced by an r-value
  2037.     */
  2038.    virtual ir_variable *variable_referenced() const;
  2039.  
  2040.    ir_rvalue *val;
  2041.    ir_swizzle_mask mask;
  2042.  
  2043. private:
  2044.    /**
  2045.     * Initialize the mask component of a swizzle
  2046.     *
  2047.     * This is used by the \c ir_swizzle constructors.
  2048.     */
  2049.    void init_mask(const unsigned *components, unsigned count);
  2050. };
  2051.  
  2052.  
  2053. class ir_dereference : public ir_rvalue {
  2054. public:
  2055.    virtual ir_dereference *clone(void *mem_ctx, struct hash_table *) const = 0;
  2056.  
  2057.    bool is_lvalue() const;
  2058.  
  2059.    /**
  2060.     * Get the variable that is ultimately referenced by an r-value
  2061.     */
  2062.    virtual ir_variable *variable_referenced() const = 0;
  2063.  
  2064. protected:
  2065.    ir_dereference(enum ir_node_type t)
  2066.       : ir_rvalue(t)
  2067.    {
  2068.    }
  2069. };
  2070.  
  2071.  
  2072. class ir_dereference_variable : public ir_dereference {
  2073. public:
  2074.    ir_dereference_variable(ir_variable *var);
  2075.  
  2076.    virtual ir_dereference_variable *clone(void *mem_ctx,
  2077.                                           struct hash_table *) const;
  2078.  
  2079.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  2080.  
  2081.    virtual bool equals(const ir_instruction *ir,
  2082.                        enum ir_node_type ignore = ir_type_unset) const;
  2083.  
  2084.    /**
  2085.     * Get the variable that is ultimately referenced by an r-value
  2086.     */
  2087.    virtual ir_variable *variable_referenced() const
  2088.    {
  2089.       return this->var;
  2090.    }
  2091.  
  2092.    virtual ir_variable *whole_variable_referenced()
  2093.    {
  2094.       /* ir_dereference_variable objects always dereference the entire
  2095.        * variable.  However, if this dereference is dereferenced by anything
  2096.        * else, the complete deferefernce chain is not a whole-variable
  2097.        * dereference.  This method should only be called on the top most
  2098.        * ir_rvalue in a dereference chain.
  2099.        */
  2100.       return this->var;
  2101.    }
  2102.  
  2103.    virtual void accept(ir_visitor *v)
  2104.    {
  2105.       v->visit(this);
  2106.    }
  2107.  
  2108.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  2109.  
  2110.    /**
  2111.     * Object being dereferenced.
  2112.     */
  2113.    ir_variable *var;
  2114. };
  2115.  
  2116.  
  2117. class ir_dereference_array : public ir_dereference {
  2118. public:
  2119.    ir_dereference_array(ir_rvalue *value, ir_rvalue *array_index);
  2120.  
  2121.    ir_dereference_array(ir_variable *var, ir_rvalue *array_index);
  2122.  
  2123.    virtual ir_dereference_array *clone(void *mem_ctx,
  2124.                                        struct hash_table *) const;
  2125.  
  2126.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  2127.  
  2128.    virtual bool equals(const ir_instruction *ir,
  2129.                        enum ir_node_type ignore = ir_type_unset) const;
  2130.  
  2131.    /**
  2132.     * Get the variable that is ultimately referenced by an r-value
  2133.     */
  2134.    virtual ir_variable *variable_referenced() const
  2135.    {
  2136.       return this->array->variable_referenced();
  2137.    }
  2138.  
  2139.    virtual void accept(ir_visitor *v)
  2140.    {
  2141.       v->visit(this);
  2142.    }
  2143.  
  2144.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  2145.  
  2146.    ir_rvalue *array;
  2147.    ir_rvalue *array_index;
  2148.  
  2149. private:
  2150.    void set_array(ir_rvalue *value);
  2151. };
  2152.  
  2153.  
  2154. class ir_dereference_record : public ir_dereference {
  2155. public:
  2156.    ir_dereference_record(ir_rvalue *value, const char *field);
  2157.  
  2158.    ir_dereference_record(ir_variable *var, const char *field);
  2159.  
  2160.    virtual ir_dereference_record *clone(void *mem_ctx,
  2161.                                         struct hash_table *) const;
  2162.  
  2163.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  2164.  
  2165.    /**
  2166.     * Get the variable that is ultimately referenced by an r-value
  2167.     */
  2168.    virtual ir_variable *variable_referenced() const
  2169.    {
  2170.       return this->record->variable_referenced();
  2171.    }
  2172.  
  2173.    virtual void accept(ir_visitor *v)
  2174.    {
  2175.       v->visit(this);
  2176.    }
  2177.  
  2178.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  2179.  
  2180.    ir_rvalue *record;
  2181.    const char *field;
  2182. };
  2183.  
  2184.  
  2185. /**
  2186.  * Data stored in an ir_constant
  2187.  */
  2188. union ir_constant_data {
  2189.       unsigned u[16];
  2190.       int i[16];
  2191.       float f[16];
  2192.       bool b[16];
  2193.       double d[16];
  2194. };
  2195.  
  2196.  
  2197. class ir_constant : public ir_rvalue {
  2198. public:
  2199.    ir_constant(const struct glsl_type *type, const ir_constant_data *data);
  2200.    ir_constant(bool b, unsigned vector_elements=1);
  2201.    ir_constant(unsigned int u, unsigned vector_elements=1);
  2202.    ir_constant(int i, unsigned vector_elements=1);
  2203.    ir_constant(float f, unsigned vector_elements=1);
  2204.    ir_constant(double d, unsigned vector_elements=1);
  2205.  
  2206.    /**
  2207.     * Construct an ir_constant from a list of ir_constant values
  2208.     */
  2209.    ir_constant(const struct glsl_type *type, exec_list *values);
  2210.  
  2211.    /**
  2212.     * Construct an ir_constant from a scalar component of another ir_constant
  2213.     *
  2214.     * The new \c ir_constant inherits the type of the component from the
  2215.     * source constant.
  2216.     *
  2217.     * \note
  2218.     * In the case of a matrix constant, the new constant is a scalar, \b not
  2219.     * a vector.
  2220.     */
  2221.    ir_constant(const ir_constant *c, unsigned i);
  2222.  
  2223.    /**
  2224.     * Return a new ir_constant of the specified type containing all zeros.
  2225.     */
  2226.    static ir_constant *zero(void *mem_ctx, const glsl_type *type);
  2227.  
  2228.    virtual ir_constant *clone(void *mem_ctx, struct hash_table *) const;
  2229.  
  2230.    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
  2231.  
  2232.    virtual void accept(ir_visitor *v)
  2233.    {
  2234.       v->visit(this);
  2235.    }
  2236.  
  2237.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  2238.  
  2239.    virtual bool equals(const ir_instruction *ir,
  2240.                        enum ir_node_type ignore = ir_type_unset) const;
  2241.  
  2242.    /**
  2243.     * Get a particular component of a constant as a specific type
  2244.     *
  2245.     * This is useful, for example, to get a value from an integer constant
  2246.     * as a float or bool.  This appears frequently when constructors are
  2247.     * called with all constant parameters.
  2248.     */
  2249.    /*@{*/
  2250.    bool get_bool_component(unsigned i) const;
  2251.    float get_float_component(unsigned i) const;
  2252.    double get_double_component(unsigned i) const;
  2253.    int get_int_component(unsigned i) const;
  2254.    unsigned get_uint_component(unsigned i) const;
  2255.    /*@}*/
  2256.  
  2257.    ir_constant *get_array_element(unsigned i) const;
  2258.  
  2259.    ir_constant *get_record_field(const char *name);
  2260.  
  2261.    /**
  2262.     * Copy the values on another constant at a given offset.
  2263.     *
  2264.     * The offset is ignored for array or struct copies, it's only for
  2265.     * scalars or vectors into vectors or matrices.
  2266.     *
  2267.     * With identical types on both sides and zero offset it's clone()
  2268.     * without creating a new object.
  2269.     */
  2270.  
  2271.    void copy_offset(ir_constant *src, int offset);
  2272.  
  2273.    /**
  2274.     * Copy the values on another constant at a given offset and
  2275.     * following an assign-like mask.
  2276.     *
  2277.     * The mask is ignored for scalars.
  2278.     *
  2279.     * Note that this function only handles what assign can handle,
  2280.     * i.e. at most a vector as source and a column of a matrix as
  2281.     * destination.
  2282.     */
  2283.  
  2284.    void copy_masked_offset(ir_constant *src, int offset, unsigned int mask);
  2285.  
  2286.    /**
  2287.     * Determine whether a constant has the same value as another constant
  2288.     *
  2289.     * \sa ir_constant::is_zero, ir_constant::is_one,
  2290.     * ir_constant::is_negative_one
  2291.     */
  2292.    bool has_value(const ir_constant *) const;
  2293.  
  2294.    /**
  2295.     * Return true if this ir_constant represents the given value.
  2296.     *
  2297.     * For vectors, this checks that each component is the given value.
  2298.     */
  2299.    virtual bool is_value(float f, int i) const;
  2300.    virtual bool is_zero() const;
  2301.    virtual bool is_one() const;
  2302.    virtual bool is_negative_one() const;
  2303.  
  2304.    /**
  2305.     * Return true for constants that could be stored as 16-bit unsigned values.
  2306.     *
  2307.     * Note that this will return true even for signed integer ir_constants, as
  2308.     * long as the value is non-negative and fits in 16-bits.
  2309.     */
  2310.    virtual bool is_uint16_constant() const;
  2311.  
  2312.    /**
  2313.     * Value of the constant.
  2314.     *
  2315.     * The field used to back the values supplied by the constant is determined
  2316.     * by the type associated with the \c ir_instruction.  Constants may be
  2317.     * scalars, vectors, or matrices.
  2318.     */
  2319.    union ir_constant_data value;
  2320.  
  2321.    /* Array elements */
  2322.    ir_constant **array_elements;
  2323.  
  2324.    /* Structure fields */
  2325.    exec_list components;
  2326.  
  2327. private:
  2328.    /**
  2329.     * Parameterless constructor only used by the clone method
  2330.     */
  2331.    ir_constant(void);
  2332. };
  2333.  
  2334. /**
  2335.  * IR instruction to emit a vertex in a geometry shader.
  2336.  */
  2337. class ir_emit_vertex : public ir_instruction {
  2338. public:
  2339.    ir_emit_vertex(ir_rvalue *stream)
  2340.       : ir_instruction(ir_type_emit_vertex),
  2341.         stream(stream)
  2342.    {
  2343.       assert(stream);
  2344.    }
  2345.  
  2346.    virtual void accept(ir_visitor *v)
  2347.    {
  2348.       v->visit(this);
  2349.    }
  2350.  
  2351.    virtual ir_emit_vertex *clone(void *mem_ctx, struct hash_table *ht) const
  2352.    {
  2353.       return new(mem_ctx) ir_emit_vertex(this->stream->clone(mem_ctx, ht));
  2354.    }
  2355.  
  2356.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  2357.  
  2358.    int stream_id() const
  2359.    {
  2360.       return stream->as_constant()->value.i[0];
  2361.    }
  2362.  
  2363.    ir_rvalue *stream;
  2364. };
  2365.  
  2366. /**
  2367.  * IR instruction to complete the current primitive and start a new one in a
  2368.  * geometry shader.
  2369.  */
  2370. class ir_end_primitive : public ir_instruction {
  2371. public:
  2372.    ir_end_primitive(ir_rvalue *stream)
  2373.       : ir_instruction(ir_type_end_primitive),
  2374.         stream(stream)
  2375.    {
  2376.       assert(stream);
  2377.    }
  2378.  
  2379.    virtual void accept(ir_visitor *v)
  2380.    {
  2381.       v->visit(this);
  2382.    }
  2383.  
  2384.    virtual ir_end_primitive *clone(void *mem_ctx, struct hash_table *ht) const
  2385.    {
  2386.       return new(mem_ctx) ir_end_primitive(this->stream->clone(mem_ctx, ht));
  2387.    }
  2388.  
  2389.    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
  2390.  
  2391.    int stream_id() const
  2392.    {
  2393.       return stream->as_constant()->value.i[0];
  2394.    }
  2395.  
  2396.    ir_rvalue *stream;
  2397. };
  2398.  
  2399. /*@}*/
  2400.  
  2401. /**
  2402.  * Apply a visitor to each IR node in a list
  2403.  */
  2404. void
  2405. visit_exec_list(exec_list *list, ir_visitor *visitor);
  2406.  
  2407. /**
  2408.  * Validate invariants on each IR node in a list
  2409.  */
  2410. void validate_ir_tree(exec_list *instructions);
  2411.  
  2412. struct _mesa_glsl_parse_state;
  2413. struct gl_shader_program;
  2414.  
  2415. /**
  2416.  * Detect whether an unlinked shader contains static recursion
  2417.  *
  2418.  * If the list of instructions is determined to contain static recursion,
  2419.  * \c _mesa_glsl_error will be called to emit error messages for each function
  2420.  * that is in the recursion cycle.
  2421.  */
  2422. void
  2423. detect_recursion_unlinked(struct _mesa_glsl_parse_state *state,
  2424.                           exec_list *instructions);
  2425.  
  2426. /**
  2427.  * Detect whether a linked shader contains static recursion
  2428.  *
  2429.  * If the list of instructions is determined to contain static recursion,
  2430.  * \c link_error_printf will be called to emit error messages for each function
  2431.  * that is in the recursion cycle.  In addition,
  2432.  * \c gl_shader_program::LinkStatus will be set to false.
  2433.  */
  2434. void
  2435. detect_recursion_linked(struct gl_shader_program *prog,
  2436.                         exec_list *instructions);
  2437.  
  2438. /**
  2439.  * Make a clone of each IR instruction in a list
  2440.  *
  2441.  * \param in   List of IR instructions that are to be cloned
  2442.  * \param out  List to hold the cloned instructions
  2443.  */
  2444. void
  2445. clone_ir_list(void *mem_ctx, exec_list *out, const exec_list *in);
  2446.  
  2447. extern void
  2448. _mesa_glsl_initialize_variables(exec_list *instructions,
  2449.                                 struct _mesa_glsl_parse_state *state);
  2450.  
  2451. extern void
  2452. _mesa_glsl_initialize_functions(_mesa_glsl_parse_state *state);
  2453.  
  2454. extern void
  2455. _mesa_glsl_initialize_builtin_functions();
  2456.  
  2457. extern ir_function_signature *
  2458. _mesa_glsl_find_builtin_function(_mesa_glsl_parse_state *state,
  2459.                                  const char *name, exec_list *actual_parameters);
  2460.  
  2461. extern ir_function *
  2462. _mesa_glsl_find_builtin_function_by_name(_mesa_glsl_parse_state *state,
  2463.                                          const char *name);
  2464.  
  2465. extern gl_shader *
  2466. _mesa_glsl_get_builtin_function_shader(void);
  2467.  
  2468. extern void
  2469. _mesa_glsl_release_functions(void);
  2470.  
  2471. extern void
  2472. _mesa_glsl_release_builtin_functions(void);
  2473.  
  2474. extern void
  2475. reparent_ir(exec_list *list, void *mem_ctx);
  2476.  
  2477. struct glsl_symbol_table;
  2478.  
  2479. extern void
  2480. import_prototypes(const exec_list *source, exec_list *dest,
  2481.                   struct glsl_symbol_table *symbols, void *mem_ctx);
  2482.  
  2483. extern bool
  2484. ir_has_call(ir_instruction *ir);
  2485.  
  2486. extern void
  2487. do_set_program_inouts(exec_list *instructions, struct gl_program *prog,
  2488.                       gl_shader_stage shader_stage);
  2489.  
  2490. extern char *
  2491. prototype_string(const glsl_type *return_type, const char *name,
  2492.                  exec_list *parameters);
  2493.  
  2494. const char *
  2495. mode_string(const ir_variable *var);
  2496.  
  2497. /**
  2498.  * Built-in / reserved GL variables names start with "gl_"
  2499.  */
  2500. static inline bool
  2501. is_gl_identifier(const char *s)
  2502. {
  2503.    return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_';
  2504. }
  2505.  
  2506. extern "C" {
  2507. #endif /* __cplusplus */
  2508.  
  2509. extern void _mesa_print_ir(FILE *f, struct exec_list *instructions,
  2510.                            struct _mesa_glsl_parse_state *state);
  2511.  
  2512. extern void
  2513. fprint_ir(FILE *f, const void *instruction);
  2514.  
  2515. #ifdef __cplusplus
  2516. } /* extern "C" */
  2517. #endif
  2518.  
  2519. unsigned
  2520. vertices_per_prim(GLenum prim);
  2521.  
  2522. #endif /* IR_H */
  2523.