Home | History | Annotate | Download | only in glsl
      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 linker.cpp
     26  * GLSL linker implementation
     27  *
     28  * Given a set of shaders that are to be linked to generate a final program,
     29  * there are three distinct stages.
     30  *
     31  * In the first stage shaders are partitioned into groups based on the shader
     32  * type.  All shaders of a particular type (e.g., vertex shaders) are linked
     33  * together.
     34  *
     35  *   - Undefined references in each shader are resolve to definitions in
     36  *     another shader.
     37  *   - Types and qualifiers of uniforms, outputs, and global variables defined
     38  *     in multiple shaders with the same name are verified to be the same.
     39  *   - Initializers for uniforms and global variables defined
     40  *     in multiple shaders with the same name are verified to be the same.
     41  *
     42  * The result, in the terminology of the GLSL spec, is a set of shader
     43  * executables for each processing unit.
     44  *
     45  * After the first stage is complete, a series of semantic checks are performed
     46  * on each of the shader executables.
     47  *
     48  *   - Each shader executable must define a \c main function.
     49  *   - Each vertex shader executable must write to \c gl_Position.
     50  *   - Each fragment shader executable must write to either \c gl_FragData or
     51  *     \c gl_FragColor.
     52  *
     53  * In the final stage individual shader executables are linked to create a
     54  * complete exectuable.
     55  *
     56  *   - Types of uniforms defined in multiple shader stages with the same name
     57  *     are verified to be the same.
     58  *   - Initializers for uniforms defined in multiple shader stages with the
     59  *     same name are verified to be the same.
     60  *   - Types and qualifiers of outputs defined in one stage are verified to
     61  *     be the same as the types and qualifiers of inputs defined with the same
     62  *     name in a later stage.
     63  *
     64  * \author Ian Romanick <ian.d.romanick (at) intel.com>
     65  */
     66 
     67 #include "main/core.h"
     68 #include "glsl_symbol_table.h"
     69 #include "ir.h"
     70 #include "program.h"
     71 #include "program/hash_table.h"
     72 #include "linker.h"
     73 #include "ir_optimization.h"
     74 
     75 extern "C" {
     76 #include "main/shaderobj.h"
     77 }
     78 
     79 /**
     80  * Visitor that determines whether or not a variable is ever written.
     81  */
     82 class find_assignment_visitor : public ir_hierarchical_visitor {
     83 public:
     84    find_assignment_visitor(const char *name)
     85       : name(name), found(false)
     86    {
     87       /* empty */
     88    }
     89 
     90    virtual ir_visitor_status visit_enter(ir_assignment *ir)
     91    {
     92       ir_variable *const var = ir->lhs->variable_referenced();
     93 
     94       if (strcmp(name, var->name) == 0) {
     95 	 found = true;
     96 	 return visit_stop;
     97       }
     98 
     99       return visit_continue_with_parent;
    100    }
    101 
    102    virtual ir_visitor_status visit_enter(ir_call *ir)
    103    {
    104       exec_list_iterator sig_iter = ir->callee->parameters.iterator();
    105       foreach_iter(exec_list_iterator, iter, *ir) {
    106 	 ir_rvalue *param_rval = (ir_rvalue *)iter.get();
    107 	 ir_variable *sig_param = (ir_variable *)sig_iter.get();
    108 
    109 	 if (sig_param->mode == ir_var_out ||
    110 	     sig_param->mode == ir_var_inout) {
    111 	    ir_variable *var = param_rval->variable_referenced();
    112 	    if (var && strcmp(name, var->name) == 0) {
    113 	       found = true;
    114 	       return visit_stop;
    115 	    }
    116 	 }
    117 	 sig_iter.next();
    118       }
    119 
    120       if (ir->return_deref != NULL) {
    121 	 ir_variable *const var = ir->return_deref->variable_referenced();
    122 
    123 	 if (strcmp(name, var->name) == 0) {
    124 	    found = true;
    125 	    return visit_stop;
    126 	 }
    127       }
    128 
    129       return visit_continue_with_parent;
    130    }
    131 
    132    bool variable_found()
    133    {
    134       return found;
    135    }
    136 
    137 private:
    138    const char *name;       /**< Find writes to a variable with this name. */
    139    bool found;             /**< Was a write to the variable found? */
    140 };
    141 
    142 
    143 /**
    144  * Visitor that determines whether or not a variable is ever read.
    145  */
    146 class find_deref_visitor : public ir_hierarchical_visitor {
    147 public:
    148    find_deref_visitor(const char *name)
    149       : name(name), found(false)
    150    {
    151       /* empty */
    152    }
    153 
    154    virtual ir_visitor_status visit(ir_dereference_variable *ir)
    155    {
    156       if (strcmp(this->name, ir->var->name) == 0) {
    157 	 this->found = true;
    158 	 return visit_stop;
    159       }
    160 
    161       return visit_continue;
    162    }
    163 
    164    bool variable_found() const
    165    {
    166       return this->found;
    167    }
    168 
    169 private:
    170    const char *name;       /**< Find writes to a variable with this name. */
    171    bool found;             /**< Was a write to the variable found? */
    172 };
    173 
    174 
    175 void
    176 linker_error(gl_shader_program *prog, const char *fmt, ...)
    177 {
    178    va_list ap;
    179 
    180    ralloc_strcat(&prog->InfoLog, "error: ");
    181    va_start(ap, fmt);
    182    ralloc_vasprintf_append(&prog->InfoLog, fmt, ap);
    183    va_end(ap);
    184 
    185    prog->LinkStatus = false;
    186 }
    187 
    188 
    189 void
    190 linker_warning(gl_shader_program *prog, const char *fmt, ...)
    191 {
    192    va_list ap;
    193 
    194    ralloc_strcat(&prog->InfoLog, "error: ");
    195    va_start(ap, fmt);
    196    ralloc_vasprintf_append(&prog->InfoLog, fmt, ap);
    197    va_end(ap);
    198 
    199 }
    200 
    201 
    202 void
    203 link_invalidate_variable_locations(gl_shader *sh, enum ir_variable_mode mode,
    204 				   int generic_base)
    205 {
    206    foreach_list(node, sh->ir) {
    207       ir_variable *const var = ((ir_instruction *) node)->as_variable();
    208 
    209       if ((var == NULL) || (var->mode != (unsigned) mode))
    210 	 continue;
    211 
    212       /* Only assign locations for generic attributes / varyings / etc.
    213        */
    214       if ((var->location >= generic_base) && !var->explicit_location)
    215 	  var->location = -1;
    216    }
    217 }
    218 
    219 
    220 /**
    221  * Determine the number of attribute slots required for a particular type
    222  *
    223  * This code is here because it implements the language rules of a specific
    224  * GLSL version.  Since it's a property of the language and not a property of
    225  * types in general, it doesn't really belong in glsl_type.
    226  */
    227 unsigned
    228 count_attribute_slots(const glsl_type *t)
    229 {
    230    /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec:
    231     *
    232     *     "A scalar input counts the same amount against this limit as a vec4,
    233     *     so applications may want to consider packing groups of four
    234     *     unrelated float inputs together into a vector to better utilize the
    235     *     capabilities of the underlying hardware. A matrix input will use up
    236     *     multiple locations.  The number of locations used will equal the
    237     *     number of columns in the matrix."
    238     *
    239     * The spec does not explicitly say how arrays are counted.  However, it
    240     * should be safe to assume the total number of slots consumed by an array
    241     * is the number of entries in the array multiplied by the number of slots
    242     * consumed by a single element of the array.
    243     */
    244 
    245    if (t->is_array())
    246       return t->array_size() * count_attribute_slots(t->element_type());
    247 
    248    if (t->is_matrix())
    249       return t->matrix_columns;
    250 
    251    return 1;
    252 }
    253 
    254 
    255 /**
    256  * Verify that a vertex shader executable meets all semantic requirements.
    257  *
    258  * Also sets prog->Vert.UsesClipDistance and prog->Vert.ClipDistanceArraySize
    259  * as a side effect.
    260  *
    261  * \param shader  Vertex shader executable to be verified
    262  */
    263 bool
    264 validate_vertex_shader_executable(struct gl_shader_program *prog,
    265 				  struct gl_shader *shader)
    266 {
    267    if (shader == NULL)
    268       return true;
    269 
    270    /* From the GLSL 1.10 spec, page 48:
    271     *
    272     *     "The variable gl_Position is available only in the vertex
    273     *      language and is intended for writing the homogeneous vertex
    274     *      position. All executions of a well-formed vertex shader
    275     *      executable must write a value into this variable. [...] The
    276     *      variable gl_Position is available only in the vertex
    277     *      language and is intended for writing the homogeneous vertex
    278     *      position. All executions of a well-formed vertex shader
    279     *      executable must write a value into this variable."
    280     *
    281     * while in GLSL 1.40 this text is changed to:
    282     *
    283     *     "The variable gl_Position is available only in the vertex
    284     *      language and is intended for writing the homogeneous vertex
    285     *      position. It can be written at any time during shader
    286     *      execution. It may also be read back by a vertex shader
    287     *      after being written. This value will be used by primitive
    288     *      assembly, clipping, culling, and other fixed functionality
    289     *      operations, if present, that operate on primitives after
    290     *      vertex processing has occurred. Its value is undefined if
    291     *      the vertex shader executable does not write gl_Position."
    292     */
    293    if (prog->Version < 140) {
    294       find_assignment_visitor find("gl_Position");
    295       find.run(shader->ir);
    296       if (!find.variable_found()) {
    297 	 linker_error(prog, "vertex shader does not write to `gl_Position'\n");
    298 	 return false;
    299       }
    300    }
    301 
    302    prog->Vert.ClipDistanceArraySize = 0;
    303 
    304    if (prog->Version >= 130) {
    305       /* From section 7.1 (Vertex Shader Special Variables) of the
    306        * GLSL 1.30 spec:
    307        *
    308        *   "It is an error for a shader to statically write both
    309        *   gl_ClipVertex and gl_ClipDistance."
    310        */
    311       find_assignment_visitor clip_vertex("gl_ClipVertex");
    312       find_assignment_visitor clip_distance("gl_ClipDistance");
    313 
    314       clip_vertex.run(shader->ir);
    315       clip_distance.run(shader->ir);
    316       if (clip_vertex.variable_found() && clip_distance.variable_found()) {
    317          linker_error(prog, "vertex shader writes to both `gl_ClipVertex' "
    318                       "and `gl_ClipDistance'\n");
    319          return false;
    320       }
    321       prog->Vert.UsesClipDistance = clip_distance.variable_found();
    322       ir_variable *clip_distance_var =
    323          shader->symbols->get_variable("gl_ClipDistance");
    324       if (clip_distance_var)
    325          prog->Vert.ClipDistanceArraySize = clip_distance_var->type->length;
    326    }
    327 
    328    return true;
    329 }
    330 
    331 
    332 /**
    333  * Verify that a fragment shader executable meets all semantic requirements
    334  *
    335  * \param shader  Fragment shader executable to be verified
    336  */
    337 bool
    338 validate_fragment_shader_executable(struct gl_shader_program *prog,
    339 				    struct gl_shader *shader)
    340 {
    341    if (shader == NULL)
    342       return true;
    343 
    344    find_assignment_visitor frag_color("gl_FragColor");
    345    find_assignment_visitor frag_data("gl_FragData");
    346 
    347    frag_color.run(shader->ir);
    348    frag_data.run(shader->ir);
    349 
    350    if (frag_color.variable_found() && frag_data.variable_found()) {
    351       linker_error(prog,  "fragment shader writes to both "
    352 		   "`gl_FragColor' and `gl_FragData'\n");
    353       return false;
    354    }
    355 
    356    return true;
    357 }
    358 
    359 
    360 /**
    361  * Generate a string describing the mode of a variable
    362  */
    363 static const char *
    364 mode_string(const ir_variable *var)
    365 {
    366    switch (var->mode) {
    367    case ir_var_auto:
    368       return (var->read_only) ? "global constant" : "global variable";
    369 
    370    case ir_var_uniform: return "uniform";
    371    case ir_var_in:      return "shader input";
    372    case ir_var_out:     return "shader output";
    373    case ir_var_inout:   return "shader inout";
    374 
    375    case ir_var_const_in:
    376    case ir_var_temporary:
    377    default:
    378       assert(!"Should not get here.");
    379       return "invalid variable";
    380    }
    381 }
    382 
    383 
    384 /**
    385  * Perform validation of global variables used across multiple shaders
    386  */
    387 bool
    388 cross_validate_globals(struct gl_shader_program *prog,
    389 		       struct gl_shader **shader_list,
    390 		       unsigned num_shaders,
    391 		       bool uniforms_only)
    392 {
    393    /* Examine all of the uniforms in all of the shaders and cross validate
    394     * them.
    395     */
    396    glsl_symbol_table variables;
    397    for (unsigned i = 0; i < num_shaders; i++) {
    398       if (shader_list[i] == NULL)
    399 	 continue;
    400 
    401       foreach_list(node, shader_list[i]->ir) {
    402 	 ir_variable *const var = ((ir_instruction *) node)->as_variable();
    403 
    404 	 if (var == NULL)
    405 	    continue;
    406 
    407 	 if (uniforms_only && (var->mode != ir_var_uniform))
    408 	    continue;
    409 
    410 	 /* Don't cross validate temporaries that are at global scope.  These
    411 	  * will eventually get pulled into the shaders 'main'.
    412 	  */
    413 	 if (var->mode == ir_var_temporary)
    414 	    continue;
    415 
    416 	 /* If a global with this name has already been seen, verify that the
    417 	  * new instance has the same type.  In addition, if the globals have
    418 	  * initializers, the values of the initializers must be the same.
    419 	  */
    420 	 ir_variable *const existing = variables.get_variable(var->name);
    421 	 if (existing != NULL) {
    422 	    if (var->type != existing->type) {
    423 	       /* Consider the types to be "the same" if both types are arrays
    424 		* of the same type and one of the arrays is implicitly sized.
    425 		* In addition, set the type of the linked variable to the
    426 		* explicitly sized array.
    427 		*/
    428 	       if (var->type->is_array()
    429 		   && existing->type->is_array()
    430 		   && (var->type->fields.array == existing->type->fields.array)
    431 		   && ((var->type->length == 0)
    432 		       || (existing->type->length == 0))) {
    433 		  if (var->type->length != 0) {
    434 		     existing->type = var->type;
    435 		  }
    436 	       } else {
    437 		  linker_error(prog, "%s `%s' declared as type "
    438 			       "`%s' and type `%s'\n",
    439 			       mode_string(var),
    440 			       var->name, var->type->name,
    441 			       existing->type->name);
    442 		  return false;
    443 	       }
    444 	    }
    445 
    446 	    if (var->explicit_location) {
    447 	       if (existing->explicit_location
    448 		   && (var->location != existing->location)) {
    449 		     linker_error(prog, "explicit locations for %s "
    450 				  "`%s' have differing values\n",
    451 				  mode_string(var), var->name);
    452 		     return false;
    453 	       }
    454 
    455 	       existing->location = var->location;
    456 	       existing->explicit_location = true;
    457 	    }
    458 
    459 	    /* Validate layout qualifiers for gl_FragDepth.
    460 	     *
    461 	     * From the AMD/ARB_conservative_depth specs:
    462 	     *
    463 	     *    "If gl_FragDepth is redeclared in any fragment shader in a
    464 	     *    program, it must be redeclared in all fragment shaders in
    465 	     *    that program that have static assignments to
    466 	     *    gl_FragDepth. All redeclarations of gl_FragDepth in all
    467 	     *    fragment shaders in a single program must have the same set
    468 	     *    of qualifiers."
    469 	     */
    470 	    if (strcmp(var->name, "gl_FragDepth") == 0) {
    471 	       bool layout_declared = var->depth_layout != ir_depth_layout_none;
    472 	       bool layout_differs =
    473 		  var->depth_layout != existing->depth_layout;
    474 
    475 	       if (layout_declared && layout_differs) {
    476 		  linker_error(prog,
    477 			       "All redeclarations of gl_FragDepth in all "
    478 			       "fragment shaders in a single program must have "
    479 			       "the same set of qualifiers.");
    480 	       }
    481 
    482 	       if (var->used && layout_differs) {
    483 		  linker_error(prog,
    484 			       "If gl_FragDepth is redeclared with a layout "
    485 			       "qualifier in any fragment shader, it must be "
    486 			       "redeclared with the same layout qualifier in "
    487 			       "all fragment shaders that have assignments to "
    488 			       "gl_FragDepth");
    489 	       }
    490 	    }
    491 
    492 	    /* Page 35 (page 41 of the PDF) of the GLSL 4.20 spec says:
    493 	     *
    494 	     *     "If a shared global has multiple initializers, the
    495 	     *     initializers must all be constant expressions, and they
    496 	     *     must all have the same value. Otherwise, a link error will
    497 	     *     result. (A shared global having only one initializer does
    498 	     *     not require that initializer to be a constant expression.)"
    499 	     *
    500 	     * Previous to 4.20 the GLSL spec simply said that initializers
    501 	     * must have the same value.  In this case of non-constant
    502 	     * initializers, this was impossible to determine.  As a result,
    503 	     * no vendor actually implemented that behavior.  The 4.20
    504 	     * behavior matches the implemented behavior of at least one other
    505 	     * vendor, so we'll implement that for all GLSL versions.
    506 	     */
    507 	    if (var->constant_initializer != NULL) {
    508 	       if (existing->constant_initializer != NULL) {
    509 		  if (!var->constant_initializer->has_value(existing->constant_initializer)) {
    510 		     linker_error(prog, "initializers for %s "
    511 				  "`%s' have differing values\n",
    512 				  mode_string(var), var->name);
    513 		     return false;
    514 		  }
    515 	       } else {
    516 		  /* If the first-seen instance of a particular uniform did not
    517 		   * have an initializer but a later instance does, copy the
    518 		   * initializer to the version stored in the symbol table.
    519 		   */
    520 		  /* FINISHME: This is wrong.  The constant_value field should
    521 		   * FINISHME: not be modified!  Imagine a case where a shader
    522 		   * FINISHME: without an initializer is linked in two different
    523 		   * FINISHME: programs with shaders that have differing
    524 		   * FINISHME: initializers.  Linking with the first will
    525 		   * FINISHME: modify the shader, and linking with the second
    526 		   * FINISHME: will fail.
    527 		   */
    528 		  existing->constant_initializer =
    529 		     var->constant_initializer->clone(ralloc_parent(existing),
    530 						      NULL);
    531 	       }
    532 	    }
    533 
    534 	    if (var->has_initializer) {
    535 	       if (existing->has_initializer
    536 		   && (var->constant_initializer == NULL
    537 		       || existing->constant_initializer == NULL)) {
    538 		  linker_error(prog,
    539 			       "shared global variable `%s' has multiple "
    540 			       "non-constant initializers.\n",
    541 			       var->name);
    542 		  return false;
    543 	       }
    544 
    545 	       /* Some instance had an initializer, so keep track of that.  In
    546 		* this location, all sorts of initializers (constant or
    547 		* otherwise) will propagate the existence to the variable
    548 		* stored in the symbol table.
    549 		*/
    550 	       existing->has_initializer = true;
    551 	    }
    552 
    553 	    if (existing->invariant != var->invariant) {
    554 	       linker_error(prog, "declarations for %s `%s' have "
    555 			    "mismatching invariant qualifiers\n",
    556 			    mode_string(var), var->name);
    557 	       return false;
    558 	    }
    559             if (existing->centroid != var->centroid) {
    560                linker_error(prog, "declarations for %s `%s' have "
    561 			    "mismatching centroid qualifiers\n",
    562 			    mode_string(var), var->name);
    563                return false;
    564             }
    565 	 } else
    566 	    variables.add_variable(var);
    567       }
    568    }
    569 
    570    return true;
    571 }
    572 
    573 
    574 /**
    575  * Perform validation of uniforms used across multiple shader stages
    576  */
    577 bool
    578 cross_validate_uniforms(struct gl_shader_program *prog)
    579 {
    580    return cross_validate_globals(prog, prog->_LinkedShaders,
    581 				 MESA_SHADER_TYPES, true);
    582 }
    583 
    584 /**
    585  * Accumulates the array of prog->UniformBlocks and checks that all
    586  * definitons of blocks agree on their contents.
    587  */
    588 static bool
    589 interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog)
    590 {
    591    unsigned max_num_uniform_blocks = 0;
    592    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
    593       if (prog->_LinkedShaders[i])
    594 	 max_num_uniform_blocks += prog->_LinkedShaders[i]->NumUniformBlocks;
    595    }
    596 
    597    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
    598       struct gl_shader *sh = prog->_LinkedShaders[i];
    599 
    600       prog->UniformBlockStageIndex[i] = ralloc_array(prog, int,
    601 						     max_num_uniform_blocks);
    602       for (unsigned int j = 0; j < max_num_uniform_blocks; j++)
    603 	 prog->UniformBlockStageIndex[i][j] = -1;
    604 
    605       if (sh == NULL)
    606 	 continue;
    607 
    608       for (unsigned int j = 0; j < sh->NumUniformBlocks; j++) {
    609 	 int index = link_cross_validate_uniform_block(prog,
    610 						       &prog->UniformBlocks,
    611 						       &prog->NumUniformBlocks,
    612 						       &sh->UniformBlocks[j]);
    613 
    614 	 if (index == -1) {
    615 	    linker_error(prog, "uniform block `%s' has mismatching definitions",
    616 			 sh->UniformBlocks[j].Name);
    617 	    return false;
    618 	 }
    619 
    620 	 prog->UniformBlockStageIndex[i][index] = j;
    621       }
    622    }
    623 
    624    return true;
    625 }
    626 
    627 /**
    628  * Validate that outputs from one stage match inputs of another
    629  */
    630 bool
    631 cross_validate_outputs_to_inputs(struct gl_shader_program *prog,
    632 				 gl_shader *producer, gl_shader *consumer)
    633 {
    634    glsl_symbol_table parameters;
    635    /* FINISHME: Figure these out dynamically. */
    636    const char *const producer_stage = "vertex";
    637    const char *const consumer_stage = "fragment";
    638 
    639    /* Find all shader outputs in the "producer" stage.
    640     */
    641    foreach_list(node, producer->ir) {
    642       ir_variable *const var = ((ir_instruction *) node)->as_variable();
    643 
    644       /* FINISHME: For geometry shaders, this should also look for inout
    645        * FINISHME: variables.
    646        */
    647       if ((var == NULL) || (var->mode != ir_var_out))
    648 	 continue;
    649 
    650       parameters.add_variable(var);
    651    }
    652 
    653 
    654    /* Find all shader inputs in the "consumer" stage.  Any variables that have
    655     * matching outputs already in the symbol table must have the same type and
    656     * qualifiers.
    657     */
    658    foreach_list(node, consumer->ir) {
    659       ir_variable *const input = ((ir_instruction *) node)->as_variable();
    660 
    661       /* FINISHME: For geometry shaders, this should also look for inout
    662        * FINISHME: variables.
    663        */
    664       if ((input == NULL) || (input->mode != ir_var_in))
    665 	 continue;
    666 
    667       ir_variable *const output = parameters.get_variable(input->name);
    668       if (output != NULL) {
    669 	 /* Check that the types match between stages.
    670 	  */
    671 	 if (input->type != output->type) {
    672 	    /* There is a bit of a special case for gl_TexCoord.  This
    673 	     * built-in is unsized by default.  Applications that variable
    674 	     * access it must redeclare it with a size.  There is some
    675 	     * language in the GLSL spec that implies the fragment shader
    676 	     * and vertex shader do not have to agree on this size.  Other
    677 	     * driver behave this way, and one or two applications seem to
    678 	     * rely on it.
    679 	     *
    680 	     * Neither declaration needs to be modified here because the array
    681 	     * sizes are fixed later when update_array_sizes is called.
    682 	     *
    683 	     * From page 48 (page 54 of the PDF) of the GLSL 1.10 spec:
    684 	     *
    685 	     *     "Unlike user-defined varying variables, the built-in
    686 	     *     varying variables don't have a strict one-to-one
    687 	     *     correspondence between the vertex language and the
    688 	     *     fragment language."
    689 	     */
    690 	    if (!output->type->is_array()
    691 		|| (strncmp("gl_", output->name, 3) != 0)) {
    692 	       linker_error(prog,
    693 			    "%s shader output `%s' declared as type `%s', "
    694 			    "but %s shader input declared as type `%s'\n",
    695 			    producer_stage, output->name,
    696 			    output->type->name,
    697 			    consumer_stage, input->type->name);
    698 	       return false;
    699 	    }
    700 	 }
    701 
    702 	 /* Check that all of the qualifiers match between stages.
    703 	  */
    704 	 if (input->centroid != output->centroid) {
    705 	    linker_error(prog,
    706 			 "%s shader output `%s' %s centroid qualifier, "
    707 			 "but %s shader input %s centroid qualifier\n",
    708 			 producer_stage,
    709 			 output->name,
    710 			 (output->centroid) ? "has" : "lacks",
    711 			 consumer_stage,
    712 			 (input->centroid) ? "has" : "lacks");
    713 	    return false;
    714 	 }
    715 
    716 	 if (input->invariant != output->invariant) {
    717 	    linker_error(prog,
    718 			 "%s shader output `%s' %s invariant qualifier, "
    719 			 "but %s shader input %s invariant qualifier\n",
    720 			 producer_stage,
    721 			 output->name,
    722 			 (output->invariant) ? "has" : "lacks",
    723 			 consumer_stage,
    724 			 (input->invariant) ? "has" : "lacks");
    725 	    return false;
    726 	 }
    727 
    728 	 if (input->interpolation != output->interpolation) {
    729 	    linker_error(prog,
    730 			 "%s shader output `%s' specifies %s "
    731 			 "interpolation qualifier, "
    732 			 "but %s shader input specifies %s "
    733 			 "interpolation qualifier\n",
    734 			 producer_stage,
    735 			 output->name,
    736 			 output->interpolation_string(),
    737 			 consumer_stage,
    738 			 input->interpolation_string());
    739 	    return false;
    740 	 }
    741       }
    742    }
    743 
    744    return true;
    745 }
    746 
    747 
    748 /**
    749  * Populates a shaders symbol table with all global declarations
    750  */
    751 static void
    752 populate_symbol_table(gl_shader *sh)
    753 {
    754    sh->symbols = new(sh) glsl_symbol_table;
    755 
    756    foreach_list(node, sh->ir) {
    757       ir_instruction *const inst = (ir_instruction *) node;
    758       ir_variable *var;
    759       ir_function *func;
    760 
    761       if ((func = inst->as_function()) != NULL) {
    762 	 sh->symbols->add_function(func);
    763       } else if ((var = inst->as_variable()) != NULL) {
    764 	 sh->symbols->add_variable(var);
    765       }
    766    }
    767 }
    768 
    769 
    770 /**
    771  * Remap variables referenced in an instruction tree
    772  *
    773  * This is used when instruction trees are cloned from one shader and placed in
    774  * another.  These trees will contain references to \c ir_variable nodes that
    775  * do not exist in the target shader.  This function finds these \c ir_variable
    776  * references and replaces the references with matching variables in the target
    777  * shader.
    778  *
    779  * If there is no matching variable in the target shader, a clone of the
    780  * \c ir_variable is made and added to the target shader.  The new variable is
    781  * added to \b both the instruction stream and the symbol table.
    782  *
    783  * \param inst         IR tree that is to be processed.
    784  * \param symbols      Symbol table containing global scope symbols in the
    785  *                     linked shader.
    786  * \param instructions Instruction stream where new variable declarations
    787  *                     should be added.
    788  */
    789 void
    790 remap_variables(ir_instruction *inst, struct gl_shader *target,
    791 		hash_table *temps)
    792 {
    793    class remap_visitor : public ir_hierarchical_visitor {
    794    public:
    795 	 remap_visitor(struct gl_shader *target,
    796 		    hash_table *temps)
    797       {
    798 	 this->target = target;
    799 	 this->symbols = target->symbols;
    800 	 this->instructions = target->ir;
    801 	 this->temps = temps;
    802       }
    803 
    804       virtual ir_visitor_status visit(ir_dereference_variable *ir)
    805       {
    806 	 if (ir->var->mode == ir_var_temporary) {
    807 	    ir_variable *var = (ir_variable *) hash_table_find(temps, ir->var);
    808 
    809 	    assert(var != NULL);
    810 	    ir->var = var;
    811 	    return visit_continue;
    812 	 }
    813 
    814 	 ir_variable *const existing =
    815 	    this->symbols->get_variable(ir->var->name);
    816 	 if (existing != NULL)
    817 	    ir->var = existing;
    818 	 else {
    819 	    ir_variable *copy = ir->var->clone(this->target, NULL);
    820 
    821 	    this->symbols->add_variable(copy);
    822 	    this->instructions->push_head(copy);
    823 	    ir->var = copy;
    824 	 }
    825 
    826 	 return visit_continue;
    827       }
    828 
    829    private:
    830       struct gl_shader *target;
    831       glsl_symbol_table *symbols;
    832       exec_list *instructions;
    833       hash_table *temps;
    834    };
    835 
    836    remap_visitor v(target, temps);
    837 
    838    inst->accept(&v);
    839 }
    840 
    841 
    842 /**
    843  * Move non-declarations from one instruction stream to another
    844  *
    845  * The intended usage pattern of this function is to pass the pointer to the
    846  * head sentinel of a list (i.e., a pointer to the list cast to an \c exec_node
    847  * pointer) for \c last and \c false for \c make_copies on the first
    848  * call.  Successive calls pass the return value of the previous call for
    849  * \c last and \c true for \c make_copies.
    850  *
    851  * \param instructions Source instruction stream
    852  * \param last         Instruction after which new instructions should be
    853  *                     inserted in the target instruction stream
    854  * \param make_copies  Flag selecting whether instructions in \c instructions
    855  *                     should be copied (via \c ir_instruction::clone) into the
    856  *                     target list or moved.
    857  *
    858  * \return
    859  * The new "last" instruction in the target instruction stream.  This pointer
    860  * is suitable for use as the \c last parameter of a later call to this
    861  * function.
    862  */
    863 exec_node *
    864 move_non_declarations(exec_list *instructions, exec_node *last,
    865 		      bool make_copies, gl_shader *target)
    866 {
    867    hash_table *temps = NULL;
    868 
    869    if (make_copies)
    870       temps = hash_table_ctor(0, hash_table_pointer_hash,
    871 			      hash_table_pointer_compare);
    872 
    873    foreach_list_safe(node, instructions) {
    874       ir_instruction *inst = (ir_instruction *) node;
    875 
    876       if (inst->as_function())
    877 	 continue;
    878 
    879       ir_variable *var = inst->as_variable();
    880       if ((var != NULL) && (var->mode != ir_var_temporary))
    881 	 continue;
    882 
    883       assert(inst->as_assignment()
    884              || inst->as_call()
    885              || inst->as_if() /* for initializers with the ?: operator */
    886 	     || ((var != NULL) && (var->mode == ir_var_temporary)));
    887 
    888       if (make_copies) {
    889 	 inst = inst->clone(target, NULL);
    890 
    891 	 if (var != NULL)
    892 	    hash_table_insert(temps, inst, var);
    893 	 else
    894 	    remap_variables(inst, target, temps);
    895       } else {
    896 	 inst->remove();
    897       }
    898 
    899       last->insert_after(inst);
    900       last = inst;
    901    }
    902 
    903    if (make_copies)
    904       hash_table_dtor(temps);
    905 
    906    return last;
    907 }
    908 
    909 /**
    910  * Get the function signature for main from a shader
    911  */
    912 static ir_function_signature *
    913 get_main_function_signature(gl_shader *sh)
    914 {
    915    ir_function *const f = sh->symbols->get_function("main");
    916    if (f != NULL) {
    917       exec_list void_parameters;
    918 
    919       /* Look for the 'void main()' signature and ensure that it's defined.
    920        * This keeps the linker from accidentally pick a shader that just
    921        * contains a prototype for main.
    922        *
    923        * We don't have to check for multiple definitions of main (in multiple
    924        * shaders) because that would have already been caught above.
    925        */
    926       ir_function_signature *sig = f->matching_signature(&void_parameters);
    927       if ((sig != NULL) && sig->is_defined) {
    928 	 return sig;
    929       }
    930    }
    931 
    932    return NULL;
    933 }
    934 
    935 
    936 /**
    937  * This class is only used in link_intrastage_shaders() below but declaring
    938  * it inside that function leads to compiler warnings with some versions of
    939  * gcc.
    940  */
    941 class array_sizing_visitor : public ir_hierarchical_visitor {
    942 public:
    943    virtual ir_visitor_status visit(ir_variable *var)
    944    {
    945       if (var->type->is_array() && (var->type->length == 0)) {
    946          const glsl_type *type =
    947             glsl_type::get_array_instance(var->type->fields.array,
    948                                           var->max_array_access + 1);
    949          assert(type != NULL);
    950          var->type = type;
    951       }
    952       return visit_continue;
    953    }
    954 };
    955 
    956 /**
    957  * Combine a group of shaders for a single stage to generate a linked shader
    958  *
    959  * \note
    960  * If this function is supplied a single shader, it is cloned, and the new
    961  * shader is returned.
    962  */
    963 static struct gl_shader *
    964 link_intrastage_shaders(void *mem_ctx,
    965 			struct gl_context *ctx,
    966 			struct gl_shader_program *prog,
    967 			struct gl_shader **shader_list,
    968 			unsigned num_shaders)
    969 {
    970    struct gl_uniform_block *uniform_blocks = NULL;
    971    unsigned num_uniform_blocks = 0;
    972 
    973    /* Check that global variables defined in multiple shaders are consistent.
    974     */
    975    if (!cross_validate_globals(prog, shader_list, num_shaders, false))
    976       return NULL;
    977 
    978    /* Check that uniform blocks between shaders for a stage agree. */
    979    for (unsigned i = 0; i < num_shaders; i++) {
    980       struct gl_shader *sh = shader_list[i];
    981 
    982       for (unsigned j = 0; j < shader_list[i]->NumUniformBlocks; j++) {
    983 	 link_assign_uniform_block_offsets(shader_list[i]);
    984 
    985 	 int index = link_cross_validate_uniform_block(mem_ctx,
    986 						       &uniform_blocks,
    987 						       &num_uniform_blocks,
    988 						       &sh->UniformBlocks[j]);
    989 	 if (index == -1) {
    990 	    linker_error(prog, "uniform block `%s' has mismatching definitions",
    991 			 sh->UniformBlocks[j].Name);
    992 	    return NULL;
    993 	 }
    994       }
    995    }
    996 
    997    /* Check that there is only a single definition of each function signature
    998     * across all shaders.
    999     */
   1000    for (unsigned i = 0; i < (num_shaders - 1); i++) {
   1001       foreach_list(node, shader_list[i]->ir) {
   1002 	 ir_function *const f = ((ir_instruction *) node)->as_function();
   1003 
   1004 	 if (f == NULL)
   1005 	    continue;
   1006 
   1007 	 for (unsigned j = i + 1; j < num_shaders; j++) {
   1008 	    ir_function *const other =
   1009 	       shader_list[j]->symbols->get_function(f->name);
   1010 
   1011 	    /* If the other shader has no function (and therefore no function
   1012 	     * signatures) with the same name, skip to the next shader.
   1013 	     */
   1014 	    if (other == NULL)
   1015 	       continue;
   1016 
   1017 	    foreach_iter (exec_list_iterator, iter, *f) {
   1018 	       ir_function_signature *sig =
   1019 		  (ir_function_signature *) iter.get();
   1020 
   1021 	       if (!sig->is_defined || sig->is_builtin)
   1022 		  continue;
   1023 
   1024 	       ir_function_signature *other_sig =
   1025 		  other->exact_matching_signature(& sig->parameters);
   1026 
   1027 	       if ((other_sig != NULL) && other_sig->is_defined
   1028 		   && !other_sig->is_builtin) {
   1029 		  linker_error(prog, "function `%s' is multiply defined",
   1030 			       f->name);
   1031 		  return NULL;
   1032 	       }
   1033 	    }
   1034 	 }
   1035       }
   1036    }
   1037 
   1038    /* Find the shader that defines main, and make a clone of it.
   1039     *
   1040     * Starting with the clone, search for undefined references.  If one is
   1041     * found, find the shader that defines it.  Clone the reference and add
   1042     * it to the shader.  Repeat until there are no undefined references or
   1043     * until a reference cannot be resolved.
   1044     */
   1045    gl_shader *main = NULL;
   1046    for (unsigned i = 0; i < num_shaders; i++) {
   1047       if (get_main_function_signature(shader_list[i]) != NULL) {
   1048 	 main = shader_list[i];
   1049 	 break;
   1050       }
   1051    }
   1052 
   1053    if (main == NULL) {
   1054       linker_error(prog, "%s shader lacks `main'\n",
   1055 		   (shader_list[0]->Type == GL_VERTEX_SHADER)
   1056 		   ? "vertex" : "fragment");
   1057       return NULL;
   1058    }
   1059 
   1060    gl_shader *linked = ctx->Driver.NewShader(NULL, 0, main->Type);
   1061    linked->ir = new(linked) exec_list;
   1062    clone_ir_list(mem_ctx, linked->ir, main->ir);
   1063 
   1064    linked->UniformBlocks = uniform_blocks;
   1065    linked->NumUniformBlocks = num_uniform_blocks;
   1066    ralloc_steal(linked, linked->UniformBlocks);
   1067 
   1068    populate_symbol_table(linked);
   1069 
   1070    /* The a pointer to the main function in the final linked shader (i.e., the
   1071     * copy of the original shader that contained the main function).
   1072     */
   1073    ir_function_signature *const main_sig = get_main_function_signature(linked);
   1074 
   1075    /* Move any instructions other than variable declarations or function
   1076     * declarations into main.
   1077     */
   1078    exec_node *insertion_point =
   1079       move_non_declarations(linked->ir, (exec_node *) &main_sig->body, false,
   1080 			    linked);
   1081 
   1082    for (unsigned i = 0; i < num_shaders; i++) {
   1083       if (shader_list[i] == main)
   1084 	 continue;
   1085 
   1086       insertion_point = move_non_declarations(shader_list[i]->ir,
   1087 					      insertion_point, true, linked);
   1088    }
   1089 
   1090    /* Resolve initializers for global variables in the linked shader.
   1091     */
   1092    unsigned num_linking_shaders = num_shaders;
   1093    for (unsigned i = 0; i < num_shaders; i++)
   1094       num_linking_shaders += shader_list[i]->num_builtins_to_link;
   1095 
   1096    gl_shader **linking_shaders =
   1097       (gl_shader **) calloc(num_linking_shaders, sizeof(gl_shader *));
   1098 
   1099    memcpy(linking_shaders, shader_list,
   1100 	  sizeof(linking_shaders[0]) * num_shaders);
   1101 
   1102    unsigned idx = num_shaders;
   1103    for (unsigned i = 0; i < num_shaders; i++) {
   1104       memcpy(&linking_shaders[idx], shader_list[i]->builtins_to_link,
   1105 	     sizeof(linking_shaders[0]) * shader_list[i]->num_builtins_to_link);
   1106       idx += shader_list[i]->num_builtins_to_link;
   1107    }
   1108 
   1109    assert(idx == num_linking_shaders);
   1110 
   1111    if (!link_function_calls(prog, linked, linking_shaders,
   1112 			    num_linking_shaders)) {
   1113       ctx->Driver.DeleteShader(ctx, linked);
   1114       linked = NULL;
   1115    }
   1116 
   1117    free(linking_shaders);
   1118 
   1119 #ifdef DEBUG
   1120    /* At this point linked should contain all of the linked IR, so
   1121     * validate it to make sure nothing went wrong.
   1122     */
   1123    if (linked)
   1124       validate_ir_tree(linked->ir);
   1125 #endif
   1126 
   1127    /* Make a pass over all variable declarations to ensure that arrays with
   1128     * unspecified sizes have a size specified.  The size is inferred from the
   1129     * max_array_access field.
   1130     */
   1131    if (linked != NULL) {
   1132       array_sizing_visitor v;
   1133 
   1134       v.run(linked->ir);
   1135    }
   1136 
   1137    return linked;
   1138 }
   1139 
   1140 /**
   1141  * Update the sizes of linked shader uniform arrays to the maximum
   1142  * array index used.
   1143  *
   1144  * From page 81 (page 95 of the PDF) of the OpenGL 2.1 spec:
   1145  *
   1146  *     If one or more elements of an array are active,
   1147  *     GetActiveUniform will return the name of the array in name,
   1148  *     subject to the restrictions listed above. The type of the array
   1149  *     is returned in type. The size parameter contains the highest
   1150  *     array element index used, plus one. The compiler or linker
   1151  *     determines the highest index used.  There will be only one
   1152  *     active uniform reported by the GL per uniform array.
   1153 
   1154  */
   1155 static void
   1156 update_array_sizes(struct gl_shader_program *prog)
   1157 {
   1158    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
   1159 	 if (prog->_LinkedShaders[i] == NULL)
   1160 	    continue;
   1161 
   1162       foreach_list(node, prog->_LinkedShaders[i]->ir) {
   1163 	 ir_variable *const var = ((ir_instruction *) node)->as_variable();
   1164 
   1165 	 if ((var == NULL) || (var->mode != ir_var_uniform &&
   1166 			       var->mode != ir_var_in &&
   1167 			       var->mode != ir_var_out) ||
   1168 	     !var->type->is_array())
   1169 	    continue;
   1170 
   1171 	 /* GL_ARB_uniform_buffer_object says that std140 uniforms
   1172 	  * will not be eliminated.  Since we always do std140, just
   1173 	  * don't resize arrays in UBOs.
   1174 	  */
   1175 	 if (var->uniform_block != -1)
   1176 	    continue;
   1177 
   1178 	 unsigned int size = var->max_array_access;
   1179 	 for (unsigned j = 0; j < MESA_SHADER_TYPES; j++) {
   1180 	       if (prog->_LinkedShaders[j] == NULL)
   1181 		  continue;
   1182 
   1183 	    foreach_list(node2, prog->_LinkedShaders[j]->ir) {
   1184 	       ir_variable *other_var = ((ir_instruction *) node2)->as_variable();
   1185 	       if (!other_var)
   1186 		  continue;
   1187 
   1188 	       if (strcmp(var->name, other_var->name) == 0 &&
   1189 		   other_var->max_array_access > size) {
   1190 		  size = other_var->max_array_access;
   1191 	       }
   1192 	    }
   1193 	 }
   1194 
   1195 	 if (size + 1 != var->type->fields.array->length) {
   1196 	    /* If this is a built-in uniform (i.e., it's backed by some
   1197 	     * fixed-function state), adjust the number of state slots to
   1198 	     * match the new array size.  The number of slots per array entry
   1199 	     * is not known.  It seems safe to assume that the total number of
   1200 	     * slots is an integer multiple of the number of array elements.
   1201 	     * Determine the number of slots per array element by dividing by
   1202 	     * the old (total) size.
   1203 	     */
   1204 	    if (var->num_state_slots > 0) {
   1205 	       var->num_state_slots = (size + 1)
   1206 		  * (var->num_state_slots / var->type->length);
   1207 	    }
   1208 
   1209 	    var->type = glsl_type::get_array_instance(var->type->fields.array,
   1210 						      size + 1);
   1211 	    /* FINISHME: We should update the types of array
   1212 	     * dereferences of this variable now.
   1213 	     */
   1214 	 }
   1215       }
   1216    }
   1217 }
   1218 
   1219 /**
   1220  * Find a contiguous set of available bits in a bitmask.
   1221  *
   1222  * \param used_mask     Bits representing used (1) and unused (0) locations
   1223  * \param needed_count  Number of contiguous bits needed.
   1224  *
   1225  * \return
   1226  * Base location of the available bits on success or -1 on failure.
   1227  */
   1228 int
   1229 find_available_slots(unsigned used_mask, unsigned needed_count)
   1230 {
   1231    unsigned needed_mask = (1 << needed_count) - 1;
   1232    const int max_bit_to_test = (8 * sizeof(used_mask)) - needed_count;
   1233 
   1234    /* The comparison to 32 is redundant, but without it GCC emits "warning:
   1235     * cannot optimize possibly infinite loops" for the loop below.
   1236     */
   1237    if ((needed_count == 0) || (max_bit_to_test < 0) || (max_bit_to_test > 32))
   1238       return -1;
   1239 
   1240    for (int i = 0; i <= max_bit_to_test; i++) {
   1241       if ((needed_mask & ~used_mask) == needed_mask)
   1242 	 return i;
   1243 
   1244       needed_mask <<= 1;
   1245    }
   1246 
   1247    return -1;
   1248 }
   1249 
   1250 
   1251 /**
   1252  * Assign locations for either VS inputs for FS outputs
   1253  *
   1254  * \param prog          Shader program whose variables need locations assigned
   1255  * \param target_index  Selector for the program target to receive location
   1256  *                      assignmnets.  Must be either \c MESA_SHADER_VERTEX or
   1257  *                      \c MESA_SHADER_FRAGMENT.
   1258  * \param max_index     Maximum number of generic locations.  This corresponds
   1259  *                      to either the maximum number of draw buffers or the
   1260  *                      maximum number of generic attributes.
   1261  *
   1262  * \return
   1263  * If locations are successfully assigned, true is returned.  Otherwise an
   1264  * error is emitted to the shader link log and false is returned.
   1265  */
   1266 bool
   1267 assign_attribute_or_color_locations(gl_shader_program *prog,
   1268 				    unsigned target_index,
   1269 				    unsigned max_index)
   1270 {
   1271    /* Mark invalid locations as being used.
   1272     */
   1273    unsigned used_locations = (max_index >= 32)
   1274       ? ~0 : ~((1 << max_index) - 1);
   1275 
   1276    assert((target_index == MESA_SHADER_VERTEX)
   1277 	  || (target_index == MESA_SHADER_FRAGMENT));
   1278 
   1279    gl_shader *const sh = prog->_LinkedShaders[target_index];
   1280    if (sh == NULL)
   1281       return true;
   1282 
   1283    /* Operate in a total of four passes.
   1284     *
   1285     * 1. Invalidate the location assignments for all vertex shader inputs.
   1286     *
   1287     * 2. Assign locations for inputs that have user-defined (via
   1288     *    glBindVertexAttribLocation) locations and outputs that have
   1289     *    user-defined locations (via glBindFragDataLocation).
   1290     *
   1291     * 3. Sort the attributes without assigned locations by number of slots
   1292     *    required in decreasing order.  Fragmentation caused by attribute
   1293     *    locations assigned by the application may prevent large attributes
   1294     *    from having enough contiguous space.
   1295     *
   1296     * 4. Assign locations to any inputs without assigned locations.
   1297     */
   1298 
   1299    const int generic_base = (target_index == MESA_SHADER_VERTEX)
   1300       ? (int) VERT_ATTRIB_GENERIC0 : (int) FRAG_RESULT_DATA0;
   1301 
   1302    const enum ir_variable_mode direction =
   1303       (target_index == MESA_SHADER_VERTEX) ? ir_var_in : ir_var_out;
   1304 
   1305 
   1306    link_invalidate_variable_locations(sh, direction, generic_base);
   1307 
   1308    /* Temporary storage for the set of attributes that need locations assigned.
   1309     */
   1310    struct temp_attr {
   1311       unsigned slots;
   1312       ir_variable *var;
   1313 
   1314       /* Used below in the call to qsort. */
   1315       static int compare(const void *a, const void *b)
   1316       {
   1317 	 const temp_attr *const l = (const temp_attr *) a;
   1318 	 const temp_attr *const r = (const temp_attr *) b;
   1319 
   1320 	 /* Reversed because we want a descending order sort below. */
   1321 	 return r->slots - l->slots;
   1322       }
   1323    } to_assign[16];
   1324 
   1325    unsigned num_attr = 0;
   1326 
   1327    foreach_list(node, sh->ir) {
   1328       ir_variable *const var = ((ir_instruction *) node)->as_variable();
   1329 
   1330       if ((var == NULL) || (var->mode != (unsigned) direction))
   1331 	 continue;
   1332 
   1333       if (var->explicit_location) {
   1334 	 if ((var->location >= (int)(max_index + generic_base))
   1335 	     || (var->location < 0)) {
   1336 	    linker_error(prog,
   1337 			 "invalid explicit location %d specified for `%s'\n",
   1338 			 (var->location < 0)
   1339 			 ? var->location : var->location - generic_base,
   1340 			 var->name);
   1341 	    return false;
   1342 	 }
   1343       } else if (target_index == MESA_SHADER_VERTEX) {
   1344 	 unsigned binding;
   1345 
   1346 	 if (prog->AttributeBindings->get(binding, var->name)) {
   1347 	    assert(binding >= VERT_ATTRIB_GENERIC0);
   1348 	    var->location = binding;
   1349 	 }
   1350       } else if (target_index == MESA_SHADER_FRAGMENT) {
   1351 	 unsigned binding;
   1352 	 unsigned index;
   1353 
   1354 	 if (prog->FragDataBindings->get(binding, var->name)) {
   1355 	    assert(binding >= FRAG_RESULT_DATA0);
   1356 	    var->location = binding;
   1357 
   1358 	    if (prog->FragDataIndexBindings->get(index, var->name)) {
   1359 	       var->index = index;
   1360 	    }
   1361 	 }
   1362       }
   1363 
   1364       /* If the variable is not a built-in and has a location statically
   1365        * assigned in the shader (presumably via a layout qualifier), make sure
   1366        * that it doesn't collide with other assigned locations.  Otherwise,
   1367        * add it to the list of variables that need linker-assigned locations.
   1368        */
   1369       const unsigned slots = count_attribute_slots(var->type);
   1370       if (var->location != -1) {
   1371 	 if (var->location >= generic_base && var->index < 1) {
   1372 	    /* From page 61 of the OpenGL 4.0 spec:
   1373 	     *
   1374 	     *     "LinkProgram will fail if the attribute bindings assigned
   1375 	     *     by BindAttribLocation do not leave not enough space to
   1376 	     *     assign a location for an active matrix attribute or an
   1377 	     *     active attribute array, both of which require multiple
   1378 	     *     contiguous generic attributes."
   1379 	     *
   1380 	     * Previous versions of the spec contain similar language but omit
   1381 	     * the bit about attribute arrays.
   1382 	     *
   1383 	     * Page 61 of the OpenGL 4.0 spec also says:
   1384 	     *
   1385 	     *     "It is possible for an application to bind more than one
   1386 	     *     attribute name to the same location. This is referred to as
   1387 	     *     aliasing. This will only work if only one of the aliased
   1388 	     *     attributes is active in the executable program, or if no
   1389 	     *     path through the shader consumes more than one attribute of
   1390 	     *     a set of attributes aliased to the same location. A link
   1391 	     *     error can occur if the linker determines that every path
   1392 	     *     through the shader consumes multiple aliased attributes,
   1393 	     *     but implementations are not required to generate an error
   1394 	     *     in this case."
   1395 	     *
   1396 	     * These two paragraphs are either somewhat contradictory, or I
   1397 	     * don't fully understand one or both of them.
   1398 	     */
   1399 	    /* FINISHME: The code as currently written does not support
   1400 	     * FINISHME: attribute location aliasing (see comment above).
   1401 	     */
   1402 	    /* Mask representing the contiguous slots that will be used by
   1403 	     * this attribute.
   1404 	     */
   1405 	    const unsigned attr = var->location - generic_base;
   1406 	    const unsigned use_mask = (1 << slots) - 1;
   1407 
   1408 	    /* Generate a link error if the set of bits requested for this
   1409 	     * attribute overlaps any previously allocated bits.
   1410 	     */
   1411 	    if ((~(use_mask << attr) & used_locations) != used_locations) {
   1412 	       const char *const string = (target_index == MESA_SHADER_VERTEX)
   1413 		  ? "vertex shader input" : "fragment shader output";
   1414 	       linker_error(prog,
   1415 			    "insufficient contiguous locations "
   1416 			    "available for %s `%s' %d %d %d", string,
   1417 			    var->name, used_locations, use_mask, attr);
   1418 	       return false;
   1419 	    }
   1420 
   1421 	    used_locations |= (use_mask << attr);
   1422 	 }
   1423 
   1424 	 continue;
   1425       }
   1426 
   1427       to_assign[num_attr].slots = slots;
   1428       to_assign[num_attr].var = var;
   1429       num_attr++;
   1430    }
   1431 
   1432    /* If all of the attributes were assigned locations by the application (or
   1433     * are built-in attributes with fixed locations), return early.  This should
   1434     * be the common case.
   1435     */
   1436    if (num_attr == 0)
   1437       return true;
   1438 
   1439    qsort(to_assign, num_attr, sizeof(to_assign[0]), temp_attr::compare);
   1440 
   1441    if (target_index == MESA_SHADER_VERTEX) {
   1442       /* VERT_ATTRIB_GENERIC0 is a pseudo-alias for VERT_ATTRIB_POS.  It can
   1443        * only be explicitly assigned by via glBindAttribLocation.  Mark it as
   1444        * reserved to prevent it from being automatically allocated below.
   1445        */
   1446       find_deref_visitor find("gl_Vertex");
   1447       find.run(sh->ir);
   1448       if (find.variable_found())
   1449 	 used_locations |= (1 << 0);
   1450    }
   1451 
   1452    for (unsigned i = 0; i < num_attr; i++) {
   1453       /* Mask representing the contiguous slots that will be used by this
   1454        * attribute.
   1455        */
   1456       const unsigned use_mask = (1 << to_assign[i].slots) - 1;
   1457 
   1458       int location = find_available_slots(used_locations, to_assign[i].slots);
   1459 
   1460       if (location < 0) {
   1461 	 const char *const string = (target_index == MESA_SHADER_VERTEX)
   1462 	    ? "vertex shader input" : "fragment shader output";
   1463 
   1464 	 linker_error(prog,
   1465 		      "insufficient contiguous locations "
   1466 		      "available for %s `%s'",
   1467 		      string, to_assign[i].var->name);
   1468 	 return false;
   1469       }
   1470 
   1471       to_assign[i].var->location = generic_base + location;
   1472       used_locations |= (use_mask << location);
   1473    }
   1474 
   1475    return true;
   1476 }
   1477 
   1478 
   1479 /**
   1480  * Demote shader inputs and outputs that are not used in other stages
   1481  */
   1482 void
   1483 demote_shader_inputs_and_outputs(gl_shader *sh, enum ir_variable_mode mode)
   1484 {
   1485    foreach_list(node, sh->ir) {
   1486       ir_variable *const var = ((ir_instruction *) node)->as_variable();
   1487 
   1488       if ((var == NULL) || (var->mode != int(mode)))
   1489 	 continue;
   1490 
   1491       /* A shader 'in' or 'out' variable is only really an input or output if
   1492        * its value is used by other shader stages.  This will cause the variable
   1493        * to have a location assigned.
   1494        */
   1495       if (var->location == -1) {
   1496 	 var->mode = ir_var_auto;
   1497       }
   1498    }
   1499 }
   1500 
   1501 
   1502 /**
   1503  * Data structure tracking information about a transform feedback declaration
   1504  * during linking.
   1505  */
   1506 class tfeedback_decl
   1507 {
   1508 public:
   1509    bool init(struct gl_context *ctx, struct gl_shader_program *prog,
   1510              const void *mem_ctx, const char *input);
   1511    static bool is_same(const tfeedback_decl &x, const tfeedback_decl &y);
   1512    bool assign_location(struct gl_context *ctx, struct gl_shader_program *prog,
   1513                         ir_variable *output_var);
   1514    bool accumulate_num_outputs(struct gl_shader_program *prog, unsigned *count);
   1515    bool store(struct gl_context *ctx, struct gl_shader_program *prog,
   1516               struct gl_transform_feedback_info *info, unsigned buffer,
   1517               const unsigned max_outputs) const;
   1518 
   1519    /**
   1520     * True if assign_location() has been called for this object.
   1521     */
   1522    bool is_assigned() const
   1523    {
   1524       return this->location != -1;
   1525    }
   1526 
   1527    bool is_next_buffer_separator() const
   1528    {
   1529       return this->next_buffer_separator;
   1530    }
   1531 
   1532    bool is_varying() const
   1533    {
   1534       return !this->next_buffer_separator && !this->skip_components;
   1535    }
   1536 
   1537    /**
   1538     * Determine whether this object refers to the variable var.
   1539     */
   1540    bool matches_var(ir_variable *var) const
   1541    {
   1542       if (this->is_clip_distance_mesa)
   1543          return strcmp(var->name, "gl_ClipDistanceMESA") == 0;
   1544       else
   1545          return strcmp(var->name, this->var_name) == 0;
   1546    }
   1547 
   1548    /**
   1549     * The total number of varying components taken up by this variable.  Only
   1550     * valid if is_assigned() is true.
   1551     */
   1552    unsigned num_components() const
   1553    {
   1554       if (this->is_clip_distance_mesa)
   1555          return this->size;
   1556       else
   1557          return this->vector_elements * this->matrix_columns * this->size;
   1558    }
   1559 
   1560 private:
   1561    /**
   1562     * The name that was supplied to glTransformFeedbackVaryings.  Used for
   1563     * error reporting and glGetTransformFeedbackVarying().
   1564     */
   1565    const char *orig_name;
   1566 
   1567    /**
   1568     * The name of the variable, parsed from orig_name.
   1569     */
   1570    const char *var_name;
   1571 
   1572    /**
   1573     * True if the declaration in orig_name represents an array.
   1574     */
   1575    bool is_subscripted;
   1576 
   1577    /**
   1578     * If is_subscripted is true, the subscript that was specified in orig_name.
   1579     */
   1580    unsigned array_subscript;
   1581 
   1582    /**
   1583     * True if the variable is gl_ClipDistance and the driver lowers
   1584     * gl_ClipDistance to gl_ClipDistanceMESA.
   1585     */
   1586    bool is_clip_distance_mesa;
   1587 
   1588    /**
   1589     * The vertex shader output location that the linker assigned for this
   1590     * variable.  -1 if a location hasn't been assigned yet.
   1591     */
   1592    int location;
   1593 
   1594    /**
   1595     * If location != -1, the number of vector elements in this variable, or 1
   1596     * if this variable is a scalar.
   1597     */
   1598    unsigned vector_elements;
   1599 
   1600    /**
   1601     * If location != -1, the number of matrix columns in this variable, or 1
   1602     * if this variable is not a matrix.
   1603     */
   1604    unsigned matrix_columns;
   1605 
   1606    /** Type of the varying returned by glGetTransformFeedbackVarying() */
   1607    GLenum type;
   1608 
   1609    /**
   1610     * If location != -1, the size that should be returned by
   1611     * glGetTransformFeedbackVarying().
   1612     */
   1613    unsigned size;
   1614 
   1615    /**
   1616     * How many components to skip. If non-zero, this is
   1617     * gl_SkipComponents{1,2,3,4} from ARB_transform_feedback3.
   1618     */
   1619    unsigned skip_components;
   1620 
   1621    /**
   1622     * Whether this is gl_NextBuffer from ARB_transform_feedback3.
   1623     */
   1624    bool next_buffer_separator;
   1625 };
   1626 
   1627 
   1628 /**
   1629  * Initialize this object based on a string that was passed to
   1630  * glTransformFeedbackVaryings.  If there is a parse error, the error is
   1631  * reported using linker_error(), and false is returned.
   1632  */
   1633 bool
   1634 tfeedback_decl::init(struct gl_context *ctx, struct gl_shader_program *prog,
   1635                      const void *mem_ctx, const char *input)
   1636 {
   1637    /* We don't have to be pedantic about what is a valid GLSL variable name,
   1638     * because any variable with an invalid name can't exist in the IR anyway.
   1639     */
   1640 
   1641    this->location = -1;
   1642    this->orig_name = input;
   1643    this->is_clip_distance_mesa = false;
   1644    this->skip_components = 0;
   1645    this->next_buffer_separator = false;
   1646 
   1647    if (ctx->Extensions.ARB_transform_feedback3) {
   1648       /* Parse gl_NextBuffer. */
   1649       if (strcmp(input, "gl_NextBuffer") == 0) {
   1650          this->next_buffer_separator = true;
   1651          return true;
   1652       }
   1653 
   1654       /* Parse gl_SkipComponents. */
   1655       if (strcmp(input, "gl_SkipComponents1") == 0)
   1656          this->skip_components = 1;
   1657       else if (strcmp(input, "gl_SkipComponents2") == 0)
   1658          this->skip_components = 2;
   1659       else if (strcmp(input, "gl_SkipComponents3") == 0)
   1660          this->skip_components = 3;
   1661       else if (strcmp(input, "gl_SkipComponents4") == 0)
   1662          this->skip_components = 4;
   1663 
   1664       if (this->skip_components)
   1665          return true;
   1666    }
   1667 
   1668    /* Parse a declaration. */
   1669    const char *bracket = strrchr(input, '[');
   1670 
   1671    if (bracket) {
   1672       this->var_name = ralloc_strndup(mem_ctx, input, bracket - input);
   1673       if (sscanf(bracket, "[%u]", &this->array_subscript) != 1) {
   1674          linker_error(prog, "Cannot parse transform feedback varying %s", input);
   1675          return false;
   1676       }
   1677       this->is_subscripted = true;
   1678    } else {
   1679       this->var_name = ralloc_strdup(mem_ctx, input);
   1680       this->is_subscripted = false;
   1681    }
   1682 
   1683    /* For drivers that lower gl_ClipDistance to gl_ClipDistanceMESA, this
   1684     * class must behave specially to account for the fact that gl_ClipDistance
   1685     * is converted from a float[8] to a vec4[2].
   1686     */
   1687    if (ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].LowerClipDistance &&
   1688        strcmp(this->var_name, "gl_ClipDistance") == 0) {
   1689       this->is_clip_distance_mesa = true;
   1690    }
   1691 
   1692    return true;
   1693 }
   1694 
   1695 
   1696 /**
   1697  * Determine whether two tfeedback_decl objects refer to the same variable and
   1698  * array index (if applicable).
   1699  */
   1700 bool
   1701 tfeedback_decl::is_same(const tfeedback_decl &x, const tfeedback_decl &y)
   1702 {
   1703    assert(x.is_varying() && y.is_varying());
   1704 
   1705    if (strcmp(x.var_name, y.var_name) != 0)
   1706       return false;
   1707    if (x.is_subscripted != y.is_subscripted)
   1708       return false;
   1709    if (x.is_subscripted && x.array_subscript != y.array_subscript)
   1710       return false;
   1711    return true;
   1712 }
   1713 
   1714 
   1715 /**
   1716  * Assign a location for this tfeedback_decl object based on the location
   1717  * assignment in output_var.
   1718  *
   1719  * If an error occurs, the error is reported through linker_error() and false
   1720  * is returned.
   1721  */
   1722 bool
   1723 tfeedback_decl::assign_location(struct gl_context *ctx,
   1724                                 struct gl_shader_program *prog,
   1725                                 ir_variable *output_var)
   1726 {
   1727    assert(this->is_varying());
   1728 
   1729    if (output_var->type->is_array()) {
   1730       /* Array variable */
   1731       const unsigned matrix_cols =
   1732          output_var->type->fields.array->matrix_columns;
   1733       unsigned actual_array_size = this->is_clip_distance_mesa ?
   1734          prog->Vert.ClipDistanceArraySize : output_var->type->array_size();
   1735 
   1736       if (this->is_subscripted) {
   1737          /* Check array bounds. */
   1738          if (this->array_subscript >= actual_array_size) {
   1739             linker_error(prog, "Transform feedback varying %s has index "
   1740                          "%i, but the array size is %u.",
   1741                          this->orig_name, this->array_subscript,
   1742                          actual_array_size);
   1743             return false;
   1744          }
   1745          if (this->is_clip_distance_mesa) {
   1746             this->location =
   1747                output_var->location + this->array_subscript / 4;
   1748          } else {
   1749             this->location =
   1750                output_var->location + this->array_subscript * matrix_cols;
   1751          }
   1752          this->size = 1;
   1753       } else {
   1754          this->location = output_var->location;
   1755          this->size = actual_array_size;
   1756       }
   1757       this->vector_elements = output_var->type->fields.array->vector_elements;
   1758       this->matrix_columns = matrix_cols;
   1759       if (this->is_clip_distance_mesa)
   1760          this->type = GL_FLOAT;
   1761       else
   1762          this->type = output_var->type->fields.array->gl_type;
   1763    } else {
   1764       /* Regular variable (scalar, vector, or matrix) */
   1765       if (this->is_subscripted) {
   1766          linker_error(prog, "Transform feedback varying %s requested, "
   1767                       "but %s is not an array.",
   1768                       this->orig_name, this->var_name);
   1769          return false;
   1770       }
   1771       this->location = output_var->location;
   1772       this->size = 1;
   1773       this->vector_elements = output_var->type->vector_elements;
   1774       this->matrix_columns = output_var->type->matrix_columns;
   1775       this->type = output_var->type->gl_type;
   1776    }
   1777 
   1778    /* From GL_EXT_transform_feedback:
   1779     *   A program will fail to link if:
   1780     *
   1781     *   * the total number of components to capture in any varying
   1782     *     variable in <varyings> is greater than the constant
   1783     *     MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT and the
   1784     *     buffer mode is SEPARATE_ATTRIBS_EXT;
   1785     */
   1786    if (prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS &&
   1787        this->num_components() >
   1788        ctx->Const.MaxTransformFeedbackSeparateComponents) {
   1789       linker_error(prog, "Transform feedback varying %s exceeds "
   1790                    "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS.",
   1791                    this->orig_name);
   1792       return false;
   1793    }
   1794 
   1795    return true;
   1796 }
   1797 
   1798 
   1799 bool
   1800 tfeedback_decl::accumulate_num_outputs(struct gl_shader_program *prog,
   1801                                        unsigned *count)
   1802 {
   1803    if (!this->is_varying()) {
   1804       return true;
   1805    }
   1806 
   1807    if (!this->is_assigned()) {
   1808       /* From GL_EXT_transform_feedback:
   1809        *   A program will fail to link if:
   1810        *
   1811        *   * any variable name specified in the <varyings> array is not
   1812        *     declared as an output in the geometry shader (if present) or
   1813        *     the vertex shader (if no geometry shader is present);
   1814        */
   1815       linker_error(prog, "Transform feedback varying %s undeclared.",
   1816                    this->orig_name);
   1817       return false;
   1818    }
   1819 
   1820    unsigned translated_size = this->size;
   1821    if (this->is_clip_distance_mesa)
   1822       translated_size = (translated_size + 3) / 4;
   1823 
   1824    *count += translated_size * this->matrix_columns;
   1825 
   1826    return true;
   1827 }
   1828 
   1829 
   1830 /**
   1831  * Update gl_transform_feedback_info to reflect this tfeedback_decl.
   1832  *
   1833  * If an error occurs, the error is reported through linker_error() and false
   1834  * is returned.
   1835  */
   1836 bool
   1837 tfeedback_decl::store(struct gl_context *ctx, struct gl_shader_program *prog,
   1838                       struct gl_transform_feedback_info *info,
   1839                       unsigned buffer, const unsigned max_outputs) const
   1840 {
   1841    assert(!this->next_buffer_separator);
   1842 
   1843    /* Handle gl_SkipComponents. */
   1844    if (this->skip_components) {
   1845       info->BufferStride[buffer] += this->skip_components;
   1846       return true;
   1847    }
   1848 
   1849    /* From GL_EXT_transform_feedback:
   1850     *   A program will fail to link if:
   1851     *
   1852     *     * the total number of components to capture is greater than
   1853     *       the constant MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT
   1854     *       and the buffer mode is INTERLEAVED_ATTRIBS_EXT.
   1855     */
   1856    if (prog->TransformFeedback.BufferMode == GL_INTERLEAVED_ATTRIBS &&
   1857        info->BufferStride[buffer] + this->num_components() >
   1858        ctx->Const.MaxTransformFeedbackInterleavedComponents) {
   1859       linker_error(prog, "The MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS "
   1860                    "limit has been exceeded.");
   1861       return false;
   1862    }
   1863 
   1864    unsigned translated_size = this->size;
   1865    if (this->is_clip_distance_mesa)
   1866       translated_size = (translated_size + 3) / 4;
   1867    unsigned components_so_far = 0;
   1868    for (unsigned index = 0; index < translated_size; ++index) {
   1869       for (unsigned v = 0; v < this->matrix_columns; ++v) {
   1870          unsigned num_components = this->vector_elements;
   1871          assert(info->NumOutputs < max_outputs);
   1872          info->Outputs[info->NumOutputs].ComponentOffset = 0;
   1873          if (this->is_clip_distance_mesa) {
   1874             if (this->is_subscripted) {
   1875                num_components = 1;
   1876                info->Outputs[info->NumOutputs].ComponentOffset =
   1877                   this->array_subscript % 4;
   1878             } else {
   1879                num_components = MIN2(4, this->size - components_so_far);
   1880             }
   1881          }
   1882          info->Outputs[info->NumOutputs].OutputRegister =
   1883             this->location + v + index * this->matrix_columns;
   1884          info->Outputs[info->NumOutputs].NumComponents = num_components;
   1885          info->Outputs[info->NumOutputs].OutputBuffer = buffer;
   1886          info->Outputs[info->NumOutputs].DstOffset = info->BufferStride[buffer];
   1887          ++info->NumOutputs;
   1888          info->BufferStride[buffer] += num_components;
   1889          components_so_far += num_components;
   1890       }
   1891    }
   1892    assert(components_so_far == this->num_components());
   1893 
   1894    info->Varyings[info->NumVarying].Name = ralloc_strdup(prog, this->orig_name);
   1895    info->Varyings[info->NumVarying].Type = this->type;
   1896    info->Varyings[info->NumVarying].Size = this->size;
   1897    info->NumVarying++;
   1898 
   1899    return true;
   1900 }
   1901 
   1902 
   1903 /**
   1904  * Parse all the transform feedback declarations that were passed to
   1905  * glTransformFeedbackVaryings() and store them in tfeedback_decl objects.
   1906  *
   1907  * If an error occurs, the error is reported through linker_error() and false
   1908  * is returned.
   1909  */
   1910 static bool
   1911 parse_tfeedback_decls(struct gl_context *ctx, struct gl_shader_program *prog,
   1912                       const void *mem_ctx, unsigned num_names,
   1913                       char **varying_names, tfeedback_decl *decls)
   1914 {
   1915    for (unsigned i = 0; i < num_names; ++i) {
   1916       if (!decls[i].init(ctx, prog, mem_ctx, varying_names[i]))
   1917          return false;
   1918 
   1919       if (!decls[i].is_varying())
   1920          continue;
   1921 
   1922       /* From GL_EXT_transform_feedback:
   1923        *   A program will fail to link if:
   1924        *
   1925        *   * any two entries in the <varyings> array specify the same varying
   1926        *     variable;
   1927        *
   1928        * We interpret this to mean "any two entries in the <varyings> array
   1929        * specify the same varying variable and array index", since transform
   1930        * feedback of arrays would be useless otherwise.
   1931        */
   1932       for (unsigned j = 0; j < i; ++j) {
   1933          if (!decls[j].is_varying())
   1934             continue;
   1935 
   1936          if (tfeedback_decl::is_same(decls[i], decls[j])) {
   1937             linker_error(prog, "Transform feedback varying %s specified "
   1938                          "more than once.", varying_names[i]);
   1939             return false;
   1940          }
   1941       }
   1942    }
   1943    return true;
   1944 }
   1945 
   1946 
   1947 /**
   1948  * Assign a location for a variable that is produced in one pipeline stage
   1949  * (the "producer") and consumed in the next stage (the "consumer").
   1950  *
   1951  * \param input_var is the input variable declaration in the consumer.
   1952  *
   1953  * \param output_var is the output variable declaration in the producer.
   1954  *
   1955  * \param input_index is the counter that keeps track of assigned input
   1956  *        locations in the consumer.
   1957  *
   1958  * \param output_index is the counter that keeps track of assigned output
   1959  *        locations in the producer.
   1960  *
   1961  * It is permissible for \c input_var to be NULL (this happens if a variable
   1962  * is output by the producer and consumed by transform feedback, but not
   1963  * consumed by the consumer).
   1964  *
   1965  * If the variable has already been assigned a location, this function has no
   1966  * effect.
   1967  */
   1968 void
   1969 assign_varying_location(ir_variable *input_var, ir_variable *output_var,
   1970                         unsigned *input_index, unsigned *output_index)
   1971 {
   1972    if (output_var->location != -1) {
   1973       /* Location already assigned. */
   1974       return;
   1975    }
   1976 
   1977    if (input_var) {
   1978       assert(input_var->location == -1);
   1979       input_var->location = *input_index;
   1980    }
   1981 
   1982    output_var->location = *output_index;
   1983 
   1984    /* FINISHME: Support for "varying" records in GLSL 1.50. */
   1985    assert(!output_var->type->is_record());
   1986 
   1987    if (output_var->type->is_array()) {
   1988       const unsigned slots = output_var->type->length
   1989          * output_var->type->fields.array->matrix_columns;
   1990 
   1991       *output_index += slots;
   1992       *input_index += slots;
   1993    } else {
   1994       const unsigned slots = output_var->type->matrix_columns;
   1995 
   1996       *output_index += slots;
   1997       *input_index += slots;
   1998    }
   1999 }
   2000 
   2001 
   2002 /**
   2003  * Is the given variable a varying variable to be counted against the
   2004  * limit in ctx->Const.MaxVarying?
   2005  * This includes variables such as texcoords, colors and generic
   2006  * varyings, but excludes variables such as gl_FrontFacing and gl_FragCoord.
   2007  */
   2008 static bool
   2009 is_varying_var(GLenum shaderType, const ir_variable *var)
   2010 {
   2011    /* Only fragment shaders will take a varying variable as an input */
   2012    if (shaderType == GL_FRAGMENT_SHADER &&
   2013        var->mode == ir_var_in &&
   2014        var->explicit_location) {
   2015       switch (var->location) {
   2016       case FRAG_ATTRIB_WPOS:
   2017       case FRAG_ATTRIB_FACE:
   2018       case FRAG_ATTRIB_PNTC:
   2019          return false;
   2020       default:
   2021          return true;
   2022       }
   2023    }
   2024    return false;
   2025 }
   2026 
   2027 
   2028 /**
   2029  * Assign locations for all variables that are produced in one pipeline stage
   2030  * (the "producer") and consumed in the next stage (the "consumer").
   2031  *
   2032  * Variables produced by the producer may also be consumed by transform
   2033  * feedback.
   2034  *
   2035  * \param num_tfeedback_decls is the number of declarations indicating
   2036  *        variables that may be consumed by transform feedback.
   2037  *
   2038  * \param tfeedback_decls is a pointer to an array of tfeedback_decl objects
   2039  *        representing the result of parsing the strings passed to
   2040  *        glTransformFeedbackVaryings().  assign_location() will be called for
   2041  *        each of these objects that matches one of the outputs of the
   2042  *        producer.
   2043  *
   2044  * When num_tfeedback_decls is nonzero, it is permissible for the consumer to
   2045  * be NULL.  In this case, varying locations are assigned solely based on the
   2046  * requirements of transform feedback.
   2047  */
   2048 bool
   2049 assign_varying_locations(struct gl_context *ctx,
   2050 			 struct gl_shader_program *prog,
   2051 			 gl_shader *producer, gl_shader *consumer,
   2052                          unsigned num_tfeedback_decls,
   2053                          tfeedback_decl *tfeedback_decls)
   2054 {
   2055    /* FINISHME: Set dynamically when geometry shader support is added. */
   2056    unsigned output_index = VERT_RESULT_VAR0;
   2057    unsigned input_index = FRAG_ATTRIB_VAR0;
   2058 
   2059    /* Operate in a total of three passes.
   2060     *
   2061     * 1. Assign locations for any matching inputs and outputs.
   2062     *
   2063     * 2. Mark output variables in the producer that do not have locations as
   2064     *    not being outputs.  This lets the optimizer eliminate them.
   2065     *
   2066     * 3. Mark input variables in the consumer that do not have locations as
   2067     *    not being inputs.  This lets the optimizer eliminate them.
   2068     */
   2069 
   2070    link_invalidate_variable_locations(producer, ir_var_out, VERT_RESULT_VAR0);
   2071    if (consumer)
   2072       link_invalidate_variable_locations(consumer, ir_var_in, FRAG_ATTRIB_VAR0);
   2073 
   2074    foreach_list(node, producer->ir) {
   2075       ir_variable *const output_var = ((ir_instruction *) node)->as_variable();
   2076 
   2077       if ((output_var == NULL) || (output_var->mode != ir_var_out))
   2078 	 continue;
   2079 
   2080       ir_variable *input_var =
   2081 	 consumer ? consumer->symbols->get_variable(output_var->name) : NULL;
   2082 
   2083       if (input_var && input_var->mode != ir_var_in)
   2084          input_var = NULL;
   2085 
   2086       if (input_var) {
   2087          assign_varying_location(input_var, output_var, &input_index,
   2088                                  &output_index);
   2089       }
   2090 
   2091       for (unsigned i = 0; i < num_tfeedback_decls; ++i) {
   2092          if (!tfeedback_decls[i].is_varying())
   2093             continue;
   2094 
   2095          if (!tfeedback_decls[i].is_assigned() &&
   2096              tfeedback_decls[i].matches_var(output_var)) {
   2097             if (output_var->location == -1) {
   2098                assign_varying_location(input_var, output_var, &input_index,
   2099                                        &output_index);
   2100             }
   2101             if (!tfeedback_decls[i].assign_location(ctx, prog, output_var))
   2102                return false;
   2103          }
   2104       }
   2105    }
   2106 
   2107    unsigned varying_vectors = 0;
   2108 
   2109    if (consumer) {
   2110       foreach_list(node, consumer->ir) {
   2111          ir_variable *const var = ((ir_instruction *) node)->as_variable();
   2112 
   2113          if ((var == NULL) || (var->mode != ir_var_in))
   2114             continue;
   2115 
   2116          if (var->location == -1) {
   2117             if (prog->Version <= 120) {
   2118                /* On page 25 (page 31 of the PDF) of the GLSL 1.20 spec:
   2119                 *
   2120                 *     Only those varying variables used (i.e. read) in
   2121                 *     the fragment shader executable must be written to
   2122                 *     by the vertex shader executable; declaring
   2123                 *     superfluous varying variables in a vertex shader is
   2124                 *     permissible.
   2125                 *
   2126                 * We interpret this text as meaning that the VS must
   2127                 * write the variable for the FS to read it.  See
   2128                 * "glsl1-varying read but not written" in piglit.
   2129                 */
   2130 
   2131                linker_error(prog, "fragment shader varying %s not written "
   2132                             "by vertex shader\n.", var->name);
   2133             }
   2134 
   2135             /* An 'in' variable is only really a shader input if its
   2136              * value is written by the previous stage.
   2137              */
   2138             var->mode = ir_var_auto;
   2139          } else if (is_varying_var(consumer->Type, var)) {
   2140             /* The packing rules are used for vertex shader inputs are also
   2141              * used for fragment shader inputs.
   2142              */
   2143             varying_vectors += count_attribute_slots(var->type);
   2144          }
   2145       }
   2146    }
   2147 
   2148    if (ctx->API == API_OPENGLES2 || prog->Version == 100) {
   2149       if (varying_vectors > ctx->Const.MaxVarying) {
   2150          if (ctx->Const.GLSLSkipStrictMaxVaryingLimitCheck) {
   2151             linker_warning(prog, "shader uses too many varying vectors "
   2152                            "(%u > %u), but the driver will try to optimize "
   2153                            "them out; this is non-portable out-of-spec "
   2154                            "behavior\n",
   2155                            varying_vectors, ctx->Const.MaxVarying);
   2156          } else {
   2157             linker_error(prog, "shader uses too many varying vectors "
   2158                          "(%u > %u)\n",
   2159                          varying_vectors, ctx->Const.MaxVarying);
   2160             return false;
   2161          }
   2162       }
   2163    } else {
   2164       const unsigned float_components = varying_vectors * 4;
   2165       if (float_components > ctx->Const.MaxVarying * 4) {
   2166          if (ctx->Const.GLSLSkipStrictMaxVaryingLimitCheck) {
   2167             linker_warning(prog, "shader uses too many varying components "
   2168                            "(%u > %u), but the driver will try to optimize "
   2169                            "them out; this is non-portable out-of-spec "
   2170                            "behavior\n",
   2171                            float_components, ctx->Const.MaxVarying * 4);
   2172          } else {
   2173             linker_error(prog, "shader uses too many varying components "
   2174                          "(%u > %u)\n",
   2175                          float_components, ctx->Const.MaxVarying * 4);
   2176             return false;
   2177          }
   2178       }
   2179    }
   2180 
   2181    return true;
   2182 }
   2183 
   2184 
   2185 /**
   2186  * Store transform feedback location assignments into
   2187  * prog->LinkedTransformFeedback based on the data stored in tfeedback_decls.
   2188  *
   2189  * If an error occurs, the error is reported through linker_error() and false
   2190  * is returned.
   2191  */
   2192 static bool
   2193 store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog,
   2194                      unsigned num_tfeedback_decls,
   2195                      tfeedback_decl *tfeedback_decls)
   2196 {
   2197    bool separate_attribs_mode =
   2198       prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS;
   2199 
   2200    ralloc_free(prog->LinkedTransformFeedback.Varyings);
   2201    ralloc_free(prog->LinkedTransformFeedback.Outputs);
   2202 
   2203    memset(&prog->LinkedTransformFeedback, 0,
   2204           sizeof(prog->LinkedTransformFeedback));
   2205 
   2206    prog->LinkedTransformFeedback.Varyings =
   2207       rzalloc_array(prog,
   2208 		    struct gl_transform_feedback_varying_info,
   2209 		    num_tfeedback_decls);
   2210 
   2211    unsigned num_outputs = 0;
   2212    for (unsigned i = 0; i < num_tfeedback_decls; ++i)
   2213       if (!tfeedback_decls[i].accumulate_num_outputs(prog, &num_outputs))
   2214          return false;
   2215 
   2216    prog->LinkedTransformFeedback.Outputs =
   2217       rzalloc_array(prog,
   2218                     struct gl_transform_feedback_output,
   2219                     num_outputs);
   2220 
   2221    unsigned num_buffers = 0;
   2222 
   2223    if (separate_attribs_mode) {
   2224       /* GL_SEPARATE_ATTRIBS */
   2225       for (unsigned i = 0; i < num_tfeedback_decls; ++i) {
   2226          if (!tfeedback_decls[i].store(ctx, prog, &prog->LinkedTransformFeedback,
   2227                                        num_buffers, num_outputs))
   2228             return false;
   2229 
   2230          num_buffers++;
   2231       }
   2232    }
   2233    else {
   2234       /* GL_INVERLEAVED_ATTRIBS */
   2235       for (unsigned i = 0; i < num_tfeedback_decls; ++i) {
   2236          if (tfeedback_decls[i].is_next_buffer_separator()) {
   2237             num_buffers++;
   2238             continue;
   2239          }
   2240 
   2241          if (!tfeedback_decls[i].store(ctx, prog,
   2242                                        &prog->LinkedTransformFeedback,
   2243                                        num_buffers, num_outputs))
   2244             return false;
   2245       }
   2246       num_buffers++;
   2247    }
   2248 
   2249    assert(prog->LinkedTransformFeedback.NumOutputs == num_outputs);
   2250 
   2251    prog->LinkedTransformFeedback.NumBuffers = num_buffers;
   2252    return true;
   2253 }
   2254 
   2255 /**
   2256  * Store the gl_FragDepth layout in the gl_shader_program struct.
   2257  */
   2258 static void
   2259 store_fragdepth_layout(struct gl_shader_program *prog)
   2260 {
   2261    if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) {
   2262       return;
   2263    }
   2264 
   2265    struct exec_list *ir = prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->ir;
   2266 
   2267    /* We don't look up the gl_FragDepth symbol directly because if
   2268     * gl_FragDepth is not used in the shader, it's removed from the IR.
   2269     * However, the symbol won't be removed from the symbol table.
   2270     *
   2271     * We're only interested in the cases where the variable is NOT removed
   2272     * from the IR.
   2273     */
   2274    foreach_list(node, ir) {
   2275       ir_variable *const var = ((ir_instruction *) node)->as_variable();
   2276 
   2277       if (var == NULL || var->mode != ir_var_out) {
   2278          continue;
   2279       }
   2280 
   2281       if (strcmp(var->name, "gl_FragDepth") == 0) {
   2282          switch (var->depth_layout) {
   2283          case ir_depth_layout_none:
   2284             prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_NONE;
   2285             return;
   2286          case ir_depth_layout_any:
   2287             prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_ANY;
   2288             return;
   2289          case ir_depth_layout_greater:
   2290             prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_GREATER;
   2291             return;
   2292          case ir_depth_layout_less:
   2293             prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_LESS;
   2294             return;
   2295          case ir_depth_layout_unchanged:
   2296             prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_UNCHANGED;
   2297             return;
   2298          default:
   2299             assert(0);
   2300             return;
   2301          }
   2302       }
   2303    }
   2304 }
   2305 
   2306 /**
   2307  * Validate the resources used by a program versus the implementation limits
   2308  */
   2309 static bool
   2310 check_resources(struct gl_context *ctx, struct gl_shader_program *prog)
   2311 {
   2312    static const char *const shader_names[MESA_SHADER_TYPES] = {
   2313       "vertex", "fragment", "geometry"
   2314    };
   2315 
   2316    const unsigned max_samplers[MESA_SHADER_TYPES] = {
   2317       ctx->Const.MaxVertexTextureImageUnits,
   2318       ctx->Const.MaxTextureImageUnits,
   2319       ctx->Const.MaxGeometryTextureImageUnits
   2320    };
   2321 
   2322    const unsigned max_uniform_components[MESA_SHADER_TYPES] = {
   2323       ctx->Const.VertexProgram.MaxUniformComponents,
   2324       ctx->Const.FragmentProgram.MaxUniformComponents,
   2325       0          /* FINISHME: Geometry shaders. */
   2326    };
   2327 
   2328    const unsigned max_uniform_blocks[MESA_SHADER_TYPES] = {
   2329       ctx->Const.VertexProgram.MaxUniformBlocks,
   2330       ctx->Const.FragmentProgram.MaxUniformBlocks,
   2331       ctx->Const.GeometryProgram.MaxUniformBlocks,
   2332    };
   2333 
   2334    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
   2335       struct gl_shader *sh = prog->_LinkedShaders[i];
   2336 
   2337       if (sh == NULL)
   2338 	 continue;
   2339 
   2340       if (sh->num_samplers > max_samplers[i]) {
   2341 	 linker_error(prog, "Too many %s shader texture samplers",
   2342 		      shader_names[i]);
   2343       }
   2344 
   2345       if (sh->num_uniform_components > max_uniform_components[i]) {
   2346          if (ctx->Const.GLSLSkipStrictMaxUniformLimitCheck) {
   2347             linker_warning(prog, "Too many %s shader uniform components, "
   2348                            "but the driver will try to optimize them out; "
   2349                            "this is non-portable out-of-spec behavior\n",
   2350                            shader_names[i]);
   2351          } else {
   2352             linker_error(prog, "Too many %s shader uniform components",
   2353                          shader_names[i]);
   2354          }
   2355       }
   2356    }
   2357 
   2358    unsigned blocks[MESA_SHADER_TYPES] = {0};
   2359    unsigned total_uniform_blocks = 0;
   2360 
   2361    for (unsigned i = 0; i < prog->NumUniformBlocks; i++) {
   2362       for (unsigned j = 0; j < MESA_SHADER_TYPES; j++) {
   2363 	 if (prog->UniformBlockStageIndex[j][i] != -1) {
   2364 	    blocks[j]++;
   2365 	    total_uniform_blocks++;
   2366 	 }
   2367       }
   2368 
   2369       if (total_uniform_blocks > ctx->Const.MaxCombinedUniformBlocks) {
   2370 	 linker_error(prog, "Too many combined uniform blocks (%d/%d)",
   2371 		      prog->NumUniformBlocks,
   2372 		      ctx->Const.MaxCombinedUniformBlocks);
   2373       } else {
   2374 	 for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
   2375 	    if (blocks[i] > max_uniform_blocks[i]) {
   2376 	       linker_error(prog, "Too many %s uniform blocks (%d/%d)",
   2377 			    shader_names[i],
   2378 			    blocks[i],
   2379 			    max_uniform_blocks[i]);
   2380 	       break;
   2381 	    }
   2382 	 }
   2383       }
   2384    }
   2385 
   2386    return prog->LinkStatus;
   2387 }
   2388 
   2389 void
   2390 link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
   2391 {
   2392    tfeedback_decl *tfeedback_decls = NULL;
   2393    unsigned num_tfeedback_decls = prog->TransformFeedback.NumVarying;
   2394 
   2395    void *mem_ctx = ralloc_context(NULL); // temporary linker context
   2396 
   2397    prog->LinkStatus = false;
   2398    prog->Validated = false;
   2399    prog->_Used = false;
   2400 
   2401    ralloc_free(prog->InfoLog);
   2402    prog->InfoLog = ralloc_strdup(NULL, "");
   2403 
   2404    ralloc_free(prog->UniformBlocks);
   2405    prog->UniformBlocks = NULL;
   2406    prog->NumUniformBlocks = 0;
   2407    for (int i = 0; i < MESA_SHADER_TYPES; i++) {
   2408       ralloc_free(prog->UniformBlockStageIndex[i]);
   2409       prog->UniformBlockStageIndex[i] = NULL;
   2410    }
   2411 
   2412    /* Separate the shaders into groups based on their type.
   2413     */
   2414    struct gl_shader **vert_shader_list;
   2415    unsigned num_vert_shaders = 0;
   2416    struct gl_shader **frag_shader_list;
   2417    unsigned num_frag_shaders = 0;
   2418 
   2419    vert_shader_list = (struct gl_shader **)
   2420       calloc(2 * prog->NumShaders, sizeof(struct gl_shader *));
   2421    frag_shader_list =  &vert_shader_list[prog->NumShaders];
   2422 
   2423    unsigned min_version = UINT_MAX;
   2424    unsigned max_version = 0;
   2425    for (unsigned i = 0; i < prog->NumShaders; i++) {
   2426       min_version = MIN2(min_version, prog->Shaders[i]->Version);
   2427       max_version = MAX2(max_version, prog->Shaders[i]->Version);
   2428 
   2429       switch (prog->Shaders[i]->Type) {
   2430       case GL_VERTEX_SHADER:
   2431 	 vert_shader_list[num_vert_shaders] = prog->Shaders[i];
   2432 	 num_vert_shaders++;
   2433 	 break;
   2434       case GL_FRAGMENT_SHADER:
   2435 	 frag_shader_list[num_frag_shaders] = prog->Shaders[i];
   2436 	 num_frag_shaders++;
   2437 	 break;
   2438       case GL_GEOMETRY_SHADER:
   2439 	 /* FINISHME: Support geometry shaders. */
   2440 	 assert(prog->Shaders[i]->Type != GL_GEOMETRY_SHADER);
   2441 	 break;
   2442       }
   2443    }
   2444 
   2445    /* Previous to GLSL version 1.30, different compilation units could mix and
   2446     * match shading language versions.  With GLSL 1.30 and later, the versions
   2447     * of all shaders must match.
   2448     */
   2449    assert(min_version >= 100);
   2450    assert(max_version <= 140);
   2451    if ((max_version >= 130 || min_version == 100)
   2452        && min_version != max_version) {
   2453       linker_error(prog, "all shaders must use same shading "
   2454 		   "language version\n");
   2455       goto done;
   2456    }
   2457 
   2458    prog->Version = max_version;
   2459 
   2460    for (unsigned int i = 0; i < MESA_SHADER_TYPES; i++) {
   2461       if (prog->_LinkedShaders[i] != NULL)
   2462 	 ctx->Driver.DeleteShader(ctx, prog->_LinkedShaders[i]);
   2463 
   2464       prog->_LinkedShaders[i] = NULL;
   2465    }
   2466 
   2467    /* Link all shaders for a particular stage and validate the result.
   2468     */
   2469    if (num_vert_shaders > 0) {
   2470       gl_shader *const sh =
   2471 	 link_intrastage_shaders(mem_ctx, ctx, prog, vert_shader_list,
   2472 				 num_vert_shaders);
   2473 
   2474       if (sh == NULL)
   2475 	 goto done;
   2476 
   2477       if (!validate_vertex_shader_executable(prog, sh))
   2478 	 goto done;
   2479 
   2480       _mesa_reference_shader(ctx, &prog->_LinkedShaders[MESA_SHADER_VERTEX],
   2481 			     sh);
   2482    }
   2483 
   2484    if (num_frag_shaders > 0) {
   2485       gl_shader *const sh =
   2486 	 link_intrastage_shaders(mem_ctx, ctx, prog, frag_shader_list,
   2487 				 num_frag_shaders);
   2488 
   2489       if (sh == NULL)
   2490 	 goto done;
   2491 
   2492       if (!validate_fragment_shader_executable(prog, sh))
   2493 	 goto done;
   2494 
   2495       _mesa_reference_shader(ctx, &prog->_LinkedShaders[MESA_SHADER_FRAGMENT],
   2496 			     sh);
   2497    }
   2498 
   2499    /* Here begins the inter-stage linking phase.  Some initial validation is
   2500     * performed, then locations are assigned for uniforms, attributes, and
   2501     * varyings.
   2502     */
   2503    if (cross_validate_uniforms(prog)) {
   2504       unsigned prev;
   2505 
   2506       for (prev = 0; prev < MESA_SHADER_TYPES; prev++) {
   2507 	 if (prog->_LinkedShaders[prev] != NULL)
   2508 	    break;
   2509       }
   2510 
   2511       /* Validate the inputs of each stage with the output of the preceding
   2512        * stage.
   2513        */
   2514       for (unsigned i = prev + 1; i < MESA_SHADER_TYPES; i++) {
   2515 	 if (prog->_LinkedShaders[i] == NULL)
   2516 	    continue;
   2517 
   2518 	 if (!cross_validate_outputs_to_inputs(prog,
   2519 					       prog->_LinkedShaders[prev],
   2520 					       prog->_LinkedShaders[i]))
   2521 	    goto done;
   2522 
   2523 	 prev = i;
   2524       }
   2525 
   2526       prog->LinkStatus = true;
   2527    }
   2528 
   2529    /* Implement the GLSL 1.30+ rule for discard vs infinite loops Do
   2530     * it before optimization because we want most of the checks to get
   2531     * dropped thanks to constant propagation.
   2532     */
   2533    if (max_version >= 130) {
   2534       struct gl_shader *sh = prog->_LinkedShaders[MESA_SHADER_FRAGMENT];
   2535       if (sh) {
   2536 	 lower_discard_flow(sh->ir);
   2537       }
   2538    }
   2539 
   2540    if (!interstage_cross_validate_uniform_blocks(prog))
   2541       goto done;
   2542 
   2543    /* Do common optimization before assigning storage for attributes,
   2544     * uniforms, and varyings.  Later optimization could possibly make
   2545     * some of that unused.
   2546     */
   2547    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
   2548       if (prog->_LinkedShaders[i] == NULL)
   2549 	 continue;
   2550 
   2551       detect_recursion_linked(prog, prog->_LinkedShaders[i]->ir);
   2552       if (!prog->LinkStatus)
   2553 	 goto done;
   2554 
   2555       if (ctx->ShaderCompilerOptions[i].LowerClipDistance)
   2556          lower_clip_distance(prog->_LinkedShaders[i]->ir);
   2557 
   2558       unsigned max_unroll = ctx->ShaderCompilerOptions[i].MaxUnrollIterations;
   2559 
   2560       while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, false, max_unroll))
   2561 	 ;
   2562    }
   2563 
   2564    /* FINISHME: The value of the max_attribute_index parameter is
   2565     * FINISHME: implementation dependent based on the value of
   2566     * FINISHME: GL_MAX_VERTEX_ATTRIBS.  GL_MAX_VERTEX_ATTRIBS must be
   2567     * FINISHME: at least 16, so hardcode 16 for now.
   2568     */
   2569    if (!assign_attribute_or_color_locations(prog, MESA_SHADER_VERTEX, 16)) {
   2570       goto done;
   2571    }
   2572 
   2573    if (!assign_attribute_or_color_locations(prog, MESA_SHADER_FRAGMENT, MAX2(ctx->Const.MaxDrawBuffers, ctx->Const.MaxDualSourceDrawBuffers))) {
   2574       goto done;
   2575    }
   2576 
   2577    unsigned prev;
   2578    for (prev = 0; prev < MESA_SHADER_TYPES; prev++) {
   2579       if (prog->_LinkedShaders[prev] != NULL)
   2580 	 break;
   2581    }
   2582 
   2583    if (num_tfeedback_decls != 0) {
   2584       /* From GL_EXT_transform_feedback:
   2585        *   A program will fail to link if:
   2586        *
   2587        *   * the <count> specified by TransformFeedbackVaryingsEXT is
   2588        *     non-zero, but the program object has no vertex or geometry
   2589        *     shader;
   2590        */
   2591       if (prev >= MESA_SHADER_FRAGMENT) {
   2592          linker_error(prog, "Transform feedback varyings specified, but "
   2593                       "no vertex or geometry shader is present.");
   2594          goto done;
   2595       }
   2596 
   2597       tfeedback_decls = ralloc_array(mem_ctx, tfeedback_decl,
   2598                                      prog->TransformFeedback.NumVarying);
   2599       if (!parse_tfeedback_decls(ctx, prog, mem_ctx, num_tfeedback_decls,
   2600                                  prog->TransformFeedback.VaryingNames,
   2601                                  tfeedback_decls))
   2602          goto done;
   2603    }
   2604 
   2605    for (unsigned i = prev + 1; i < MESA_SHADER_TYPES; i++) {
   2606       if (prog->_LinkedShaders[i] == NULL)
   2607 	 continue;
   2608 
   2609       if (!assign_varying_locations(
   2610              ctx, prog, prog->_LinkedShaders[prev], prog->_LinkedShaders[i],
   2611              i == MESA_SHADER_FRAGMENT ? num_tfeedback_decls : 0,
   2612              tfeedback_decls))
   2613 	 goto done;
   2614 
   2615       prev = i;
   2616    }
   2617 
   2618    if (prev != MESA_SHADER_FRAGMENT && num_tfeedback_decls != 0) {
   2619       /* There was no fragment shader, but we still have to assign varying
   2620        * locations for use by transform feedback.
   2621        */
   2622       if (!assign_varying_locations(
   2623              ctx, prog, prog->_LinkedShaders[prev], NULL, num_tfeedback_decls,
   2624              tfeedback_decls))
   2625          goto done;
   2626    }
   2627 
   2628    if (!store_tfeedback_info(ctx, prog, num_tfeedback_decls, tfeedback_decls))
   2629       goto done;
   2630 
   2631    if (prog->_LinkedShaders[MESA_SHADER_VERTEX] != NULL) {
   2632       demote_shader_inputs_and_outputs(prog->_LinkedShaders[MESA_SHADER_VERTEX],
   2633 				       ir_var_out);
   2634 
   2635       /* Eliminate code that is now dead due to unused vertex outputs being
   2636        * demoted.
   2637        */
   2638       while (do_dead_code(prog->_LinkedShaders[MESA_SHADER_VERTEX]->ir, false))
   2639 	 ;
   2640    }
   2641 
   2642    if (prog->_LinkedShaders[MESA_SHADER_GEOMETRY] != NULL) {
   2643       gl_shader *const sh = prog->_LinkedShaders[MESA_SHADER_GEOMETRY];
   2644 
   2645       demote_shader_inputs_and_outputs(sh, ir_var_in);
   2646       demote_shader_inputs_and_outputs(sh, ir_var_inout);
   2647       demote_shader_inputs_and_outputs(sh, ir_var_out);
   2648 
   2649       /* Eliminate code that is now dead due to unused geometry outputs being
   2650        * demoted.
   2651        */
   2652       while (do_dead_code(prog->_LinkedShaders[MESA_SHADER_GEOMETRY]->ir, false))
   2653 	 ;
   2654    }
   2655 
   2656    if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] != NULL) {
   2657       gl_shader *const sh = prog->_LinkedShaders[MESA_SHADER_FRAGMENT];
   2658 
   2659       demote_shader_inputs_and_outputs(sh, ir_var_in);
   2660 
   2661       /* Eliminate code that is now dead due to unused fragment inputs being
   2662        * demoted.  This shouldn't actually do anything other than remove
   2663        * declarations of the (now unused) global variables.
   2664        */
   2665       while (do_dead_code(prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->ir, false))
   2666 	 ;
   2667    }
   2668 
   2669    update_array_sizes(prog);
   2670    link_assign_uniform_locations(prog);
   2671    store_fragdepth_layout(prog);
   2672 
   2673    if (!check_resources(ctx, prog))
   2674       goto done;
   2675 
   2676    /* OpenGL ES requires that a vertex shader and a fragment shader both be
   2677     * present in a linked program.  By checking for use of shading language
   2678     * version 1.00, we also catch the GL_ARB_ES2_compatibility case.
   2679     */
   2680    if (!prog->InternalSeparateShader &&
   2681        (ctx->API == API_OPENGLES2 || prog->Version == 100)) {
   2682       if (prog->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) {
   2683 	 linker_error(prog, "program lacks a vertex shader\n");
   2684       } else if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) {
   2685 	 linker_error(prog, "program lacks a fragment shader\n");
   2686       }
   2687    }
   2688 
   2689    /* FINISHME: Assign fragment shader output locations. */
   2690 
   2691 done:
   2692    free(vert_shader_list);
   2693 
   2694    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
   2695       if (prog->_LinkedShaders[i] == NULL)
   2696 	 continue;
   2697 
   2698       /* Retain any live IR, but trash the rest. */
   2699       reparent_ir(prog->_LinkedShaders[i]->ir, prog->_LinkedShaders[i]->ir);
   2700 
   2701       /* The symbol table in the linked shaders may contain references to
   2702        * variables that were removed (e.g., unused uniforms).  Since it may
   2703        * contain junk, there is no possible valid use.  Delete it and set the
   2704        * pointer to NULL.
   2705        */
   2706       delete prog->_LinkedShaders[i]->symbols;
   2707       prog->_LinkedShaders[i]->symbols = NULL;
   2708    }
   2709 
   2710    ralloc_free(mem_ctx);
   2711 }
   2712