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