OSDN Git Service

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