OSDN Git Service

glsl ast_to_hir: reject interpolation qualifiers for uniform blocks
[android-x86/external-mesa.git] / src / glsl / ast_to_hir.cpp
1 /*
2  * Copyright © 2010 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23
24 /**
25  * \file ast_to_hir.c
26  * Convert abstract syntax to to high-level intermediate reprensentation (HIR).
27  *
28  * During the conversion to HIR, the majority of the symantic checking is
29  * preformed on the program.  This includes:
30  *
31  *    * Symbol table management
32  *    * Type checking
33  *    * Function binding
34  *
35  * The majority of this work could be done during parsing, and the parser could
36  * probably generate HIR directly.  However, this results in frequent changes
37  * to the parser code.  Since we do not assume that every system this complier
38  * is built on will have Flex and Bison installed, we have to store the code
39  * generated by these tools in our version control system.  In other parts of
40  * the system we've seen problems where a parser was changed but the generated
41  * code was not committed, merge conflicts where created because two developers
42  * had slightly different versions of Bison installed, etc.
43  *
44  * I have also noticed that running Bison generated parsers in GDB is very
45  * irritating.  When you get a segfault on '$$ = $1->foo', you can't very
46  * well 'print $1' in GDB.
47  *
48  * As a result, my preference is to put as little C code as possible in the
49  * parser (and lexer) sources.
50  */
51
52 #include "main/core.h" /* for struct gl_extensions */
53 #include "glsl_symbol_table.h"
54 #include "glsl_parser_extras.h"
55 #include "ast.h"
56 #include "glsl_types.h"
57 #include "program/hash_table.h"
58 #include "ir.h"
59
60 static void
61 detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
62                                exec_list *instructions);
63
64 void
65 _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state)
66 {
67    _mesa_glsl_initialize_variables(instructions, state);
68
69    state->symbols->separate_function_namespace = state->language_version == 110;
70
71    state->current_function = NULL;
72
73    state->toplevel_ir = instructions;
74
75    /* Section 4.2 of the GLSL 1.20 specification states:
76     * "The built-in functions are scoped in a scope outside the global scope
77     *  users declare global variables in.  That is, a shader's global scope,
78     *  available for user-defined functions and global variables, is nested
79     *  inside the scope containing the built-in functions."
80     *
81     * Since built-in functions like ftransform() access built-in variables,
82     * it follows that those must be in the outer scope as well.
83     *
84     * We push scope here to create this nesting effect...but don't pop.
85     * This way, a shader's globals are still in the symbol table for use
86     * by the linker.
87     */
88    state->symbols->push_scope();
89
90    foreach_list_typed (ast_node, ast, link, & state->translation_unit)
91       ast->hir(instructions, state);
92
93    detect_recursion_unlinked(state, instructions);
94    detect_conflicting_assignments(state, instructions);
95
96    state->toplevel_ir = NULL;
97 }
98
99
100 /**
101  * If a conversion is available, convert one operand to a different type
102  *
103  * The \c from \c ir_rvalue is converted "in place".
104  *
105  * \param to     Type that the operand it to be converted to
106  * \param from   Operand that is being converted
107  * \param state  GLSL compiler state
108  *
109  * \return
110  * If a conversion is possible (or unnecessary), \c true is returned.
111  * Otherwise \c false is returned.
112  */
113 bool
114 apply_implicit_conversion(const glsl_type *to, ir_rvalue * &from,
115                           struct _mesa_glsl_parse_state *state)
116 {
117    void *ctx = state;
118    if (to->base_type == from->type->base_type)
119       return true;
120
121    /* This conversion was added in GLSL 1.20.  If the compilation mode is
122     * GLSL 1.10, the conversion is skipped.
123     */
124    if (!state->is_version(120, 0))
125       return false;
126
127    /* From page 27 (page 33 of the PDF) of the GLSL 1.50 spec:
128     *
129     *    "There are no implicit array or structure conversions. For
130     *    example, an array of int cannot be implicitly converted to an
131     *    array of float. There are no implicit conversions between
132     *    signed and unsigned integers."
133     */
134    /* FINISHME: The above comment is partially a lie.  There is int/uint
135     * FINISHME: conversion for immediate constants.
136     */
137    if (!to->is_float() || !from->type->is_numeric())
138       return false;
139
140    /* Convert to a floating point type with the same number of components
141     * as the original type - i.e. int to float, not int to vec4.
142     */
143    to = glsl_type::get_instance(GLSL_TYPE_FLOAT, from->type->vector_elements,
144                                 from->type->matrix_columns);
145
146    switch (from->type->base_type) {
147    case GLSL_TYPE_INT:
148       from = new(ctx) ir_expression(ir_unop_i2f, to, from, NULL);
149       break;
150    case GLSL_TYPE_UINT:
151       from = new(ctx) ir_expression(ir_unop_u2f, to, from, NULL);
152       break;
153    case GLSL_TYPE_BOOL:
154       from = new(ctx) ir_expression(ir_unop_b2f, to, from, NULL);
155       break;
156    default:
157       assert(0);
158    }
159
160    return true;
161 }
162
163
164 static const struct glsl_type *
165 arithmetic_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b,
166                        bool multiply,
167                        struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
168 {
169    const glsl_type *type_a = value_a->type;
170    const glsl_type *type_b = value_b->type;
171
172    /* From GLSL 1.50 spec, page 56:
173     *
174     *    "The arithmetic binary operators add (+), subtract (-),
175     *    multiply (*), and divide (/) operate on integer and
176     *    floating-point scalars, vectors, and matrices."
177     */
178    if (!type_a->is_numeric() || !type_b->is_numeric()) {
179       _mesa_glsl_error(loc, state,
180                        "Operands to arithmetic operators must be numeric");
181       return glsl_type::error_type;
182    }
183
184
185    /*    "If one operand is floating-point based and the other is
186     *    not, then the conversions from Section 4.1.10 "Implicit
187     *    Conversions" are applied to the non-floating-point-based operand."
188     */
189    if (!apply_implicit_conversion(type_a, value_b, state)
190        && !apply_implicit_conversion(type_b, value_a, state)) {
191       _mesa_glsl_error(loc, state,
192                        "Could not implicitly convert operands to "
193                        "arithmetic operator");
194       return glsl_type::error_type;
195    }
196    type_a = value_a->type;
197    type_b = value_b->type;
198
199    /*    "If the operands are integer types, they must both be signed or
200     *    both be unsigned."
201     *
202     * From this rule and the preceeding conversion it can be inferred that
203     * both types must be GLSL_TYPE_FLOAT, or GLSL_TYPE_UINT, or GLSL_TYPE_INT.
204     * The is_numeric check above already filtered out the case where either
205     * type is not one of these, so now the base types need only be tested for
206     * equality.
207     */
208    if (type_a->base_type != type_b->base_type) {
209       _mesa_glsl_error(loc, state,
210                        "base type mismatch for arithmetic operator");
211       return glsl_type::error_type;
212    }
213
214    /*    "All arithmetic binary operators result in the same fundamental type
215     *    (signed integer, unsigned integer, or floating-point) as the
216     *    operands they operate on, after operand type conversion. After
217     *    conversion, the following cases are valid
218     *
219     *    * The two operands are scalars. In this case the operation is
220     *      applied, resulting in a scalar."
221     */
222    if (type_a->is_scalar() && type_b->is_scalar())
223       return type_a;
224
225    /*   "* One operand is a scalar, and the other is a vector or matrix.
226     *      In this case, the scalar operation is applied independently to each
227     *      component of the vector or matrix, resulting in the same size
228     *      vector or matrix."
229     */
230    if (type_a->is_scalar()) {
231       if (!type_b->is_scalar())
232          return type_b;
233    } else if (type_b->is_scalar()) {
234       return type_a;
235    }
236
237    /* All of the combinations of <scalar, scalar>, <vector, scalar>,
238     * <scalar, vector>, <scalar, matrix>, and <matrix, scalar> have been
239     * handled.
240     */
241    assert(!type_a->is_scalar());
242    assert(!type_b->is_scalar());
243
244    /*   "* The two operands are vectors of the same size. In this case, the
245     *      operation is done component-wise resulting in the same size
246     *      vector."
247     */
248    if (type_a->is_vector() && type_b->is_vector()) {
249       if (type_a == type_b) {
250          return type_a;
251       } else {
252          _mesa_glsl_error(loc, state,
253                           "vector size mismatch for arithmetic operator");
254          return glsl_type::error_type;
255       }
256    }
257
258    /* All of the combinations of <scalar, scalar>, <vector, scalar>,
259     * <scalar, vector>, <scalar, matrix>, <matrix, scalar>, and
260     * <vector, vector> have been handled.  At least one of the operands must
261     * be matrix.  Further, since there are no integer matrix types, the base
262     * type of both operands must be float.
263     */
264    assert(type_a->is_matrix() || type_b->is_matrix());
265    assert(type_a->base_type == GLSL_TYPE_FLOAT);
266    assert(type_b->base_type == GLSL_TYPE_FLOAT);
267
268    /*   "* The operator is add (+), subtract (-), or divide (/), and the
269     *      operands are matrices with the same number of rows and the same
270     *      number of columns. In this case, the operation is done component-
271     *      wise resulting in the same size matrix."
272     *    * The operator is multiply (*), where both operands are matrices or
273     *      one operand is a vector and the other a matrix. A right vector
274     *      operand is treated as a column vector and a left vector operand as a
275     *      row vector. In all these cases, it is required that the number of
276     *      columns of the left operand is equal to the number of rows of the
277     *      right operand. Then, the multiply (*) operation does a linear
278     *      algebraic multiply, yielding an object that has the same number of
279     *      rows as the left operand and the same number of columns as the right
280     *      operand. Section 5.10 "Vector and Matrix Operations" explains in
281     *      more detail how vectors and matrices are operated on."
282     */
283    if (! multiply) {
284       if (type_a == type_b)
285          return type_a;
286    } else {
287       if (type_a->is_matrix() && type_b->is_matrix()) {
288          /* Matrix multiply.  The columns of A must match the rows of B.  Given
289           * the other previously tested constraints, this means the vector type
290           * of a row from A must be the same as the vector type of a column from
291           * B.
292           */
293          if (type_a->row_type() == type_b->column_type()) {
294             /* The resulting matrix has the number of columns of matrix B and
295              * the number of rows of matrix A.  We get the row count of A by
296              * looking at the size of a vector that makes up a column.  The
297              * transpose (size of a row) is done for B.
298              */
299             const glsl_type *const type =
300                glsl_type::get_instance(type_a->base_type,
301                                        type_a->column_type()->vector_elements,
302                                        type_b->row_type()->vector_elements);
303             assert(type != glsl_type::error_type);
304
305             return type;
306          }
307       } else if (type_a->is_matrix()) {
308          /* A is a matrix and B is a column vector.  Columns of A must match
309           * rows of B.  Given the other previously tested constraints, this
310           * means the vector type of a row from A must be the same as the
311           * vector the type of B.
312           */
313          if (type_a->row_type() == type_b) {
314             /* The resulting vector has a number of elements equal to
315              * the number of rows of matrix A. */
316             const glsl_type *const type =
317                glsl_type::get_instance(type_a->base_type,
318                                        type_a->column_type()->vector_elements,
319                                        1);
320             assert(type != glsl_type::error_type);
321
322             return type;
323          }
324       } else {
325          assert(type_b->is_matrix());
326
327          /* A is a row vector and B is a matrix.  Columns of A must match rows
328           * of B.  Given the other previously tested constraints, this means
329           * the type of A must be the same as the vector type of a column from
330           * B.
331           */
332          if (type_a == type_b->column_type()) {
333             /* The resulting vector has a number of elements equal to
334              * the number of columns of matrix B. */
335             const glsl_type *const type =
336                glsl_type::get_instance(type_a->base_type,
337                                        type_b->row_type()->vector_elements,
338                                        1);
339             assert(type != glsl_type::error_type);
340
341             return type;
342          }
343       }
344
345       _mesa_glsl_error(loc, state, "size mismatch for matrix multiplication");
346       return glsl_type::error_type;
347    }
348
349
350    /*    "All other cases are illegal."
351     */
352    _mesa_glsl_error(loc, state, "type mismatch");
353    return glsl_type::error_type;
354 }
355
356
357 static const struct glsl_type *
358 unary_arithmetic_result_type(const struct glsl_type *type,
359                              struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
360 {
361    /* From GLSL 1.50 spec, page 57:
362     *
363     *    "The arithmetic unary operators negate (-), post- and pre-increment
364     *     and decrement (-- and ++) operate on integer or floating-point
365     *     values (including vectors and matrices). All unary operators work
366     *     component-wise on their operands. These result with the same type
367     *     they operated on."
368     */
369    if (!type->is_numeric()) {
370       _mesa_glsl_error(loc, state,
371                        "Operands to arithmetic operators must be numeric");
372       return glsl_type::error_type;
373    }
374
375    return type;
376 }
377
378 /**
379  * \brief Return the result type of a bit-logic operation.
380  *
381  * If the given types to the bit-logic operator are invalid, return
382  * glsl_type::error_type.
383  *
384  * \param type_a Type of LHS of bit-logic op
385  * \param type_b Type of RHS of bit-logic op
386  */
387 static const struct glsl_type *
388 bit_logic_result_type(const struct glsl_type *type_a,
389                       const struct glsl_type *type_b,
390                       ast_operators op,
391                       struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
392 {
393     if (!state->check_bitwise_operations_allowed(loc)) {
394        return glsl_type::error_type;
395     }
396
397     /* From page 50 (page 56 of PDF) of GLSL 1.30 spec:
398      *
399      *     "The bitwise operators and (&), exclusive-or (^), and inclusive-or
400      *     (|). The operands must be of type signed or unsigned integers or
401      *     integer vectors."
402      */
403     if (!type_a->is_integer()) {
404        _mesa_glsl_error(loc, state, "LHS of `%s' must be an integer",
405                          ast_expression::operator_string(op));
406        return glsl_type::error_type;
407     }
408     if (!type_b->is_integer()) {
409        _mesa_glsl_error(loc, state, "RHS of `%s' must be an integer",
410                         ast_expression::operator_string(op));
411        return glsl_type::error_type;
412     }
413
414     /*     "The fundamental types of the operands (signed or unsigned) must
415      *     match,"
416      */
417     if (type_a->base_type != type_b->base_type) {
418        _mesa_glsl_error(loc, state, "operands of `%s' must have the same "
419                         "base type", ast_expression::operator_string(op));
420        return glsl_type::error_type;
421     }
422
423     /*     "The operands cannot be vectors of differing size." */
424     if (type_a->is_vector() &&
425         type_b->is_vector() &&
426         type_a->vector_elements != type_b->vector_elements) {
427        _mesa_glsl_error(loc, state, "operands of `%s' cannot be vectors of "
428                         "different sizes", ast_expression::operator_string(op));
429        return glsl_type::error_type;
430     }
431
432     /*     "If one operand is a scalar and the other a vector, the scalar is
433      *     applied component-wise to the vector, resulting in the same type as
434      *     the vector. The fundamental types of the operands [...] will be the
435      *     resulting fundamental type."
436      */
437     if (type_a->is_scalar())
438         return type_b;
439     else
440         return type_a;
441 }
442
443 static const struct glsl_type *
444 modulus_result_type(const struct glsl_type *type_a,
445                     const struct glsl_type *type_b,
446                     struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
447 {
448    if (!state->check_version(130, 300, loc, "operator '%%' is reserved")) {
449       return glsl_type::error_type;
450    }
451
452    /* From GLSL 1.50 spec, page 56:
453     *    "The operator modulus (%) operates on signed or unsigned integers or
454     *    integer vectors. The operand types must both be signed or both be
455     *    unsigned."
456     */
457    if (!type_a->is_integer()) {
458       _mesa_glsl_error(loc, state, "LHS of operator %% must be an integer.");
459       return glsl_type::error_type;
460    }
461    if (!type_b->is_integer()) {
462       _mesa_glsl_error(loc, state, "RHS of operator %% must be an integer.");
463       return glsl_type::error_type;
464    }
465    if (type_a->base_type != type_b->base_type) {
466       _mesa_glsl_error(loc, state,
467                        "operands of %% must have the same base type");
468       return glsl_type::error_type;
469    }
470
471    /*    "The operands cannot be vectors of differing size. If one operand is
472     *    a scalar and the other vector, then the scalar is applied component-
473     *    wise to the vector, resulting in the same type as the vector. If both
474     *    are vectors of the same size, the result is computed component-wise."
475     */
476    if (type_a->is_vector()) {
477       if (!type_b->is_vector()
478           || (type_a->vector_elements == type_b->vector_elements))
479          return type_a;
480    } else
481       return type_b;
482
483    /*    "The operator modulus (%) is not defined for any other data types
484     *    (non-integer types)."
485     */
486    _mesa_glsl_error(loc, state, "type mismatch");
487    return glsl_type::error_type;
488 }
489
490
491 static const struct glsl_type *
492 relational_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b,
493                        struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
494 {
495    const glsl_type *type_a = value_a->type;
496    const glsl_type *type_b = value_b->type;
497
498    /* From GLSL 1.50 spec, page 56:
499     *    "The relational operators greater than (>), less than (<), greater
500     *    than or equal (>=), and less than or equal (<=) operate only on
501     *    scalar integer and scalar floating-point expressions."
502     */
503    if (!type_a->is_numeric()
504        || !type_b->is_numeric()
505        || !type_a->is_scalar()
506        || !type_b->is_scalar()) {
507       _mesa_glsl_error(loc, state,
508                        "Operands to relational operators must be scalar and "
509                        "numeric");
510       return glsl_type::error_type;
511    }
512
513    /*    "Either the operands' types must match, or the conversions from
514     *    Section 4.1.10 "Implicit Conversions" will be applied to the integer
515     *    operand, after which the types must match."
516     */
517    if (!apply_implicit_conversion(type_a, value_b, state)
518        && !apply_implicit_conversion(type_b, value_a, state)) {
519       _mesa_glsl_error(loc, state,
520                        "Could not implicitly convert operands to "
521                        "relational operator");
522       return glsl_type::error_type;
523    }
524    type_a = value_a->type;
525    type_b = value_b->type;
526
527    if (type_a->base_type != type_b->base_type) {
528       _mesa_glsl_error(loc, state, "base type mismatch");
529       return glsl_type::error_type;
530    }
531
532    /*    "The result is scalar Boolean."
533     */
534    return glsl_type::bool_type;
535 }
536
537 /**
538  * \brief Return the result type of a bit-shift operation.
539  *
540  * If the given types to the bit-shift operator are invalid, return
541  * glsl_type::error_type.
542  *
543  * \param type_a Type of LHS of bit-shift op
544  * \param type_b Type of RHS of bit-shift op
545  */
546 static const struct glsl_type *
547 shift_result_type(const struct glsl_type *type_a,
548                   const struct glsl_type *type_b,
549                   ast_operators op,
550                   struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
551 {
552    if (!state->check_bitwise_operations_allowed(loc)) {
553       return glsl_type::error_type;
554    }
555
556    /* From page 50 (page 56 of the PDF) of the GLSL 1.30 spec:
557     *
558     *     "The shift operators (<<) and (>>). For both operators, the operands
559     *     must be signed or unsigned integers or integer vectors. One operand
560     *     can be signed while the other is unsigned."
561     */
562    if (!type_a->is_integer()) {
563       _mesa_glsl_error(loc, state, "LHS of operator %s must be an integer or "
564               "integer vector", ast_expression::operator_string(op));
565      return glsl_type::error_type;
566
567    }
568    if (!type_b->is_integer()) {
569       _mesa_glsl_error(loc, state, "RHS of operator %s must be an integer or "
570               "integer vector", ast_expression::operator_string(op));
571      return glsl_type::error_type;
572    }
573
574    /*     "If the first operand is a scalar, the second operand has to be
575     *     a scalar as well."
576     */
577    if (type_a->is_scalar() && !type_b->is_scalar()) {
578       _mesa_glsl_error(loc, state, "If the first operand of %s is scalar, the "
579               "second must be scalar as well",
580               ast_expression::operator_string(op));
581      return glsl_type::error_type;
582    }
583
584    /* If both operands are vectors, check that they have same number of
585     * elements.
586     */
587    if (type_a->is_vector() &&
588       type_b->is_vector() &&
589       type_a->vector_elements != type_b->vector_elements) {
590       _mesa_glsl_error(loc, state, "Vector operands to operator %s must "
591               "have same number of elements",
592               ast_expression::operator_string(op));
593      return glsl_type::error_type;
594    }
595
596    /*     "In all cases, the resulting type will be the same type as the left
597     *     operand."
598     */
599    return type_a;
600 }
601
602 /**
603  * Validates that a value can be assigned to a location with a specified type
604  *
605  * Validates that \c rhs can be assigned to some location.  If the types are
606  * not an exact match but an automatic conversion is possible, \c rhs will be
607  * converted.
608  *
609  * \return
610  * \c NULL if \c rhs cannot be assigned to a location with type \c lhs_type.
611  * Otherwise the actual RHS to be assigned will be returned.  This may be
612  * \c rhs, or it may be \c rhs after some type conversion.
613  *
614  * \note
615  * In addition to being used for assignments, this function is used to
616  * type-check return values.
617  */
618 ir_rvalue *
619 validate_assignment(struct _mesa_glsl_parse_state *state,
620                     const glsl_type *lhs_type, ir_rvalue *rhs,
621                     bool is_initializer)
622 {
623    /* If there is already some error in the RHS, just return it.  Anything
624     * else will lead to an avalanche of error message back to the user.
625     */
626    if (rhs->type->is_error())
627       return rhs;
628
629    /* If the types are identical, the assignment can trivially proceed.
630     */
631    if (rhs->type == lhs_type)
632       return rhs;
633
634    /* If the array element types are the same and the size of the LHS is zero,
635     * the assignment is okay for initializers embedded in variable
636     * declarations.
637     *
638     * Note: Whole-array assignments are not permitted in GLSL 1.10, but this
639     * is handled by ir_dereference::is_lvalue.
640     */
641    if (is_initializer && lhs_type->is_array() && rhs->type->is_array()
642        && (lhs_type->element_type() == rhs->type->element_type())
643        && (lhs_type->array_size() == 0)) {
644       return rhs;
645    }
646
647    /* Check for implicit conversion in GLSL 1.20 */
648    if (apply_implicit_conversion(lhs_type, rhs, state)) {
649       if (rhs->type == lhs_type)
650          return rhs;
651    }
652
653    return NULL;
654 }
655
656 static void
657 mark_whole_array_access(ir_rvalue *access)
658 {
659    ir_dereference_variable *deref = access->as_dereference_variable();
660
661    if (deref && deref->var) {
662       deref->var->max_array_access = deref->type->length - 1;
663    }
664 }
665
666 ir_rvalue *
667 do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state,
668               const char *non_lvalue_description,
669               ir_rvalue *lhs, ir_rvalue *rhs, bool is_initializer,
670               YYLTYPE lhs_loc)
671 {
672    void *ctx = state;
673    bool error_emitted = (lhs->type->is_error() || rhs->type->is_error());
674
675    /* If the assignment LHS comes back as an ir_binop_vector_extract
676     * expression, move it to the RHS as an ir_triop_vector_insert.
677     */
678    if (lhs->ir_type == ir_type_expression) {
679       ir_expression *const expr = lhs->as_expression();
680
681       if (unlikely(expr->operation == ir_binop_vector_extract)) {
682          ir_rvalue *new_rhs =
683             validate_assignment(state, lhs->type, rhs, is_initializer);
684
685          if (new_rhs == NULL) {
686             _mesa_glsl_error(& lhs_loc, state, "type mismatch");
687             return lhs;
688          } else {
689             rhs = new(ctx) ir_expression(ir_triop_vector_insert,
690                                          expr->operands[0]->type,
691                                          expr->operands[0],
692                                          new_rhs,
693                                          expr->operands[1]);
694             lhs = expr->operands[0]->clone(ctx, NULL);
695          }
696       }
697    }
698
699    ir_variable *lhs_var = lhs->variable_referenced();
700    if (lhs_var)
701       lhs_var->assigned = true;
702
703    if (!error_emitted) {
704       if (non_lvalue_description != NULL) {
705          _mesa_glsl_error(&lhs_loc, state,
706                           "assignment to %s",
707                           non_lvalue_description);
708          error_emitted = true;
709       } else if (lhs->variable_referenced() != NULL
710                  && lhs->variable_referenced()->read_only) {
711          _mesa_glsl_error(&lhs_loc, state,
712                           "assignment to read-only variable '%s'",
713                           lhs->variable_referenced()->name);
714          error_emitted = true;
715
716       } else if (lhs->type->is_array() &&
717                  !state->check_version(120, 300, &lhs_loc,
718                                        "whole array assignment forbidden")) {
719          /* From page 32 (page 38 of the PDF) of the GLSL 1.10 spec:
720           *
721           *    "Other binary or unary expressions, non-dereferenced
722           *     arrays, function names, swizzles with repeated fields,
723           *     and constants cannot be l-values."
724           *
725           * The restriction on arrays is lifted in GLSL 1.20 and GLSL ES 3.00.
726           */
727          error_emitted = true;
728       } else if (!lhs->is_lvalue()) {
729          _mesa_glsl_error(& lhs_loc, state, "non-lvalue in assignment");
730          error_emitted = true;
731       }
732    }
733
734    ir_rvalue *new_rhs =
735       validate_assignment(state, lhs->type, rhs, is_initializer);
736    if (new_rhs == NULL) {
737       _mesa_glsl_error(& lhs_loc, state, "type mismatch");
738    } else {
739       rhs = new_rhs;
740
741       /* If the LHS array was not declared with a size, it takes it size from
742        * the RHS.  If the LHS is an l-value and a whole array, it must be a
743        * dereference of a variable.  Any other case would require that the LHS
744        * is either not an l-value or not a whole array.
745        */
746       if (lhs->type->array_size() == 0) {
747          ir_dereference *const d = lhs->as_dereference();
748
749          assert(d != NULL);
750
751          ir_variable *const var = d->variable_referenced();
752
753          assert(var != NULL);
754
755          if (var->max_array_access >= unsigned(rhs->type->array_size())) {
756             /* FINISHME: This should actually log the location of the RHS. */
757             _mesa_glsl_error(& lhs_loc, state, "array size must be > %u due to "
758                              "previous access",
759                              var->max_array_access);
760          }
761
762          var->type = glsl_type::get_array_instance(lhs->type->element_type(),
763                                                    rhs->type->array_size());
764          d->type = var->type;
765       }
766       mark_whole_array_access(rhs);
767       mark_whole_array_access(lhs);
768    }
769
770    /* Most callers of do_assignment (assign, add_assign, pre_inc/dec,
771     * but not post_inc) need the converted assigned value as an rvalue
772     * to handle things like:
773     *
774     * i = j += 1;
775     *
776     * So we always just store the computed value being assigned to a
777     * temporary and return a deref of that temporary.  If the rvalue
778     * ends up not being used, the temp will get copy-propagated out.
779     */
780    ir_variable *var = new(ctx) ir_variable(rhs->type, "assignment_tmp",
781                                            ir_var_temporary);
782    ir_dereference_variable *deref_var = new(ctx) ir_dereference_variable(var);
783    instructions->push_tail(var);
784    instructions->push_tail(new(ctx) ir_assignment(deref_var, rhs));
785    deref_var = new(ctx) ir_dereference_variable(var);
786
787    if (!error_emitted)
788       instructions->push_tail(new(ctx) ir_assignment(lhs, deref_var));
789
790    return new(ctx) ir_dereference_variable(var);
791 }
792
793 static ir_rvalue *
794 get_lvalue_copy(exec_list *instructions, ir_rvalue *lvalue)
795 {
796    void *ctx = ralloc_parent(lvalue);
797    ir_variable *var;
798
799    var = new(ctx) ir_variable(lvalue->type, "_post_incdec_tmp",
800                               ir_var_temporary);
801    instructions->push_tail(var);
802    var->mode = ir_var_auto;
803
804    instructions->push_tail(new(ctx) ir_assignment(new(ctx) ir_dereference_variable(var),
805                                                   lvalue));
806
807    return new(ctx) ir_dereference_variable(var);
808 }
809
810
811 ir_rvalue *
812 ast_node::hir(exec_list *instructions,
813               struct _mesa_glsl_parse_state *state)
814 {
815    (void) instructions;
816    (void) state;
817
818    return NULL;
819 }
820
821 static ir_rvalue *
822 do_comparison(void *mem_ctx, int operation, ir_rvalue *op0, ir_rvalue *op1)
823 {
824    int join_op;
825    ir_rvalue *cmp = NULL;
826
827    if (operation == ir_binop_all_equal)
828       join_op = ir_binop_logic_and;
829    else
830       join_op = ir_binop_logic_or;
831
832    switch (op0->type->base_type) {
833    case GLSL_TYPE_FLOAT:
834    case GLSL_TYPE_UINT:
835    case GLSL_TYPE_INT:
836    case GLSL_TYPE_BOOL:
837       return new(mem_ctx) ir_expression(operation, op0, op1);
838
839    case GLSL_TYPE_ARRAY: {
840       for (unsigned int i = 0; i < op0->type->length; i++) {
841          ir_rvalue *e0, *e1, *result;
842
843          e0 = new(mem_ctx) ir_dereference_array(op0->clone(mem_ctx, NULL),
844                                                 new(mem_ctx) ir_constant(i));
845          e1 = new(mem_ctx) ir_dereference_array(op1->clone(mem_ctx, NULL),
846                                                 new(mem_ctx) ir_constant(i));
847          result = do_comparison(mem_ctx, operation, e0, e1);
848
849          if (cmp) {
850             cmp = new(mem_ctx) ir_expression(join_op, cmp, result);
851          } else {
852             cmp = result;
853          }
854       }
855
856       mark_whole_array_access(op0);
857       mark_whole_array_access(op1);
858       break;
859    }
860
861    case GLSL_TYPE_STRUCT: {
862       for (unsigned int i = 0; i < op0->type->length; i++) {
863          ir_rvalue *e0, *e1, *result;
864          const char *field_name = op0->type->fields.structure[i].name;
865
866          e0 = new(mem_ctx) ir_dereference_record(op0->clone(mem_ctx, NULL),
867                                                  field_name);
868          e1 = new(mem_ctx) ir_dereference_record(op1->clone(mem_ctx, NULL),
869                                                  field_name);
870          result = do_comparison(mem_ctx, operation, e0, e1);
871
872          if (cmp) {
873             cmp = new(mem_ctx) ir_expression(join_op, cmp, result);
874          } else {
875             cmp = result;
876          }
877       }
878       break;
879    }
880
881    case GLSL_TYPE_ERROR:
882    case GLSL_TYPE_VOID:
883    case GLSL_TYPE_SAMPLER:
884    case GLSL_TYPE_INTERFACE:
885       /* I assume a comparison of a struct containing a sampler just
886        * ignores the sampler present in the type.
887        */
888       break;
889    }
890
891    if (cmp == NULL)
892       cmp = new(mem_ctx) ir_constant(true);
893
894    return cmp;
895 }
896
897 /* For logical operations, we want to ensure that the operands are
898  * scalar booleans.  If it isn't, emit an error and return a constant
899  * boolean to avoid triggering cascading error messages.
900  */
901 ir_rvalue *
902 get_scalar_boolean_operand(exec_list *instructions,
903                            struct _mesa_glsl_parse_state *state,
904                            ast_expression *parent_expr,
905                            int operand,
906                            const char *operand_name,
907                            bool *error_emitted)
908 {
909    ast_expression *expr = parent_expr->subexpressions[operand];
910    void *ctx = state;
911    ir_rvalue *val = expr->hir(instructions, state);
912
913    if (val->type->is_boolean() && val->type->is_scalar())
914       return val;
915
916    if (!*error_emitted) {
917       YYLTYPE loc = expr->get_location();
918       _mesa_glsl_error(&loc, state, "%s of `%s' must be scalar boolean",
919                        operand_name,
920                        parent_expr->operator_string(parent_expr->oper));
921       *error_emitted = true;
922    }
923
924    return new(ctx) ir_constant(true);
925 }
926
927 /**
928  * If name refers to a builtin array whose maximum allowed size is less than
929  * size, report an error and return true.  Otherwise return false.
930  */
931 void
932 check_builtin_array_max_size(const char *name, unsigned size,
933                              YYLTYPE loc, struct _mesa_glsl_parse_state *state)
934 {
935    if ((strcmp("gl_TexCoord", name) == 0)
936        && (size > state->Const.MaxTextureCoords)) {
937       /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec:
938        *
939        *     "The size [of gl_TexCoord] can be at most
940        *     gl_MaxTextureCoords."
941        */
942       _mesa_glsl_error(&loc, state, "`gl_TexCoord' array size cannot "
943                        "be larger than gl_MaxTextureCoords (%u)\n",
944                        state->Const.MaxTextureCoords);
945    } else if (strcmp("gl_ClipDistance", name) == 0
946               && size > state->Const.MaxClipPlanes) {
947       /* From section 7.1 (Vertex Shader Special Variables) of the
948        * GLSL 1.30 spec:
949        *
950        *   "The gl_ClipDistance array is predeclared as unsized and
951        *   must be sized by the shader either redeclaring it with a
952        *   size or indexing it only with integral constant
953        *   expressions. ... The size can be at most
954        *   gl_MaxClipDistances."
955        */
956       _mesa_glsl_error(&loc, state, "`gl_ClipDistance' array size cannot "
957                        "be larger than gl_MaxClipDistances (%u)\n",
958                        state->Const.MaxClipPlanes);
959    }
960 }
961
962 /**
963  * Create the constant 1, of a which is appropriate for incrementing and
964  * decrementing values of the given GLSL type.  For example, if type is vec4,
965  * this creates a constant value of 1.0 having type float.
966  *
967  * If the given type is invalid for increment and decrement operators, return
968  * a floating point 1--the error will be detected later.
969  */
970 static ir_rvalue *
971 constant_one_for_inc_dec(void *ctx, const glsl_type *type)
972 {
973    switch (type->base_type) {
974    case GLSL_TYPE_UINT:
975       return new(ctx) ir_constant((unsigned) 1);
976    case GLSL_TYPE_INT:
977       return new(ctx) ir_constant(1);
978    default:
979    case GLSL_TYPE_FLOAT:
980       return new(ctx) ir_constant(1.0f);
981    }
982 }
983
984 ir_rvalue *
985 ast_expression::hir(exec_list *instructions,
986                     struct _mesa_glsl_parse_state *state)
987 {
988    void *ctx = state;
989    static const int operations[AST_NUM_OPERATORS] = {
990       -1,               /* ast_assign doesn't convert to ir_expression. */
991       -1,               /* ast_plus doesn't convert to ir_expression. */
992       ir_unop_neg,
993       ir_binop_add,
994       ir_binop_sub,
995       ir_binop_mul,
996       ir_binop_div,
997       ir_binop_mod,
998       ir_binop_lshift,
999       ir_binop_rshift,
1000       ir_binop_less,
1001       ir_binop_greater,
1002       ir_binop_lequal,
1003       ir_binop_gequal,
1004       ir_binop_all_equal,
1005       ir_binop_any_nequal,
1006       ir_binop_bit_and,
1007       ir_binop_bit_xor,
1008       ir_binop_bit_or,
1009       ir_unop_bit_not,
1010       ir_binop_logic_and,
1011       ir_binop_logic_xor,
1012       ir_binop_logic_or,
1013       ir_unop_logic_not,
1014
1015       /* Note: The following block of expression types actually convert
1016        * to multiple IR instructions.
1017        */
1018       ir_binop_mul,     /* ast_mul_assign */
1019       ir_binop_div,     /* ast_div_assign */
1020       ir_binop_mod,     /* ast_mod_assign */
1021       ir_binop_add,     /* ast_add_assign */
1022       ir_binop_sub,     /* ast_sub_assign */
1023       ir_binop_lshift,  /* ast_ls_assign */
1024       ir_binop_rshift,  /* ast_rs_assign */
1025       ir_binop_bit_and, /* ast_and_assign */
1026       ir_binop_bit_xor, /* ast_xor_assign */
1027       ir_binop_bit_or,  /* ast_or_assign */
1028
1029       -1,               /* ast_conditional doesn't convert to ir_expression. */
1030       ir_binop_add,     /* ast_pre_inc. */
1031       ir_binop_sub,     /* ast_pre_dec. */
1032       ir_binop_add,     /* ast_post_inc. */
1033       ir_binop_sub,     /* ast_post_dec. */
1034       -1,               /* ast_field_selection doesn't conv to ir_expression. */
1035       -1,               /* ast_array_index doesn't convert to ir_expression. */
1036       -1,               /* ast_function_call doesn't conv to ir_expression. */
1037       -1,               /* ast_identifier doesn't convert to ir_expression. */
1038       -1,               /* ast_int_constant doesn't convert to ir_expression. */
1039       -1,               /* ast_uint_constant doesn't conv to ir_expression. */
1040       -1,               /* ast_float_constant doesn't conv to ir_expression. */
1041       -1,               /* ast_bool_constant doesn't conv to ir_expression. */
1042       -1,               /* ast_sequence doesn't convert to ir_expression. */
1043    };
1044    ir_rvalue *result = NULL;
1045    ir_rvalue *op[3];
1046    const struct glsl_type *type; /* a temporary variable for switch cases */
1047    bool error_emitted = false;
1048    YYLTYPE loc;
1049
1050    loc = this->get_location();
1051
1052    switch (this->oper) {
1053    case ast_assign: {
1054       op[0] = this->subexpressions[0]->hir(instructions, state);
1055       op[1] = this->subexpressions[1]->hir(instructions, state);
1056
1057       result = do_assignment(instructions, state,
1058                              this->subexpressions[0]->non_lvalue_description,
1059                              op[0], op[1], false,
1060                              this->subexpressions[0]->get_location());
1061       error_emitted = result->type->is_error();
1062       break;
1063    }
1064
1065    case ast_plus:
1066       op[0] = this->subexpressions[0]->hir(instructions, state);
1067
1068       type = unary_arithmetic_result_type(op[0]->type, state, & loc);
1069
1070       error_emitted = type->is_error();
1071
1072       result = op[0];
1073       break;
1074
1075    case ast_neg:
1076       op[0] = this->subexpressions[0]->hir(instructions, state);
1077
1078       type = unary_arithmetic_result_type(op[0]->type, state, & loc);
1079
1080       error_emitted = type->is_error();
1081
1082       result = new(ctx) ir_expression(operations[this->oper], type,
1083                                       op[0], NULL);
1084       break;
1085
1086    case ast_add:
1087    case ast_sub:
1088    case ast_mul:
1089    case ast_div:
1090       op[0] = this->subexpressions[0]->hir(instructions, state);
1091       op[1] = this->subexpressions[1]->hir(instructions, state);
1092
1093       type = arithmetic_result_type(op[0], op[1],
1094                                     (this->oper == ast_mul),
1095                                     state, & loc);
1096       error_emitted = type->is_error();
1097
1098       result = new(ctx) ir_expression(operations[this->oper], type,
1099                                       op[0], op[1]);
1100       break;
1101
1102    case ast_mod:
1103       op[0] = this->subexpressions[0]->hir(instructions, state);
1104       op[1] = this->subexpressions[1]->hir(instructions, state);
1105
1106       type = modulus_result_type(op[0]->type, op[1]->type, state, & loc);
1107
1108       assert(operations[this->oper] == ir_binop_mod);
1109
1110       result = new(ctx) ir_expression(operations[this->oper], type,
1111                                       op[0], op[1]);
1112       error_emitted = type->is_error();
1113       break;
1114
1115    case ast_lshift:
1116    case ast_rshift:
1117        if (!state->check_bitwise_operations_allowed(&loc)) {
1118           error_emitted = true;
1119        }
1120
1121        op[0] = this->subexpressions[0]->hir(instructions, state);
1122        op[1] = this->subexpressions[1]->hir(instructions, state);
1123        type = shift_result_type(op[0]->type, op[1]->type, this->oper, state,
1124                                 &loc);
1125        result = new(ctx) ir_expression(operations[this->oper], type,
1126                                        op[0], op[1]);
1127        error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1128        break;
1129
1130    case ast_less:
1131    case ast_greater:
1132    case ast_lequal:
1133    case ast_gequal:
1134       op[0] = this->subexpressions[0]->hir(instructions, state);
1135       op[1] = this->subexpressions[1]->hir(instructions, state);
1136
1137       type = relational_result_type(op[0], op[1], state, & loc);
1138
1139       /* The relational operators must either generate an error or result
1140        * in a scalar boolean.  See page 57 of the GLSL 1.50 spec.
1141        */
1142       assert(type->is_error()
1143              || ((type->base_type == GLSL_TYPE_BOOL)
1144                  && type->is_scalar()));
1145
1146       result = new(ctx) ir_expression(operations[this->oper], type,
1147                                       op[0], op[1]);
1148       error_emitted = type->is_error();
1149       break;
1150
1151    case ast_nequal:
1152    case ast_equal:
1153       op[0] = this->subexpressions[0]->hir(instructions, state);
1154       op[1] = this->subexpressions[1]->hir(instructions, state);
1155
1156       /* From page 58 (page 64 of the PDF) of the GLSL 1.50 spec:
1157        *
1158        *    "The equality operators equal (==), and not equal (!=)
1159        *    operate on all types. They result in a scalar Boolean. If
1160        *    the operand types do not match, then there must be a
1161        *    conversion from Section 4.1.10 "Implicit Conversions"
1162        *    applied to one operand that can make them match, in which
1163        *    case this conversion is done."
1164        */
1165       if ((!apply_implicit_conversion(op[0]->type, op[1], state)
1166            && !apply_implicit_conversion(op[1]->type, op[0], state))
1167           || (op[0]->type != op[1]->type)) {
1168          _mesa_glsl_error(& loc, state, "operands of `%s' must have the same "
1169                           "type", (this->oper == ast_equal) ? "==" : "!=");
1170          error_emitted = true;
1171       } else if ((op[0]->type->is_array() || op[1]->type->is_array()) &&
1172                  !state->check_version(120, 300, &loc,
1173                                        "array comparisons forbidden")) {
1174          error_emitted = true;
1175       }
1176
1177       if (error_emitted) {
1178          result = new(ctx) ir_constant(false);
1179       } else {
1180          result = do_comparison(ctx, operations[this->oper], op[0], op[1]);
1181          assert(result->type == glsl_type::bool_type);
1182       }
1183       break;
1184
1185    case ast_bit_and:
1186    case ast_bit_xor:
1187    case ast_bit_or:
1188       op[0] = this->subexpressions[0]->hir(instructions, state);
1189       op[1] = this->subexpressions[1]->hir(instructions, state);
1190       type = bit_logic_result_type(op[0]->type, op[1]->type, this->oper,
1191                                    state, &loc);
1192       result = new(ctx) ir_expression(operations[this->oper], type,
1193                                       op[0], op[1]);
1194       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1195       break;
1196
1197    case ast_bit_not:
1198       op[0] = this->subexpressions[0]->hir(instructions, state);
1199
1200       if (!state->check_bitwise_operations_allowed(&loc)) {
1201          error_emitted = true;
1202       }
1203
1204       if (!op[0]->type->is_integer()) {
1205          _mesa_glsl_error(&loc, state, "operand of `~' must be an integer");
1206          error_emitted = true;
1207       }
1208
1209       type = error_emitted ? glsl_type::error_type : op[0]->type;
1210       result = new(ctx) ir_expression(ir_unop_bit_not, type, op[0], NULL);
1211       break;
1212
1213    case ast_logic_and: {
1214       exec_list rhs_instructions;
1215       op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1216                                          "LHS", &error_emitted);
1217       op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1,
1218                                          "RHS", &error_emitted);
1219
1220       if (rhs_instructions.is_empty()) {
1221          result = new(ctx) ir_expression(ir_binop_logic_and, op[0], op[1]);
1222          type = result->type;
1223       } else {
1224          ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type,
1225                                                        "and_tmp",
1226                                                        ir_var_temporary);
1227          instructions->push_tail(tmp);
1228
1229          ir_if *const stmt = new(ctx) ir_if(op[0]);
1230          instructions->push_tail(stmt);
1231
1232          stmt->then_instructions.append_list(&rhs_instructions);
1233          ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp);
1234          ir_assignment *const then_assign =
1235             new(ctx) ir_assignment(then_deref, op[1]);
1236          stmt->then_instructions.push_tail(then_assign);
1237
1238          ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp);
1239          ir_assignment *const else_assign =
1240             new(ctx) ir_assignment(else_deref, new(ctx) ir_constant(false));
1241          stmt->else_instructions.push_tail(else_assign);
1242
1243          result = new(ctx) ir_dereference_variable(tmp);
1244          type = tmp->type;
1245       }
1246       break;
1247    }
1248
1249    case ast_logic_or: {
1250       exec_list rhs_instructions;
1251       op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1252                                          "LHS", &error_emitted);
1253       op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1,
1254                                          "RHS", &error_emitted);
1255
1256       if (rhs_instructions.is_empty()) {
1257          result = new(ctx) ir_expression(ir_binop_logic_or, op[0], op[1]);
1258          type = result->type;
1259       } else {
1260          ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type,
1261                                                        "or_tmp",
1262                                                        ir_var_temporary);
1263          instructions->push_tail(tmp);
1264
1265          ir_if *const stmt = new(ctx) ir_if(op[0]);
1266          instructions->push_tail(stmt);
1267
1268          ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp);
1269          ir_assignment *const then_assign =
1270             new(ctx) ir_assignment(then_deref, new(ctx) ir_constant(true));
1271          stmt->then_instructions.push_tail(then_assign);
1272
1273          stmt->else_instructions.append_list(&rhs_instructions);
1274          ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp);
1275          ir_assignment *const else_assign =
1276             new(ctx) ir_assignment(else_deref, op[1]);
1277          stmt->else_instructions.push_tail(else_assign);
1278
1279          result = new(ctx) ir_dereference_variable(tmp);
1280          type = tmp->type;
1281       }
1282       break;
1283    }
1284
1285    case ast_logic_xor:
1286       /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec:
1287        *
1288        *    "The logical binary operators and (&&), or ( | | ), and
1289        *     exclusive or (^^). They operate only on two Boolean
1290        *     expressions and result in a Boolean expression."
1291        */
1292       op[0] = get_scalar_boolean_operand(instructions, state, this, 0, "LHS",
1293                                          &error_emitted);
1294       op[1] = get_scalar_boolean_operand(instructions, state, this, 1, "RHS",
1295                                          &error_emitted);
1296
1297       result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type,
1298                                       op[0], op[1]);
1299       break;
1300
1301    case ast_logic_not:
1302       op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1303                                          "operand", &error_emitted);
1304
1305       result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type,
1306                                       op[0], NULL);
1307       break;
1308
1309    case ast_mul_assign:
1310    case ast_div_assign:
1311    case ast_add_assign:
1312    case ast_sub_assign: {
1313       op[0] = this->subexpressions[0]->hir(instructions, state);
1314       op[1] = this->subexpressions[1]->hir(instructions, state);
1315
1316       type = arithmetic_result_type(op[0], op[1],
1317                                     (this->oper == ast_mul_assign),
1318                                     state, & loc);
1319
1320       ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1321                                                    op[0], op[1]);
1322
1323       result = do_assignment(instructions, state,
1324                              this->subexpressions[0]->non_lvalue_description,
1325                              op[0]->clone(ctx, NULL), temp_rhs, false,
1326                              this->subexpressions[0]->get_location());
1327       error_emitted = (op[0]->type->is_error());
1328
1329       /* GLSL 1.10 does not allow array assignment.  However, we don't have to
1330        * explicitly test for this because none of the binary expression
1331        * operators allow array operands either.
1332        */
1333
1334       break;
1335    }
1336
1337    case ast_mod_assign: {
1338       op[0] = this->subexpressions[0]->hir(instructions, state);
1339       op[1] = this->subexpressions[1]->hir(instructions, state);
1340
1341       type = modulus_result_type(op[0]->type, op[1]->type, state, & loc);
1342
1343       assert(operations[this->oper] == ir_binop_mod);
1344
1345       ir_rvalue *temp_rhs;
1346       temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1347                                         op[0], op[1]);
1348
1349       result = do_assignment(instructions, state,
1350                              this->subexpressions[0]->non_lvalue_description,
1351                              op[0]->clone(ctx, NULL), temp_rhs, false,
1352                              this->subexpressions[0]->get_location());
1353       error_emitted = type->is_error();
1354       break;
1355    }
1356
1357    case ast_ls_assign:
1358    case ast_rs_assign: {
1359       op[0] = this->subexpressions[0]->hir(instructions, state);
1360       op[1] = this->subexpressions[1]->hir(instructions, state);
1361       type = shift_result_type(op[0]->type, op[1]->type, this->oper, state,
1362                                &loc);
1363       ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper],
1364                                                    type, op[0], op[1]);
1365       result = do_assignment(instructions, state,
1366                              this->subexpressions[0]->non_lvalue_description,
1367                              op[0]->clone(ctx, NULL), temp_rhs, false,
1368                              this->subexpressions[0]->get_location());
1369       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1370       break;
1371    }
1372
1373    case ast_and_assign:
1374    case ast_xor_assign:
1375    case ast_or_assign: {
1376       op[0] = this->subexpressions[0]->hir(instructions, state);
1377       op[1] = this->subexpressions[1]->hir(instructions, state);
1378       type = bit_logic_result_type(op[0]->type, op[1]->type, this->oper,
1379                                    state, &loc);
1380       ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper],
1381                                                    type, op[0], op[1]);
1382       result = do_assignment(instructions, state,
1383                              this->subexpressions[0]->non_lvalue_description,
1384                              op[0]->clone(ctx, NULL), temp_rhs, false,
1385                              this->subexpressions[0]->get_location());
1386       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1387       break;
1388    }
1389
1390    case ast_conditional: {
1391       /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec:
1392        *
1393        *    "The ternary selection operator (?:). It operates on three
1394        *    expressions (exp1 ? exp2 : exp3). This operator evaluates the
1395        *    first expression, which must result in a scalar Boolean."
1396        */
1397       op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1398                                          "condition", &error_emitted);
1399
1400       /* The :? operator is implemented by generating an anonymous temporary
1401        * followed by an if-statement.  The last instruction in each branch of
1402        * the if-statement assigns a value to the anonymous temporary.  This
1403        * temporary is the r-value of the expression.
1404        */
1405       exec_list then_instructions;
1406       exec_list else_instructions;
1407
1408       op[1] = this->subexpressions[1]->hir(&then_instructions, state);
1409       op[2] = this->subexpressions[2]->hir(&else_instructions, state);
1410
1411       /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec:
1412        *
1413        *     "The second and third expressions can be any type, as
1414        *     long their types match, or there is a conversion in
1415        *     Section 4.1.10 "Implicit Conversions" that can be applied
1416        *     to one of the expressions to make their types match. This
1417        *     resulting matching type is the type of the entire
1418        *     expression."
1419        */
1420       if ((!apply_implicit_conversion(op[1]->type, op[2], state)
1421            && !apply_implicit_conversion(op[2]->type, op[1], state))
1422           || (op[1]->type != op[2]->type)) {
1423          YYLTYPE loc = this->subexpressions[1]->get_location();
1424
1425          _mesa_glsl_error(& loc, state, "Second and third operands of ?: "
1426                           "operator must have matching types.");
1427          error_emitted = true;
1428          type = glsl_type::error_type;
1429       } else {
1430          type = op[1]->type;
1431       }
1432
1433       /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec:
1434        *
1435        *    "The second and third expressions must be the same type, but can
1436        *    be of any type other than an array."
1437        */
1438       if (type->is_array() &&
1439           !state->check_version(120, 300, &loc,
1440                                 "Second and third operands of ?: operator "
1441                                 "cannot be arrays")) {
1442          error_emitted = true;
1443       }
1444
1445       ir_constant *cond_val = op[0]->constant_expression_value();
1446       ir_constant *then_val = op[1]->constant_expression_value();
1447       ir_constant *else_val = op[2]->constant_expression_value();
1448
1449       if (then_instructions.is_empty()
1450           && else_instructions.is_empty()
1451           && (cond_val != NULL) && (then_val != NULL) && (else_val != NULL)) {
1452          result = (cond_val->value.b[0]) ? then_val : else_val;
1453       } else {
1454          ir_variable *const tmp =
1455             new(ctx) ir_variable(type, "conditional_tmp", ir_var_temporary);
1456          instructions->push_tail(tmp);
1457
1458          ir_if *const stmt = new(ctx) ir_if(op[0]);
1459          instructions->push_tail(stmt);
1460
1461          then_instructions.move_nodes_to(& stmt->then_instructions);
1462          ir_dereference *const then_deref =
1463             new(ctx) ir_dereference_variable(tmp);
1464          ir_assignment *const then_assign =
1465             new(ctx) ir_assignment(then_deref, op[1]);
1466          stmt->then_instructions.push_tail(then_assign);
1467
1468          else_instructions.move_nodes_to(& stmt->else_instructions);
1469          ir_dereference *const else_deref =
1470             new(ctx) ir_dereference_variable(tmp);
1471          ir_assignment *const else_assign =
1472             new(ctx) ir_assignment(else_deref, op[2]);
1473          stmt->else_instructions.push_tail(else_assign);
1474
1475          result = new(ctx) ir_dereference_variable(tmp);
1476       }
1477       break;
1478    }
1479
1480    case ast_pre_inc:
1481    case ast_pre_dec: {
1482       this->non_lvalue_description = (this->oper == ast_pre_inc)
1483          ? "pre-increment operation" : "pre-decrement operation";
1484
1485       op[0] = this->subexpressions[0]->hir(instructions, state);
1486       op[1] = constant_one_for_inc_dec(ctx, op[0]->type);
1487
1488       type = arithmetic_result_type(op[0], op[1], false, state, & loc);
1489
1490       ir_rvalue *temp_rhs;
1491       temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1492                                         op[0], op[1]);
1493
1494       result = do_assignment(instructions, state,
1495                              this->subexpressions[0]->non_lvalue_description,
1496                              op[0]->clone(ctx, NULL), temp_rhs, false,
1497                              this->subexpressions[0]->get_location());
1498       error_emitted = op[0]->type->is_error();
1499       break;
1500    }
1501
1502    case ast_post_inc:
1503    case ast_post_dec: {
1504       this->non_lvalue_description = (this->oper == ast_post_inc)
1505          ? "post-increment operation" : "post-decrement operation";
1506       op[0] = this->subexpressions[0]->hir(instructions, state);
1507       op[1] = constant_one_for_inc_dec(ctx, op[0]->type);
1508
1509       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1510
1511       type = arithmetic_result_type(op[0], op[1], false, state, & loc);
1512
1513       ir_rvalue *temp_rhs;
1514       temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1515                                         op[0], op[1]);
1516
1517       /* Get a temporary of a copy of the lvalue before it's modified.
1518        * This may get thrown away later.
1519        */
1520       result = get_lvalue_copy(instructions, op[0]->clone(ctx, NULL));
1521
1522       (void)do_assignment(instructions, state,
1523                           this->subexpressions[0]->non_lvalue_description,
1524                           op[0]->clone(ctx, NULL), temp_rhs, false,
1525                           this->subexpressions[0]->get_location());
1526
1527       error_emitted = op[0]->type->is_error();
1528       break;
1529    }
1530
1531    case ast_field_selection:
1532       result = _mesa_ast_field_selection_to_hir(this, instructions, state);
1533       break;
1534
1535    case ast_array_index: {
1536       YYLTYPE index_loc = subexpressions[1]->get_location();
1537
1538       op[0] = subexpressions[0]->hir(instructions, state);
1539       op[1] = subexpressions[1]->hir(instructions, state);
1540
1541       result = _mesa_ast_array_index_to_hir(ctx, state, op[0], op[1],
1542                                             loc, index_loc);
1543
1544       if (result->type->is_error())
1545          error_emitted = true;
1546
1547       break;
1548    }
1549
1550    case ast_function_call:
1551       /* Should *NEVER* get here.  ast_function_call should always be handled
1552        * by ast_function_expression::hir.
1553        */
1554       assert(0);
1555       break;
1556
1557    case ast_identifier: {
1558       /* ast_identifier can appear several places in a full abstract syntax
1559        * tree.  This particular use must be at location specified in the grammar
1560        * as 'variable_identifier'.
1561        */
1562       ir_variable *var = 
1563          state->symbols->get_variable(this->primary_expression.identifier);
1564
1565       if (var != NULL) {
1566          var->used = true;
1567          result = new(ctx) ir_dereference_variable(var);
1568       } else {
1569          _mesa_glsl_error(& loc, state, "`%s' undeclared",
1570                           this->primary_expression.identifier);
1571
1572          result = ir_rvalue::error_value(ctx);
1573          error_emitted = true;
1574       }
1575       break;
1576    }
1577
1578    case ast_int_constant:
1579       result = new(ctx) ir_constant(this->primary_expression.int_constant);
1580       break;
1581
1582    case ast_uint_constant:
1583       result = new(ctx) ir_constant(this->primary_expression.uint_constant);
1584       break;
1585
1586    case ast_float_constant:
1587       result = new(ctx) ir_constant(this->primary_expression.float_constant);
1588       break;
1589
1590    case ast_bool_constant:
1591       result = new(ctx) ir_constant(bool(this->primary_expression.bool_constant));
1592       break;
1593
1594    case ast_sequence: {
1595       /* It should not be possible to generate a sequence in the AST without
1596        * any expressions in it.
1597        */
1598       assert(!this->expressions.is_empty());
1599
1600       /* The r-value of a sequence is the last expression in the sequence.  If
1601        * the other expressions in the sequence do not have side-effects (and
1602        * therefore add instructions to the instruction list), they get dropped
1603        * on the floor.
1604        */
1605       exec_node *previous_tail_pred = NULL;
1606       YYLTYPE previous_operand_loc = loc;
1607
1608       foreach_list_typed (ast_node, ast, link, &this->expressions) {
1609          /* If one of the operands of comma operator does not generate any
1610           * code, we want to emit a warning.  At each pass through the loop
1611           * previous_tail_pred will point to the last instruction in the
1612           * stream *before* processing the previous operand.  Naturally,
1613           * instructions->tail_pred will point to the last instruction in the
1614           * stream *after* processing the previous operand.  If the two
1615           * pointers match, then the previous operand had no effect.
1616           *
1617           * The warning behavior here differs slightly from GCC.  GCC will
1618           * only emit a warning if none of the left-hand operands have an
1619           * effect.  However, it will emit a warning for each.  I believe that
1620           * there are some cases in C (especially with GCC extensions) where
1621           * it is useful to have an intermediate step in a sequence have no
1622           * effect, but I don't think these cases exist in GLSL.  Either way,
1623           * it would be a giant hassle to replicate that behavior.
1624           */
1625          if (previous_tail_pred == instructions->tail_pred) {
1626             _mesa_glsl_warning(&previous_operand_loc, state,
1627                                "left-hand operand of comma expression has "
1628                                "no effect");
1629          }
1630
1631          /* tail_pred is directly accessed instead of using the get_tail()
1632           * method for performance reasons.  get_tail() has extra code to
1633           * return NULL when the list is empty.  We don't care about that
1634           * here, so using tail_pred directly is fine.
1635           */
1636          previous_tail_pred = instructions->tail_pred;
1637          previous_operand_loc = ast->get_location();
1638
1639          result = ast->hir(instructions, state);
1640       }
1641
1642       /* Any errors should have already been emitted in the loop above.
1643        */
1644       error_emitted = true;
1645       break;
1646    }
1647    }
1648    type = NULL; /* use result->type, not type. */
1649    assert(result != NULL);
1650
1651    if (result->type->is_error() && !error_emitted)
1652       _mesa_glsl_error(& loc, state, "type mismatch");
1653
1654    return result;
1655 }
1656
1657
1658 ir_rvalue *
1659 ast_expression_statement::hir(exec_list *instructions,
1660                               struct _mesa_glsl_parse_state *state)
1661 {
1662    /* It is possible to have expression statements that don't have an
1663     * expression.  This is the solitary semicolon:
1664     *
1665     * for (i = 0; i < 5; i++)
1666     *     ;
1667     *
1668     * In this case the expression will be NULL.  Test for NULL and don't do
1669     * anything in that case.
1670     */
1671    if (expression != NULL)
1672       expression->hir(instructions, state);
1673
1674    /* Statements do not have r-values.
1675     */
1676    return NULL;
1677 }
1678
1679
1680 ir_rvalue *
1681 ast_compound_statement::hir(exec_list *instructions,
1682                             struct _mesa_glsl_parse_state *state)
1683 {
1684    if (new_scope)
1685       state->symbols->push_scope();
1686
1687    foreach_list_typed (ast_node, ast, link, &this->statements)
1688       ast->hir(instructions, state);
1689
1690    if (new_scope)
1691       state->symbols->pop_scope();
1692
1693    /* Compound statements do not have r-values.
1694     */
1695    return NULL;
1696 }
1697
1698
1699 static const glsl_type *
1700 process_array_type(YYLTYPE *loc, const glsl_type *base, ast_node *array_size,
1701                    struct _mesa_glsl_parse_state *state)
1702 {
1703    unsigned length = 0;
1704
1705    if (base == NULL)
1706       return glsl_type::error_type;
1707
1708    /* From page 19 (page 25) of the GLSL 1.20 spec:
1709     *
1710     *     "Only one-dimensional arrays may be declared."
1711     */
1712    if (base->is_array()) {
1713       _mesa_glsl_error(loc, state,
1714                        "invalid array of `%s' (only one-dimensional arrays "
1715                        "may be declared)",
1716                        base->name);
1717       return glsl_type::error_type;
1718    }
1719
1720    if (array_size != NULL) {
1721       exec_list dummy_instructions;
1722       ir_rvalue *const ir = array_size->hir(& dummy_instructions, state);
1723       YYLTYPE loc = array_size->get_location();
1724
1725       if (ir != NULL) {
1726          if (!ir->type->is_integer()) {
1727             _mesa_glsl_error(& loc, state, "array size must be integer type");
1728          } else if (!ir->type->is_scalar()) {
1729             _mesa_glsl_error(& loc, state, "array size must be scalar type");
1730          } else {
1731             ir_constant *const size = ir->constant_expression_value();
1732
1733             if (size == NULL) {
1734                _mesa_glsl_error(& loc, state, "array size must be a "
1735                                 "constant valued expression");
1736             } else if (size->value.i[0] <= 0) {
1737                _mesa_glsl_error(& loc, state, "array size must be > 0");
1738             } else {
1739                assert(size->type == ir->type);
1740                length = size->value.u[0];
1741
1742                /* If the array size is const (and we've verified that
1743                 * it is) then no instructions should have been emitted
1744                 * when we converted it to HIR.  If they were emitted,
1745                 * then either the array size isn't const after all, or
1746                 * we are emitting unnecessary instructions.
1747                 */
1748                assert(dummy_instructions.is_empty());
1749             }
1750          }
1751       }
1752    } else if (state->es_shader) {
1753       /* Section 10.17 of the GLSL ES 1.00 specification states that unsized
1754        * array declarations have been removed from the language.
1755        */
1756       _mesa_glsl_error(loc, state, "unsized array declarations are not "
1757                        "allowed in GLSL ES 1.00.");
1758    }
1759
1760    const glsl_type *array_type = glsl_type::get_array_instance(base, length);
1761    return array_type != NULL ? array_type : glsl_type::error_type;
1762 }
1763
1764
1765 const glsl_type *
1766 ast_type_specifier::glsl_type(const char **name,
1767                               struct _mesa_glsl_parse_state *state) const
1768 {
1769    const struct glsl_type *type;
1770
1771    type = state->symbols->get_type(this->type_name);
1772    *name = this->type_name;
1773
1774    if (this->is_array) {
1775       YYLTYPE loc = this->get_location();
1776       type = process_array_type(&loc, type, this->array_size, state);
1777    }
1778
1779    return type;
1780 }
1781
1782
1783 /**
1784  * Determine whether a toplevel variable declaration declares a varying.  This
1785  * function operates by examining the variable's mode and the shader target,
1786  * so it correctly identifies linkage variables regardless of whether they are
1787  * declared using the deprecated "varying" syntax or the new "in/out" syntax.
1788  *
1789  * Passing a non-toplevel variable declaration (e.g. a function parameter) to
1790  * this function will produce undefined results.
1791  */
1792 static bool
1793 is_varying_var(ir_variable *var, _mesa_glsl_parser_targets target)
1794 {
1795    switch (target) {
1796    case vertex_shader:
1797       return var->mode == ir_var_shader_out;
1798    case fragment_shader:
1799       return var->mode == ir_var_shader_in;
1800    default:
1801       return var->mode == ir_var_shader_out || var->mode == ir_var_shader_in;
1802    }
1803 }
1804
1805
1806 /**
1807  * Matrix layout qualifiers are only allowed on certain types
1808  */
1809 static void
1810 validate_matrix_layout_for_type(struct _mesa_glsl_parse_state *state,
1811                                 YYLTYPE *loc,
1812                                 const glsl_type *type)
1813 {
1814    if (!type->is_matrix() && !type->is_record()) {
1815       _mesa_glsl_error(loc, state,
1816                        "uniform block layout qualifiers row_major and "
1817                        "column_major can only be applied to matrix and "
1818                        "structure types");
1819    } else if (type->is_record()) {
1820       /* We allow 'layout(row_major)' on structure types because it's the only
1821        * way to get row-major layouts on matrices contained in structures.
1822        */
1823       _mesa_glsl_warning(loc, state,
1824                          "uniform block layout qualifiers row_major and "
1825                          "column_major applied to structure types is not "
1826                          "strictly conformant and my be rejected by other "
1827                          "compilers");
1828    }
1829 }
1830
1831 static void
1832 apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
1833                                  ir_variable *var,
1834                                  struct _mesa_glsl_parse_state *state,
1835                                  YYLTYPE *loc,
1836                                  bool ubo_qualifiers_valid,
1837                                  bool is_parameter)
1838 {
1839    if (qual->flags.q.invariant) {
1840       if (var->used) {
1841          _mesa_glsl_error(loc, state,
1842                           "variable `%s' may not be redeclared "
1843                           "`invariant' after being used",
1844                           var->name);
1845       } else {
1846          var->invariant = 1;
1847       }
1848    }
1849
1850    if (qual->flags.q.constant || qual->flags.q.attribute
1851        || qual->flags.q.uniform
1852        || (qual->flags.q.varying && (state->target == fragment_shader)))
1853       var->read_only = 1;
1854
1855    if (qual->flags.q.centroid)
1856       var->centroid = 1;
1857
1858    if (qual->flags.q.attribute && state->target != vertex_shader) {
1859       var->type = glsl_type::error_type;
1860       _mesa_glsl_error(loc, state,
1861                        "`attribute' variables may not be declared in the "
1862                        "%s shader",
1863                        _mesa_glsl_shader_target_name(state->target));
1864    }
1865
1866    /* If there is no qualifier that changes the mode of the variable, leave
1867     * the setting alone.
1868     */
1869    if (qual->flags.q.in && qual->flags.q.out)
1870       var->mode = ir_var_function_inout;
1871    else if (qual->flags.q.in)
1872       var->mode = is_parameter ? ir_var_function_in : ir_var_shader_in;
1873    else if (qual->flags.q.attribute
1874             || (qual->flags.q.varying && (state->target == fragment_shader)))
1875       var->mode = ir_var_shader_in;
1876    else if (qual->flags.q.out)
1877       var->mode = is_parameter ? ir_var_function_out : ir_var_shader_out;
1878    else if (qual->flags.q.varying && (state->target == vertex_shader))
1879       var->mode = ir_var_shader_out;
1880    else if (qual->flags.q.uniform)
1881       var->mode = ir_var_uniform;
1882
1883    if (!is_parameter && is_varying_var(var, state->target)) {
1884       /* This variable is being used to link data between shader stages (in
1885        * pre-glsl-1.30 parlance, it's a "varying").  Check that it has a type
1886        * that is allowed for such purposes.
1887        *
1888        * From page 25 (page 31 of the PDF) of the GLSL 1.10 spec:
1889        *
1890        *     "The varying qualifier can be used only with the data types
1891        *     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of
1892        *     these."
1893        *
1894        * This was relaxed in GLSL version 1.30 and GLSL ES version 3.00.  From
1895        * page 31 (page 37 of the PDF) of the GLSL 1.30 spec:
1896        *
1897        *     "Fragment inputs can only be signed and unsigned integers and
1898        *     integer vectors, float, floating-point vectors, matrices, or
1899        *     arrays of these. Structures cannot be input.
1900        *
1901        * Similar text exists in the section on vertex shader outputs.
1902        *
1903        * Similar text exists in the GLSL ES 3.00 spec, except that the GLSL ES
1904        * 3.00 spec allows structs as well.  Varying structs are also allowed
1905        * in GLSL 1.50.
1906        */
1907       switch (var->type->get_scalar_type()->base_type) {
1908       case GLSL_TYPE_FLOAT:
1909          /* Ok in all GLSL versions */
1910          break;
1911       case GLSL_TYPE_UINT:
1912       case GLSL_TYPE_INT:
1913          if (state->is_version(130, 300))
1914             break;
1915          _mesa_glsl_error(loc, state,
1916                           "varying variables must be of base type float in %s",
1917                           state->get_version_string());
1918          break;
1919       case GLSL_TYPE_STRUCT:
1920          if (state->is_version(150, 300))
1921             break;
1922          _mesa_glsl_error(loc, state,
1923                           "varying variables may not be of type struct");
1924          break;
1925       default:
1926          _mesa_glsl_error(loc, state, "illegal type for a varying variable");
1927          break;
1928       }
1929    }
1930
1931    if (state->all_invariant && (state->current_function == NULL)) {
1932       switch (state->target) {
1933       case vertex_shader:
1934          if (var->mode == ir_var_shader_out)
1935             var->invariant = true;
1936          break;
1937       case geometry_shader:
1938          if ((var->mode == ir_var_shader_in)
1939              || (var->mode == ir_var_shader_out))
1940             var->invariant = true;
1941          break;
1942       case fragment_shader:
1943          if (var->mode == ir_var_shader_in)
1944             var->invariant = true;
1945          break;
1946       }
1947    }
1948
1949    if (qual->flags.q.flat)
1950       var->interpolation = INTERP_QUALIFIER_FLAT;
1951    else if (qual->flags.q.noperspective)
1952       var->interpolation = INTERP_QUALIFIER_NOPERSPECTIVE;
1953    else if (qual->flags.q.smooth)
1954       var->interpolation = INTERP_QUALIFIER_SMOOTH;
1955    else
1956       var->interpolation = INTERP_QUALIFIER_NONE;
1957
1958    if (var->interpolation != INTERP_QUALIFIER_NONE &&
1959        !(state->target == vertex_shader && var->mode == ir_var_shader_out) &&
1960        !(state->target == fragment_shader && var->mode == ir_var_shader_in)) {
1961       _mesa_glsl_error(loc, state,
1962                        "interpolation qualifier `%s' can only be applied to "
1963                        "vertex shader outputs and fragment shader inputs.",
1964                        var->interpolation_string());
1965    }
1966
1967    var->pixel_center_integer = qual->flags.q.pixel_center_integer;
1968    var->origin_upper_left = qual->flags.q.origin_upper_left;
1969    if ((qual->flags.q.origin_upper_left || qual->flags.q.pixel_center_integer)
1970        && (strcmp(var->name, "gl_FragCoord") != 0)) {
1971       const char *const qual_string = (qual->flags.q.origin_upper_left)
1972          ? "origin_upper_left" : "pixel_center_integer";
1973
1974       _mesa_glsl_error(loc, state,
1975                        "layout qualifier `%s' can only be applied to "
1976                        "fragment shader input `gl_FragCoord'",
1977                        qual_string);
1978    }
1979
1980    if (qual->flags.q.explicit_location) {
1981       const bool global_scope = (state->current_function == NULL);
1982       bool fail = false;
1983       const char *string = "";
1984
1985       /* In the vertex shader only shader inputs can be given explicit
1986        * locations.
1987        *
1988        * In the fragment shader only shader outputs can be given explicit
1989        * locations.
1990        */
1991       switch (state->target) {
1992       case vertex_shader:
1993          if (!global_scope || (var->mode != ir_var_shader_in)) {
1994             fail = true;
1995             string = "input";
1996          }
1997          break;
1998
1999       case geometry_shader:
2000          _mesa_glsl_error(loc, state,
2001                           "geometry shader variables cannot be given "
2002                           "explicit locations\n");
2003          break;
2004
2005       case fragment_shader:
2006          if (!global_scope || (var->mode != ir_var_shader_out)) {
2007             fail = true;
2008             string = "output";
2009          }
2010          break;
2011       };
2012
2013       if (fail) {
2014          _mesa_glsl_error(loc, state,
2015                           "only %s shader %s variables can be given an "
2016                           "explicit location\n",
2017                           _mesa_glsl_shader_target_name(state->target),
2018                           string);
2019       } else {
2020          var->explicit_location = true;
2021
2022          /* This bit of silliness is needed because invalid explicit locations
2023           * are supposed to be flagged during linking.  Small negative values
2024           * biased by VERT_ATTRIB_GENERIC0 or FRAG_RESULT_DATA0 could alias
2025           * built-in values (e.g., -16+VERT_ATTRIB_GENERIC0 = VERT_ATTRIB_POS).
2026           * The linker needs to be able to differentiate these cases.  This
2027           * ensures that negative values stay negative.
2028           */
2029          if (qual->location >= 0) {
2030             var->location = (state->target == vertex_shader)
2031                ? (qual->location + VERT_ATTRIB_GENERIC0)
2032                : (qual->location + FRAG_RESULT_DATA0);
2033          } else {
2034             var->location = qual->location;
2035          }
2036
2037          if (qual->flags.q.explicit_index) {
2038             /* From the GLSL 4.30 specification, section 4.4.2 (Output
2039              * Layout Qualifiers):
2040              *
2041              * "It is also a compile-time error if a fragment shader
2042              *  sets a layout index to less than 0 or greater than 1."
2043              *
2044              * Older specifications don't mandate a behavior; we take
2045              * this as a clarification and always generate the error.
2046              */
2047             if (qual->index < 0 || qual->index > 1) {
2048                _mesa_glsl_error(loc, state,
2049                                 "explicit index may only be 0 or 1\n");
2050             } else {
2051                var->explicit_index = true;
2052                var->index = qual->index;
2053             }
2054          }
2055       }
2056    } else if (qual->flags.q.explicit_index) {
2057          _mesa_glsl_error(loc, state,
2058                           "explicit index requires explicit location\n");
2059    }
2060
2061    /* Does the declaration use the 'layout' keyword?
2062     */
2063    const bool uses_layout = qual->flags.q.pixel_center_integer
2064       || qual->flags.q.origin_upper_left
2065       || qual->flags.q.explicit_location; /* no need for index since it relies on location */
2066
2067    /* Does the declaration use the deprecated 'attribute' or 'varying'
2068     * keywords?
2069     */
2070    const bool uses_deprecated_qualifier = qual->flags.q.attribute
2071       || qual->flags.q.varying;
2072
2073    /* Is the 'layout' keyword used with parameters that allow relaxed checking.
2074     * Many implementations of GL_ARB_fragment_coord_conventions_enable and some
2075     * implementations (only Mesa?) GL_ARB_explicit_attrib_location_enable
2076     * allowed the layout qualifier to be used with 'varying' and 'attribute'.
2077     * These extensions and all following extensions that add the 'layout'
2078     * keyword have been modified to require the use of 'in' or 'out'.
2079     *
2080     * The following extension do not allow the deprecated keywords:
2081     *
2082     *    GL_AMD_conservative_depth
2083     *    GL_ARB_conservative_depth
2084     *    GL_ARB_gpu_shader5
2085     *    GL_ARB_separate_shader_objects
2086     *    GL_ARB_tesselation_shader
2087     *    GL_ARB_transform_feedback3
2088     *    GL_ARB_uniform_buffer_object
2089     *
2090     * It is unknown whether GL_EXT_shader_image_load_store or GL_NV_gpu_shader5
2091     * allow layout with the deprecated keywords.
2092     */
2093    const bool relaxed_layout_qualifier_checking =
2094       state->ARB_fragment_coord_conventions_enable;
2095
2096    if (uses_layout && uses_deprecated_qualifier) {
2097       if (relaxed_layout_qualifier_checking) {
2098          _mesa_glsl_warning(loc, state,
2099                             "`layout' qualifier may not be used with "
2100                             "`attribute' or `varying'");
2101       } else {
2102          _mesa_glsl_error(loc, state,
2103                           "`layout' qualifier may not be used with "
2104                           "`attribute' or `varying'");
2105       }
2106    }
2107
2108    /* Layout qualifiers for gl_FragDepth, which are enabled by extension
2109     * AMD_conservative_depth.
2110     */
2111    int depth_layout_count = qual->flags.q.depth_any
2112       + qual->flags.q.depth_greater
2113       + qual->flags.q.depth_less
2114       + qual->flags.q.depth_unchanged;
2115    if (depth_layout_count > 0
2116        && !state->AMD_conservative_depth_enable
2117        && !state->ARB_conservative_depth_enable) {
2118        _mesa_glsl_error(loc, state,
2119                         "extension GL_AMD_conservative_depth or "
2120                         "GL_ARB_conservative_depth must be enabled "
2121                         "to use depth layout qualifiers");
2122    } else if (depth_layout_count > 0
2123               && strcmp(var->name, "gl_FragDepth") != 0) {
2124        _mesa_glsl_error(loc, state,
2125                         "depth layout qualifiers can be applied only to "
2126                         "gl_FragDepth");
2127    } else if (depth_layout_count > 1
2128               && strcmp(var->name, "gl_FragDepth") == 0) {
2129       _mesa_glsl_error(loc, state,
2130                        "at most one depth layout qualifier can be applied to "
2131                        "gl_FragDepth");
2132    }
2133    if (qual->flags.q.depth_any)
2134       var->depth_layout = ir_depth_layout_any;
2135    else if (qual->flags.q.depth_greater)
2136       var->depth_layout = ir_depth_layout_greater;
2137    else if (qual->flags.q.depth_less)
2138       var->depth_layout = ir_depth_layout_less;
2139    else if (qual->flags.q.depth_unchanged)
2140        var->depth_layout = ir_depth_layout_unchanged;
2141    else
2142        var->depth_layout = ir_depth_layout_none;
2143
2144    if (qual->flags.q.std140 ||
2145        qual->flags.q.packed ||
2146        qual->flags.q.shared) {
2147       _mesa_glsl_error(loc, state,
2148                        "uniform block layout qualifiers std140, packed, and "
2149                        "shared can only be applied to uniform blocks, not "
2150                        "members");
2151    }
2152
2153    if (qual->flags.q.row_major || qual->flags.q.column_major) {
2154       if (!ubo_qualifiers_valid) {
2155          _mesa_glsl_error(loc, state,
2156                           "uniform block layout qualifiers row_major and "
2157                           "column_major can only be applied to uniform block "
2158                           "members");
2159       } else
2160          validate_matrix_layout_for_type(state, loc, var->type);
2161    }
2162 }
2163
2164 /**
2165  * Get the variable that is being redeclared by this declaration
2166  *
2167  * Semantic checks to verify the validity of the redeclaration are also
2168  * performed.  If semantic checks fail, compilation error will be emitted via
2169  * \c _mesa_glsl_error, but a non-\c NULL pointer will still be returned.
2170  *
2171  * \returns
2172  * A pointer to an existing variable in the current scope if the declaration
2173  * is a redeclaration, \c NULL otherwise.
2174  */
2175 ir_variable *
2176 get_variable_being_redeclared(ir_variable *var, ast_declaration *decl,
2177                               struct _mesa_glsl_parse_state *state)
2178 {
2179    /* Check if this declaration is actually a re-declaration, either to
2180     * resize an array or add qualifiers to an existing variable.
2181     *
2182     * This is allowed for variables in the current scope, or when at
2183     * global scope (for built-ins in the implicit outer scope).
2184     */
2185    ir_variable *earlier = state->symbols->get_variable(decl->identifier);
2186    if (earlier == NULL ||
2187        (state->current_function != NULL &&
2188         !state->symbols->name_declared_this_scope(decl->identifier))) {
2189       return NULL;
2190    }
2191
2192
2193    YYLTYPE loc = decl->get_location();
2194
2195    /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec,
2196     *
2197     * "It is legal to declare an array without a size and then
2198     *  later re-declare the same name as an array of the same
2199     *  type and specify a size."
2200     */
2201    if ((earlier->type->array_size() == 0)
2202        && var->type->is_array()
2203        && (var->type->element_type() == earlier->type->element_type())) {
2204       /* FINISHME: This doesn't match the qualifiers on the two
2205        * FINISHME: declarations.  It's not 100% clear whether this is
2206        * FINISHME: required or not.
2207        */
2208
2209       const unsigned size = unsigned(var->type->array_size());
2210       check_builtin_array_max_size(var->name, size, loc, state);
2211       if ((size > 0) && (size <= earlier->max_array_access)) {
2212          _mesa_glsl_error(& loc, state, "array size must be > %u due to "
2213                           "previous access",
2214                           earlier->max_array_access);
2215       }
2216
2217       earlier->type = var->type;
2218       delete var;
2219       var = NULL;
2220    } else if (state->ARB_fragment_coord_conventions_enable
2221               && strcmp(var->name, "gl_FragCoord") == 0
2222               && earlier->type == var->type
2223               && earlier->mode == var->mode) {
2224       /* Allow redeclaration of gl_FragCoord for ARB_fcc layout
2225        * qualifiers.
2226        */
2227       earlier->origin_upper_left = var->origin_upper_left;
2228       earlier->pixel_center_integer = var->pixel_center_integer;
2229
2230       /* According to section 4.3.7 of the GLSL 1.30 spec,
2231        * the following built-in varaibles can be redeclared with an
2232        * interpolation qualifier:
2233        *    * gl_FrontColor
2234        *    * gl_BackColor
2235        *    * gl_FrontSecondaryColor
2236        *    * gl_BackSecondaryColor
2237        *    * gl_Color
2238        *    * gl_SecondaryColor
2239        */
2240    } else if (state->is_version(130, 0)
2241               && (strcmp(var->name, "gl_FrontColor") == 0
2242                   || strcmp(var->name, "gl_BackColor") == 0
2243                   || strcmp(var->name, "gl_FrontSecondaryColor") == 0
2244                   || strcmp(var->name, "gl_BackSecondaryColor") == 0
2245                   || strcmp(var->name, "gl_Color") == 0
2246                   || strcmp(var->name, "gl_SecondaryColor") == 0)
2247               && earlier->type == var->type
2248               && earlier->mode == var->mode) {
2249       earlier->interpolation = var->interpolation;
2250
2251       /* Layout qualifiers for gl_FragDepth. */
2252    } else if ((state->AMD_conservative_depth_enable ||
2253                state->ARB_conservative_depth_enable)
2254               && strcmp(var->name, "gl_FragDepth") == 0
2255               && earlier->type == var->type
2256               && earlier->mode == var->mode) {
2257
2258       /** From the AMD_conservative_depth spec:
2259        *     Within any shader, the first redeclarations of gl_FragDepth
2260        *     must appear before any use of gl_FragDepth.
2261        */
2262       if (earlier->used) {
2263          _mesa_glsl_error(&loc, state,
2264                           "the first redeclaration of gl_FragDepth "
2265                           "must appear before any use of gl_FragDepth");
2266       }
2267
2268       /* Prevent inconsistent redeclaration of depth layout qualifier. */
2269       if (earlier->depth_layout != ir_depth_layout_none
2270           && earlier->depth_layout != var->depth_layout) {
2271          _mesa_glsl_error(&loc, state,
2272                           "gl_FragDepth: depth layout is declared here "
2273                           "as '%s, but it was previously declared as "
2274                           "'%s'",
2275                           depth_layout_string(var->depth_layout),
2276                           depth_layout_string(earlier->depth_layout));
2277       }
2278
2279       earlier->depth_layout = var->depth_layout;
2280
2281    } else {
2282       _mesa_glsl_error(&loc, state, "`%s' redeclared", decl->identifier);
2283    }
2284
2285    return earlier;
2286 }
2287
2288 /**
2289  * Generate the IR for an initializer in a variable declaration
2290  */
2291 ir_rvalue *
2292 process_initializer(ir_variable *var, ast_declaration *decl,
2293                     ast_fully_specified_type *type,
2294                     exec_list *initializer_instructions,
2295                     struct _mesa_glsl_parse_state *state)
2296 {
2297    ir_rvalue *result = NULL;
2298
2299    YYLTYPE initializer_loc = decl->initializer->get_location();
2300
2301    /* From page 24 (page 30 of the PDF) of the GLSL 1.10 spec:
2302     *
2303     *    "All uniform variables are read-only and are initialized either
2304     *    directly by an application via API commands, or indirectly by
2305     *    OpenGL."
2306     */
2307    if (var->mode == ir_var_uniform) {
2308       state->check_version(120, 0, &initializer_loc,
2309                            "cannot initialize uniforms");
2310    }
2311
2312    if (var->type->is_sampler()) {
2313       _mesa_glsl_error(& initializer_loc, state,
2314                        "cannot initialize samplers");
2315    }
2316
2317    if ((var->mode == ir_var_shader_in) && (state->current_function == NULL)) {
2318       _mesa_glsl_error(& initializer_loc, state,
2319                        "cannot initialize %s shader input / %s",
2320                        _mesa_glsl_shader_target_name(state->target),
2321                        (state->target == vertex_shader)
2322                        ? "attribute" : "varying");
2323    }
2324
2325    ir_dereference *const lhs = new(state) ir_dereference_variable(var);
2326    ir_rvalue *rhs = decl->initializer->hir(initializer_instructions,
2327                                            state);
2328
2329    /* Calculate the constant value if this is a const or uniform
2330     * declaration.
2331     */
2332    if (type->qualifier.flags.q.constant
2333        || type->qualifier.flags.q.uniform) {
2334       ir_rvalue *new_rhs = validate_assignment(state, var->type, rhs, true);
2335       if (new_rhs != NULL) {
2336          rhs = new_rhs;
2337
2338          ir_constant *constant_value = rhs->constant_expression_value();
2339          if (!constant_value) {
2340             _mesa_glsl_error(& initializer_loc, state,
2341                              "initializer of %s variable `%s' must be a "
2342                              "constant expression",
2343                              (type->qualifier.flags.q.constant)
2344                              ? "const" : "uniform",
2345                              decl->identifier);
2346             if (var->type->is_numeric()) {
2347                /* Reduce cascading errors. */
2348                var->constant_value = ir_constant::zero(state, var->type);
2349             }
2350          } else {
2351             rhs = constant_value;
2352             var->constant_value = constant_value;
2353          }
2354       } else {
2355          _mesa_glsl_error(&initializer_loc, state,
2356                           "initializer of type %s cannot be assigned to "
2357                           "variable of type %s",
2358                           rhs->type->name, var->type->name);
2359          if (var->type->is_numeric()) {
2360             /* Reduce cascading errors. */
2361             var->constant_value = ir_constant::zero(state, var->type);
2362          }
2363       }
2364    }
2365
2366    if (rhs && !rhs->type->is_error()) {
2367       bool temp = var->read_only;
2368       if (type->qualifier.flags.q.constant)
2369          var->read_only = false;
2370
2371       /* Never emit code to initialize a uniform.
2372        */
2373       const glsl_type *initializer_type;
2374       if (!type->qualifier.flags.q.uniform) {
2375          result = do_assignment(initializer_instructions, state,
2376                                 NULL,
2377                                 lhs, rhs, true,
2378                                 type->get_location());
2379          initializer_type = result->type;
2380       } else
2381          initializer_type = rhs->type;
2382
2383       var->constant_initializer = rhs->constant_expression_value();
2384       var->has_initializer = true;
2385
2386       /* If the declared variable is an unsized array, it must inherrit
2387        * its full type from the initializer.  A declaration such as
2388        *
2389        *     uniform float a[] = float[](1.0, 2.0, 3.0, 3.0);
2390        *
2391        * becomes
2392        *
2393        *     uniform float a[4] = float[](1.0, 2.0, 3.0, 3.0);
2394        *
2395        * The assignment generated in the if-statement (below) will also
2396        * automatically handle this case for non-uniforms.
2397        *
2398        * If the declared variable is not an array, the types must
2399        * already match exactly.  As a result, the type assignment
2400        * here can be done unconditionally.  For non-uniforms the call
2401        * to do_assignment can change the type of the initializer (via
2402        * the implicit conversion rules).  For uniforms the initializer
2403        * must be a constant expression, and the type of that expression
2404        * was validated above.
2405        */
2406       var->type = initializer_type;
2407
2408       var->read_only = temp;
2409    }
2410
2411    return result;
2412 }
2413
2414 ir_rvalue *
2415 ast_declarator_list::hir(exec_list *instructions,
2416                          struct _mesa_glsl_parse_state *state)
2417 {
2418    void *ctx = state;
2419    const struct glsl_type *decl_type;
2420    const char *type_name = NULL;
2421    ir_rvalue *result = NULL;
2422    YYLTYPE loc = this->get_location();
2423
2424    /* From page 46 (page 52 of the PDF) of the GLSL 1.50 spec:
2425     *
2426     *     "To ensure that a particular output variable is invariant, it is
2427     *     necessary to use the invariant qualifier. It can either be used to
2428     *     qualify a previously declared variable as being invariant
2429     *
2430     *         invariant gl_Position; // make existing gl_Position be invariant"
2431     *
2432     * In these cases the parser will set the 'invariant' flag in the declarator
2433     * list, and the type will be NULL.
2434     */
2435    if (this->invariant) {
2436       assert(this->type == NULL);
2437
2438       if (state->current_function != NULL) {
2439          _mesa_glsl_error(& loc, state,
2440                           "All uses of `invariant' keyword must be at global "
2441                           "scope\n");
2442       }
2443
2444       foreach_list_typed (ast_declaration, decl, link, &this->declarations) {
2445          assert(!decl->is_array);
2446          assert(decl->array_size == NULL);
2447          assert(decl->initializer == NULL);
2448
2449          ir_variable *const earlier =
2450             state->symbols->get_variable(decl->identifier);
2451          if (earlier == NULL) {
2452             _mesa_glsl_error(& loc, state,
2453                              "Undeclared variable `%s' cannot be marked "
2454                              "invariant\n", decl->identifier);
2455          } else if ((state->target == vertex_shader)
2456                && (earlier->mode != ir_var_shader_out)) {
2457             _mesa_glsl_error(& loc, state,
2458                              "`%s' cannot be marked invariant, vertex shader "
2459                              "outputs only\n", decl->identifier);
2460          } else if ((state->target == fragment_shader)
2461                && (earlier->mode != ir_var_shader_in)) {
2462             _mesa_glsl_error(& loc, state,
2463                              "`%s' cannot be marked invariant, fragment shader "
2464                              "inputs only\n", decl->identifier);
2465          } else if (earlier->used) {
2466             _mesa_glsl_error(& loc, state,
2467                              "variable `%s' may not be redeclared "
2468                              "`invariant' after being used",
2469                              earlier->name);
2470          } else {
2471             earlier->invariant = true;
2472          }
2473       }
2474
2475       /* Invariant redeclarations do not have r-values.
2476        */
2477       return NULL;
2478    }
2479
2480    assert(this->type != NULL);
2481    assert(!this->invariant);
2482
2483    /* The type specifier may contain a structure definition.  Process that
2484     * before any of the variable declarations.
2485     */
2486    (void) this->type->specifier->hir(instructions, state);
2487
2488    decl_type = this->type->specifier->glsl_type(& type_name, state);
2489    if (this->declarations.is_empty()) {
2490       /* If there is no structure involved in the program text, there are two
2491        * possible scenarios:
2492        *
2493        * - The program text contained something like 'vec4;'.  This is an
2494        *   empty declaration.  It is valid but weird.  Emit a warning.
2495        *
2496        * - The program text contained something like 'S;' and 'S' is not the
2497        *   name of a known structure type.  This is both invalid and weird.
2498        *   Emit an error.
2499        *
2500        * Note that if decl_type is NULL and there is a structure involved,
2501        * there must have been some sort of error with the structure.  In this
2502        * case we assume that an error was already generated on this line of
2503        * code for the structure.  There is no need to generate an additional,
2504        * confusing error.
2505        */
2506       assert(this->type->specifier->structure == NULL || decl_type != NULL
2507              || state->error);
2508       if (this->type->specifier->structure == NULL) {
2509          if (decl_type != NULL) {
2510             _mesa_glsl_warning(&loc, state, "empty declaration");
2511          } else {
2512             _mesa_glsl_error(&loc, state,
2513                              "invalid type `%s' in empty declaration",
2514                              type_name);
2515          }
2516       }
2517    }
2518
2519    foreach_list_typed (ast_declaration, decl, link, &this->declarations) {
2520       const struct glsl_type *var_type;
2521       ir_variable *var;
2522
2523       /* FINISHME: Emit a warning if a variable declaration shadows a
2524        * FINISHME: declaration at a higher scope.
2525        */
2526
2527       if ((decl_type == NULL) || decl_type->is_void()) {
2528          if (type_name != NULL) {
2529             _mesa_glsl_error(& loc, state,
2530                              "invalid type `%s' in declaration of `%s'",
2531                              type_name, decl->identifier);
2532          } else {
2533             _mesa_glsl_error(& loc, state,
2534                              "invalid type in declaration of `%s'",
2535                              decl->identifier);
2536          }
2537          continue;
2538       }
2539
2540       if (decl->is_array) {
2541          var_type = process_array_type(&loc, decl_type, decl->array_size,
2542                                        state);
2543          if (var_type->is_error())
2544             continue;
2545       } else {
2546          var_type = decl_type;
2547       }
2548
2549       var = new(ctx) ir_variable(var_type, decl->identifier, ir_var_auto);
2550
2551       /* From page 22 (page 28 of the PDF) of the GLSL 1.10 specification;
2552        *
2553        *     "Global variables can only use the qualifiers const,
2554        *     attribute, uni form, or varying. Only one may be
2555        *     specified.
2556        *
2557        *     Local variables can only use the qualifier const."
2558        *
2559        * This is relaxed in GLSL 1.30 and GLSL ES 3.00.  It is also relaxed by
2560        * any extension that adds the 'layout' keyword.
2561        */
2562       if (!state->is_version(130, 300)
2563           && !state->ARB_explicit_attrib_location_enable
2564           && !state->ARB_fragment_coord_conventions_enable) {
2565          if (this->type->qualifier.flags.q.out) {
2566             _mesa_glsl_error(& loc, state,
2567                              "`out' qualifier in declaration of `%s' "
2568                              "only valid for function parameters in %s.",
2569                              decl->identifier, state->get_version_string());
2570          }
2571          if (this->type->qualifier.flags.q.in) {
2572             _mesa_glsl_error(& loc, state,
2573                              "`in' qualifier in declaration of `%s' "
2574                              "only valid for function parameters in %s.",
2575                              decl->identifier, state->get_version_string());
2576          }
2577          /* FINISHME: Test for other invalid qualifiers. */
2578       }
2579
2580       apply_type_qualifier_to_variable(& this->type->qualifier, var, state,
2581                                        & loc, this->ubo_qualifiers_valid, false);
2582
2583       if (this->type->qualifier.flags.q.invariant) {
2584          if ((state->target == vertex_shader) &&
2585              var->mode != ir_var_shader_out) {
2586             _mesa_glsl_error(& loc, state,
2587                              "`%s' cannot be marked invariant, vertex shader "
2588                              "outputs only\n", var->name);
2589          } else if ((state->target == fragment_shader) &&
2590                     var->mode != ir_var_shader_in) {
2591             /* FINISHME: Note that this doesn't work for invariant on
2592              * a function signature inval
2593              */
2594             _mesa_glsl_error(& loc, state,
2595                              "`%s' cannot be marked invariant, fragment shader "
2596                              "inputs only\n", var->name);
2597          }
2598       }
2599
2600       if (state->current_function != NULL) {
2601          const char *mode = NULL;
2602          const char *extra = "";
2603
2604          /* There is no need to check for 'inout' here because the parser will
2605           * only allow that in function parameter lists.
2606           */
2607          if (this->type->qualifier.flags.q.attribute) {
2608             mode = "attribute";
2609          } else if (this->type->qualifier.flags.q.uniform) {
2610             mode = "uniform";
2611          } else if (this->type->qualifier.flags.q.varying) {
2612             mode = "varying";
2613          } else if (this->type->qualifier.flags.q.in) {
2614             mode = "in";
2615             extra = " or in function parameter list";
2616          } else if (this->type->qualifier.flags.q.out) {
2617             mode = "out";
2618             extra = " or in function parameter list";
2619          }
2620
2621          if (mode) {
2622             _mesa_glsl_error(& loc, state,
2623                              "%s variable `%s' must be declared at "
2624                              "global scope%s",
2625                              mode, var->name, extra);
2626          }
2627       } else if (var->mode == ir_var_shader_in) {
2628          var->read_only = true;
2629
2630          if (state->target == vertex_shader) {
2631             bool error_emitted = false;
2632
2633             /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec:
2634              *
2635              *    "Vertex shader inputs can only be float, floating-point
2636              *    vectors, matrices, signed and unsigned integers and integer
2637              *    vectors. Vertex shader inputs can also form arrays of these
2638              *    types, but not structures."
2639              *
2640              * From page 31 (page 27 of the PDF) of the GLSL 1.30 spec:
2641              *
2642              *    "Vertex shader inputs can only be float, floating-point
2643              *    vectors, matrices, signed and unsigned integers and integer
2644              *    vectors. They cannot be arrays or structures."
2645              *
2646              * From page 23 (page 29 of the PDF) of the GLSL 1.20 spec:
2647              *
2648              *    "The attribute qualifier can be used only with float,
2649              *    floating-point vectors, and matrices. Attribute variables
2650              *    cannot be declared as arrays or structures."
2651              *
2652              * From page 33 (page 39 of the PDF) of the GLSL ES 3.00 spec:
2653              *
2654              *    "Vertex shader inputs can only be float, floating-point
2655              *    vectors, matrices, signed and unsigned integers and integer
2656              *    vectors. Vertex shader inputs cannot be arrays or
2657              *    structures."
2658              */
2659             const glsl_type *check_type = var->type->is_array()
2660                ? var->type->fields.array : var->type;
2661
2662             switch (check_type->base_type) {
2663             case GLSL_TYPE_FLOAT:
2664                break;
2665             case GLSL_TYPE_UINT:
2666             case GLSL_TYPE_INT:
2667                if (state->is_version(120, 300))
2668                   break;
2669                /* FALLTHROUGH */
2670             default:
2671                _mesa_glsl_error(& loc, state,
2672                                 "vertex shader input / attribute cannot have "
2673                                 "type %s`%s'",
2674                                 var->type->is_array() ? "array of " : "",
2675                                 check_type->name);
2676                error_emitted = true;
2677             }
2678
2679             if (!error_emitted && var->type->is_array() &&
2680                 !state->check_version(140, 0, &loc,
2681                                       "vertex shader input / attribute "
2682                                       "cannot have array type")) {
2683                error_emitted = true;
2684             }
2685          }
2686       }
2687
2688       /* Integer fragment inputs must be qualified with 'flat'.  In GLSL ES,
2689        * so must integer vertex outputs.
2690        *
2691        * From section 4.3.4 ("Inputs") of the GLSL 1.50 spec:
2692        *    "Fragment shader inputs that are signed or unsigned integers or
2693        *    integer vectors must be qualified with the interpolation qualifier
2694        *    flat."
2695        *
2696        * From section 4.3.4 ("Input Variables") of the GLSL 3.00 ES spec:
2697        *    "Fragment shader inputs that are, or contain, signed or unsigned
2698        *    integers or integer vectors must be qualified with the
2699        *    interpolation qualifier flat."
2700        *
2701        * From section 4.3.6 ("Output Variables") of the GLSL 3.00 ES spec:
2702        *    "Vertex shader outputs that are, or contain, signed or unsigned
2703        *    integers or integer vectors must be qualified with the
2704        *    interpolation qualifier flat."
2705        *
2706        * Note that prior to GLSL 1.50, this requirement applied to vertex
2707        * outputs rather than fragment inputs.  That creates problems in the
2708        * presence of geometry shaders, so we adopt the GLSL 1.50 rule for all
2709        * desktop GL shaders.  For GLSL ES shaders, we follow the spec and
2710        * apply the restriction to both vertex outputs and fragment inputs.
2711        *
2712        * Note also that the desktop GLSL specs are missing the text "or
2713        * contain"; this is presumably an oversight, since there is no
2714        * reasonable way to interpolate a fragment shader input that contains
2715        * an integer.
2716        */
2717       if (state->is_version(130, 300) &&
2718           var->type->contains_integer() &&
2719           var->interpolation != INTERP_QUALIFIER_FLAT &&
2720           ((state->target == fragment_shader && var->mode == ir_var_shader_in)
2721            || (state->target == vertex_shader && var->mode == ir_var_shader_out
2722                && state->es_shader))) {
2723          const char *var_type = (state->target == vertex_shader) ?
2724             "vertex output" : "fragment input";
2725          _mesa_glsl_error(&loc, state, "If a %s is (or contains) "
2726                           "an integer, then it must be qualified with 'flat'",
2727                           var_type);
2728       }
2729
2730
2731       /* Interpolation qualifiers cannot be applied to 'centroid' and
2732        * 'centroid varying'.
2733        *
2734        * From page 29 (page 35 of the PDF) of the GLSL 1.30 spec:
2735        *    "interpolation qualifiers may only precede the qualifiers in,
2736        *    centroid in, out, or centroid out in a declaration. They do not apply
2737        *    to the deprecated storage qualifiers varying or centroid varying."
2738        *
2739        * These deprecated storage qualifiers do not exist in GLSL ES 3.00.
2740        */
2741       if (state->is_version(130, 0)
2742           && this->type->qualifier.has_interpolation()
2743           && this->type->qualifier.flags.q.varying) {
2744
2745          const char *i = this->type->qualifier.interpolation_string();
2746          assert(i != NULL);
2747          const char *s;
2748          if (this->type->qualifier.flags.q.centroid)
2749             s = "centroid varying";
2750          else
2751             s = "varying";
2752
2753          _mesa_glsl_error(&loc, state,
2754                           "qualifier '%s' cannot be applied to the "
2755                           "deprecated storage qualifier '%s'", i, s);
2756       }
2757
2758
2759       /* Interpolation qualifiers can only apply to vertex shader outputs and
2760        * fragment shader inputs.
2761        *
2762        * From page 29 (page 35 of the PDF) of the GLSL 1.30 spec:
2763        *    "Outputs from a vertex shader (out) and inputs to a fragment
2764        *    shader (in) can be further qualified with one or more of these
2765        *    interpolation qualifiers"
2766        *
2767        * From page 31 (page 37 of the PDF) of the GLSL ES 3.00 spec:
2768        *    "These interpolation qualifiers may only precede the qualifiers
2769        *    in, centroid in, out, or centroid out in a declaration. They do
2770        *    not apply to inputs into a vertex shader or outputs from a
2771        *    fragment shader."
2772        */
2773       if (state->is_version(130, 300)
2774           && this->type->qualifier.has_interpolation()) {
2775
2776          const char *i = this->type->qualifier.interpolation_string();
2777          assert(i != NULL);
2778
2779          switch (state->target) {
2780          case vertex_shader:
2781             if (this->type->qualifier.flags.q.in) {
2782                _mesa_glsl_error(&loc, state,
2783                                 "qualifier '%s' cannot be applied to vertex "
2784                                 "shader inputs", i);
2785             }
2786             break;
2787          case fragment_shader:
2788             if (this->type->qualifier.flags.q.out) {
2789                _mesa_glsl_error(&loc, state,
2790                                 "qualifier '%s' cannot be applied to fragment "
2791                                 "shader outputs", i);
2792             }
2793             break;
2794          default:
2795             assert(0);
2796          }
2797       }
2798
2799
2800       /* From section 4.3.4 of the GLSL 1.30 spec:
2801        *    "It is an error to use centroid in in a vertex shader."
2802        *
2803        * From section 4.3.4 of the GLSL ES 3.00 spec:
2804        *    "It is an error to use centroid in or interpolation qualifiers in
2805        *    a vertex shader input."
2806        */
2807       if (state->is_version(130, 300)
2808           && this->type->qualifier.flags.q.centroid
2809           && this->type->qualifier.flags.q.in
2810           && state->target == vertex_shader) {
2811
2812          _mesa_glsl_error(&loc, state,
2813                           "'centroid in' cannot be used in a vertex shader");
2814       }
2815
2816
2817       /* Precision qualifiers exists only in GLSL versions 1.00 and >= 1.30.
2818        */
2819       if (this->type->specifier->precision != ast_precision_none) {
2820          state->check_precision_qualifiers_allowed(&loc);
2821       }
2822
2823
2824       /* Precision qualifiers only apply to floating point and integer types.
2825        *
2826        * From section 4.5.2 of the GLSL 1.30 spec:
2827        *    "Any floating point or any integer declaration can have the type
2828        *    preceded by one of these precision qualifiers [...] Literal
2829        *    constants do not have precision qualifiers. Neither do Boolean
2830        *    variables.
2831        *
2832        * In GLSL ES, sampler types are also allowed.
2833        *
2834        * From page 87 of the GLSL ES spec:
2835        *    "RESOLUTION: Allow sampler types to take a precision qualifier."
2836        */
2837       if (this->type->specifier->precision != ast_precision_none
2838           && !var->type->is_float()
2839           && !var->type->is_integer()
2840           && !(var->type->is_sampler() && state->es_shader)
2841           && !(var->type->is_array()
2842                && (var->type->fields.array->is_float()
2843                    || var->type->fields.array->is_integer()))) {
2844
2845          _mesa_glsl_error(&loc, state,
2846                           "precision qualifiers apply only to floating point"
2847                           "%s types", state->es_shader ? ", integer, and sampler"
2848                                                        : "and integer");
2849       }
2850
2851       /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
2852        *
2853        *    "[Sampler types] can only be declared as function
2854        *    parameters or uniform variables (see Section 4.3.5
2855        *    "Uniform")".
2856        */
2857       if (var_type->contains_sampler() &&
2858           !this->type->qualifier.flags.q.uniform) {
2859          _mesa_glsl_error(&loc, state, "samplers must be declared uniform");
2860       }
2861
2862       /* Process the initializer and add its instructions to a temporary
2863        * list.  This list will be added to the instruction stream (below) after
2864        * the declaration is added.  This is done because in some cases (such as
2865        * redeclarations) the declaration may not actually be added to the
2866        * instruction stream.
2867        */
2868       exec_list initializer_instructions;
2869       ir_variable *earlier = get_variable_being_redeclared(var, decl, state);
2870
2871       if (decl->initializer != NULL) {
2872          result = process_initializer((earlier == NULL) ? var : earlier,
2873                                       decl, this->type,
2874                                       &initializer_instructions, state);
2875       }
2876
2877       /* From page 23 (page 29 of the PDF) of the GLSL 1.10 spec:
2878        *
2879        *     "It is an error to write to a const variable outside of
2880        *      its declaration, so they must be initialized when
2881        *      declared."
2882        */
2883       if (this->type->qualifier.flags.q.constant && decl->initializer == NULL) {
2884          _mesa_glsl_error(& loc, state,
2885                           "const declaration of `%s' must be initialized",
2886                           decl->identifier);
2887       }
2888
2889       /* If the declaration is not a redeclaration, there are a few additional
2890        * semantic checks that must be applied.  In addition, variable that was
2891        * created for the declaration should be added to the IR stream.
2892        */
2893       if (earlier == NULL) {
2894          /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
2895           *
2896           *   "Identifiers starting with "gl_" are reserved for use by
2897           *   OpenGL, and may not be declared in a shader as either a
2898           *   variable or a function."
2899           */
2900          if (strncmp(decl->identifier, "gl_", 3) == 0)
2901             _mesa_glsl_error(& loc, state,
2902                              "identifier `%s' uses reserved `gl_' prefix",
2903                              decl->identifier);
2904          else if (strstr(decl->identifier, "__")) {
2905             /* From page 14 (page 20 of the PDF) of the GLSL 1.10
2906              * spec:
2907              *
2908              *     "In addition, all identifiers containing two
2909              *      consecutive underscores (__) are reserved as
2910              *      possible future keywords."
2911              */
2912             _mesa_glsl_error(& loc, state,
2913                              "identifier `%s' uses reserved `__' string",
2914                              decl->identifier);
2915          }
2916
2917          /* Add the variable to the symbol table.  Note that the initializer's
2918           * IR was already processed earlier (though it hasn't been emitted
2919           * yet), without the variable in scope.
2920           *
2921           * This differs from most C-like languages, but it follows the GLSL
2922           * specification.  From page 28 (page 34 of the PDF) of the GLSL 1.50
2923           * spec:
2924           *
2925           *     "Within a declaration, the scope of a name starts immediately
2926           *     after the initializer if present or immediately after the name
2927           *     being declared if not."
2928           */
2929          if (!state->symbols->add_variable(var)) {
2930             YYLTYPE loc = this->get_location();
2931             _mesa_glsl_error(&loc, state, "name `%s' already taken in the "
2932                              "current scope", decl->identifier);
2933             continue;
2934          }
2935
2936          /* Push the variable declaration to the top.  It means that all the
2937           * variable declarations will appear in a funny last-to-first order,
2938           * but otherwise we run into trouble if a function is prototyped, a
2939           * global var is decled, then the function is defined with usage of
2940           * the global var.  See glslparsertest's CorrectModule.frag.
2941           */
2942          instructions->push_head(var);
2943       }
2944
2945       instructions->append_list(&initializer_instructions);
2946    }
2947
2948
2949    /* Generally, variable declarations do not have r-values.  However,
2950     * one is used for the declaration in
2951     *
2952     * while (bool b = some_condition()) {
2953     *   ...
2954     * }
2955     *
2956     * so we return the rvalue from the last seen declaration here.
2957     */
2958    return result;
2959 }
2960
2961
2962 ir_rvalue *
2963 ast_parameter_declarator::hir(exec_list *instructions,
2964                               struct _mesa_glsl_parse_state *state)
2965 {
2966    void *ctx = state;
2967    const struct glsl_type *type;
2968    const char *name = NULL;
2969    YYLTYPE loc = this->get_location();
2970
2971    type = this->type->specifier->glsl_type(& name, state);
2972
2973    if (type == NULL) {
2974       if (name != NULL) {
2975          _mesa_glsl_error(& loc, state,
2976                           "invalid type `%s' in declaration of `%s'",
2977                           name, this->identifier);
2978       } else {
2979          _mesa_glsl_error(& loc, state,
2980                           "invalid type in declaration of `%s'",
2981                           this->identifier);
2982       }
2983
2984       type = glsl_type::error_type;
2985    }
2986
2987    /* From page 62 (page 68 of the PDF) of the GLSL 1.50 spec:
2988     *
2989     *    "Functions that accept no input arguments need not use void in the
2990     *    argument list because prototypes (or definitions) are required and
2991     *    therefore there is no ambiguity when an empty argument list "( )" is
2992     *    declared. The idiom "(void)" as a parameter list is provided for
2993     *    convenience."
2994     *
2995     * Placing this check here prevents a void parameter being set up
2996     * for a function, which avoids tripping up checks for main taking
2997     * parameters and lookups of an unnamed symbol.
2998     */
2999    if (type->is_void()) {
3000       if (this->identifier != NULL)
3001          _mesa_glsl_error(& loc, state,
3002                           "named parameter cannot have type `void'");
3003
3004       is_void = true;
3005       return NULL;
3006    }
3007
3008    if (formal_parameter && (this->identifier == NULL)) {
3009       _mesa_glsl_error(& loc, state, "formal parameter lacks a name");
3010       return NULL;
3011    }
3012
3013    /* This only handles "vec4 foo[..]".  The earlier specifier->glsl_type(...)
3014     * call already handled the "vec4[..] foo" case.
3015     */
3016    if (this->is_array) {
3017       type = process_array_type(&loc, type, this->array_size, state);
3018    }
3019
3020    if (!type->is_error() && type->array_size() == 0) {
3021       _mesa_glsl_error(&loc, state, "arrays passed as parameters must have "
3022                        "a declared size.");
3023       type = glsl_type::error_type;
3024    }
3025
3026    is_void = false;
3027    ir_variable *var = new(ctx)
3028       ir_variable(type, this->identifier, ir_var_function_in);
3029
3030    /* Apply any specified qualifiers to the parameter declaration.  Note that
3031     * for function parameters the default mode is 'in'.
3032     */
3033    apply_type_qualifier_to_variable(& this->type->qualifier, var, state, & loc,
3034                                     false, true);
3035
3036    /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
3037     *
3038     *    "Samplers cannot be treated as l-values; hence cannot be used
3039     *    as out or inout function parameters, nor can they be assigned
3040     *    into."
3041     */
3042    if ((var->mode == ir_var_function_inout || var->mode == ir_var_function_out)
3043        && type->contains_sampler()) {
3044       _mesa_glsl_error(&loc, state, "out and inout parameters cannot contain samplers");
3045       type = glsl_type::error_type;
3046    }
3047
3048    /* From page 39 (page 45 of the PDF) of the GLSL 1.10 spec:
3049     *
3050     *    "When calling a function, expressions that do not evaluate to
3051     *     l-values cannot be passed to parameters declared as out or inout."
3052     *
3053     * From page 32 (page 38 of the PDF) of the GLSL 1.10 spec:
3054     *
3055     *    "Other binary or unary expressions, non-dereferenced arrays,
3056     *     function names, swizzles with repeated fields, and constants
3057     *     cannot be l-values."
3058     *
3059     * So for GLSL 1.10, passing an array as an out or inout parameter is not
3060     * allowed.  This restriction is removed in GLSL 1.20, and in GLSL ES.
3061     */
3062    if ((var->mode == ir_var_function_inout || var->mode == ir_var_function_out)
3063        && type->is_array()
3064        && !state->check_version(120, 100, &loc,
3065                                 "Arrays cannot be out or inout parameters")) {
3066       type = glsl_type::error_type;
3067    }
3068
3069    instructions->push_tail(var);
3070
3071    /* Parameter declarations do not have r-values.
3072     */
3073    return NULL;
3074 }
3075
3076
3077 void
3078 ast_parameter_declarator::parameters_to_hir(exec_list *ast_parameters,
3079                                             bool formal,
3080                                             exec_list *ir_parameters,
3081                                             _mesa_glsl_parse_state *state)
3082 {
3083    ast_parameter_declarator *void_param = NULL;
3084    unsigned count = 0;
3085
3086    foreach_list_typed (ast_parameter_declarator, param, link, ast_parameters) {
3087       param->formal_parameter = formal;
3088       param->hir(ir_parameters, state);
3089
3090       if (param->is_void)
3091          void_param = param;
3092
3093       count++;
3094    }
3095
3096    if ((void_param != NULL) && (count > 1)) {
3097       YYLTYPE loc = void_param->get_location();
3098
3099       _mesa_glsl_error(& loc, state,
3100                        "`void' parameter must be only parameter");
3101    }
3102 }
3103
3104
3105 void
3106 emit_function(_mesa_glsl_parse_state *state, ir_function *f)
3107 {
3108    /* IR invariants disallow function declarations or definitions
3109     * nested within other function definitions.  But there is no
3110     * requirement about the relative order of function declarations
3111     * and definitions with respect to one another.  So simply insert
3112     * the new ir_function block at the end of the toplevel instruction
3113     * list.
3114     */
3115    state->toplevel_ir->push_tail(f);
3116 }
3117
3118
3119 ir_rvalue *
3120 ast_function::hir(exec_list *instructions,
3121                   struct _mesa_glsl_parse_state *state)
3122 {
3123    void *ctx = state;
3124    ir_function *f = NULL;
3125    ir_function_signature *sig = NULL;
3126    exec_list hir_parameters;
3127
3128    const char *const name = identifier;
3129
3130    /* New functions are always added to the top-level IR instruction stream,
3131     * so this instruction list pointer is ignored.  See also emit_function
3132     * (called below).
3133     */
3134    (void) instructions;
3135
3136    /* From page 21 (page 27 of the PDF) of the GLSL 1.20 spec,
3137     *
3138     *   "Function declarations (prototypes) cannot occur inside of functions;
3139     *   they must be at global scope, or for the built-in functions, outside
3140     *   the global scope."
3141     *
3142     * From page 27 (page 33 of the PDF) of the GLSL ES 1.00.16 spec,
3143     *
3144     *   "User defined functions may only be defined within the global scope."
3145     *
3146     * Note that this language does not appear in GLSL 1.10.
3147     */
3148    if ((state->current_function != NULL) &&
3149        state->is_version(120, 100)) {
3150       YYLTYPE loc = this->get_location();
3151       _mesa_glsl_error(&loc, state,
3152                        "declaration of function `%s' not allowed within "
3153                        "function body", name);
3154    }
3155
3156    /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
3157     *
3158     *   "Identifiers starting with "gl_" are reserved for use by
3159     *   OpenGL, and may not be declared in a shader as either a
3160     *   variable or a function."
3161     */
3162    if (strncmp(name, "gl_", 3) == 0) {
3163       YYLTYPE loc = this->get_location();
3164       _mesa_glsl_error(&loc, state,
3165                        "identifier `%s' uses reserved `gl_' prefix", name);
3166    }
3167
3168    /* Convert the list of function parameters to HIR now so that they can be
3169     * used below to compare this function's signature with previously seen
3170     * signatures for functions with the same name.
3171     */
3172    ast_parameter_declarator::parameters_to_hir(& this->parameters,
3173                                                is_definition,
3174                                                & hir_parameters, state);
3175
3176    const char *return_type_name;
3177    const glsl_type *return_type =
3178       this->return_type->specifier->glsl_type(& return_type_name, state);
3179
3180    if (!return_type) {
3181       YYLTYPE loc = this->get_location();
3182       _mesa_glsl_error(&loc, state,
3183                        "function `%s' has undeclared return type `%s'",
3184                        name, return_type_name);
3185       return_type = glsl_type::error_type;
3186    }
3187
3188    /* From page 56 (page 62 of the PDF) of the GLSL 1.30 spec:
3189     * "No qualifier is allowed on the return type of a function."
3190     */
3191    if (this->return_type->has_qualifiers()) {
3192       YYLTYPE loc = this->get_location();
3193       _mesa_glsl_error(& loc, state,
3194                        "function `%s' return type has qualifiers", name);
3195    }
3196
3197    /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
3198     *
3199     *    "[Sampler types] can only be declared as function parameters
3200     *    or uniform variables (see Section 4.3.5 "Uniform")".
3201     */
3202    if (return_type->contains_sampler()) {
3203       YYLTYPE loc = this->get_location();
3204       _mesa_glsl_error(&loc, state,
3205                        "function `%s' return type can't contain a sampler",
3206                        name);
3207    }
3208
3209    /* Verify that this function's signature either doesn't match a previously
3210     * seen signature for a function with the same name, or, if a match is found,
3211     * that the previously seen signature does not have an associated definition.
3212     */
3213    f = state->symbols->get_function(name);
3214    if (f != NULL && (state->es_shader || f->has_user_signature())) {
3215       sig = f->exact_matching_signature(&hir_parameters);
3216       if (sig != NULL) {
3217          const char *badvar = sig->qualifiers_match(&hir_parameters);
3218          if (badvar != NULL) {
3219             YYLTYPE loc = this->get_location();
3220
3221             _mesa_glsl_error(&loc, state, "function `%s' parameter `%s' "
3222                              "qualifiers don't match prototype", name, badvar);
3223          }
3224
3225          if (sig->return_type != return_type) {
3226             YYLTYPE loc = this->get_location();
3227
3228             _mesa_glsl_error(&loc, state, "function `%s' return type doesn't "
3229                              "match prototype", name);
3230          }
3231
3232          if (sig->is_defined) {
3233             if (is_definition) {
3234                YYLTYPE loc = this->get_location();
3235                _mesa_glsl_error(& loc, state, "function `%s' redefined", name);
3236             } else {
3237                /* We just encountered a prototype that exactly matches a
3238                 * function that's already been defined.  This is redundant,
3239                 * and we should ignore it.
3240                 */
3241                return NULL;
3242             }
3243          }
3244       }
3245    } else {
3246       f = new(ctx) ir_function(name);
3247       if (!state->symbols->add_function(f)) {
3248          /* This function name shadows a non-function use of the same name. */
3249          YYLTYPE loc = this->get_location();
3250
3251          _mesa_glsl_error(&loc, state, "function name `%s' conflicts with "
3252                           "non-function", name);
3253          return NULL;
3254       }
3255
3256       emit_function(state, f);
3257    }
3258
3259    /* Verify the return type of main() */
3260    if (strcmp(name, "main") == 0) {
3261       if (! return_type->is_void()) {
3262          YYLTYPE loc = this->get_location();
3263
3264          _mesa_glsl_error(& loc, state, "main() must return void");
3265       }
3266
3267       if (!hir_parameters.is_empty()) {
3268          YYLTYPE loc = this->get_location();
3269
3270          _mesa_glsl_error(& loc, state, "main() must not take any parameters");
3271       }
3272    }
3273
3274    /* Finish storing the information about this new function in its signature.
3275     */
3276    if (sig == NULL) {
3277       sig = new(ctx) ir_function_signature(return_type);
3278       f->add_signature(sig);
3279    }
3280
3281    sig->replace_parameters(&hir_parameters);
3282    signature = sig;
3283
3284    /* Function declarations (prototypes) do not have r-values.
3285     */
3286    return NULL;
3287 }
3288
3289
3290 ir_rvalue *
3291 ast_function_definition::hir(exec_list *instructions,
3292                              struct _mesa_glsl_parse_state *state)
3293 {
3294    prototype->is_definition = true;
3295    prototype->hir(instructions, state);
3296
3297    ir_function_signature *signature = prototype->signature;
3298    if (signature == NULL)
3299       return NULL;
3300
3301    assert(state->current_function == NULL);
3302    state->current_function = signature;
3303    state->found_return = false;
3304
3305    /* Duplicate parameters declared in the prototype as concrete variables.
3306     * Add these to the symbol table.
3307     */
3308    state->symbols->push_scope();
3309    foreach_iter(exec_list_iterator, iter, signature->parameters) {
3310       ir_variable *const var = ((ir_instruction *) iter.get())->as_variable();
3311
3312       assert(var != NULL);
3313
3314       /* The only way a parameter would "exist" is if two parameters have
3315        * the same name.
3316        */
3317       if (state->symbols->name_declared_this_scope(var->name)) {
3318          YYLTYPE loc = this->get_location();
3319
3320          _mesa_glsl_error(& loc, state, "parameter `%s' redeclared", var->name);
3321       } else {
3322          state->symbols->add_variable(var);
3323       }
3324    }
3325
3326    /* Convert the body of the function to HIR. */
3327    this->body->hir(&signature->body, state);
3328    signature->is_defined = true;
3329
3330    state->symbols->pop_scope();
3331
3332    assert(state->current_function == signature);
3333    state->current_function = NULL;
3334
3335    if (!signature->return_type->is_void() && !state->found_return) {
3336       YYLTYPE loc = this->get_location();
3337       _mesa_glsl_error(& loc, state, "function `%s' has non-void return type "
3338                        "%s, but no return statement",
3339                        signature->function_name(),
3340                        signature->return_type->name);
3341    }
3342
3343    /* Function definitions do not have r-values.
3344     */
3345    return NULL;
3346 }
3347
3348
3349 ir_rvalue *
3350 ast_jump_statement::hir(exec_list *instructions,
3351                         struct _mesa_glsl_parse_state *state)
3352 {
3353    void *ctx = state;
3354
3355    switch (mode) {
3356    case ast_return: {
3357       ir_return *inst;
3358       assert(state->current_function);
3359
3360       if (opt_return_value) {
3361          ir_rvalue *const ret = opt_return_value->hir(instructions, state);
3362
3363          /* The value of the return type can be NULL if the shader says
3364           * 'return foo();' and foo() is a function that returns void.
3365           *
3366           * NOTE: The GLSL spec doesn't say that this is an error.  The type
3367           * of the return value is void.  If the return type of the function is
3368           * also void, then this should compile without error.  Seriously.
3369           */
3370          const glsl_type *const ret_type =
3371             (ret == NULL) ? glsl_type::void_type : ret->type;
3372
3373          /* Implicit conversions are not allowed for return values. */
3374          if (state->current_function->return_type != ret_type) {
3375             YYLTYPE loc = this->get_location();
3376
3377             _mesa_glsl_error(& loc, state,
3378                              "`return' with wrong type %s, in function `%s' "
3379                              "returning %s",
3380                              ret_type->name,
3381                              state->current_function->function_name(),
3382                              state->current_function->return_type->name);
3383          }
3384
3385          inst = new(ctx) ir_return(ret);
3386       } else {
3387          if (state->current_function->return_type->base_type !=
3388              GLSL_TYPE_VOID) {
3389             YYLTYPE loc = this->get_location();
3390
3391             _mesa_glsl_error(& loc, state,
3392                              "`return' with no value, in function %s returning "
3393                              "non-void",
3394                              state->current_function->function_name());
3395          }
3396          inst = new(ctx) ir_return;
3397       }
3398
3399       state->found_return = true;
3400       instructions->push_tail(inst);
3401       break;
3402    }
3403
3404    case ast_discard:
3405       if (state->target != fragment_shader) {
3406          YYLTYPE loc = this->get_location();
3407
3408          _mesa_glsl_error(& loc, state,
3409                           "`discard' may only appear in a fragment shader");
3410       }
3411       instructions->push_tail(new(ctx) ir_discard);
3412       break;
3413
3414    case ast_break:
3415    case ast_continue:
3416       if (mode == ast_continue &&
3417           state->loop_nesting_ast == NULL) {
3418          YYLTYPE loc = this->get_location();
3419
3420          _mesa_glsl_error(& loc, state,
3421                           "continue may only appear in a loop");
3422       } else if (mode == ast_break &&
3423                  state->loop_nesting_ast == NULL &&
3424                  state->switch_state.switch_nesting_ast == NULL) {
3425          YYLTYPE loc = this->get_location();
3426
3427          _mesa_glsl_error(& loc, state,
3428                           "break may only appear in a loop or a switch");
3429       } else {
3430          /* For a loop, inline the for loop expression again,
3431           * since we don't know where near the end of
3432           * the loop body the normal copy of it
3433           * is going to be placed.
3434           */
3435          if (state->loop_nesting_ast != NULL &&
3436              mode == ast_continue &&
3437              state->loop_nesting_ast->rest_expression) {
3438             state->loop_nesting_ast->rest_expression->hir(instructions,
3439                                                           state);
3440          }
3441
3442          if (state->switch_state.is_switch_innermost &&
3443              mode == ast_break) {
3444             /* Force break out of switch by setting is_break switch state.
3445              */
3446             ir_variable *const is_break_var = state->switch_state.is_break_var;
3447             ir_dereference_variable *const deref_is_break_var =
3448                new(ctx) ir_dereference_variable(is_break_var);
3449             ir_constant *const true_val = new(ctx) ir_constant(true);
3450             ir_assignment *const set_break_var =
3451                new(ctx) ir_assignment(deref_is_break_var, true_val);
3452             
3453             instructions->push_tail(set_break_var);
3454          }
3455          else {
3456             ir_loop_jump *const jump = 
3457                new(ctx) ir_loop_jump((mode == ast_break)
3458                                      ? ir_loop_jump::jump_break
3459                                      : ir_loop_jump::jump_continue);
3460             instructions->push_tail(jump);
3461          }
3462       }
3463
3464       break;
3465    }
3466
3467    /* Jump instructions do not have r-values.
3468     */
3469    return NULL;
3470 }
3471
3472
3473 ir_rvalue *
3474 ast_selection_statement::hir(exec_list *instructions,
3475                              struct _mesa_glsl_parse_state *state)
3476 {
3477    void *ctx = state;
3478
3479    ir_rvalue *const condition = this->condition->hir(instructions, state);
3480
3481    /* From page 66 (page 72 of the PDF) of the GLSL 1.50 spec:
3482     *
3483     *    "Any expression whose type evaluates to a Boolean can be used as the
3484     *    conditional expression bool-expression. Vector types are not accepted
3485     *    as the expression to if."
3486     *
3487     * The checks are separated so that higher quality diagnostics can be
3488     * generated for cases where both rules are violated.
3489     */
3490    if (!condition->type->is_boolean() || !condition->type->is_scalar()) {
3491       YYLTYPE loc = this->condition->get_location();
3492
3493       _mesa_glsl_error(& loc, state, "if-statement condition must be scalar "
3494                        "boolean");
3495    }
3496
3497    ir_if *const stmt = new(ctx) ir_if(condition);
3498
3499    if (then_statement != NULL) {
3500       state->symbols->push_scope();
3501       then_statement->hir(& stmt->then_instructions, state);
3502       state->symbols->pop_scope();
3503    }
3504
3505    if (else_statement != NULL) {
3506       state->symbols->push_scope();
3507       else_statement->hir(& stmt->else_instructions, state);
3508       state->symbols->pop_scope();
3509    }
3510
3511    instructions->push_tail(stmt);
3512
3513    /* if-statements do not have r-values.
3514     */
3515    return NULL;
3516 }
3517
3518
3519 ir_rvalue *
3520 ast_switch_statement::hir(exec_list *instructions,
3521                           struct _mesa_glsl_parse_state *state)
3522 {
3523    void *ctx = state;
3524
3525    ir_rvalue *const test_expression =
3526       this->test_expression->hir(instructions, state);
3527
3528    /* From page 66 (page 55 of the PDF) of the GLSL 1.50 spec:
3529     *
3530     *    "The type of init-expression in a switch statement must be a 
3531     *     scalar integer." 
3532     */
3533    if (!test_expression->type->is_scalar() ||
3534        !test_expression->type->is_integer()) {
3535       YYLTYPE loc = this->test_expression->get_location();
3536
3537       _mesa_glsl_error(& loc,
3538                        state,
3539                        "switch-statement expression must be scalar "
3540                        "integer");
3541    }
3542
3543    /* Track the switch-statement nesting in a stack-like manner.
3544     */
3545    struct glsl_switch_state saved = state->switch_state;
3546
3547    state->switch_state.is_switch_innermost = true;
3548    state->switch_state.switch_nesting_ast = this;
3549    state->switch_state.labels_ht = hash_table_ctor(0, hash_table_pointer_hash,
3550                                                    hash_table_pointer_compare);
3551    state->switch_state.previous_default = NULL;
3552
3553    /* Initalize is_fallthru state to false.
3554     */
3555    ir_rvalue *const is_fallthru_val = new (ctx) ir_constant(false);
3556    state->switch_state.is_fallthru_var =
3557       new(ctx) ir_variable(glsl_type::bool_type,
3558                            "switch_is_fallthru_tmp",
3559                            ir_var_temporary);
3560    instructions->push_tail(state->switch_state.is_fallthru_var);
3561
3562    ir_dereference_variable *deref_is_fallthru_var =
3563       new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var);
3564    instructions->push_tail(new(ctx) ir_assignment(deref_is_fallthru_var,
3565                                                   is_fallthru_val));
3566
3567    /* Initalize is_break state to false.
3568     */
3569    ir_rvalue *const is_break_val = new (ctx) ir_constant(false);
3570    state->switch_state.is_break_var = new(ctx) ir_variable(glsl_type::bool_type,
3571                                                            "switch_is_break_tmp",
3572                                                            ir_var_temporary);
3573    instructions->push_tail(state->switch_state.is_break_var);
3574
3575    ir_dereference_variable *deref_is_break_var =
3576       new(ctx) ir_dereference_variable(state->switch_state.is_break_var);
3577    instructions->push_tail(new(ctx) ir_assignment(deref_is_break_var,
3578                                                   is_break_val));
3579
3580    /* Cache test expression.
3581     */
3582    test_to_hir(instructions, state);
3583
3584    /* Emit code for body of switch stmt.
3585     */
3586    body->hir(instructions, state);
3587
3588    hash_table_dtor(state->switch_state.labels_ht);
3589
3590    state->switch_state = saved;
3591
3592    /* Switch statements do not have r-values. */
3593    return NULL;
3594 }
3595
3596
3597 void
3598 ast_switch_statement::test_to_hir(exec_list *instructions,
3599                                   struct _mesa_glsl_parse_state *state)
3600 {
3601    void *ctx = state;
3602
3603    /* Cache value of test expression. */
3604    ir_rvalue *const test_val =
3605       test_expression->hir(instructions,
3606                            state);
3607
3608    state->switch_state.test_var = new(ctx) ir_variable(test_val->type,
3609                                                        "switch_test_tmp",
3610                                                        ir_var_temporary);
3611    ir_dereference_variable *deref_test_var =
3612       new(ctx) ir_dereference_variable(state->switch_state.test_var);
3613
3614    instructions->push_tail(state->switch_state.test_var);
3615    instructions->push_tail(new(ctx) ir_assignment(deref_test_var, test_val));
3616 }
3617
3618
3619 ir_rvalue *
3620 ast_switch_body::hir(exec_list *instructions,
3621                      struct _mesa_glsl_parse_state *state)
3622 {
3623    if (stmts != NULL)
3624       stmts->hir(instructions, state);
3625
3626    /* Switch bodies do not have r-values. */
3627    return NULL;
3628 }
3629
3630 ir_rvalue *
3631 ast_case_statement_list::hir(exec_list *instructions,
3632                              struct _mesa_glsl_parse_state *state)
3633 {
3634    foreach_list_typed (ast_case_statement, case_stmt, link, & this->cases)
3635       case_stmt->hir(instructions, state);
3636
3637    /* Case statements do not have r-values. */
3638    return NULL;
3639 }
3640
3641 ir_rvalue *
3642 ast_case_statement::hir(exec_list *instructions,
3643                         struct _mesa_glsl_parse_state *state)
3644 {
3645    labels->hir(instructions, state);
3646
3647    /* Conditionally set fallthru state based on break state. */
3648    ir_constant *const false_val = new(state) ir_constant(false);
3649    ir_dereference_variable *const deref_is_fallthru_var =
3650       new(state) ir_dereference_variable(state->switch_state.is_fallthru_var);
3651    ir_dereference_variable *const deref_is_break_var =
3652       new(state) ir_dereference_variable(state->switch_state.is_break_var);
3653    ir_assignment *const reset_fallthru_on_break =
3654       new(state) ir_assignment(deref_is_fallthru_var,
3655                                false_val,
3656                                deref_is_break_var);
3657    instructions->push_tail(reset_fallthru_on_break);
3658
3659    /* Guard case statements depending on fallthru state. */
3660    ir_dereference_variable *const deref_fallthru_guard =
3661       new(state) ir_dereference_variable(state->switch_state.is_fallthru_var);
3662    ir_if *const test_fallthru = new(state) ir_if(deref_fallthru_guard);
3663
3664    foreach_list_typed (ast_node, stmt, link, & this->stmts)
3665       stmt->hir(& test_fallthru->then_instructions, state);
3666
3667    instructions->push_tail(test_fallthru);
3668
3669    /* Case statements do not have r-values. */
3670    return NULL;
3671 }
3672
3673
3674 ir_rvalue *
3675 ast_case_label_list::hir(exec_list *instructions,
3676                          struct _mesa_glsl_parse_state *state)
3677 {
3678    foreach_list_typed (ast_case_label, label, link, & this->labels)
3679       label->hir(instructions, state);
3680
3681    /* Case labels do not have r-values. */
3682    return NULL;
3683 }
3684
3685 ir_rvalue *
3686 ast_case_label::hir(exec_list *instructions,
3687                     struct _mesa_glsl_parse_state *state)
3688 {
3689    void *ctx = state;
3690
3691    ir_dereference_variable *deref_fallthru_var =
3692       new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var);
3693
3694    ir_rvalue *const true_val = new(ctx) ir_constant(true);
3695
3696    /* If not default case, ... */
3697    if (this->test_value != NULL) {
3698       /* Conditionally set fallthru state based on
3699        * comparison of cached test expression value to case label.
3700        */
3701       ir_rvalue *const label_rval = this->test_value->hir(instructions, state);
3702       ir_constant *label_const = label_rval->constant_expression_value();
3703
3704       if (!label_const) {
3705          YYLTYPE loc = this->test_value->get_location();
3706
3707          _mesa_glsl_error(& loc, state,
3708                           "switch statement case label must be a "
3709                           "constant expression");
3710
3711          /* Stuff a dummy value in to allow processing to continue. */
3712          label_const = new(ctx) ir_constant(0);
3713       } else {
3714          ast_expression *previous_label = (ast_expression *)
3715             hash_table_find(state->switch_state.labels_ht,
3716                             (void *)(uintptr_t)label_const->value.u[0]);
3717
3718          if (previous_label) {
3719             YYLTYPE loc = this->test_value->get_location();
3720             _mesa_glsl_error(& loc, state,
3721                              "duplicate case value");
3722
3723             loc = previous_label->get_location();
3724             _mesa_glsl_error(& loc, state,
3725                              "this is the previous case label");
3726          } else {
3727             hash_table_insert(state->switch_state.labels_ht,
3728                               this->test_value,
3729                               (void *)(uintptr_t)label_const->value.u[0]);
3730          }
3731       }
3732
3733       ir_dereference_variable *deref_test_var =
3734          new(ctx) ir_dereference_variable(state->switch_state.test_var);
3735
3736       ir_rvalue *const test_cond = new(ctx) ir_expression(ir_binop_all_equal,
3737                                                           label_const,
3738                                                           deref_test_var);
3739
3740       ir_assignment *set_fallthru_on_test =
3741          new(ctx) ir_assignment(deref_fallthru_var,
3742                                 true_val,
3743                                 test_cond);
3744
3745       instructions->push_tail(set_fallthru_on_test);
3746    } else { /* default case */
3747       if (state->switch_state.previous_default) {
3748          YYLTYPE loc = this->get_location();
3749          _mesa_glsl_error(& loc, state,
3750                           "multiple default labels in one switch");
3751
3752          loc = state->switch_state.previous_default->get_location();
3753          _mesa_glsl_error(& loc, state,
3754                           "this is the first default label");
3755       }
3756       state->switch_state.previous_default = this;
3757
3758       /* Set falltrhu state. */
3759       ir_assignment *set_fallthru =
3760          new(ctx) ir_assignment(deref_fallthru_var, true_val);
3761
3762       instructions->push_tail(set_fallthru);
3763    }
3764
3765    /* Case statements do not have r-values. */
3766    return NULL;
3767 }
3768
3769 void
3770 ast_iteration_statement::condition_to_hir(ir_loop *stmt,
3771                                           struct _mesa_glsl_parse_state *state)
3772 {
3773    void *ctx = state;
3774
3775    if (condition != NULL) {
3776       ir_rvalue *const cond =
3777          condition->hir(& stmt->body_instructions, state);
3778
3779       if ((cond == NULL)
3780           || !cond->type->is_boolean() || !cond->type->is_scalar()) {
3781          YYLTYPE loc = condition->get_location();
3782
3783          _mesa_glsl_error(& loc, state,
3784                           "loop condition must be scalar boolean");
3785       } else {
3786          /* As the first code in the loop body, generate a block that looks
3787           * like 'if (!condition) break;' as the loop termination condition.
3788           */
3789          ir_rvalue *const not_cond =
3790             new(ctx) ir_expression(ir_unop_logic_not, cond);
3791
3792          ir_if *const if_stmt = new(ctx) ir_if(not_cond);
3793
3794          ir_jump *const break_stmt =
3795             new(ctx) ir_loop_jump(ir_loop_jump::jump_break);
3796
3797          if_stmt->then_instructions.push_tail(break_stmt);
3798          stmt->body_instructions.push_tail(if_stmt);
3799       }
3800    }
3801 }
3802
3803
3804 ir_rvalue *
3805 ast_iteration_statement::hir(exec_list *instructions,
3806                              struct _mesa_glsl_parse_state *state)
3807 {
3808    void *ctx = state;
3809
3810    /* For-loops and while-loops start a new scope, but do-while loops do not.
3811     */
3812    if (mode != ast_do_while)
3813       state->symbols->push_scope();
3814
3815    if (init_statement != NULL)
3816       init_statement->hir(instructions, state);
3817
3818    ir_loop *const stmt = new(ctx) ir_loop();
3819    instructions->push_tail(stmt);
3820
3821    /* Track the current loop nesting. */
3822    ast_iteration_statement *nesting_ast = state->loop_nesting_ast;
3823
3824    state->loop_nesting_ast = this;
3825
3826    /* Likewise, indicate that following code is closest to a loop,
3827     * NOT closest to a switch.
3828     */
3829    bool saved_is_switch_innermost = state->switch_state.is_switch_innermost;
3830    state->switch_state.is_switch_innermost = false;
3831
3832    if (mode != ast_do_while)
3833       condition_to_hir(stmt, state);
3834
3835    if (body != NULL)
3836       body->hir(& stmt->body_instructions, state);
3837
3838    if (rest_expression != NULL)
3839       rest_expression->hir(& stmt->body_instructions, state);
3840
3841    if (mode == ast_do_while)
3842       condition_to_hir(stmt, state);
3843
3844    if (mode != ast_do_while)
3845       state->symbols->pop_scope();
3846
3847    /* Restore previous nesting before returning. */
3848    state->loop_nesting_ast = nesting_ast;
3849    state->switch_state.is_switch_innermost = saved_is_switch_innermost;
3850
3851    /* Loops do not have r-values.
3852     */
3853    return NULL;
3854 }
3855
3856
3857 /**
3858  * Determine if the given type is valid for establishing a default precision
3859  * qualifier.
3860  *
3861  * From GLSL ES 3.00 section 4.5.4 ("Default Precision Qualifiers"):
3862  *
3863  *     "The precision statement
3864  *
3865  *         precision precision-qualifier type;
3866  *
3867  *     can be used to establish a default precision qualifier. The type field
3868  *     can be either int or float or any of the sampler types, and the
3869  *     precision-qualifier can be lowp, mediump, or highp."
3870  *
3871  * GLSL ES 1.00 has similar language.  GLSL 1.30 doesn't allow precision
3872  * qualifiers on sampler types, but this seems like an oversight (since the
3873  * intention of including these in GLSL 1.30 is to allow compatibility with ES
3874  * shaders).  So we allow int, float, and all sampler types regardless of GLSL
3875  * version.
3876  */
3877 static bool
3878 is_valid_default_precision_type(const struct _mesa_glsl_parse_state *state,
3879                                 const char *type_name)
3880 {
3881    const struct glsl_type *type = state->symbols->get_type(type_name);
3882    if (type == NULL)
3883       return false;
3884
3885    switch (type->base_type) {
3886    case GLSL_TYPE_INT:
3887    case GLSL_TYPE_FLOAT:
3888       /* "int" and "float" are valid, but vectors and matrices are not. */
3889       return type->vector_elements == 1 && type->matrix_columns == 1;
3890    case GLSL_TYPE_SAMPLER:
3891       return true;
3892    default:
3893       return false;
3894    }
3895 }
3896
3897
3898 ir_rvalue *
3899 ast_type_specifier::hir(exec_list *instructions,
3900                           struct _mesa_glsl_parse_state *state)
3901 {
3902    if (!this->is_precision_statement && this->structure == NULL)
3903       return NULL;
3904
3905    YYLTYPE loc = this->get_location();
3906
3907    if (this->precision != ast_precision_none
3908        && !state->check_precision_qualifiers_allowed(&loc)) {
3909       return NULL;
3910    }
3911    if (this->precision != ast_precision_none
3912        && this->structure != NULL) {
3913       _mesa_glsl_error(&loc, state,
3914                        "precision qualifiers do not apply to structures");
3915       return NULL;
3916    }
3917
3918    /* If this is a precision statement, check that the type to which it is
3919     * applied is either float or int.
3920     *
3921     * From section 4.5.3 of the GLSL 1.30 spec:
3922     *    "The precision statement
3923     *       precision precision-qualifier type;
3924     *    can be used to establish a default precision qualifier. The type
3925     *    field can be either int or float [...].  Any other types or
3926     *    qualifiers will result in an error.
3927     */
3928    if (this->is_precision_statement) {
3929       assert(this->precision != ast_precision_none);
3930       assert(this->structure == NULL); /* The check for structures was
3931                                         * performed above. */
3932       if (this->is_array) {
3933          _mesa_glsl_error(&loc, state,
3934                           "default precision statements do not apply to "
3935                           "arrays");
3936          return NULL;
3937       }
3938       if (!is_valid_default_precision_type(state, this->type_name)) {
3939          _mesa_glsl_error(&loc, state,
3940                           "default precision statements apply only to types "
3941                           "float, int, and sampler types");
3942          return NULL;
3943       }
3944
3945       /* FINISHME: Translate precision statements into IR. */
3946       return NULL;
3947    }
3948
3949    if (this->structure != NULL)
3950       return this->structure->hir(instructions, state);
3951
3952    return NULL;
3953 }
3954
3955
3956 /**
3957  * Process a structure or interface block tree into an array of structure fields
3958  *
3959  * After parsing, where there are some syntax differnces, structures and
3960  * interface blocks are almost identical.  They are similar enough that the
3961  * AST for each can be processed the same way into a set of
3962  * \c glsl_struct_field to describe the members.
3963  *
3964  * \return
3965  * The number of fields processed.  A pointer to the array structure fields is
3966  * stored in \c *fields_ret.
3967  */
3968 unsigned
3969 ast_process_structure_or_interface_block(exec_list *instructions,
3970                                          struct _mesa_glsl_parse_state *state,
3971                                          exec_list *declarations,
3972                                          YYLTYPE &loc,
3973                                          glsl_struct_field **fields_ret,
3974                                          bool is_interface,
3975                                          bool block_row_major)
3976 {
3977    unsigned decl_count = 0;
3978
3979    /* Make an initial pass over the list of fields to determine how
3980     * many there are.  Each element in this list is an ast_declarator_list.
3981     * This means that we actually need to count the number of elements in the
3982     * 'declarations' list in each of the elements.
3983     */
3984    foreach_list_typed (ast_declarator_list, decl_list, link, declarations) {
3985       foreach_list_const (decl_ptr, & decl_list->declarations) {
3986          decl_count++;
3987       }
3988    }
3989
3990    /* Allocate storage for the fields and process the field
3991     * declarations.  As the declarations are processed, try to also convert
3992     * the types to HIR.  This ensures that structure definitions embedded in
3993     * other structure definitions or in interface blocks are processed.
3994     */
3995    glsl_struct_field *const fields = ralloc_array(state, glsl_struct_field,
3996                                                   decl_count);
3997
3998    unsigned i = 0;
3999    foreach_list_typed (ast_declarator_list, decl_list, link, declarations) {
4000       const char *type_name;
4001
4002       decl_list->type->specifier->hir(instructions, state);
4003
4004       /* Section 10.9 of the GLSL ES 1.00 specification states that
4005        * embedded structure definitions have been removed from the language.
4006        */
4007       if (state->es_shader && decl_list->type->specifier->structure != NULL) {
4008          _mesa_glsl_error(&loc, state, "Embedded structure definitions are "
4009                           "not allowed in GLSL ES 1.00.");
4010       }
4011
4012       const glsl_type *decl_type =
4013          decl_list->type->specifier->glsl_type(& type_name, state);
4014
4015       foreach_list_typed (ast_declaration, decl, link,
4016                           &decl_list->declarations) {
4017          /* From the GL_ARB_uniform_buffer_object spec:
4018           *
4019           *     "Sampler types are not allowed inside of uniform
4020           *      blocks. All other types, arrays, and structures
4021           *      allowed for uniforms are allowed within a uniform
4022           *      block."
4023           *
4024           * It should be impossible for decl_type to be NULL here.  Cases that
4025           * might naturally lead to decl_type being NULL, especially for the
4026           * is_interface case, will have resulted in compilation having
4027           * already halted due to a syntax error.
4028           */
4029          const struct glsl_type *field_type =
4030             decl_type != NULL ? decl_type : glsl_type::error_type;
4031
4032          if (is_interface && field_type->contains_sampler()) {
4033             YYLTYPE loc = decl_list->get_location();
4034             _mesa_glsl_error(&loc, state,
4035                              "Uniform in non-default uniform block contains sampler\n");
4036          }
4037
4038          const struct ast_type_qualifier *const qual =
4039             & decl_list->type->qualifier;
4040          if (qual->flags.q.std140 ||
4041              qual->flags.q.packed ||
4042              qual->flags.q.shared) {
4043             _mesa_glsl_error(&loc, state,
4044                              "uniform block layout qualifiers std140, packed, and "
4045                              "shared can only be applied to uniform blocks, not "
4046                              "members");
4047          }
4048
4049          if (decl->is_array) {
4050             field_type = process_array_type(&loc, decl_type, decl->array_size,
4051                                             state);
4052          }
4053          fields[i].type = field_type;
4054          fields[i].name = decl->identifier;
4055
4056          if (qual->flags.q.row_major || qual->flags.q.column_major) {
4057             if (!field_type->is_matrix() && !field_type->is_record()) {
4058                _mesa_glsl_error(&loc, state,
4059                                 "uniform block layout qualifiers row_major and "
4060                                 "column_major can only be applied to matrix and "
4061                                 "structure types");
4062             } else
4063                validate_matrix_layout_for_type(state, &loc, field_type);
4064          }
4065
4066          if (qual->flags.q.uniform && qual->has_interpolation()) {
4067             _mesa_glsl_error(&loc, state,
4068                              "interpolation qualifiers cannot be used "
4069                              "with uniform interface blocks");
4070          }
4071
4072          if (field_type->is_matrix() ||
4073              (field_type->is_array() && field_type->fields.array->is_matrix())) {
4074             fields[i].row_major = block_row_major;
4075             if (qual->flags.q.row_major)
4076                fields[i].row_major = true;
4077             else if (qual->flags.q.column_major)
4078                fields[i].row_major = false;
4079          }
4080
4081          i++;
4082       }
4083    }
4084
4085    assert(i == decl_count);
4086
4087    *fields_ret = fields;
4088    return decl_count;
4089 }
4090
4091
4092 ir_rvalue *
4093 ast_struct_specifier::hir(exec_list *instructions,
4094                           struct _mesa_glsl_parse_state *state)
4095 {
4096    YYLTYPE loc = this->get_location();
4097    glsl_struct_field *fields;
4098    unsigned decl_count =
4099       ast_process_structure_or_interface_block(instructions,
4100                                                state,
4101                                                &this->declarations,
4102                                                loc,
4103                                                &fields,
4104                                                false,
4105                                                false);
4106
4107    const glsl_type *t =
4108       glsl_type::get_record_instance(fields, decl_count, this->name);
4109
4110    if (!state->symbols->add_type(name, t)) {
4111       _mesa_glsl_error(& loc, state, "struct `%s' previously defined", name);
4112    } else {
4113       const glsl_type **s = reralloc(state, state->user_structures,
4114                                      const glsl_type *,
4115                                      state->num_user_structures + 1);
4116       if (s != NULL) {
4117          s[state->num_user_structures] = t;
4118          state->user_structures = s;
4119          state->num_user_structures++;
4120       }
4121    }
4122
4123    /* Structure type definitions do not have r-values.
4124     */
4125    return NULL;
4126 }
4127
4128 ir_rvalue *
4129 ast_interface_block::hir(exec_list *instructions,
4130                           struct _mesa_glsl_parse_state *state)
4131 {
4132    YYLTYPE loc = this->get_location();
4133
4134    /* The ast_interface_block has a list of ast_declarator_lists.  We
4135     * need to turn those into ir_variables with an association
4136     * with this uniform block.
4137     */
4138    enum glsl_interface_packing packing;
4139    if (this->layout.flags.q.shared) {
4140       packing = GLSL_INTERFACE_PACKING_SHARED;
4141    } else if (this->layout.flags.q.packed) {
4142       packing = GLSL_INTERFACE_PACKING_PACKED;
4143    } else {
4144       /* The default layout is std140.
4145        */
4146       packing = GLSL_INTERFACE_PACKING_STD140;
4147    }
4148
4149    bool block_row_major = this->layout.flags.q.row_major;
4150    exec_list declared_variables;
4151    glsl_struct_field *fields;
4152    unsigned int num_variables =
4153       ast_process_structure_or_interface_block(&declared_variables,
4154                                                state,
4155                                                &this->declarations,
4156                                                loc,
4157                                                &fields,
4158                                                true,
4159                                                block_row_major);
4160
4161    const glsl_type *block_type =
4162       glsl_type::get_interface_instance(fields,
4163                                         num_variables,
4164                                         packing,
4165                                         this->block_name);
4166
4167    if (!state->symbols->add_type(block_type->name, block_type)) {
4168       YYLTYPE loc = this->get_location();
4169       _mesa_glsl_error(&loc, state, "Uniform block name `%s' already taken in "
4170                        "the current scope.\n", this->block_name);
4171    }
4172
4173    /* Since interface blocks cannot contain statements, it should be
4174     * impossible for the block to generate any instructions.
4175     */
4176    assert(declared_variables.is_empty());
4177
4178    /* Page 39 (page 45 of the PDF) of section 4.3.7 in the GLSL ES 3.00 spec
4179     * says:
4180     *
4181     *     "If an instance name (instance-name) is used, then it puts all the
4182     *     members inside a scope within its own name space, accessed with the
4183     *     field selector ( . ) operator (analogously to structures)."
4184     */
4185    if (this->instance_name) {
4186       ir_variable *var;
4187
4188       if (this->array_size != NULL) {
4189          const glsl_type *block_array_type =
4190             process_array_type(&loc, block_type, this->array_size, state);
4191
4192          var = new(state) ir_variable(block_array_type,
4193                                       this->instance_name,
4194                                       ir_var_uniform);
4195       } else {
4196          var = new(state) ir_variable(block_type,
4197                                       this->instance_name,
4198                                       ir_var_uniform);
4199       }
4200
4201       var->interface_type = block_type;
4202       state->symbols->add_variable(var);
4203       instructions->push_tail(var);
4204    } else {
4205       /* In order to have an array size, the block must also be declared with
4206        * an instane name.
4207        */
4208       assert(this->array_size == NULL);
4209
4210       for (unsigned i = 0; i < num_variables; i++) {
4211          ir_variable *var =
4212             new(state) ir_variable(fields[i].type,
4213                                    ralloc_strdup(state, fields[i].name),
4214                                    ir_var_uniform);
4215          var->interface_type = block_type;
4216
4217          state->symbols->add_variable(var);
4218          instructions->push_tail(var);
4219       }
4220    }
4221
4222    return NULL;
4223 }
4224
4225 static void
4226 detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
4227                                exec_list *instructions)
4228 {
4229    bool gl_FragColor_assigned = false;
4230    bool gl_FragData_assigned = false;
4231    bool user_defined_fs_output_assigned = false;
4232    ir_variable *user_defined_fs_output = NULL;
4233
4234    /* It would be nice to have proper location information. */
4235    YYLTYPE loc;
4236    memset(&loc, 0, sizeof(loc));
4237
4238    foreach_list(node, instructions) {
4239       ir_variable *var = ((ir_instruction *)node)->as_variable();
4240
4241       if (!var || !var->assigned)
4242          continue;
4243
4244       if (strcmp(var->name, "gl_FragColor") == 0)
4245          gl_FragColor_assigned = true;
4246       else if (strcmp(var->name, "gl_FragData") == 0)
4247          gl_FragData_assigned = true;
4248       else if (strncmp(var->name, "gl_", 3) != 0) {
4249          if (state->target == fragment_shader &&
4250              var->mode == ir_var_shader_out) {
4251             user_defined_fs_output_assigned = true;
4252             user_defined_fs_output = var;
4253          }
4254       }
4255    }
4256
4257    /* From the GLSL 1.30 spec:
4258     *
4259     *     "If a shader statically assigns a value to gl_FragColor, it
4260     *      may not assign a value to any element of gl_FragData. If a
4261     *      shader statically writes a value to any element of
4262     *      gl_FragData, it may not assign a value to
4263     *      gl_FragColor. That is, a shader may assign values to either
4264     *      gl_FragColor or gl_FragData, but not both. Multiple shaders
4265     *      linked together must also consistently write just one of
4266     *      these variables.  Similarly, if user declared output
4267     *      variables are in use (statically assigned to), then the
4268     *      built-in variables gl_FragColor and gl_FragData may not be
4269     *      assigned to. These incorrect usages all generate compile
4270     *      time errors."
4271     */
4272    if (gl_FragColor_assigned && gl_FragData_assigned) {
4273       _mesa_glsl_error(&loc, state, "fragment shader writes to both "
4274                        "`gl_FragColor' and `gl_FragData'\n");
4275    } else if (gl_FragColor_assigned && user_defined_fs_output_assigned) {
4276       _mesa_glsl_error(&loc, state, "fragment shader writes to both "
4277                        "`gl_FragColor' and `%s'\n",
4278                        user_defined_fs_output->name);
4279    } else if (gl_FragData_assigned && user_defined_fs_output_assigned) {
4280       _mesa_glsl_error(&loc, state, "fragment shader writes to both "
4281                        "`gl_FragData' and `%s'\n",
4282                        user_defined_fs_output->name);
4283    }
4284 }