Subversion Repositories Kolibri OS

Rev

Rev 4358 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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