Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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@intel.com>
  65.  */
  66. #include <stdlib.h>
  67. #include <stdio.h>
  68. #include <stdarg.h>
  69. #include <limits.h>
  70.  
  71. #include "main/core.h"
  72. #include "glsl_symbol_table.h"
  73. #include "ir.h"
  74. #include "program.h"
  75. #include "program/hash_table.h"
  76. #include "linker.h"
  77. #include "ir_optimization.h"
  78.  
  79. extern "C" {
  80. #include "main/shaderobj.h"
  81. }
  82.  
  83. /**
  84.  * Visitor that determines whether or not a variable is ever written.
  85.  */
  86. class find_assignment_visitor : public ir_hierarchical_visitor {
  87. public:
  88.    find_assignment_visitor(const char *name)
  89.       : name(name), found(false)
  90.    {
  91.       /* empty */
  92.    }
  93.  
  94.    virtual ir_visitor_status visit_enter(ir_assignment *ir)
  95.    {
  96.       ir_variable *const var = ir->lhs->variable_referenced();
  97.  
  98.       if (strcmp(name, var->name) == 0) {
  99.          found = true;
  100.          return visit_stop;
  101.       }
  102.  
  103.       return visit_continue_with_parent;
  104.    }
  105.  
  106.    virtual ir_visitor_status visit_enter(ir_call *ir)
  107.    {
  108.       exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator();
  109.       foreach_iter(exec_list_iterator, iter, *ir) {
  110.          ir_rvalue *param_rval = (ir_rvalue *)iter.get();
  111.          ir_variable *sig_param = (ir_variable *)sig_iter.get();
  112.  
  113.          if (sig_param->mode == ir_var_out ||
  114.              sig_param->mode == ir_var_inout) {
  115.             ir_variable *var = param_rval->variable_referenced();
  116.             if (var && strcmp(name, var->name) == 0) {
  117.                found = true;
  118.                return visit_stop;
  119.             }
  120.          }
  121.          sig_iter.next();
  122.       }
  123.  
  124.       return visit_continue_with_parent;
  125.    }
  126.  
  127.    bool variable_found()
  128.    {
  129.       return found;
  130.    }
  131.  
  132. private:
  133.    const char *name;       /**< Find writes to a variable with this name. */
  134.    bool found;             /**< Was a write to the variable found? */
  135. };
  136.  
  137.  
  138. /**
  139.  * Visitor that determines whether or not a variable is ever read.
  140.  */
  141. class find_deref_visitor : public ir_hierarchical_visitor {
  142. public:
  143.    find_deref_visitor(const char *name)
  144.       : name(name), found(false)
  145.    {
  146.       /* empty */
  147.    }
  148.  
  149.    virtual ir_visitor_status visit(ir_dereference_variable *ir)
  150.    {
  151.       if (strcmp(this->name, ir->var->name) == 0) {
  152.          this->found = true;
  153.          return visit_stop;
  154.       }
  155.  
  156.       return visit_continue;
  157.    }
  158.  
  159.    bool variable_found() const
  160.    {
  161.       return this->found;
  162.    }
  163.  
  164. private:
  165.    const char *name;       /**< Find writes to a variable with this name. */
  166.    bool found;             /**< Was a write to the variable found? */
  167. };
  168.  
  169.  
  170. void
  171. linker_error_printf(gl_shader_program *prog, const char *fmt, ...)
  172. {
  173.    va_list ap;
  174.  
  175.    ralloc_strcat(&prog->InfoLog, "error: ");
  176.    va_start(ap, fmt);
  177.    ralloc_vasprintf_append(&prog->InfoLog, fmt, ap);
  178.    va_end(ap);
  179. }
  180.  
  181.  
  182. void
  183. invalidate_variable_locations(gl_shader *sh, enum ir_variable_mode mode,
  184.                               int generic_base)
  185. {
  186.    foreach_list(node, sh->ir) {
  187.       ir_variable *const var = ((ir_instruction *) node)->as_variable();
  188.  
  189.       if ((var == NULL) || (var->mode != (unsigned) mode))
  190.          continue;
  191.  
  192.       /* Only assign locations for generic attributes / varyings / etc.
  193.        */
  194.       if ((var->location >= generic_base) && !var->explicit_location)
  195.           var->location = -1;
  196.    }
  197. }
  198.  
  199.  
  200. /**
  201.  * Determine the number of attribute slots required for a particular type
  202.  *
  203.  * This code is here because it implements the language rules of a specific
  204.  * GLSL version.  Since it's a property of the language and not a property of
  205.  * types in general, it doesn't really belong in glsl_type.
  206.  */
  207. unsigned
  208. count_attribute_slots(const glsl_type *t)
  209. {
  210.    /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec:
  211.     *
  212.     *     "A scalar input counts the same amount against this limit as a vec4,
  213.     *     so applications may want to consider packing groups of four
  214.     *     unrelated float inputs together into a vector to better utilize the
  215.     *     capabilities of the underlying hardware. A matrix input will use up
  216.     *     multiple locations.  The number of locations used will equal the
  217.     *     number of columns in the matrix."
  218.     *
  219.     * The spec does not explicitly say how arrays are counted.  However, it
  220.     * should be safe to assume the total number of slots consumed by an array
  221.     * is the number of entries in the array multiplied by the number of slots
  222.     * consumed by a single element of the array.
  223.     */
  224.  
  225.    if (t->is_array())
  226.       return t->array_size() * count_attribute_slots(t->element_type());
  227.  
  228.    if (t->is_matrix())
  229.       return t->matrix_columns;
  230.  
  231.    return 1;
  232. }
  233.  
  234.  
  235. /**
  236.  * Verify that a vertex shader executable meets all semantic requirements
  237.  *
  238.  * \param shader  Vertex shader executable to be verified
  239.  */
  240. bool
  241. validate_vertex_shader_executable(struct gl_shader_program *prog,
  242.                                   struct gl_shader *shader)
  243. {
  244.    if (shader == NULL)
  245.       return true;
  246.  
  247.    find_assignment_visitor find("gl_Position");
  248.    find.run(shader->ir);
  249.    if (!find.variable_found()) {
  250.       linker_error_printf(prog,
  251.                           "vertex shader does not write to `gl_Position'\n");
  252.       return false;
  253.    }
  254.  
  255.    return true;
  256. }
  257.  
  258.  
  259. /**
  260.  * Verify that a fragment shader executable meets all semantic requirements
  261.  *
  262.  * \param shader  Fragment shader executable to be verified
  263.  */
  264. bool
  265. validate_fragment_shader_executable(struct gl_shader_program *prog,
  266.                                     struct gl_shader *shader)
  267. {
  268.    if (shader == NULL)
  269.       return true;
  270.  
  271.    find_assignment_visitor frag_color("gl_FragColor");
  272.    find_assignment_visitor frag_data("gl_FragData");
  273.  
  274.    frag_color.run(shader->ir);
  275.    frag_data.run(shader->ir);
  276.  
  277.    if (frag_color.variable_found() && frag_data.variable_found()) {
  278.       linker_error_printf(prog,  "fragment shader writes to both "
  279.                           "`gl_FragColor' and `gl_FragData'\n");
  280.       return false;
  281.    }
  282.  
  283.    return true;
  284. }
  285.  
  286.  
  287. /**
  288.  * Generate a string describing the mode of a variable
  289.  */
  290. static const char *
  291. mode_string(const ir_variable *var)
  292. {
  293.    switch (var->mode) {
  294.    case ir_var_auto:
  295.       return (var->read_only) ? "global constant" : "global variable";
  296.  
  297.    case ir_var_uniform: return "uniform";
  298.    case ir_var_in:      return "shader input";
  299.    case ir_var_out:     return "shader output";
  300.    case ir_var_inout:   return "shader inout";
  301.  
  302.    case ir_var_temporary:
  303.    default:
  304.       assert(!"Should not get here.");
  305.       return "invalid variable";
  306.    }
  307. }
  308.  
  309.  
  310. /**
  311.  * Perform validation of global variables used across multiple shaders
  312.  */
  313. bool
  314. cross_validate_globals(struct gl_shader_program *prog,
  315.                        struct gl_shader **shader_list,
  316.                        unsigned num_shaders,
  317.                        bool uniforms_only)
  318. {
  319.    /* Examine all of the uniforms in all of the shaders and cross validate
  320.     * them.
  321.     */
  322.    glsl_symbol_table variables;
  323.    for (unsigned i = 0; i < num_shaders; i++) {
  324.       if (shader_list[i] == NULL)
  325.          continue;
  326.  
  327.       foreach_list(node, shader_list[i]->ir) {
  328.          ir_variable *const var = ((ir_instruction *) node)->as_variable();
  329.  
  330.          if (var == NULL)
  331.             continue;
  332.  
  333.          if (uniforms_only && (var->mode != ir_var_uniform))
  334.             continue;
  335.  
  336.          /* Don't cross validate temporaries that are at global scope.  These
  337.           * will eventually get pulled into the shaders 'main'.
  338.           */
  339.          if (var->mode == ir_var_temporary)
  340.             continue;
  341.  
  342.          /* If a global with this name has already been seen, verify that the
  343.           * new instance has the same type.  In addition, if the globals have
  344.           * initializers, the values of the initializers must be the same.
  345.           */
  346.          ir_variable *const existing = variables.get_variable(var->name);
  347.          if (existing != NULL) {
  348.             if (var->type != existing->type) {
  349.                /* Consider the types to be "the same" if both types are arrays
  350.                 * of the same type and one of the arrays is implicitly sized.
  351.                 * In addition, set the type of the linked variable to the
  352.                 * explicitly sized array.
  353.                 */
  354.                if (var->type->is_array()
  355.                    && existing->type->is_array()
  356.                    && (var->type->fields.array == existing->type->fields.array)
  357.                    && ((var->type->length == 0)
  358.                        || (existing->type->length == 0))) {
  359.                   if (var->type->length != 0) {
  360.                      existing->type = var->type;
  361.                   }
  362.                } else {
  363.                   linker_error_printf(prog, "%s `%s' declared as type "
  364.                                       "`%s' and type `%s'\n",
  365.                                       mode_string(var),
  366.                                       var->name, var->type->name,
  367.                                       existing->type->name);
  368.                   return false;
  369.                }
  370.             }
  371.  
  372.             if (var->explicit_location) {
  373.                if (existing->explicit_location
  374.                    && (var->location != existing->location)) {
  375.                      linker_error_printf(prog, "explicit locations for %s "
  376.                                          "`%s' have differing values\n",
  377.                                          mode_string(var), var->name);
  378.                      return false;
  379.                }
  380.  
  381.                existing->location = var->location;
  382.                existing->explicit_location = true;
  383.             }
  384.  
  385.             /* FINISHME: Handle non-constant initializers.
  386.              */
  387.             if (var->constant_value != NULL) {
  388.                if (existing->constant_value != NULL) {
  389.                   if (!var->constant_value->has_value(existing->constant_value)) {
  390.                      linker_error_printf(prog, "initializers for %s "
  391.                                          "`%s' have differing values\n",
  392.                                          mode_string(var), var->name);
  393.                      return false;
  394.                   }
  395.                } else
  396.                   /* If the first-seen instance of a particular uniform did not
  397.                    * have an initializer but a later instance does, copy the
  398.                    * initializer to the version stored in the symbol table.
  399.                    */
  400.                   /* FINISHME: This is wrong.  The constant_value field should
  401.                    * FINISHME: not be modified!  Imagine a case where a shader
  402.                    * FINISHME: without an initializer is linked in two different
  403.                    * FINISHME: programs with shaders that have differing
  404.                    * FINISHME: initializers.  Linking with the first will
  405.                    * FINISHME: modify the shader, and linking with the second
  406.                    * FINISHME: will fail.
  407.                    */
  408.                   existing->constant_value =
  409.                      var->constant_value->clone(ralloc_parent(existing), NULL);
  410.             }
  411.  
  412.             if (existing->invariant != var->invariant) {
  413.                linker_error_printf(prog, "declarations for %s `%s' have "
  414.                                    "mismatching invariant qualifiers\n",
  415.                                    mode_string(var), var->name);
  416.                return false;
  417.             }
  418.             if (existing->centroid != var->centroid) {
  419.                linker_error_printf(prog, "declarations for %s `%s' have "
  420.                                    "mismatching centroid qualifiers\n",
  421.                                    mode_string(var), var->name);
  422.                return false;
  423.             }
  424.          } else
  425.             variables.add_variable(var);
  426.       }
  427.    }
  428.  
  429.    return true;
  430. }
  431.  
  432.  
  433. /**
  434.  * Perform validation of uniforms used across multiple shader stages
  435.  */
  436. bool
  437. cross_validate_uniforms(struct gl_shader_program *prog)
  438. {
  439.    return cross_validate_globals(prog, prog->_LinkedShaders,
  440.                                  MESA_SHADER_TYPES, true);
  441. }
  442.  
  443.  
  444. /**
  445.  * Validate that outputs from one stage match inputs of another
  446.  */
  447. bool
  448. cross_validate_outputs_to_inputs(struct gl_shader_program *prog,
  449.                                  gl_shader *producer, gl_shader *consumer)
  450. {
  451.    glsl_symbol_table parameters;
  452.    /* FINISHME: Figure these out dynamically. */
  453.    const char *const producer_stage = "vertex";
  454.    const char *const consumer_stage = "fragment";
  455.  
  456.    /* Find all shader outputs in the "producer" stage.
  457.     */
  458.    foreach_list(node, producer->ir) {
  459.       ir_variable *const var = ((ir_instruction *) node)->as_variable();
  460.  
  461.       /* FINISHME: For geometry shaders, this should also look for inout
  462.        * FINISHME: variables.
  463.        */
  464.       if ((var == NULL) || (var->mode != ir_var_out))
  465.          continue;
  466.  
  467.       parameters.add_variable(var);
  468.    }
  469.  
  470.  
  471.    /* Find all shader inputs in the "consumer" stage.  Any variables that have
  472.     * matching outputs already in the symbol table must have the same type and
  473.     * qualifiers.
  474.     */
  475.    foreach_list(node, consumer->ir) {
  476.       ir_variable *const input = ((ir_instruction *) node)->as_variable();
  477.  
  478.       /* FINISHME: For geometry shaders, this should also look for inout
  479.        * FINISHME: variables.
  480.        */
  481.       if ((input == NULL) || (input->mode != ir_var_in))
  482.          continue;
  483.  
  484.       ir_variable *const output = parameters.get_variable(input->name);
  485.       if (output != NULL) {
  486.          /* Check that the types match between stages.
  487.           */
  488.          if (input->type != output->type) {
  489.             /* There is a bit of a special case for gl_TexCoord.  This
  490.              * built-in is unsized by default.  Appliations that variable
  491.              * access it must redeclare it with a size.  There is some
  492.              * language in the GLSL spec that implies the fragment shader
  493.              * and vertex shader do not have to agree on this size.  Other
  494.              * driver behave this way, and one or two applications seem to
  495.              * rely on it.
  496.              *
  497.              * Neither declaration needs to be modified here because the array
  498.              * sizes are fixed later when update_array_sizes is called.
  499.              *
  500.              * From page 48 (page 54 of the PDF) of the GLSL 1.10 spec:
  501.              *
  502.              *     "Unlike user-defined varying variables, the built-in
  503.              *     varying variables don't have a strict one-to-one
  504.              *     correspondence between the vertex language and the
  505.              *     fragment language."
  506.              */
  507.             if (!output->type->is_array()
  508.                 || (strncmp("gl_", output->name, 3) != 0)) {
  509.                linker_error_printf(prog,
  510.                                    "%s shader output `%s' declared as "
  511.                                    "type `%s', but %s shader input declared "
  512.                                    "as type `%s'\n",
  513.                                    producer_stage, output->name,
  514.                                    output->type->name,
  515.                                    consumer_stage, input->type->name);
  516.                return false;
  517.             }
  518.          }
  519.  
  520.          /* Check that all of the qualifiers match between stages.
  521.           */
  522.          if (input->centroid != output->centroid) {
  523.             linker_error_printf(prog,
  524.                                 "%s shader output `%s' %s centroid qualifier, "
  525.                                 "but %s shader input %s centroid qualifier\n",
  526.                                 producer_stage,
  527.                                 output->name,
  528.                                 (output->centroid) ? "has" : "lacks",
  529.                                 consumer_stage,
  530.                                 (input->centroid) ? "has" : "lacks");
  531.             return false;
  532.          }
  533.  
  534.          if (input->invariant != output->invariant) {
  535.             linker_error_printf(prog,
  536.                                 "%s shader output `%s' %s invariant qualifier, "
  537.                                 "but %s shader input %s invariant qualifier\n",
  538.                                 producer_stage,
  539.                                 output->name,
  540.                                 (output->invariant) ? "has" : "lacks",
  541.                                 consumer_stage,
  542.                                 (input->invariant) ? "has" : "lacks");
  543.             return false;
  544.          }
  545.  
  546.          if (input->interpolation != output->interpolation) {
  547.             linker_error_printf(prog,
  548.                                 "%s shader output `%s' specifies %s "
  549.                                 "interpolation qualifier, "
  550.                                 "but %s shader input specifies %s "
  551.                                 "interpolation qualifier\n",
  552.                                 producer_stage,
  553.                                 output->name,
  554.                                 output->interpolation_string(),
  555.                                 consumer_stage,
  556.                                 input->interpolation_string());
  557.             return false;
  558.          }
  559.       }
  560.    }
  561.  
  562.    return true;
  563. }
  564.  
  565.  
  566. /**
  567.  * Populates a shaders symbol table with all global declarations
  568.  */
  569. static void
  570. populate_symbol_table(gl_shader *sh)
  571. {
  572.    sh->symbols = new(sh) glsl_symbol_table;
  573.  
  574.    foreach_list(node, sh->ir) {
  575.       ir_instruction *const inst = (ir_instruction *) node;
  576.       ir_variable *var;
  577.       ir_function *func;
  578.  
  579.       if ((func = inst->as_function()) != NULL) {
  580.          sh->symbols->add_function(func);
  581.       } else if ((var = inst->as_variable()) != NULL) {
  582.          sh->symbols->add_variable(var);
  583.       }
  584.    }
  585. }
  586.  
  587.  
  588. /**
  589.  * Remap variables referenced in an instruction tree
  590.  *
  591.  * This is used when instruction trees are cloned from one shader and placed in
  592.  * another.  These trees will contain references to \c ir_variable nodes that
  593.  * do not exist in the target shader.  This function finds these \c ir_variable
  594.  * references and replaces the references with matching variables in the target
  595.  * shader.
  596.  *
  597.  * If there is no matching variable in the target shader, a clone of the
  598.  * \c ir_variable is made and added to the target shader.  The new variable is
  599.  * added to \b both the instruction stream and the symbol table.
  600.  *
  601.  * \param inst         IR tree that is to be processed.
  602.  * \param symbols      Symbol table containing global scope symbols in the
  603.  *                     linked shader.
  604.  * \param instructions Instruction stream where new variable declarations
  605.  *                     should be added.
  606.  */
  607. void
  608. remap_variables(ir_instruction *inst, struct gl_shader *target,
  609.                 hash_table *temps)
  610. {
  611.    class remap_visitor : public ir_hierarchical_visitor {
  612.    public:
  613.          remap_visitor(struct gl_shader *target,
  614.                     hash_table *temps)
  615.       {
  616.          this->target = target;
  617.          this->symbols = target->symbols;
  618.          this->instructions = target->ir;
  619.          this->temps = temps;
  620.       }
  621.  
  622.       virtual ir_visitor_status visit(ir_dereference_variable *ir)
  623.       {
  624.          if (ir->var->mode == ir_var_temporary) {
  625.             ir_variable *var = (ir_variable *) hash_table_find(temps, ir->var);
  626.  
  627.             assert(var != NULL);
  628.             ir->var = var;
  629.             return visit_continue;
  630.          }
  631.  
  632.          ir_variable *const existing =
  633.             this->symbols->get_variable(ir->var->name);
  634.          if (existing != NULL)
  635.             ir->var = existing;
  636.          else {
  637.             ir_variable *copy = ir->var->clone(this->target, NULL);
  638.  
  639.             this->symbols->add_variable(copy);
  640.             this->instructions->push_head(copy);
  641.             ir->var = copy;
  642.          }
  643.  
  644.          return visit_continue;
  645.       }
  646.  
  647.    private:
  648.       struct gl_shader *target;
  649.       glsl_symbol_table *symbols;
  650.       exec_list *instructions;
  651.       hash_table *temps;
  652.    };
  653.  
  654.    remap_visitor v(target, temps);
  655.  
  656.    inst->accept(&v);
  657. }
  658.  
  659.  
  660. /**
  661.  * Move non-declarations from one instruction stream to another
  662.  *
  663.  * The intended usage pattern of this function is to pass the pointer to the
  664.  * head sentinel of a list (i.e., a pointer to the list cast to an \c exec_node
  665.  * pointer) for \c last and \c false for \c make_copies on the first
  666.  * call.  Successive calls pass the return value of the previous call for
  667.  * \c last and \c true for \c make_copies.
  668.  *
  669.  * \param instructions Source instruction stream
  670.  * \param last         Instruction after which new instructions should be
  671.  *                     inserted in the target instruction stream
  672.  * \param make_copies  Flag selecting whether instructions in \c instructions
  673.  *                     should be copied (via \c ir_instruction::clone) into the
  674.  *                     target list or moved.
  675.  *
  676.  * \return
  677.  * The new "last" instruction in the target instruction stream.  This pointer
  678.  * is suitable for use as the \c last parameter of a later call to this
  679.  * function.
  680.  */
  681. exec_node *
  682. move_non_declarations(exec_list *instructions, exec_node *last,
  683.                       bool make_copies, gl_shader *target)
  684. {
  685.    hash_table *temps = NULL;
  686.  
  687.    if (make_copies)
  688.       temps = hash_table_ctor(0, hash_table_pointer_hash,
  689.                               hash_table_pointer_compare);
  690.  
  691.    foreach_list_safe(node, instructions) {
  692.       ir_instruction *inst = (ir_instruction *) node;
  693.  
  694.       if (inst->as_function())
  695.          continue;
  696.  
  697.       ir_variable *var = inst->as_variable();
  698.       if ((var != NULL) && (var->mode != ir_var_temporary))
  699.          continue;
  700.  
  701.       assert(inst->as_assignment()
  702.              || ((var != NULL) && (var->mode == ir_var_temporary)));
  703.  
  704.       if (make_copies) {
  705.          inst = inst->clone(target, NULL);
  706.  
  707.          if (var != NULL)
  708.             hash_table_insert(temps, inst, var);
  709.          else
  710.             remap_variables(inst, target, temps);
  711.       } else {
  712.          inst->remove();
  713.       }
  714.  
  715.       last->insert_after(inst);
  716.       last = inst;
  717.    }
  718.  
  719.    if (make_copies)
  720.       hash_table_dtor(temps);
  721.  
  722.    return last;
  723. }
  724.  
  725. /**
  726.  * Get the function signature for main from a shader
  727.  */
  728. static ir_function_signature *
  729. get_main_function_signature(gl_shader *sh)
  730. {
  731.    ir_function *const f = sh->symbols->get_function("main");
  732.    if (f != NULL) {
  733.       exec_list void_parameters;
  734.  
  735.       /* Look for the 'void main()' signature and ensure that it's defined.
  736.        * This keeps the linker from accidentally pick a shader that just
  737.        * contains a prototype for main.
  738.        *
  739.        * We don't have to check for multiple definitions of main (in multiple
  740.        * shaders) because that would have already been caught above.
  741.        */
  742.       ir_function_signature *sig = f->matching_signature(&void_parameters);
  743.       if ((sig != NULL) && sig->is_defined) {
  744.          return sig;
  745.       }
  746.    }
  747.  
  748.    return NULL;
  749. }
  750.  
  751.  
  752. /**
  753.  * Combine a group of shaders for a single stage to generate a linked shader
  754.  *
  755.  * \note
  756.  * If this function is supplied a single shader, it is cloned, and the new
  757.  * shader is returned.
  758.  */
  759. static struct gl_shader *
  760. link_intrastage_shaders(void *mem_ctx,
  761.                         struct gl_context *ctx,
  762.                         struct gl_shader_program *prog,
  763.                         struct gl_shader **shader_list,
  764.                         unsigned num_shaders)
  765. {
  766.    /* Check that global variables defined in multiple shaders are consistent.
  767.     */
  768.    if (!cross_validate_globals(prog, shader_list, num_shaders, false))
  769.       return NULL;
  770.  
  771.    /* Check that there is only a single definition of each function signature
  772.     * across all shaders.
  773.     */
  774.    for (unsigned i = 0; i < (num_shaders - 1); i++) {
  775.       foreach_list(node, shader_list[i]->ir) {
  776.          ir_function *const f = ((ir_instruction *) node)->as_function();
  777.  
  778.          if (f == NULL)
  779.             continue;
  780.  
  781.          for (unsigned j = i + 1; j < num_shaders; j++) {
  782.             ir_function *const other =
  783.                shader_list[j]->symbols->get_function(f->name);
  784.  
  785.             /* If the other shader has no function (and therefore no function
  786.              * signatures) with the same name, skip to the next shader.
  787.              */
  788.             if (other == NULL)
  789.                continue;
  790.  
  791.             foreach_iter (exec_list_iterator, iter, *f) {
  792.                ir_function_signature *sig =
  793.                   (ir_function_signature *) iter.get();
  794.  
  795.                if (!sig->is_defined || sig->is_builtin)
  796.                   continue;
  797.  
  798.                ir_function_signature *other_sig =
  799.                   other->exact_matching_signature(& sig->parameters);
  800.  
  801.                if ((other_sig != NULL) && other_sig->is_defined
  802.                    && !other_sig->is_builtin) {
  803.                   linker_error_printf(prog,
  804.                                       "function `%s' is multiply defined",
  805.                                       f->name);
  806.                   return NULL;
  807.                }
  808.             }
  809.          }
  810.       }
  811.    }
  812.  
  813.    /* Find the shader that defines main, and make a clone of it.
  814.     *
  815.     * Starting with the clone, search for undefined references.  If one is
  816.     * found, find the shader that defines it.  Clone the reference and add
  817.     * it to the shader.  Repeat until there are no undefined references or
  818.     * until a reference cannot be resolved.
  819.     */
  820.    gl_shader *main = NULL;
  821.    for (unsigned i = 0; i < num_shaders; i++) {
  822.       if (get_main_function_signature(shader_list[i]) != NULL) {
  823.          main = shader_list[i];
  824.          break;
  825.       }
  826.    }
  827.  
  828.    if (main == NULL) {
  829.       linker_error_printf(prog, "%s shader lacks `main'\n",
  830.                           (shader_list[0]->Type == GL_VERTEX_SHADER)
  831.                           ? "vertex" : "fragment");
  832.       return NULL;
  833.    }
  834.  
  835.    gl_shader *linked = ctx->Driver.NewShader(NULL, 0, main->Type);
  836.    linked->ir = new(linked) exec_list;
  837.    clone_ir_list(mem_ctx, linked->ir, main->ir);
  838.  
  839.    populate_symbol_table(linked);
  840.  
  841.    /* The a pointer to the main function in the final linked shader (i.e., the
  842.     * copy of the original shader that contained the main function).
  843.     */
  844.    ir_function_signature *const main_sig = get_main_function_signature(linked);
  845.  
  846.    /* Move any instructions other than variable declarations or function
  847.     * declarations into main.
  848.     */
  849.    exec_node *insertion_point =
  850.       move_non_declarations(linked->ir, (exec_node *) &main_sig->body, false,
  851.                             linked);
  852.  
  853.    for (unsigned i = 0; i < num_shaders; i++) {
  854.       if (shader_list[i] == main)
  855.          continue;
  856.  
  857.       insertion_point = move_non_declarations(shader_list[i]->ir,
  858.                                               insertion_point, true, linked);
  859.    }
  860.  
  861.    /* Resolve initializers for global variables in the linked shader.
  862.     */
  863.    unsigned num_linking_shaders = num_shaders;
  864.    for (unsigned i = 0; i < num_shaders; i++)
  865.       num_linking_shaders += shader_list[i]->num_builtins_to_link;
  866.  
  867.    gl_shader **linking_shaders =
  868.       (gl_shader **) calloc(num_linking_shaders, sizeof(gl_shader *));
  869.  
  870.    memcpy(linking_shaders, shader_list,
  871.           sizeof(linking_shaders[0]) * num_shaders);
  872.  
  873.    unsigned idx = num_shaders;
  874.    for (unsigned i = 0; i < num_shaders; i++) {
  875.       memcpy(&linking_shaders[idx], shader_list[i]->builtins_to_link,
  876.              sizeof(linking_shaders[0]) * shader_list[i]->num_builtins_to_link);
  877.       idx += shader_list[i]->num_builtins_to_link;
  878.    }
  879.  
  880.    assert(idx == num_linking_shaders);
  881.  
  882.    if (!link_function_calls(prog, linked, linking_shaders,
  883.                             num_linking_shaders)) {
  884.       ctx->Driver.DeleteShader(ctx, linked);
  885.       linked = NULL;
  886.    }
  887.  
  888.    free(linking_shaders);
  889.  
  890.    /* Make a pass over all variable declarations to ensure that arrays with
  891.     * unspecified sizes have a size specified.  The size is inferred from the
  892.     * max_array_access field.
  893.     */
  894.    if (linked != NULL) {
  895.       class array_sizing_visitor : public ir_hierarchical_visitor {
  896.       public:
  897.          virtual ir_visitor_status visit(ir_variable *var)
  898.          {
  899.             if (var->type->is_array() && (var->type->length == 0)) {
  900.                const glsl_type *type =
  901.                   glsl_type::get_array_instance(var->type->fields.array,
  902.                                                 var->max_array_access + 1);
  903.  
  904.                assert(type != NULL);
  905.                var->type = type;
  906.             }
  907.  
  908.             return visit_continue;
  909.          }
  910.       } v;
  911.  
  912.       v.run(linked->ir);
  913.    }
  914.  
  915.    return linked;
  916. }
  917.  
  918.  
  919. struct uniform_node {
  920.    exec_node link;
  921.    struct gl_uniform *u;
  922.    unsigned slots;
  923. };
  924.  
  925. /**
  926.  * Update the sizes of linked shader uniform arrays to the maximum
  927.  * array index used.
  928.  *
  929.  * From page 81 (page 95 of the PDF) of the OpenGL 2.1 spec:
  930.  *
  931.  *     If one or more elements of an array are active,
  932.  *     GetActiveUniform will return the name of the array in name,
  933.  *     subject to the restrictions listed above. The type of the array
  934.  *     is returned in type. The size parameter contains the highest
  935.  *     array element index used, plus one. The compiler or linker
  936.  *     determines the highest index used.  There will be only one
  937.  *     active uniform reported by the GL per uniform array.
  938.  
  939.  */
  940. static void
  941. update_array_sizes(struct gl_shader_program *prog)
  942. {
  943.    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
  944.          if (prog->_LinkedShaders[i] == NULL)
  945.             continue;
  946.  
  947.       foreach_list(node, prog->_LinkedShaders[i]->ir) {
  948.          ir_variable *const var = ((ir_instruction *) node)->as_variable();
  949.  
  950.          if ((var == NULL) || (var->mode != ir_var_uniform &&
  951.                                var->mode != ir_var_in &&
  952.                                var->mode != ir_var_out) ||
  953.              !var->type->is_array())
  954.             continue;
  955.  
  956.          unsigned int size = var->max_array_access;
  957.          for (unsigned j = 0; j < MESA_SHADER_TYPES; j++) {
  958.                if (prog->_LinkedShaders[j] == NULL)
  959.                   continue;
  960.  
  961.             foreach_list(node2, prog->_LinkedShaders[j]->ir) {
  962.                ir_variable *other_var = ((ir_instruction *) node2)->as_variable();
  963.                if (!other_var)
  964.                   continue;
  965.  
  966.                if (strcmp(var->name, other_var->name) == 0 &&
  967.                    other_var->max_array_access > size) {
  968.                   size = other_var->max_array_access;
  969.                }
  970.             }
  971.          }
  972.  
  973.          if (size + 1 != var->type->fields.array->length) {
  974.             var->type = glsl_type::get_array_instance(var->type->fields.array,
  975.                                                       size + 1);
  976.             /* FINISHME: We should update the types of array
  977.              * dereferences of this variable now.
  978.              */
  979.          }
  980.       }
  981.    }
  982. }
  983.  
  984. static void
  985. add_uniform(void *mem_ctx, exec_list *uniforms, struct hash_table *ht,
  986.             const char *name, const glsl_type *type, GLenum shader_type,
  987.             unsigned *next_shader_pos, unsigned *total_uniforms)
  988. {
  989.    if (type->is_record()) {
  990.       for (unsigned int i = 0; i < type->length; i++) {
  991.          const glsl_type *field_type = type->fields.structure[i].type;
  992.          char *field_name = ralloc_asprintf(mem_ctx, "%s.%s", name,
  993.                                             type->fields.structure[i].name);
  994.  
  995.          add_uniform(mem_ctx, uniforms, ht, field_name, field_type,
  996.                      shader_type, next_shader_pos, total_uniforms);
  997.       }
  998.    } else {
  999.       uniform_node *n = (uniform_node *) hash_table_find(ht, name);
  1000.       unsigned int vec4_slots;
  1001.       const glsl_type *array_elem_type = NULL;
  1002.  
  1003.       if (type->is_array()) {
  1004.          array_elem_type = type->fields.array;
  1005.          /* Array of structures. */
  1006.          if (array_elem_type->is_record()) {
  1007.             for (unsigned int i = 0; i < type->length; i++) {
  1008.                char *elem_name = ralloc_asprintf(mem_ctx, "%s[%d]", name, i);
  1009.                add_uniform(mem_ctx, uniforms, ht, elem_name, array_elem_type,
  1010.                            shader_type, next_shader_pos, total_uniforms);
  1011.             }
  1012.             return;
  1013.          }
  1014.       }
  1015.  
  1016.       /* Fix the storage size of samplers at 1 vec4 each. Be sure to pad out
  1017.        * vectors to vec4 slots.
  1018.        */
  1019.       if (type->is_array()) {
  1020.          if (array_elem_type->is_sampler())
  1021.             vec4_slots = type->length;
  1022.          else
  1023.             vec4_slots = type->length * array_elem_type->matrix_columns;
  1024.       } else if (type->is_sampler()) {
  1025.          vec4_slots = 1;
  1026.       } else {
  1027.          vec4_slots = type->matrix_columns;
  1028.       }
  1029.  
  1030.       if (n == NULL) {
  1031.          n = (uniform_node *) calloc(1, sizeof(struct uniform_node));
  1032.          n->u = (gl_uniform *) calloc(1, sizeof(struct gl_uniform));
  1033.          n->slots = vec4_slots;
  1034.  
  1035.          n->u->Name = strdup(name);
  1036.          n->u->Type = type;
  1037.          n->u->VertPos = -1;
  1038.          n->u->FragPos = -1;
  1039.          n->u->GeomPos = -1;
  1040.          (*total_uniforms)++;
  1041.  
  1042.          hash_table_insert(ht, n, name);
  1043.          uniforms->push_tail(& n->link);
  1044.       }
  1045.  
  1046.       switch (shader_type) {
  1047.       case GL_VERTEX_SHADER:
  1048.          n->u->VertPos = *next_shader_pos;
  1049.          break;
  1050.       case GL_FRAGMENT_SHADER:
  1051.          n->u->FragPos = *next_shader_pos;
  1052.          break;
  1053.       case GL_GEOMETRY_SHADER:
  1054.          n->u->GeomPos = *next_shader_pos;
  1055.          break;
  1056.       }
  1057.  
  1058.       (*next_shader_pos) += vec4_slots;
  1059.    }
  1060. }
  1061.  
  1062. void
  1063. assign_uniform_locations(struct gl_shader_program *prog)
  1064. {
  1065.    /* */
  1066.    exec_list uniforms;
  1067.    unsigned total_uniforms = 0;
  1068.    hash_table *ht = hash_table_ctor(32, hash_table_string_hash,
  1069.                                     hash_table_string_compare);
  1070.    void *mem_ctx = ralloc_context(NULL);
  1071.  
  1072.    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
  1073.       if (prog->_LinkedShaders[i] == NULL)
  1074.          continue;
  1075.  
  1076.       unsigned next_position = 0;
  1077.  
  1078.       foreach_list(node, prog->_LinkedShaders[i]->ir) {
  1079.          ir_variable *const var = ((ir_instruction *) node)->as_variable();
  1080.  
  1081.          if ((var == NULL) || (var->mode != ir_var_uniform))
  1082.             continue;
  1083.  
  1084.          if (strncmp(var->name, "gl_", 3) == 0) {
  1085.             /* At the moment, we don't allocate uniform locations for
  1086.              * builtin uniforms.  It's permitted by spec, and we'll
  1087.              * likely switch to doing that at some point, but not yet.
  1088.              */
  1089.             continue;
  1090.          }
  1091.  
  1092.          var->location = next_position;
  1093.          add_uniform(mem_ctx, &uniforms, ht, var->name, var->type,
  1094.                      prog->_LinkedShaders[i]->Type,
  1095.                      &next_position, &total_uniforms);
  1096.       }
  1097.    }
  1098.  
  1099.    ralloc_free(mem_ctx);
  1100.  
  1101.    gl_uniform_list *ul = (gl_uniform_list *)
  1102.       calloc(1, sizeof(gl_uniform_list));
  1103.  
  1104.    ul->Size = total_uniforms;
  1105.    ul->NumUniforms = total_uniforms;
  1106.    ul->Uniforms = (gl_uniform *) calloc(total_uniforms, sizeof(gl_uniform));
  1107.  
  1108.    unsigned idx = 0;
  1109.    uniform_node *next;
  1110.    for (uniform_node *node = (uniform_node *) uniforms.head
  1111.            ; node->link.next != NULL
  1112.            ; node = next) {
  1113.       next = (uniform_node *) node->link.next;
  1114.  
  1115.       node->link.remove();
  1116.       memcpy(&ul->Uniforms[idx], node->u, sizeof(gl_uniform));
  1117.       idx++;
  1118.  
  1119.       free(node->u);
  1120.       free(node);
  1121.    }
  1122.  
  1123.    hash_table_dtor(ht);
  1124.  
  1125.    prog->Uniforms = ul;
  1126. }
  1127.  
  1128.  
  1129. /**
  1130.  * Find a contiguous set of available bits in a bitmask
  1131.  *
  1132.  * \param used_mask     Bits representing used (1) and unused (0) locations
  1133.  * \param needed_count  Number of contiguous bits needed.
  1134.  *
  1135.  * \return
  1136.  * Base location of the available bits on success or -1 on failure.
  1137.  */
  1138. int
  1139. find_available_slots(unsigned used_mask, unsigned needed_count)
  1140. {
  1141.    unsigned needed_mask = (1 << needed_count) - 1;
  1142.    const int max_bit_to_test = (8 * sizeof(used_mask)) - needed_count;
  1143.  
  1144.    /* The comparison to 32 is redundant, but without it GCC emits "warning:
  1145.     * cannot optimize possibly infinite loops" for the loop below.
  1146.     */
  1147.    if ((needed_count == 0) || (max_bit_to_test < 0) || (max_bit_to_test > 32))
  1148.       return -1;
  1149.  
  1150.    for (int i = 0; i <= max_bit_to_test; i++) {
  1151.       if ((needed_mask & ~used_mask) == needed_mask)
  1152.          return i;
  1153.  
  1154.       needed_mask <<= 1;
  1155.    }
  1156.  
  1157.    return -1;
  1158. }
  1159.  
  1160.  
  1161. bool
  1162. assign_attribute_locations(gl_shader_program *prog, unsigned max_attribute_index)
  1163. {
  1164.    /* Mark invalid attribute locations as being used.
  1165.     */
  1166.    unsigned used_locations = (max_attribute_index >= 32)
  1167.       ? ~0 : ~((1 << max_attribute_index) - 1);
  1168.  
  1169.    gl_shader *const sh = prog->_LinkedShaders[0];
  1170.    assert(sh->Type == GL_VERTEX_SHADER);
  1171.  
  1172.    /* Operate in a total of four passes.
  1173.     *
  1174.     * 1. Invalidate the location assignments for all vertex shader inputs.
  1175.     *
  1176.     * 2. Assign locations for inputs that have user-defined (via
  1177.     *    glBindVertexAttribLocation) locatoins.
  1178.     *
  1179.     * 3. Sort the attributes without assigned locations by number of slots
  1180.     *    required in decreasing order.  Fragmentation caused by attribute
  1181.     *    locations assigned by the application may prevent large attributes
  1182.     *    from having enough contiguous space.
  1183.     *
  1184.     * 4. Assign locations to any inputs without assigned locations.
  1185.     */
  1186.  
  1187.    invalidate_variable_locations(sh, ir_var_in, VERT_ATTRIB_GENERIC0);
  1188.  
  1189.    if (prog->Attributes != NULL) {
  1190.       for (unsigned i = 0; i < prog->Attributes->NumParameters; i++) {
  1191.          ir_variable *const var =
  1192.             sh->symbols->get_variable(prog->Attributes->Parameters[i].Name);
  1193.  
  1194.          /* Note: attributes that occupy multiple slots, such as arrays or
  1195.           * matrices, may appear in the attrib array multiple times.
  1196.           */
  1197.          if ((var == NULL) || (var->location != -1))
  1198.             continue;
  1199.  
  1200.          /* From page 61 of the OpenGL 4.0 spec:
  1201.           *
  1202.           *     "LinkProgram will fail if the attribute bindings assigned by
  1203.           *     BindAttribLocation do not leave not enough space to assign a
  1204.           *     location for an active matrix attribute or an active attribute
  1205.           *     array, both of which require multiple contiguous generic
  1206.           *     attributes."
  1207.           *
  1208.           * Previous versions of the spec contain similar language but omit the
  1209.           * bit about attribute arrays.
  1210.           *
  1211.           * Page 61 of the OpenGL 4.0 spec also says:
  1212.           *
  1213.           *     "It is possible for an application to bind more than one
  1214.           *     attribute name to the same location. This is referred to as
  1215.           *     aliasing. This will only work if only one of the aliased
  1216.           *     attributes is active in the executable program, or if no path
  1217.           *     through the shader consumes more than one attribute of a set
  1218.           *     of attributes aliased to the same location. A link error can
  1219.           *     occur if the linker determines that every path through the
  1220.           *     shader consumes multiple aliased attributes, but
  1221.           *     implementations are not required to generate an error in this
  1222.           *     case."
  1223.           *
  1224.           * These two paragraphs are either somewhat contradictory, or I don't
  1225.           * fully understand one or both of them.
  1226.           */
  1227.          /* FINISHME: The code as currently written does not support attribute
  1228.           * FINISHME: location aliasing (see comment above).
  1229.           */
  1230.          const int attr = prog->Attributes->Parameters[i].StateIndexes[0];
  1231.          const unsigned slots = count_attribute_slots(var->type);
  1232.  
  1233.          /* Mask representing the contiguous slots that will be used by this
  1234.           * attribute.
  1235.           */
  1236.          const unsigned use_mask = (1 << slots) - 1;
  1237.  
  1238.          /* Generate a link error if the set of bits requested for this
  1239.           * attribute overlaps any previously allocated bits.
  1240.           */
  1241.          if ((~(use_mask << attr) & used_locations) != used_locations) {
  1242.             linker_error_printf(prog,
  1243.                                 "insufficient contiguous attribute locations "
  1244.                                 "available for vertex shader input `%s'",
  1245.                                 var->name);
  1246.             return false;
  1247.          }
  1248.  
  1249.          var->location = VERT_ATTRIB_GENERIC0 + attr;
  1250.          used_locations |= (use_mask << attr);
  1251.       }
  1252.    }
  1253.  
  1254.    /* Temporary storage for the set of attributes that need locations assigned.
  1255.     */
  1256.    struct temp_attr {
  1257.       unsigned slots;
  1258.       ir_variable *var;
  1259.  
  1260.       /* Used below in the call to qsort. */
  1261.       static int compare(const void *a, const void *b)
  1262.       {
  1263.          const temp_attr *const l = (const temp_attr *) a;
  1264.          const temp_attr *const r = (const temp_attr *) b;
  1265.  
  1266.          /* Reversed because we want a descending order sort below. */
  1267.          return r->slots - l->slots;
  1268.       }
  1269.    } to_assign[16];
  1270.  
  1271.    unsigned num_attr = 0;
  1272.  
  1273.    foreach_list(node, sh->ir) {
  1274.       ir_variable *const var = ((ir_instruction *) node)->as_variable();
  1275.  
  1276.       if ((var == NULL) || (var->mode != ir_var_in))
  1277.          continue;
  1278.  
  1279.       if (var->explicit_location) {
  1280.          const unsigned slots = count_attribute_slots(var->type);
  1281.          const unsigned use_mask = (1 << slots) - 1;
  1282.          const int attr = var->location - VERT_ATTRIB_GENERIC0;
  1283.  
  1284.          if ((var->location >= (int)(max_attribute_index + VERT_ATTRIB_GENERIC0))
  1285.              || (var->location < 0)) {
  1286.             linker_error_printf(prog,
  1287.                                 "invalid explicit location %d specified for "
  1288.                                 "`%s'\n",
  1289.                                 (var->location < 0) ? var->location : attr,
  1290.                                 var->name);
  1291.             return false;
  1292.          } else if (var->location >= VERT_ATTRIB_GENERIC0) {
  1293.             used_locations |= (use_mask << attr);
  1294.          }
  1295.       }
  1296.  
  1297.       /* The location was explicitly assigned, nothing to do here.
  1298.        */
  1299.       if (var->location != -1)
  1300.          continue;
  1301.  
  1302.       to_assign[num_attr].slots = count_attribute_slots(var->type);
  1303.       to_assign[num_attr].var = var;
  1304.       num_attr++;
  1305.    }
  1306.  
  1307.    /* If all of the attributes were assigned locations by the application (or
  1308.     * are built-in attributes with fixed locations), return early.  This should
  1309.     * be the common case.
  1310.     */
  1311.    if (num_attr == 0)
  1312.       return true;
  1313.  
  1314.    qsort(to_assign, num_attr, sizeof(to_assign[0]), temp_attr::compare);
  1315.  
  1316.    /* VERT_ATTRIB_GENERIC0 is a psdueo-alias for VERT_ATTRIB_POS.  It can only
  1317.     * be explicitly assigned by via glBindAttribLocation.  Mark it as reserved
  1318.     * to prevent it from being automatically allocated below.
  1319.     */
  1320.    find_deref_visitor find("gl_Vertex");
  1321.    find.run(sh->ir);
  1322.    if (find.variable_found())
  1323.       used_locations |= (1 << 0);
  1324.  
  1325.    for (unsigned i = 0; i < num_attr; i++) {
  1326.       /* Mask representing the contiguous slots that will be used by this
  1327.        * attribute.
  1328.        */
  1329.       const unsigned use_mask = (1 << to_assign[i].slots) - 1;
  1330.  
  1331.       int location = find_available_slots(used_locations, to_assign[i].slots);
  1332.  
  1333.       if (location < 0) {
  1334.          linker_error_printf(prog,
  1335.                              "insufficient contiguous attribute locations "
  1336.                              "available for vertex shader input `%s'",
  1337.                              to_assign[i].var->name);
  1338.          return false;
  1339.       }
  1340.  
  1341.       to_assign[i].var->location = VERT_ATTRIB_GENERIC0 + location;
  1342.       used_locations |= (use_mask << location);
  1343.    }
  1344.  
  1345.    return true;
  1346. }
  1347.  
  1348.  
  1349. /**
  1350.  * Demote shader inputs and outputs that are not used in other stages
  1351.  */
  1352. void
  1353. demote_shader_inputs_and_outputs(gl_shader *sh, enum ir_variable_mode mode)
  1354. {
  1355.    foreach_list(node, sh->ir) {
  1356.       ir_variable *const var = ((ir_instruction *) node)->as_variable();
  1357.  
  1358.       if ((var == NULL) || (var->mode != int(mode)))
  1359.          continue;
  1360.  
  1361.       /* A shader 'in' or 'out' variable is only really an input or output if
  1362.        * its value is used by other shader stages.  This will cause the variable
  1363.        * to have a location assigned.
  1364.        */
  1365.       if (var->location == -1) {
  1366.          var->mode = ir_var_auto;
  1367.       }
  1368.    }
  1369. }
  1370.  
  1371.  
  1372. void
  1373. assign_varying_locations(struct gl_shader_program *prog,
  1374.                          gl_shader *producer, gl_shader *consumer)
  1375. {
  1376.    /* FINISHME: Set dynamically when geometry shader support is added. */
  1377.    unsigned output_index = VERT_RESULT_VAR0;
  1378.    unsigned input_index = FRAG_ATTRIB_VAR0;
  1379.  
  1380.    /* Operate in a total of three passes.
  1381.     *
  1382.     * 1. Assign locations for any matching inputs and outputs.
  1383.     *
  1384.     * 2. Mark output variables in the producer that do not have locations as
  1385.     *    not being outputs.  This lets the optimizer eliminate them.
  1386.     *
  1387.     * 3. Mark input variables in the consumer that do not have locations as
  1388.     *    not being inputs.  This lets the optimizer eliminate them.
  1389.     */
  1390.  
  1391.    invalidate_variable_locations(producer, ir_var_out, VERT_RESULT_VAR0);
  1392.    invalidate_variable_locations(consumer, ir_var_in, FRAG_ATTRIB_VAR0);
  1393.  
  1394.    foreach_list(node, producer->ir) {
  1395.       ir_variable *const output_var = ((ir_instruction *) node)->as_variable();
  1396.  
  1397.       if ((output_var == NULL) || (output_var->mode != ir_var_out)
  1398.           || (output_var->location != -1))
  1399.          continue;
  1400.  
  1401.       ir_variable *const input_var =
  1402.          consumer->symbols->get_variable(output_var->name);
  1403.  
  1404.       if ((input_var == NULL) || (input_var->mode != ir_var_in))
  1405.          continue;
  1406.  
  1407.       assert(input_var->location == -1);
  1408.  
  1409.       output_var->location = output_index;
  1410.       input_var->location = input_index;
  1411.  
  1412.       /* FINISHME: Support for "varying" records in GLSL 1.50. */
  1413.       assert(!output_var->type->is_record());
  1414.  
  1415.       if (output_var->type->is_array()) {
  1416.          const unsigned slots = output_var->type->length
  1417.             * output_var->type->fields.array->matrix_columns;
  1418.  
  1419.          output_index += slots;
  1420.          input_index += slots;
  1421.       } else {
  1422.          const unsigned slots = output_var->type->matrix_columns;
  1423.  
  1424.          output_index += slots;
  1425.          input_index += slots;
  1426.       }
  1427.    }
  1428.  
  1429.    foreach_list(node, consumer->ir) {
  1430.       ir_variable *const var = ((ir_instruction *) node)->as_variable();
  1431.  
  1432.       if ((var == NULL) || (var->mode != ir_var_in))
  1433.          continue;
  1434.  
  1435.       if (var->location == -1) {
  1436.          if (prog->Version <= 120) {
  1437.             /* On page 25 (page 31 of the PDF) of the GLSL 1.20 spec:
  1438.              *
  1439.              *     Only those varying variables used (i.e. read) in
  1440.              *     the fragment shader executable must be written to
  1441.              *     by the vertex shader executable; declaring
  1442.              *     superfluous varying variables in a vertex shader is
  1443.              *     permissible.
  1444.              *
  1445.              * We interpret this text as meaning that the VS must
  1446.              * write the variable for the FS to read it.  See
  1447.              * "glsl1-varying read but not written" in piglit.
  1448.              */
  1449.  
  1450.             linker_error_printf(prog, "fragment shader varying %s not written "
  1451.                                 "by vertex shader\n.", var->name);
  1452.             prog->LinkStatus = false;
  1453.          }
  1454.  
  1455.          /* An 'in' variable is only really a shader input if its
  1456.           * value is written by the previous stage.
  1457.           */
  1458.          var->mode = ir_var_auto;
  1459.       }
  1460.    }
  1461. }
  1462.  
  1463.  
  1464. void
  1465. link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
  1466. {
  1467.    void *mem_ctx = ralloc_context(NULL); // temporary linker context
  1468.  
  1469.    prog->LinkStatus = false;
  1470.    prog->Validated = false;
  1471.    prog->_Used = false;
  1472.  
  1473.    if (prog->InfoLog != NULL)
  1474.       ralloc_free(prog->InfoLog);
  1475.  
  1476.    prog->InfoLog = ralloc_strdup(NULL, "");
  1477.  
  1478.    /* Separate the shaders into groups based on their type.
  1479.     */
  1480.    struct gl_shader **vert_shader_list;
  1481.    unsigned num_vert_shaders = 0;
  1482.    struct gl_shader **frag_shader_list;
  1483.    unsigned num_frag_shaders = 0;
  1484.  
  1485.    vert_shader_list = (struct gl_shader **)
  1486.       calloc(2 * prog->NumShaders, sizeof(struct gl_shader *));
  1487.    frag_shader_list =  &vert_shader_list[prog->NumShaders];
  1488.  
  1489.    unsigned min_version = UINT_MAX;
  1490.    unsigned max_version = 0;
  1491.    for (unsigned i = 0; i < prog->NumShaders; i++) {
  1492.       min_version = MIN2(min_version, prog->Shaders[i]->Version);
  1493.       max_version = MAX2(max_version, prog->Shaders[i]->Version);
  1494.  
  1495.       switch (prog->Shaders[i]->Type) {
  1496.       case GL_VERTEX_SHADER:
  1497.          vert_shader_list[num_vert_shaders] = prog->Shaders[i];
  1498.          num_vert_shaders++;
  1499.          break;
  1500.       case GL_FRAGMENT_SHADER:
  1501.          frag_shader_list[num_frag_shaders] = prog->Shaders[i];
  1502.          num_frag_shaders++;
  1503.          break;
  1504.       case GL_GEOMETRY_SHADER:
  1505.          /* FINISHME: Support geometry shaders. */
  1506.          assert(prog->Shaders[i]->Type != GL_GEOMETRY_SHADER);
  1507.          break;
  1508.       }
  1509.    }
  1510.  
  1511.    /* Previous to GLSL version 1.30, different compilation units could mix and
  1512.     * match shading language versions.  With GLSL 1.30 and later, the versions
  1513.     * of all shaders must match.
  1514.     */
  1515.    assert(min_version >= 100);
  1516.    assert(max_version <= 130);
  1517.    if ((max_version >= 130 || min_version == 100)
  1518.        && min_version != max_version) {
  1519.       linker_error_printf(prog, "all shaders must use same shading "
  1520.                           "language version\n");
  1521.       goto done;
  1522.    }
  1523.  
  1524.    prog->Version = max_version;
  1525.  
  1526.    for (unsigned int i = 0; i < MESA_SHADER_TYPES; i++) {
  1527.       if (prog->_LinkedShaders[i] != NULL)
  1528.          ctx->Driver.DeleteShader(ctx, prog->_LinkedShaders[i]);
  1529.  
  1530.       prog->_LinkedShaders[i] = NULL;
  1531.    }
  1532.  
  1533.    /* Link all shaders for a particular stage and validate the result.
  1534.     */
  1535.    if (num_vert_shaders > 0) {
  1536.       gl_shader *const sh =
  1537.          link_intrastage_shaders(mem_ctx, ctx, prog, vert_shader_list,
  1538.                                  num_vert_shaders);
  1539.  
  1540.       if (sh == NULL)
  1541.          goto done;
  1542.  
  1543.       if (!validate_vertex_shader_executable(prog, sh))
  1544.          goto done;
  1545.  
  1546.       _mesa_reference_shader(ctx, &prog->_LinkedShaders[MESA_SHADER_VERTEX],
  1547.                              sh);
  1548.    }
  1549.  
  1550.    if (num_frag_shaders > 0) {
  1551.       gl_shader *const sh =
  1552.          link_intrastage_shaders(mem_ctx, ctx, prog, frag_shader_list,
  1553.                                  num_frag_shaders);
  1554.  
  1555.       if (sh == NULL)
  1556.          goto done;
  1557.  
  1558.       if (!validate_fragment_shader_executable(prog, sh))
  1559.          goto done;
  1560.  
  1561.       _mesa_reference_shader(ctx, &prog->_LinkedShaders[MESA_SHADER_FRAGMENT],
  1562.                              sh);
  1563.    }
  1564.  
  1565.    /* Here begins the inter-stage linking phase.  Some initial validation is
  1566.     * performed, then locations are assigned for uniforms, attributes, and
  1567.     * varyings.
  1568.     */
  1569.    if (cross_validate_uniforms(prog)) {
  1570.       unsigned prev;
  1571.  
  1572.       for (prev = 0; prev < MESA_SHADER_TYPES; prev++) {
  1573.          if (prog->_LinkedShaders[prev] != NULL)
  1574.             break;
  1575.       }
  1576.  
  1577.       /* Validate the inputs of each stage with the output of the preceeding
  1578.        * stage.
  1579.        */
  1580.       for (unsigned i = prev + 1; i < MESA_SHADER_TYPES; i++) {
  1581.          if (prog->_LinkedShaders[i] == NULL)
  1582.             continue;
  1583.  
  1584.          if (!cross_validate_outputs_to_inputs(prog,
  1585.                                                prog->_LinkedShaders[prev],
  1586.                                                prog->_LinkedShaders[i]))
  1587.             goto done;
  1588.  
  1589.          prev = i;
  1590.       }
  1591.  
  1592.       prog->LinkStatus = true;
  1593.    }
  1594.  
  1595.    /* Do common optimization before assigning storage for attributes,
  1596.     * uniforms, and varyings.  Later optimization could possibly make
  1597.     * some of that unused.
  1598.     */
  1599.    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
  1600.       if (prog->_LinkedShaders[i] == NULL)
  1601.          continue;
  1602.  
  1603.       while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, 32))
  1604.          ;
  1605.    }
  1606.  
  1607.    update_array_sizes(prog);
  1608.  
  1609.    assign_uniform_locations(prog);
  1610.  
  1611.    if (prog->_LinkedShaders[MESA_SHADER_VERTEX] != NULL) {
  1612.       /* FINISHME: The value of the max_attribute_index parameter is
  1613.        * FINISHME: implementation dependent based on the value of
  1614.        * FINISHME: GL_MAX_VERTEX_ATTRIBS.  GL_MAX_VERTEX_ATTRIBS must be
  1615.        * FINISHME: at least 16, so hardcode 16 for now.
  1616.        */
  1617.       if (!assign_attribute_locations(prog, 16)) {
  1618.          prog->LinkStatus = false;
  1619.          goto done;
  1620.       }
  1621.    }
  1622.  
  1623.    unsigned prev;
  1624.    for (prev = 0; prev < MESA_SHADER_TYPES; prev++) {
  1625.       if (prog->_LinkedShaders[prev] != NULL)
  1626.          break;
  1627.    }
  1628.  
  1629.    for (unsigned i = prev + 1; i < MESA_SHADER_TYPES; i++) {
  1630.       if (prog->_LinkedShaders[i] == NULL)
  1631.          continue;
  1632.  
  1633.       assign_varying_locations(prog,
  1634.                                prog->_LinkedShaders[prev],
  1635.                                prog->_LinkedShaders[i]);
  1636.       prev = i;
  1637.    }
  1638.  
  1639.    if (prog->_LinkedShaders[MESA_SHADER_VERTEX] != NULL) {
  1640.       demote_shader_inputs_and_outputs(prog->_LinkedShaders[MESA_SHADER_VERTEX],
  1641.                                        ir_var_out);
  1642.    }
  1643.  
  1644.    if (prog->_LinkedShaders[MESA_SHADER_GEOMETRY] != NULL) {
  1645.       gl_shader *const sh = prog->_LinkedShaders[MESA_SHADER_GEOMETRY];
  1646.  
  1647.       demote_shader_inputs_and_outputs(sh, ir_var_in);
  1648.       demote_shader_inputs_and_outputs(sh, ir_var_inout);
  1649.       demote_shader_inputs_and_outputs(sh, ir_var_out);
  1650.    }
  1651.  
  1652.    if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] != NULL) {
  1653.       gl_shader *const sh = prog->_LinkedShaders[MESA_SHADER_FRAGMENT];
  1654.  
  1655.       demote_shader_inputs_and_outputs(sh, ir_var_in);
  1656.    }
  1657.  
  1658.    /* OpenGL ES requires that a vertex shader and a fragment shader both be
  1659.     * present in a linked program.  By checking for use of shading language
  1660.     * version 1.00, we also catch the GL_ARB_ES2_compatibility case.
  1661.     */
  1662.    if (ctx->API == API_OPENGLES2 || prog->Version == 100) {
  1663.       if (prog->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) {
  1664.          linker_error_printf(prog, "program lacks a vertex shader\n");
  1665.          prog->LinkStatus = false;
  1666.       } else if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) {
  1667.          linker_error_printf(prog, "program lacks a fragment shader\n");
  1668.          prog->LinkStatus = false;
  1669.       }
  1670.    }
  1671.  
  1672.    /* FINISHME: Assign fragment shader output locations. */
  1673.  
  1674. done:
  1675.    free(vert_shader_list);
  1676.  
  1677.    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
  1678.       if (prog->_LinkedShaders[i] == NULL)
  1679.          continue;
  1680.  
  1681.       /* Retain any live IR, but trash the rest. */
  1682.       reparent_ir(prog->_LinkedShaders[i]->ir, prog->_LinkedShaders[i]->ir);
  1683.    }
  1684.  
  1685.    ralloc_free(mem_ctx);
  1686. }
  1687.