glsl: Add a new ir_unop_round_even opcode for GLSL 1.30's roundEven.
[profile/ivi/mesa.git] / src / glsl / ir.h
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 <cstdio>
30 #include <cstdlib>
31
32 extern "C" {
33 #include <talloc.h>
34 }
35
36 #include "list.h"
37 #include "ir_visitor.h"
38 #include "ir_hierarchical_visitor.h"
39
40 #ifndef ARRAY_SIZE
41 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
42 #endif
43
44 /**
45  * \defgroup IR Intermediate representation nodes
46  *
47  * @{
48  */
49
50 /**
51  * Class tags
52  *
53  * Each concrete class derived from \c ir_instruction has a value in this
54  * enumerant.  The value for the type is stored in \c ir_instruction::ir_type
55  * by the constructor.  While using type tags is not very C++, it is extremely
56  * convenient.  For example, during debugging you can simply inspect
57  * \c ir_instruction::ir_type to find out the actual type of the object.
58  *
59  * In addition, it is possible to use a switch-statement based on \c
60  * \c ir_instruction::ir_type to select different behavior for different object
61  * types.  For functions that have only slight differences for several object
62  * types, this allows writing very straightforward, readable code.
63  */
64 enum ir_node_type {
65    /**
66     * Zero is unused so that the IR validator can detect cases where
67     * \c ir_instruction::ir_type has not been initialized.
68     */
69    ir_type_unset,
70    ir_type_variable,
71    ir_type_assignment,
72    ir_type_call,
73    ir_type_constant,
74    ir_type_dereference_array,
75    ir_type_dereference_record,
76    ir_type_dereference_variable,
77    ir_type_discard,
78    ir_type_expression,
79    ir_type_function,
80    ir_type_function_signature,
81    ir_type_if,
82    ir_type_loop,
83    ir_type_loop_jump,
84    ir_type_return,
85    ir_type_swizzle,
86    ir_type_texture,
87    ir_type_max /**< maximum ir_type enum number, for validation */
88 };
89
90 /**
91  * Base class of all IR instructions
92  */
93 class ir_instruction : public exec_node {
94 public:
95    enum ir_node_type ir_type;
96    const struct glsl_type *type;
97
98    /** ir_print_visitor helper for debugging. */
99    void print(void) const;
100
101    virtual void accept(ir_visitor *) = 0;
102    virtual ir_visitor_status accept(ir_hierarchical_visitor *) = 0;
103    virtual ir_instruction *clone(void *mem_ctx,
104                                  struct hash_table *ht) const = 0;
105
106    /**
107     * \name IR instruction downcast functions
108     *
109     * These functions either cast the object to a derived class or return
110     * \c NULL if the object's type does not match the specified derived class.
111     * Additional downcast functions will be added as needed.
112     */
113    /*@{*/
114    virtual class ir_variable *          as_variable()         { return NULL; }
115    virtual class ir_function *          as_function()         { return NULL; }
116    virtual class ir_dereference *       as_dereference()      { return NULL; }
117    virtual class ir_dereference_array * as_dereference_array() { return NULL; }
118    virtual class ir_dereference_variable *as_dereference_variable() { return NULL; }
119    virtual class ir_expression *        as_expression()       { return NULL; }
120    virtual class ir_rvalue *            as_rvalue()           { return NULL; }
121    virtual class ir_loop *              as_loop()             { return NULL; }
122    virtual class ir_assignment *        as_assignment()       { return NULL; }
123    virtual class ir_call *              as_call()             { return NULL; }
124    virtual class ir_return *            as_return()           { return NULL; }
125    virtual class ir_if *                as_if()               { return NULL; }
126    virtual class ir_swizzle *           as_swizzle()          { return NULL; }
127    virtual class ir_constant *          as_constant()         { return NULL; }
128    /*@}*/
129
130 protected:
131    ir_instruction()
132    {
133       ir_type = ir_type_unset;
134       type = NULL;
135    }
136 };
137
138
139 class ir_rvalue : public ir_instruction {
140 public:
141    virtual ir_rvalue *clone(void *mem_ctx, struct hash_table *) const = 0;
142
143    virtual ir_constant *constant_expression_value() = 0;
144
145    virtual ir_rvalue * as_rvalue()
146    {
147       return this;
148    }
149
150    virtual bool is_lvalue()
151    {
152       return false;
153    }
154
155    /**
156     * Get the variable that is ultimately referenced by an r-value
157     */
158    virtual ir_variable *variable_referenced()
159    {
160       return NULL;
161    }
162
163
164    /**
165     * If an r-value is a reference to a whole variable, get that variable
166     *
167     * \return
168     * Pointer to a variable that is completely dereferenced by the r-value.  If
169     * the r-value is not a dereference or the dereference does not access the
170     * entire variable (i.e., it's just one array element, struct field), \c NULL
171     * is returned.
172     */
173    virtual ir_variable *whole_variable_referenced()
174    {
175       return NULL;
176    }
177
178 protected:
179    ir_rvalue();
180 };
181
182
183 /**
184  * Variable storage classes
185  */
186 enum ir_variable_mode {
187    ir_var_auto = 0,     /**< Function local variables and globals. */
188    ir_var_uniform,      /**< Variable declared as a uniform. */
189    ir_var_in,
190    ir_var_out,
191    ir_var_inout,
192    ir_var_temporary     /**< Temporary variable generated during compilation. */
193 };
194
195 enum ir_variable_interpolation {
196    ir_var_smooth = 0,
197    ir_var_flat,
198    ir_var_noperspective
199 };
200
201
202 class ir_variable : public ir_instruction {
203 public:
204    ir_variable(const struct glsl_type *, const char *, ir_variable_mode);
205
206    virtual ir_variable *clone(void *mem_ctx, struct hash_table *ht) const;
207
208    virtual ir_variable *as_variable()
209    {
210       return this;
211    }
212
213    virtual void accept(ir_visitor *v)
214    {
215       v->visit(this);
216    }
217
218    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
219
220
221    /**
222     * Get the string value for the interpolation qualifier
223     *
224     * \return The string that would be used in a shader to specify \c
225     * mode will be returned.
226     *
227     * This function should only be used on a shader input or output variable.
228     */
229    const char *interpolation_string() const;
230
231    /**
232     * Calculate the number of slots required to hold this variable
233     *
234     * This is used to determine how many uniform or varying locations a variable
235     * occupies.  The count is in units of floating point components.
236     */
237    unsigned component_slots() const;
238
239    /**
240     * Delcared name of the variable
241     */
242    const char *name;
243
244    /**
245     * Highest element accessed with a constant expression array index
246     *
247     * Not used for non-array variables.
248     */
249    unsigned max_array_access;
250
251    /**
252     * Is the variable read-only?
253     *
254     * This is set for variables declared as \c const, shader inputs,
255     * and uniforms.
256     */
257    unsigned read_only:1;
258    unsigned centroid:1;
259    unsigned invariant:1;
260
261    /**
262     * Storage class of the variable.
263     *
264     * \sa ir_variable_mode
265     */
266    unsigned mode:3;
267
268    /**
269     * Interpolation mode for shader inputs / outputs
270     *
271     * \sa ir_variable_interpolation
272     */
273    unsigned interpolation:2;
274
275    /**
276     * Flag that the whole array is assignable
277     *
278     * In GLSL 1.20 and later whole arrays are assignable (and comparable for
279     * equality).  This flag enables this behavior.
280     */
281    unsigned array_lvalue:1;
282
283    /**
284     * \name ARB_fragment_coord_conventions
285     * @{
286     */
287    unsigned origin_upper_left:1;
288    unsigned pixel_center_integer:1;
289    /*@}*/
290
291    /**
292     * Was the location explicitly set in the shader?
293     *
294     * If the location is explicitly set in the shader, it \b cannot be changed
295     * by the linker or by the API (e.g., calls to \c glBindAttribLocation have
296     * no effect).
297     */
298    unsigned explicit_location:1;
299
300    /**
301     * Storage location of the base of this variable
302     *
303     * The precise meaning of this field depends on the nature of the variable.
304     *
305     *   - Vertex shader input: one of the values from \c gl_vert_attrib.
306     *   - Vertex shader output: one of the values from \c gl_vert_result.
307     *   - Fragment shader input: one of the values from \c gl_frag_attrib.
308     *   - Fragment shader output: one of the values from \c gl_frag_result.
309     *   - Uniforms: Per-stage uniform slot number.
310     *   - Other: This field is not currently used.
311     *
312     * If the variable is a uniform, shader input, or shader output, and the
313     * slot has not been assigned, the value will be -1.
314     */
315    int location;
316
317    /**
318     * Emit a warning if this variable is accessed.
319     */
320    const char *warn_extension;
321
322    /**
323     * Value assigned in the initializer of a variable declared "const"
324     */
325    ir_constant *constant_value;
326 };
327
328
329 /*@{*/
330 /**
331  * The representation of a function instance; may be the full definition or
332  * simply a prototype.
333  */
334 class ir_function_signature : public ir_instruction {
335    /* An ir_function_signature will be part of the list of signatures in
336     * an ir_function.
337     */
338 public:
339    ir_function_signature(const glsl_type *return_type);
340
341    virtual ir_function_signature *clone(void *mem_ctx,
342                                         struct hash_table *ht) const;
343
344    virtual void accept(ir_visitor *v)
345    {
346       v->visit(this);
347    }
348
349    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
350
351    /**
352     * Get the name of the function for which this is a signature
353     */
354    const char *function_name() const;
355
356    /**
357     * Get a handle to the function for which this is a signature
358     *
359     * There is no setter function, this function returns a \c const pointer,
360     * and \c ir_function_signature::_function is private for a reason.  The
361     * only way to make a connection between a function and function signature
362     * is via \c ir_function::add_signature.  This helps ensure that certain
363     * invariants (i.e., a function signature is in the list of signatures for
364     * its \c _function) are met.
365     *
366     * \sa ir_function::add_signature
367     */
368    inline const class ir_function *function() const
369    {
370       return this->_function;
371    }
372
373    /**
374     * Check whether the qualifiers match between this signature's parameters
375     * and the supplied parameter list.  If not, returns the name of the first
376     * parameter with mismatched qualifiers (for use in error messages).
377     */
378    const char *qualifiers_match(exec_list *params);
379
380    /**
381     * Replace the current parameter list with the given one.  This is useful
382     * if the current information came from a prototype, and either has invalid
383     * or missing parameter names.
384     */
385    void replace_parameters(exec_list *new_params);
386
387    /**
388     * Function return type.
389     *
390     * \note This discards the optional precision qualifier.
391     */
392    const struct glsl_type *return_type;
393
394    /**
395     * List of ir_variable of function parameters.
396     *
397     * This represents the storage.  The paramaters passed in a particular
398     * call will be in ir_call::actual_paramaters.
399     */
400    struct exec_list parameters;
401
402    /** Whether or not this function has a body (which may be empty). */
403    unsigned is_defined:1;
404
405    /** Whether or not this function signature is a built-in. */
406    unsigned is_builtin:1;
407
408    /** Body of instructions in the function. */
409    struct exec_list body;
410
411 private:
412    /** Function of which this signature is one overload. */
413    class ir_function *_function;
414
415    friend class ir_function;
416 };
417
418
419 /**
420  * Header for tracking multiple overloaded functions with the same name.
421  * Contains a list of ir_function_signatures representing each of the
422  * actual functions.
423  */
424 class ir_function : public ir_instruction {
425 public:
426    ir_function(const char *name);
427
428    virtual ir_function *clone(void *mem_ctx, struct hash_table *ht) const;
429
430    virtual ir_function *as_function()
431    {
432       return this;
433    }
434
435    virtual void accept(ir_visitor *v)
436    {
437       v->visit(this);
438    }
439
440    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
441
442    void add_signature(ir_function_signature *sig)
443    {
444       sig->_function = this;
445       this->signatures.push_tail(sig);
446    }
447
448    /**
449     * Get an iterator for the set of function signatures
450     */
451    exec_list_iterator iterator()
452    {
453       return signatures.iterator();
454    }
455
456    /**
457     * Find a signature that matches a set of actual parameters, taking implicit
458     * conversions into account.
459     */
460    ir_function_signature *matching_signature(const exec_list *actual_param);
461
462    /**
463     * Find a signature that exactly matches a set of actual parameters without
464     * any implicit type conversions.
465     */
466    ir_function_signature *exact_matching_signature(const exec_list *actual_ps);
467
468    /**
469     * Name of the function.
470     */
471    const char *name;
472
473    /** Whether or not this function has a signature that isn't a built-in. */
474    bool has_user_signature();
475
476    /**
477     * List of ir_function_signature for each overloaded function with this name.
478     */
479    struct exec_list signatures;
480 };
481
482 inline const char *ir_function_signature::function_name() const
483 {
484    return this->_function->name;
485 }
486 /*@}*/
487
488
489 /**
490  * IR instruction representing high-level if-statements
491  */
492 class ir_if : public ir_instruction {
493 public:
494    ir_if(ir_rvalue *condition)
495       : condition(condition)
496    {
497       ir_type = ir_type_if;
498    }
499
500    virtual ir_if *clone(void *mem_ctx, struct hash_table *ht) const;
501
502    virtual ir_if *as_if()
503    {
504       return this;
505    }
506
507    virtual void accept(ir_visitor *v)
508    {
509       v->visit(this);
510    }
511
512    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
513
514    ir_rvalue *condition;
515    /** List of ir_instruction for the body of the then branch */
516    exec_list  then_instructions;
517    /** List of ir_instruction for the body of the else branch */
518    exec_list  else_instructions;
519 };
520
521
522 /**
523  * IR instruction representing a high-level loop structure.
524  */
525 class ir_loop : public ir_instruction {
526 public:
527    ir_loop();
528
529    virtual ir_loop *clone(void *mem_ctx, struct hash_table *ht) const;
530
531    virtual void accept(ir_visitor *v)
532    {
533       v->visit(this);
534    }
535
536    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
537
538    virtual ir_loop *as_loop()
539    {
540       return this;
541    }
542
543    /**
544     * Get an iterator for the instructions of the loop body
545     */
546    exec_list_iterator iterator()
547    {
548       return body_instructions.iterator();
549    }
550
551    /** List of ir_instruction that make up the body of the loop. */
552    exec_list body_instructions;
553
554    /**
555     * \name Loop counter and controls
556     *
557     * Represents a loop like a FORTRAN \c do-loop.
558     *
559     * \note
560     * If \c from and \c to are the same value, the loop will execute once.
561     */
562    /*@{*/
563    ir_rvalue *from;             /** Value of the loop counter on the first
564                                  * iteration of the loop.
565                                  */
566    ir_rvalue *to;               /** Value of the loop counter on the last
567                                  * iteration of the loop.
568                                  */
569    ir_rvalue *increment;
570    ir_variable *counter;
571
572    /**
573     * Comparison operation in the loop terminator.
574     *
575     * If any of the loop control fields are non-\c NULL, this field must be
576     * one of \c ir_binop_less, \c ir_binop_greater, \c ir_binop_lequal,
577     * \c ir_binop_gequal, \c ir_binop_equal, or \c ir_binop_nequal.
578     */
579    int cmp;
580    /*@}*/
581 };
582
583
584 class ir_assignment : public ir_instruction {
585 public:
586    ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs, ir_rvalue *condition);
587
588    /**
589     * Construct an assignment with an explicit write mask
590     *
591     * \note
592     * Since a write mask is supplied, the LHS must already be a bare
593     * \c ir_dereference.  The cannot be any swizzles in the LHS.
594     */
595    ir_assignment(ir_dereference *lhs, ir_rvalue *rhs, ir_rvalue *condition,
596                  unsigned write_mask);
597
598    virtual ir_assignment *clone(void *mem_ctx, struct hash_table *ht) const;
599
600    virtual ir_constant *constant_expression_value();
601
602    virtual void accept(ir_visitor *v)
603    {
604       v->visit(this);
605    }
606
607    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
608
609    virtual ir_assignment * as_assignment()
610    {
611       return this;
612    }
613
614    /**
615     * Get a whole variable written by an assignment
616     *
617     * If the LHS of the assignment writes a whole variable, the variable is
618     * returned.  Otherwise \c NULL is returned.  Examples of whole-variable
619     * assignment are:
620     *
621     *  - Assigning to a scalar
622     *  - Assigning to all components of a vector
623     *  - Whole array (or matrix) assignment
624     *  - Whole structure assignment
625     */
626    ir_variable *whole_variable_written();
627
628    /**
629     * Set the LHS of an assignment
630     */
631    void set_lhs(ir_rvalue *lhs);
632
633    /**
634     * Left-hand side of the assignment.
635     *
636     * This should be treated as read only.  If you need to set the LHS of an
637     * assignment, use \c ir_assignment::set_lhs.
638     */
639    ir_dereference *lhs;
640
641    /**
642     * Value being assigned
643     */
644    ir_rvalue *rhs;
645
646    /**
647     * Optional condition for the assignment.
648     */
649    ir_rvalue *condition;
650
651
652    /**
653     * Component mask written
654     *
655     * For non-vector types in the LHS, this field will be zero.  For vector
656     * types, a bit will be set for each component that is written.  Note that
657     * for \c vec2 and \c vec3 types only the lower bits will ever be set.
658     *
659     * A partially-set write mask means that each enabled channel gets
660     * the value from a consecutive channel of the rhs.  For example,
661     * to write just .xyw of gl_FrontColor with color:
662     *
663     * (assign (constant bool (1)) (xyw)
664     *     (var_ref gl_FragColor)
665     *     (swiz xyw (var_ref color)))
666     */
667    unsigned write_mask:4;
668 };
669
670 /* Update ir_expression::num_operands() and operator_strs when
671  * updating this list.
672  */
673 enum ir_expression_operation {
674    ir_unop_bit_not,
675    ir_unop_logic_not,
676    ir_unop_neg,
677    ir_unop_abs,
678    ir_unop_sign,
679    ir_unop_rcp,
680    ir_unop_rsq,
681    ir_unop_sqrt,
682    ir_unop_exp,      /**< Log base e on gentype */
683    ir_unop_log,      /**< Natural log on gentype */
684    ir_unop_exp2,
685    ir_unop_log2,
686    ir_unop_f2i,      /**< Float-to-integer conversion. */
687    ir_unop_i2f,      /**< Integer-to-float conversion. */
688    ir_unop_f2b,      /**< Float-to-boolean conversion */
689    ir_unop_b2f,      /**< Boolean-to-float conversion */
690    ir_unop_i2b,      /**< int-to-boolean conversion */
691    ir_unop_b2i,      /**< Boolean-to-int conversion */
692    ir_unop_u2f,      /**< Unsigned-to-float conversion. */
693    ir_unop_any,
694
695    /**
696     * \name Unary floating-point rounding operations.
697     */
698    /*@{*/
699    ir_unop_trunc,
700    ir_unop_ceil,
701    ir_unop_floor,
702    ir_unop_fract,
703    ir_unop_round_even,
704    /*@}*/
705
706    /**
707     * \name Trigonometric operations.
708     */
709    /*@{*/
710    ir_unop_sin,
711    ir_unop_cos,
712    /*@}*/
713
714    /**
715     * \name Partial derivatives.
716     */
717    /*@{*/
718    ir_unop_dFdx,
719    ir_unop_dFdy,
720    /*@}*/
721
722    ir_unop_noise,
723
724    ir_binop_add,
725    ir_binop_sub,
726    ir_binop_mul,
727    ir_binop_div,
728
729    /**
730     * Takes one of two combinations of arguments:
731     *
732     * - mod(vecN, vecN)
733     * - mod(vecN, float)
734     *
735     * Does not take integer types.
736     */
737    ir_binop_mod,
738
739    /**
740     * \name Binary comparison operators which return a boolean vector.
741     * The type of both operands must be equal.
742     */
743    /*@{*/
744    ir_binop_less,
745    ir_binop_greater,
746    ir_binop_lequal,
747    ir_binop_gequal,
748    ir_binop_equal,
749    ir_binop_nequal,
750    /**
751     * Returns single boolean for whether all components of operands[0]
752     * equal the components of operands[1].
753     */
754    ir_binop_all_equal,
755    /**
756     * Returns single boolean for whether any component of operands[0]
757     * is not equal to the corresponding component of operands[1].
758     */
759    ir_binop_any_nequal,
760    /*@}*/
761
762    /**
763     * \name Bit-wise binary operations.
764     */
765    /*@{*/
766    ir_binop_lshift,
767    ir_binop_rshift,
768    ir_binop_bit_and,
769    ir_binop_bit_xor,
770    ir_binop_bit_or,
771    /*@}*/
772
773    ir_binop_logic_and,
774    ir_binop_logic_xor,
775    ir_binop_logic_or,
776
777    ir_binop_dot,
778    ir_binop_cross,
779    ir_binop_min,
780    ir_binop_max,
781
782    ir_binop_pow
783 };
784
785 class ir_expression : public ir_rvalue {
786 public:
787    ir_expression(int op, const struct glsl_type *type,
788                  ir_rvalue *, ir_rvalue *);
789
790    virtual ir_expression *as_expression()
791    {
792       return this;
793    }
794
795    virtual ir_expression *clone(void *mem_ctx, struct hash_table *ht) const;
796
797    /**
798     * Attempt to constant-fold the expression
799     *
800     * If the expression cannot be constant folded, this method will return
801     * \c NULL.
802     */
803    virtual ir_constant *constant_expression_value();
804
805    /**
806     * Determine the number of operands used by an expression
807     */
808    static unsigned int get_num_operands(ir_expression_operation);
809
810    /**
811     * Determine the number of operands used by an expression
812     */
813    unsigned int get_num_operands() const
814    {
815       return get_num_operands(operation);
816    }
817
818    /**
819     * Return a string representing this expression's operator.
820     */
821    const char *operator_string();
822
823    /**
824     * Return a string representing this expression's operator.
825     */
826    static const char *operator_string(ir_expression_operation);
827
828
829    /**
830     * Do a reverse-lookup to translate the given string into an operator.
831     */
832    static ir_expression_operation get_operator(const char *);
833
834    virtual void accept(ir_visitor *v)
835    {
836       v->visit(this);
837    }
838
839    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
840
841    ir_expression_operation operation;
842    ir_rvalue *operands[2];
843 };
844
845
846 /**
847  * IR instruction representing a function call
848  */
849 class ir_call : public ir_rvalue {
850 public:
851    ir_call(ir_function_signature *callee, exec_list *actual_parameters)
852       : callee(callee)
853    {
854       ir_type = ir_type_call;
855       assert(callee->return_type != NULL);
856       type = callee->return_type;
857       actual_parameters->move_nodes_to(& this->actual_parameters);
858    }
859
860    virtual ir_call *clone(void *mem_ctx, struct hash_table *ht) const;
861
862    virtual ir_constant *constant_expression_value();
863
864    virtual ir_call *as_call()
865    {
866       return this;
867    }
868
869    virtual void accept(ir_visitor *v)
870    {
871       v->visit(this);
872    }
873
874    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
875
876    /**
877     * Get a generic ir_call object when an error occurs
878     *
879     * Any allocation will be performed with 'ctx' as talloc owner.
880     */
881    static ir_call *get_error_instruction(void *ctx);
882
883    /**
884     * Get an iterator for the set of acutal parameters
885     */
886    exec_list_iterator iterator()
887    {
888       return actual_parameters.iterator();
889    }
890
891    /**
892     * Get the name of the function being called.
893     */
894    const char *callee_name() const
895    {
896       return callee->function_name();
897    }
898
899    /**
900     * Get the function signature bound to this function call
901     */
902    ir_function_signature *get_callee()
903    {
904       return callee;
905    }
906
907    /**
908     * Set the function call target
909     */
910    void set_callee(ir_function_signature *sig);
911
912    /**
913     * Generates an inline version of the function before @ir,
914     * returning the return value of the function.
915     */
916    ir_rvalue *generate_inline(ir_instruction *ir);
917
918    /* List of ir_rvalue of paramaters passed in this call. */
919    exec_list actual_parameters;
920
921 private:
922    ir_call()
923       : callee(NULL)
924    {
925       this->ir_type = ir_type_call;
926    }
927
928    ir_function_signature *callee;
929 };
930
931
932 /**
933  * \name Jump-like IR instructions.
934  *
935  * These include \c break, \c continue, \c return, and \c discard.
936  */
937 /*@{*/
938 class ir_jump : public ir_instruction {
939 protected:
940    ir_jump()
941    {
942       ir_type = ir_type_unset;
943    }
944 };
945
946 class ir_return : public ir_jump {
947 public:
948    ir_return()
949       : value(NULL)
950    {
951       this->ir_type = ir_type_return;
952    }
953
954    ir_return(ir_rvalue *value)
955       : value(value)
956    {
957       this->ir_type = ir_type_return;
958    }
959
960    virtual ir_return *clone(void *mem_ctx, struct hash_table *) const;
961
962    virtual ir_return *as_return()
963    {
964       return this;
965    }
966
967    ir_rvalue *get_value() const
968    {
969       return value;
970    }
971
972    virtual void accept(ir_visitor *v)
973    {
974       v->visit(this);
975    }
976
977    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
978
979    ir_rvalue *value;
980 };
981
982
983 /**
984  * Jump instructions used inside loops
985  *
986  * These include \c break and \c continue.  The \c break within a loop is
987  * different from the \c break within a switch-statement.
988  *
989  * \sa ir_switch_jump
990  */
991 class ir_loop_jump : public ir_jump {
992 public:
993    enum jump_mode {
994       jump_break,
995       jump_continue
996    };
997
998    ir_loop_jump(jump_mode mode)
999    {
1000       this->ir_type = ir_type_loop_jump;
1001       this->mode = mode;
1002       this->loop = loop;
1003    }
1004
1005    virtual ir_loop_jump *clone(void *mem_ctx, struct hash_table *) const;
1006
1007    virtual void accept(ir_visitor *v)
1008    {
1009       v->visit(this);
1010    }
1011
1012    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1013
1014    bool is_break() const
1015    {
1016       return mode == jump_break;
1017    }
1018
1019    bool is_continue() const
1020    {
1021       return mode == jump_continue;
1022    }
1023
1024    /** Mode selector for the jump instruction. */
1025    enum jump_mode mode;
1026 private:
1027    /** Loop containing this break instruction. */
1028    ir_loop *loop;
1029 };
1030
1031 /**
1032  * IR instruction representing discard statements.
1033  */
1034 class ir_discard : public ir_jump {
1035 public:
1036    ir_discard()
1037    {
1038       this->ir_type = ir_type_discard;
1039       this->condition = NULL;
1040    }
1041
1042    ir_discard(ir_rvalue *cond)
1043    {
1044       this->ir_type = ir_type_discard;
1045       this->condition = cond;
1046    }
1047
1048    virtual ir_discard *clone(void *mem_ctx, struct hash_table *ht) const;
1049
1050    virtual void accept(ir_visitor *v)
1051    {
1052       v->visit(this);
1053    }
1054
1055    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1056
1057    ir_rvalue *condition;
1058 };
1059 /*@}*/
1060
1061
1062 /**
1063  * Texture sampling opcodes used in ir_texture
1064  */
1065 enum ir_texture_opcode {
1066    ir_tex,              /**< Regular texture look-up */
1067    ir_txb,              /**< Texture look-up with LOD bias */
1068    ir_txl,              /**< Texture look-up with explicit LOD */
1069    ir_txd,              /**< Texture look-up with partial derivatvies */
1070    ir_txf               /**< Texel fetch with explicit LOD */
1071 };
1072
1073
1074 /**
1075  * IR instruction to sample a texture
1076  *
1077  * The specific form of the IR instruction depends on the \c mode value
1078  * selected from \c ir_texture_opcodes.  In the printed IR, these will
1079  * appear as:
1080  *
1081  *                              Texel offset
1082  *                              |       Projection divisor
1083  *                              |       |   Shadow comparitor
1084  *                              |       |   |
1085  *                              v       v   v
1086  * (tex (sampler) (coordinate) (0 0 0) (1) ( ))
1087  * (txb (sampler) (coordinate) (0 0 0) (1) ( ) (bias))
1088  * (txl (sampler) (coordinate) (0 0 0) (1) ( ) (lod))
1089  * (txd (sampler) (coordinate) (0 0 0) (1) ( ) (dPdx dPdy))
1090  * (txf (sampler) (coordinate) (0 0 0)         (lod))
1091  */
1092 class ir_texture : public ir_rvalue {
1093 public:
1094    ir_texture(enum ir_texture_opcode op)
1095       : op(op), projector(NULL), shadow_comparitor(NULL)
1096    {
1097       this->ir_type = ir_type_texture;
1098    }
1099
1100    virtual ir_texture *clone(void *mem_ctx, struct hash_table *) const;
1101
1102    virtual ir_constant *constant_expression_value();
1103
1104    virtual void accept(ir_visitor *v)
1105    {
1106       v->visit(this);
1107    }
1108
1109    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1110
1111    /**
1112     * Return a string representing the ir_texture_opcode.
1113     */
1114    const char *opcode_string();
1115
1116    /** Set the sampler and infer the type. */
1117    void set_sampler(ir_dereference *sampler);
1118
1119    /**
1120     * Do a reverse-lookup to translate a string into an ir_texture_opcode.
1121     */
1122    static ir_texture_opcode get_opcode(const char *);
1123
1124    enum ir_texture_opcode op;
1125
1126    /** Sampler to use for the texture access. */
1127    ir_dereference *sampler;
1128
1129    /** Texture coordinate to sample */
1130    ir_rvalue *coordinate;
1131
1132    /**
1133     * Value used for projective divide.
1134     *
1135     * If there is no projective divide (the common case), this will be
1136     * \c NULL.  Optimization passes should check for this to point to a constant
1137     * of 1.0 and replace that with \c NULL.
1138     */
1139    ir_rvalue *projector;
1140
1141    /**
1142     * Coordinate used for comparison on shadow look-ups.
1143     *
1144     * If there is no shadow comparison, this will be \c NULL.  For the
1145     * \c ir_txf opcode, this *must* be \c NULL.
1146     */
1147    ir_rvalue *shadow_comparitor;
1148
1149    /** Explicit texel offsets. */
1150    signed char offsets[3];
1151
1152    union {
1153       ir_rvalue *lod;           /**< Floating point LOD */
1154       ir_rvalue *bias;          /**< Floating point LOD bias */
1155       struct {
1156          ir_rvalue *dPdx;       /**< Partial derivative of coordinate wrt X */
1157          ir_rvalue *dPdy;       /**< Partial derivative of coordinate wrt Y */
1158       } grad;
1159    } lod_info;
1160 };
1161
1162
1163 struct ir_swizzle_mask {
1164    unsigned x:2;
1165    unsigned y:2;
1166    unsigned z:2;
1167    unsigned w:2;
1168
1169    /**
1170     * Number of components in the swizzle.
1171     */
1172    unsigned num_components:3;
1173
1174    /**
1175     * Does the swizzle contain duplicate components?
1176     *
1177     * L-value swizzles cannot contain duplicate components.
1178     */
1179    unsigned has_duplicates:1;
1180 };
1181
1182
1183 class ir_swizzle : public ir_rvalue {
1184 public:
1185    ir_swizzle(ir_rvalue *, unsigned x, unsigned y, unsigned z, unsigned w,
1186               unsigned count);
1187
1188    ir_swizzle(ir_rvalue *val, const unsigned *components, unsigned count);
1189
1190    ir_swizzle(ir_rvalue *val, ir_swizzle_mask mask);
1191
1192    virtual ir_swizzle *clone(void *mem_ctx, struct hash_table *) const;
1193
1194    virtual ir_constant *constant_expression_value();
1195
1196    virtual ir_swizzle *as_swizzle()
1197    {
1198       return this;
1199    }
1200
1201    /**
1202     * Construct an ir_swizzle from the textual representation.  Can fail.
1203     */
1204    static ir_swizzle *create(ir_rvalue *, const char *, unsigned vector_length);
1205
1206    virtual void accept(ir_visitor *v)
1207    {
1208       v->visit(this);
1209    }
1210
1211    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1212
1213    bool is_lvalue()
1214    {
1215       return val->is_lvalue() && !mask.has_duplicates;
1216    }
1217
1218    /**
1219     * Get the variable that is ultimately referenced by an r-value
1220     */
1221    virtual ir_variable *variable_referenced();
1222
1223    ir_rvalue *val;
1224    ir_swizzle_mask mask;
1225
1226 private:
1227    /**
1228     * Initialize the mask component of a swizzle
1229     *
1230     * This is used by the \c ir_swizzle constructors.
1231     */
1232    void init_mask(const unsigned *components, unsigned count);
1233 };
1234
1235
1236 class ir_dereference : public ir_rvalue {
1237 public:
1238    virtual ir_dereference *clone(void *mem_ctx, struct hash_table *) const = 0;
1239
1240    virtual ir_dereference *as_dereference()
1241    {
1242       return this;
1243    }
1244
1245    bool is_lvalue();
1246
1247    /**
1248     * Get the variable that is ultimately referenced by an r-value
1249     */
1250    virtual ir_variable *variable_referenced() = 0;
1251 };
1252
1253
1254 class ir_dereference_variable : public ir_dereference {
1255 public:
1256    ir_dereference_variable(ir_variable *var);
1257
1258    virtual ir_dereference_variable *clone(void *mem_ctx,
1259                                           struct hash_table *) const;
1260
1261    virtual ir_constant *constant_expression_value();
1262
1263    virtual ir_dereference_variable *as_dereference_variable()
1264    {
1265       return this;
1266    }
1267
1268    /**
1269     * Get the variable that is ultimately referenced by an r-value
1270     */
1271    virtual ir_variable *variable_referenced()
1272    {
1273       return this->var;
1274    }
1275
1276    virtual ir_variable *whole_variable_referenced()
1277    {
1278       /* ir_dereference_variable objects always dereference the entire
1279        * variable.  However, if this dereference is dereferenced by anything
1280        * else, the complete deferefernce chain is not a whole-variable
1281        * dereference.  This method should only be called on the top most
1282        * ir_rvalue in a dereference chain.
1283        */
1284       return this->var;
1285    }
1286
1287    virtual void accept(ir_visitor *v)
1288    {
1289       v->visit(this);
1290    }
1291
1292    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1293
1294    /**
1295     * Object being dereferenced.
1296     */
1297    ir_variable *var;
1298 };
1299
1300
1301 class ir_dereference_array : public ir_dereference {
1302 public:
1303    ir_dereference_array(ir_rvalue *value, ir_rvalue *array_index);
1304
1305    ir_dereference_array(ir_variable *var, ir_rvalue *array_index);
1306
1307    virtual ir_dereference_array *clone(void *mem_ctx,
1308                                        struct hash_table *) const;
1309
1310    virtual ir_constant *constant_expression_value();
1311
1312    virtual ir_dereference_array *as_dereference_array()
1313    {
1314       return this;
1315    }
1316
1317    /**
1318     * Get the variable that is ultimately referenced by an r-value
1319     */
1320    virtual ir_variable *variable_referenced()
1321    {
1322       return this->array->variable_referenced();
1323    }
1324
1325    virtual void accept(ir_visitor *v)
1326    {
1327       v->visit(this);
1328    }
1329
1330    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1331
1332    ir_rvalue *array;
1333    ir_rvalue *array_index;
1334
1335 private:
1336    void set_array(ir_rvalue *value);
1337 };
1338
1339
1340 class ir_dereference_record : public ir_dereference {
1341 public:
1342    ir_dereference_record(ir_rvalue *value, const char *field);
1343
1344    ir_dereference_record(ir_variable *var, const char *field);
1345
1346    virtual ir_dereference_record *clone(void *mem_ctx,
1347                                         struct hash_table *) const;
1348
1349    virtual ir_constant *constant_expression_value();
1350
1351    /**
1352     * Get the variable that is ultimately referenced by an r-value
1353     */
1354    virtual ir_variable *variable_referenced()
1355    {
1356       return this->record->variable_referenced();
1357    }
1358
1359    virtual void accept(ir_visitor *v)
1360    {
1361       v->visit(this);
1362    }
1363
1364    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1365
1366    ir_rvalue *record;
1367    const char *field;
1368 };
1369
1370
1371 /**
1372  * Data stored in an ir_constant
1373  */
1374 union ir_constant_data {
1375       unsigned u[16];
1376       int i[16];
1377       float f[16];
1378       bool b[16];
1379 };
1380
1381
1382 class ir_constant : public ir_rvalue {
1383 public:
1384    ir_constant(const struct glsl_type *type, const ir_constant_data *data);
1385    ir_constant(bool b);
1386    ir_constant(unsigned int u);
1387    ir_constant(int i);
1388    ir_constant(float f);
1389
1390    /**
1391     * Construct an ir_constant from a list of ir_constant values
1392     */
1393    ir_constant(const struct glsl_type *type, exec_list *values);
1394
1395    /**
1396     * Construct an ir_constant from a scalar component of another ir_constant
1397     *
1398     * The new \c ir_constant inherits the type of the component from the
1399     * source constant.
1400     *
1401     * \note
1402     * In the case of a matrix constant, the new constant is a scalar, \b not
1403     * a vector.
1404     */
1405    ir_constant(const ir_constant *c, unsigned i);
1406
1407    /**
1408     * Return a new ir_constant of the specified type containing all zeros.
1409     */
1410    static ir_constant *zero(void *mem_ctx, const glsl_type *type);
1411
1412    virtual ir_constant *clone(void *mem_ctx, struct hash_table *) const;
1413
1414    virtual ir_constant *constant_expression_value();
1415
1416    virtual ir_constant *as_constant()
1417    {
1418       return this;
1419    }
1420
1421    virtual void accept(ir_visitor *v)
1422    {
1423       v->visit(this);
1424    }
1425
1426    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1427
1428    /**
1429     * Get a particular component of a constant as a specific type
1430     *
1431     * This is useful, for example, to get a value from an integer constant
1432     * as a float or bool.  This appears frequently when constructors are
1433     * called with all constant parameters.
1434     */
1435    /*@{*/
1436    bool get_bool_component(unsigned i) const;
1437    float get_float_component(unsigned i) const;
1438    int get_int_component(unsigned i) const;
1439    unsigned get_uint_component(unsigned i) const;
1440    /*@}*/
1441
1442    ir_constant *get_array_element(unsigned i) const;
1443
1444    ir_constant *get_record_field(const char *name);
1445
1446    /**
1447     * Determine whether a constant has the same value as another constant
1448     */
1449    bool has_value(const ir_constant *) const;
1450
1451    /**
1452     * Value of the constant.
1453     *
1454     * The field used to back the values supplied by the constant is determined
1455     * by the type associated with the \c ir_instruction.  Constants may be
1456     * scalars, vectors, or matrices.
1457     */
1458    union ir_constant_data value;
1459
1460    /* Array elements */
1461    ir_constant **array_elements;
1462
1463    /* Structure fields */
1464    exec_list components;
1465
1466 private:
1467    /**
1468     * Parameterless constructor only used by the clone method
1469     */
1470    ir_constant(void);
1471 };
1472
1473 /*@}*/
1474
1475 /**
1476  * Apply a visitor to each IR node in a list
1477  */
1478 void
1479 visit_exec_list(exec_list *list, ir_visitor *visitor);
1480
1481 /**
1482  * Validate invariants on each IR node in a list
1483  */
1484 void validate_ir_tree(exec_list *instructions);
1485
1486 /**
1487  * Make a clone of each IR instruction in a list
1488  *
1489  * \param in   List of IR instructions that are to be cloned
1490  * \param out  List to hold the cloned instructions
1491  */
1492 void
1493 clone_ir_list(void *mem_ctx, exec_list *out, const exec_list *in);
1494
1495 extern void
1496 _mesa_glsl_initialize_variables(exec_list *instructions,
1497                                 struct _mesa_glsl_parse_state *state);
1498
1499 extern void
1500 _mesa_glsl_initialize_functions(exec_list *instructions,
1501                                 struct _mesa_glsl_parse_state *state);
1502
1503 extern void
1504 _mesa_glsl_release_functions(void);
1505
1506 extern void
1507 reparent_ir(exec_list *list, void *mem_ctx);
1508
1509 struct glsl_symbol_table;
1510
1511 extern void
1512 import_prototypes(const exec_list *source, exec_list *dest,
1513                   struct glsl_symbol_table *symbols, void *mem_ctx);
1514
1515 extern bool
1516 ir_has_call(ir_instruction *ir);
1517
1518 extern void
1519 do_set_program_inouts(exec_list *instructions, struct gl_program *prog);
1520
1521 #endif /* IR_H */